@@ -2,92 +2,75 @@ package git
22
33import (
44 "fmt"
5- "time"
6-
7- git2go "github.com/libgit2/git2go/v34"
85
6+ "github.com/ldez/go-git-cmd-wrapper/v2/add"
7+ "github.com/ldez/go-git-cmd-wrapper/v2/commit"
8+ "github.com/ldez/go-git-cmd-wrapper/v2/config"
9+ "github.com/ldez/go-git-cmd-wrapper/v2/git"
10+ "github.com/ldez/go-git-cmd-wrapper/v2/revparse"
11+ "github.com/ldez/go-git-cmd-wrapper/v2/types"
912 "github.com/rs/zerolog/log"
1013)
1114
1215func (c * Connection ) Commit (files []string , message string ) (string , error ) {
13- if c .Repository == nil {
14- return "" , fmt .Errorf ("repository is not initialized" )
16+ directory := c .Options .Directory
17+ if directory == "" {
18+ return "" , fmt .Errorf ("directory is not specified" )
1519 }
1620
17- // Get the index for staging changes
18- index , err := c .Repository .Index ()
21+ msg , err := git .Add (runGitIn (directory ), add .PathSpec (files ... ))
1922 if err != nil {
20- log .Error ().Err (err ).Msg ("Error accessing repository index" )
21- return "" , fmt .Errorf ("error accessing repository index: %w" , err )
22- }
23-
24- // Add specified files to the index
25- for _ , file := range files {
26- err = index .AddByPath (file )
27- if err != nil {
28- log .Error ().Err (err ).Str ("file" , file ).Msg ("Error adding file to index" )
29- return "" , fmt .Errorf ("error adding file to index: %w" , err )
30- }
23+ log .Error ().Err (err ).Str ("output" , msg ).Msg ("Failed to add files" )
24+ return "" , err
3125 }
3226
33- // Write the index to the repository's staging area
34- err = index .Write ()
27+ msg , err = git .Config (config .Entry ("user.name" , c .Options .Signature .Name ), runGitIn (directory ))
3528 if err != nil {
36- log .Error ().Err (err ).Msg ("Error writing index to repository " )
37- return "" , fmt . Errorf ( "error writing index to repository: %w" , err )
29+ log .Error ().Err (err ).Str ( "output" , msg ). Msg ("Failed to set user.name " )
30+ return "" , err
3831 }
3932
40- treeID , err := index . WriteTree ( )
33+ msg , err = git . Config ( config . Entry ( "user.email" , c . Options . Signature . Email ), runGitIn ( directory ) )
4134 if err != nil {
42- log .Error ().Err (err ).Msg ("Error writing tree from index " )
43- return "" , fmt . Errorf ( "error writing tree from index: %w" , err )
35+ log .Error ().Err (err ).Str ( "output" , msg ). Msg ("Failed to set user.email " )
36+ return "" , err
4437 }
4538
46- // Lookup the tree object
47- tree , err := c .Repository .LookupTree (treeID )
39+ msg , err = git .Commit (runGitIn (directory ), commit .Message (message ))
4840 if err != nil {
49- log .Error ().Err (err ).Msg ("Error looking up tree object " )
50- return "" , fmt . Errorf ( "error looking up tree object: %w" , err )
41+ log .Error ().Err (err ).Str ( "output" , msg ). Msg ("Failed to commit " )
42+ return "" , err
5143 }
5244
53- // Get the HEAD commit for parent
54- headRef , err := c .Repository .Head ()
45+ currentCommitId , err := git .RevParse (runGitIn (directory ), revparse .Args ("HEAD" ))
5546 if err != nil {
56- log .Error ().Err (err ).Msg ("Error retrieving HEAD reference " )
57- return "" , fmt . Errorf ( "error retrieving HEAD reference: %w" , err )
47+ log .Error ().Err (err ).Str ( "output" , currentCommitId ). Msg ("Failed to get current commit ID " )
48+ return "" , err
5849 }
5950
60- var parentCommit * git2go.Commit
61- if headRef != nil && headRef .Target () != nil {
62- parentCommit , err = c .Repository .LookupCommit (headRef .Target ())
63- if err != nil {
64- log .Error ().Err (err ).Msg ("Error looking up HEAD commit" )
65- return "" , fmt .Errorf ("error looking up HEAD commit: %w" , err )
66- }
67- }
51+ return currentCommitId , nil
52+ }
6853
69- sig := & git2go. Signature {
70- Name : c .Options .Signature . Name ,
71- Email : c . Options . Signature . Email ,
72- When : time . Now (),
54+ func ( c * Connection ) HasChanges () ( bool , error ) {
55+ directory := c .Options .Directory
56+ if directory == "" {
57+ return false , fmt . Errorf ( "directory is not specified" )
7358 }
7459
75- var commitID * git2go.Oid
76- if parentCommit != nil {
77- commitID , err = c .Repository .CreateCommit (
78- "HEAD" , sig , sig , message , tree , parentCommit ,
79- )
80- } else {
81- commitID , err = c .Repository .CreateCommit (
82- "HEAD" , sig , sig , message , tree ,
83- )
60+ msg , err := git .Raw ("update-index" , runGitIn (directory ), func (g * types.Cmd ) {
61+ g .AddOptions ("--refresh" )
62+ })
63+ if err != nil {
64+ log .Error ().Err (err ).Str ("output" , msg ).Msg ("Failed to refresh index" )
65+ return false , err
8466 }
8567
68+ _ , err = git .Raw ("diff-files" , runGitIn (directory ), func (g * types.Cmd ) {
69+ g .AddOptions ("--quiet" )
70+ })
8671 if err != nil {
87- log .Error ().Err (err ).Msg ("Error creating commit" )
88- return "" , fmt .Errorf ("error creating commit: %w" , err )
72+ return true , nil
8973 }
9074
91- log .Debug ().Str ("commit" , commitID .String ()).Msg ("Commit created successfully" )
92- return commitID .String (), nil
75+ return false , nil
9376}
0 commit comments