1package cmd23import (4 "fmt"5 "strings"6 "time"78 "github.com/charmbracelet/soft-serve/pkg/backend"9 "github.com/charmbracelet/soft-serve/pkg/utils"10 "github.com/spf13/cobra"11)1213// commitCommand returns a command that prints the contents of a commit.14func commitCommand() *cobra.Command {15 var color bool16 var patchOnly bool1718 cmd := &cobra.Command{19 Use: "commit repo SHA",20 Short: "Print out the contents of a diff",21 Args: cobra.ExactArgs(2),22 PersistentPreRunE: checkIfReadable,23 RunE: func(cmd *cobra.Command, args []string) error {24 ctx := cmd.Context()25 be := backend.FromContext(ctx)26 repoName := args[0]27 commitSHA := args[1]2829 rr, err := be.Repository(ctx, repoName)30 if err != nil {31 return err32 }3334 r, err := rr.Open()35 if err != nil {36 return err37 }3839 commit, err := r.CommitByRevision(commitSHA)40 if err != nil {41 return err42 }4344 patch, err := r.Patch(commit)45 if err != nil {46 return err47 }4849 diff, err := r.Diff(commit)50 if err != nil {51 return err52 }5354 s := strings.Builder{}55 commitLine := "commit " + commitSHA56 authorLine := "Author: " + utils.Sanitize(commit.Author.Name)57 dateLine := "Date: " + commit.Committer.When.UTC().Format(time.UnixDate)58 msgLine := strings.ReplaceAll(utils.Sanitize(commit.Message), "\r\n", "\n")59 statsLine := diff.Stats().String()60 diffLine := patch6162 if patchOnly {63 cmd.Println(64 diffLine,65 )66 return nil67 }6869 s.WriteString(fmt.Sprintf("%s\n%s\n%s\n%s\n",70 commitLine,71 authorLine,72 dateLine,73 msgLine,74 ))7576 s.WriteString(fmt.Sprintf("\n%s\n%s",77 statsLine,78 diffLine,79 ))8081 cmd.Println(82 s.String(),83 )8485 return nil86 },87 }8889 cmd.Flags().BoolVarP(&color, "color", "c", false, "Colorize output")90 cmd.Flags().BoolVarP(&patchOnly, "patch", "p", false, "Output patch only")9192 return cmd93}