1package cmd23import (4 "fmt"5 "strings"6 "time"78 "github.com/charmbracelet/soft-serve/pkg/backend"9 "github.com/spf13/cobra"10)1112// commitCommand returns a command that prints the contents of a commit.13func commitCommand() *cobra.Command {14 var color bool15 var patchOnly bool1617 cmd := &cobra.Command{18 Use: "commit repo SHA",19 Short: "Print out the contents of a diff",20 Args: cobra.ExactArgs(2),21 PersistentPreRunE: checkIfReadable,22 RunE: func(cmd *cobra.Command, args []string) error {23 ctx := cmd.Context()24 be := backend.FromContext(ctx)25 repoName := args[0]26 commitSHA := args[1]2728 rr, err := be.Repository(ctx, repoName)29 if err != nil {30 return err31 }3233 r, err := rr.Open()34 if err != nil {35 return err36 }3738 commit, err := r.CommitByRevision(commitSHA)39 if err != nil {40 return err41 }4243 patch, err := r.Patch(commit)44 if err != nil {45 return err46 }4748 diff, err := r.Diff(commit)49 if err != nil {50 return err51 }5253 s := strings.Builder{}54 commitLine := "commit " + commitSHA55 authorLine := "Author: " + commit.Author.Name56 dateLine := "Date: " + commit.Committer.When.UTC().Format(time.UnixDate)57 msgLine := strings.ReplaceAll(commit.Message, "\r\n", "\n")58 statsLine := diff.Stats().String()59 diffLine := patch6061 if patchOnly {62 cmd.Println(63 diffLine,64 )65 return nil66 }6768 s.WriteString(fmt.Sprintf("%s\n%s\n%s\n%s\n",69 commitLine,70 authorLine,71 dateLine,72 msgLine,73 ))7475 s.WriteString(fmt.Sprintf("\n%s\n%s",76 statsLine,77 diffLine,78 ))7980 cmd.Println(81 s.String(),82 )8384 return nil85 },86 }8788 cmd.Flags().BoolVarP(&color, "color", "c", false, "Colorize output")89 cmd.Flags().BoolVarP(&patchOnly, "patch", "p", false, "Output patch only")9091 return cmd92}