Skip to content

Commit 3a888d9

Browse files
committed
feat: using git wrapper
1 parent ca7d675 commit 3a888d9

12 files changed

Lines changed: 549 additions & 615 deletions

File tree

cmd/repo-server/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,6 @@ func getGitConnectionOptions() *git.ConnectionOptions {
106106
Branch: config.Get().String("GITOPS_REPOSITORY_BRANCH"),
107107
Repository: config.Get().String("GITOPS_REPOSITORY"),
108108
Authentication: authentication,
109-
IgnoreSslHostKey: config.Get().Bool("GITOPS_REPOSITORY_IGNORE_SSL_HOSTKEY"),
109+
IgnoreSshHostKey: config.Get().Bool("GITOPS_REPOSITORY_IGNORE_SSL_HOSTKEY"),
110110
}
111111
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ toolchain go1.23.2
77
require (
88
github.com/gin-gonic/gin v1.10.0
99
github.com/google/uuid v1.1.2
10+
github.com/ldez/go-git-cmd-wrapper/v2 v2.8.0
1011
github.com/schollz/progressbar/v3 v3.13.0
1112
github.com/sirupsen/logrus v1.9.0
1213
github.com/urfave/cli/v2 v2.25.0
@@ -123,7 +124,6 @@ require (
123124
github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef // indirect
124125
github.com/jmespath/go-jmespath v0.4.0 // indirect
125126
github.com/lib/pq v1.10.5 // indirect
126-
github.com/libgit2/git2go/v34 v34.0.0
127127
github.com/mattn/go-colorable v0.1.13 // indirect
128128
github.com/mattn/go-isatty v0.0.20 // indirect
129129
github.com/mattn/go-runewidth v0.0.14 // indirect

go.sum

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,6 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe
311311
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
312312
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
313313
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
314-
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
315-
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
316314
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
317315
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
318316
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
@@ -428,12 +426,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
428426
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
429427
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
430428
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
429+
github.com/ldez/go-git-cmd-wrapper/v2 v2.8.0 h1:+lD1DY7jRCy0hBTgrlVSRQtfQvyCr4SGOlf+C+eXBtM=
430+
github.com/ldez/go-git-cmd-wrapper/v2 v2.8.0/go.mod h1:0eUeas7XtKDPKQbB0KijfaMPbuQ/cIprtoTRiwaUoFg=
431431
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
432432
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
433433
github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ=
434434
github.com/lib/pq v1.10.5/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
435-
github.com/libgit2/git2go/v34 v34.0.0 h1:UKoUaKLmiCRbOCD3PtUi2hD6hESSXzME/9OUZrGcgu8=
436-
github.com/libgit2/git2go/v34 v34.0.0/go.mod h1:blVco2jDAw6YTXkErMMqzHLcAjKkwF0aWIRHBqiJkZ0=
437435
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
438436
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
439437
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
@@ -618,7 +616,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
618616
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
619617
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
620618
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
621-
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
622619
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
623620
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
624621
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
@@ -764,7 +761,6 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w
764761
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
765762
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
766763
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
767-
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
768764
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
769765
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
770766
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -785,7 +781,6 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w
785781
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
786782
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
787783
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
788-
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
789784
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
790785
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
791786
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -823,7 +818,6 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
823818
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
824819
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
825820
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
826-
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
827821
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
828822
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
829823
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=

internal/git/clone.go

Lines changed: 125 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
package git
22

33
import (
4+
"fmt"
5+
"net/url"
46
"os"
7+
"strings"
58
"time"
69

7-
git2go "github.com/libgit2/git2go/v34"
8-
10+
"github.com/ldez/go-git-cmd-wrapper/v2/clone"
11+
"github.com/ldez/go-git-cmd-wrapper/v2/git"
912
"github.com/rs/zerolog/log"
1013
)
1114

15+
type CloneProtocol string
16+
17+
const (
18+
CloneProtocolSsh CloneProtocol = "ssh"
19+
CloneProtocolHttps CloneProtocol = "https"
20+
CloneProtocolHttp CloneProtocol = "http"
21+
)
22+
1223
func (c *Connection) Clone() error {
1324
if c.Options.Directory == "" {
1425
directoryName, err := os.MkdirTemp(os.TempDir(), "gitops-repo-")
@@ -25,27 +36,128 @@ func (c *Connection) Clone() error {
2536
}
2637
}
2738

39+
repositoryUrl := c.Options.Repository
40+
cloneProtocol := CloneProtocolHttps
41+
42+
if strings.HasPrefix(repositoryUrl, "ssh://") || strings.HasPrefix(repositoryUrl, "git@") {
43+
cloneProtocol = CloneProtocolSsh
44+
}
45+
46+
if strings.HasPrefix(repositoryUrl, "http://") {
47+
cloneProtocol = CloneProtocolHttp
48+
}
49+
50+
if strings.HasPrefix(repositoryUrl, "https://") {
51+
cloneProtocol = CloneProtocolHttps
52+
}
53+
54+
if cloneProtocol == CloneProtocolHttp || cloneProtocol == CloneProtocolHttps {
55+
return c.CloneHttps(cloneProtocol)
56+
} else if cloneProtocol == CloneProtocolSsh {
57+
return c.CloneSsh(cloneProtocol)
58+
} else {
59+
return fmt.Errorf("unsupported clone protocol: %s", cloneProtocol)
60+
}
61+
62+
}
63+
64+
func (c *Connection) CloneSsh(cloneProtocol CloneProtocol) error {
2865
startTime := time.Now()
2966

30-
repo, err := git2go.Clone(c.Options.Repository, c.Options.Directory, &git2go.CloneOptions{
31-
CheckoutBranch: c.Options.Branch,
32-
CheckoutOptions: git2go.CheckoutOptions{},
33-
FetchOptions: c.getFetchOptions(FetchOptionUsageDefault),
34-
})
67+
repositoryUrl := c.Options.Repository
68+
repositoryBaseUrl := strings.TrimPrefix(repositoryUrl, "ssh://")
69+
repositoryBaseUrl = strings.TrimSuffix(repositoryBaseUrl, ".git")
70+
71+
repositoryUrlSplit := strings.Split(repositoryBaseUrl, "@")
72+
sshUsername := "git"
73+
if c.Options.Authentication != nil && c.Options.Authentication.SshUsername != nil {
74+
sshUsername = *c.Options.Authentication.SshUsername
75+
}
76+
77+
if len(repositoryUrlSplit) == 1 {
78+
repositoryUrl = fmt.Sprintf("ssh://%s@%s.git", sshUsername, repositoryUrlSplit[0])
79+
} else {
80+
repositoryUrl = fmt.Sprintf("ssh://%s@%s.git", repositoryUrlSplit[0], repositoryUrlSplit[1])
81+
}
82+
83+
lock.Lock()
84+
defer lock.Unlock()
85+
86+
log.Debug().Msgf("Using SSH URL: %s", repositoryUrl)
87+
88+
privateKeyFile, err := c.provideSshAuthentication()
89+
if err != nil {
90+
return err
91+
}
92+
defer cleanSshAuthentication(privateKeyFile)
93+
94+
msg, err := git.Clone(
95+
clone.Repository(repositoryUrl),
96+
clone.Directory(c.Options.Directory),
97+
)
3598
if err != nil {
36-
log.Error().Err(err).Msgf("Error cloning repository %s on branch %s", c.Options.Repository, c.Options.Branch)
99+
log.Error().Err(err).Str("output", msg).Msg("Failed to clone repository")
37100
return err
38101
}
39102

40103
log.Debug().Msgf("Cloned repository %s on branch %s in %d ms", c.Options.Repository, c.Options.Branch, time.Since(startTime).Milliseconds())
41-
c.Repository = repo
104+
return nil
105+
}
106+
107+
func (c *Connection) CloneHttps(cloneProtocol CloneProtocol) error {
108+
startTime := time.Now()
109+
110+
repositoryUrl := c.Options.Repository
111+
repositoryBaseUrl := repositoryUrl
112+
113+
if strings.HasPrefix(repositoryUrl, "http://") {
114+
repositoryBaseUrl = strings.TrimPrefix(repositoryUrl, "http://")
115+
}
116+
117+
if strings.HasPrefix(repositoryUrl, "https://") {
118+
repositoryBaseUrl = strings.TrimPrefix(repositoryUrl, "https://")
119+
}
42120

43-
err = repo.CheckoutHead(&git2go.CheckoutOptions{
44-
Strategy: git2go.CheckoutSafe,
45-
})
121+
if cloneProtocol == CloneProtocolHttp {
122+
repositoryUrl = fmt.Sprintf("http://%s", repositoryBaseUrl)
123+
} else if cloneProtocol == CloneProtocolHttps {
124+
repositoryUrl = fmt.Sprintf("https://%s", repositoryBaseUrl)
125+
}
126+
127+
log.Debug().Msgf("Using http URL: %s", repositoryUrl)
128+
129+
parsedUrl, err := url.Parse(repositoryUrl)
46130
if err != nil {
47-
log.Error().Err(err).Msg("Error checking out HEAD")
131+
log.Error().Err(err).Msg("Error parsing repository URL")
48132
return err
49133
}
134+
135+
if c.Options.Authentication != nil && c.Options.Authentication.BasicAuth != nil {
136+
auth := c.Options.Authentication.BasicAuth
137+
parsedUrl.User = url.UserPassword(auth.Username, auth.Password)
138+
}
139+
140+
repositoryUrl = parsedUrl.String()
141+
142+
lock.Lock()
143+
defer lock.Unlock()
144+
145+
if parsedUrl.Scheme == "https" && c.Options.SkipSslVerify {
146+
if err := os.Setenv("GIT_SSL_NO_VERIFY", "1"); err != nil {
147+
log.Error().Err(err).Msg("Error setting GIT_SSL_NO_VERIFY")
148+
return err
149+
}
150+
}
151+
152+
msg, err := git.Clone(
153+
clone.Repository(repositoryUrl),
154+
clone.Directory(c.Options.Directory),
155+
)
156+
if err != nil {
157+
log.Error().Err(err).Str("output", msg).Msg("Failed to clone repository")
158+
return err
159+
}
160+
161+
log.Debug().Msgf("Cloned repository %s on branch %s in %d ms", c.Options.Repository, c.Options.Branch, time.Since(startTime).Milliseconds())
50162
return nil
51163
}

internal/git/commit.go

Lines changed: 41 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -2,92 +2,75 @@ package git
22

33
import (
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

1215
func (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

Comments
 (0)