From cdbf034a42ba6b90710f31c6732823ea5f9340e4 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 01:34:41 +0300 Subject: [PATCH 1/8] fix(clone): suffix default clone path when clone bare --- cmd/ggit/clone.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd/ggit/clone.go b/cmd/ggit/clone.go index d977cb7..2656125 100644 --- a/cmd/ggit/clone.go +++ b/cmd/ggit/clone.go @@ -30,6 +30,11 @@ var cloneCmd = &cobra.Command{ dir := path.Base(args[0]) if len(args) > 1 { dir = args[1] + } else { + dir = strings.TrimSuffix(dir, ".git") + if cloneBare { + dir = dir + ".git" + } } ep, err := transport.NewEndpoint(args[0]) From ad74d8c3feaee270618b2fb9e010c45b48940a5c Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 01:39:13 +0300 Subject: [PATCH 2/8] feat: update to go-git v6 --- cmd/ggit/clone.go | 16 ++++++++++--- cmd/ggit/fetch.go | 4 ++-- cmd/ggit/main.go | 6 ++--- cmd/ggit/pull.go | 4 ++-- cmd/ggit/push.go | 6 ++--- go.mod | 26 ++++++++++----------- go.sum | 58 +++++++++++++++++++++++------------------------ 7 files changed, 64 insertions(+), 56 deletions(-) diff --git a/cmd/ggit/clone.go b/cmd/ggit/clone.go index 2656125..4024b06 100644 --- a/cmd/ggit/clone.go +++ b/cmd/ggit/clone.go @@ -1,10 +1,12 @@ package main import ( + "fmt" "path" + "strings" - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing/transport" + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/plumbing/transport" "github.com/spf13/cobra" ) @@ -12,12 +14,14 @@ var ( cloneBare bool cloneProgress bool cloneDepth int + cloneTags bool ) func init() { cloneCmd.Flags().BoolVarP(&cloneBare, "bare", "", false, "Create a bare repository") cloneCmd.Flags().BoolVarP(&cloneProgress, "progress", "", true, "Show clone progress") cloneCmd.Flags().IntVarP(&cloneDepth, "depth", "", 0, "Create a shallow clone of that depth") + cloneCmd.Flags().BoolVarP(&cloneTags, "tags", "", false, "Clone tags") rootCmd.AddCommand(cloneCmd) rootCmd.CompletionOptions.HiddenDefaultCmd = true } @@ -46,13 +50,19 @@ var cloneCmd = &cobra.Command{ URL: args[0], Depth: cloneDepth, Auth: defaultAuth(ep), + Bare: cloneBare, } + if cloneTags { + opts.Tags = git.TagFollowing + } if cloneProgress { opts.Progress = cmd.OutOrStdout() } - _, err = git.PlainClone(dir, cloneBare, &opts) + fmt.Fprintf(cmd.ErrOrStderr(), "Cloning into '%s'...\n", dir) //nolint:errcheck + + _, err = git.PlainClone(dir, &opts) return err }, DisableFlagsInUseLine: true, diff --git a/cmd/ggit/fetch.go b/cmd/ggit/fetch.go index bd7036d..7297272 100644 --- a/cmd/ggit/fetch.go +++ b/cmd/ggit/fetch.go @@ -4,8 +4,8 @@ import ( "errors" "math" - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing/transport" + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/plumbing/transport" "github.com/spf13/cobra" ) diff --git a/cmd/ggit/main.go b/cmd/ggit/main.go index e7ddf04..a88b3f1 100644 --- a/cmd/ggit/main.go +++ b/cmd/ggit/main.go @@ -5,9 +5,9 @@ import ( "os" "strconv" - "github.com/go-git/go-git/v5/plumbing/transport" - "github.com/go-git/go-git/v5/plumbing/transport/ssh" - "github.com/go-git/go-git/v5/utils/trace" + "github.com/go-git/go-git/v6/plumbing/transport" + "github.com/go-git/go-git/v6/plumbing/transport/ssh" + "github.com/go-git/go-git/v6/utils/trace" "github.com/spf13/cobra" gossh "golang.org/x/crypto/ssh" ) diff --git a/cmd/ggit/pull.go b/cmd/ggit/pull.go index 44500f8..ee05161 100644 --- a/cmd/ggit/pull.go +++ b/cmd/ggit/pull.go @@ -3,8 +3,8 @@ package main import ( "errors" - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing/transport" + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/plumbing/transport" "github.com/spf13/cobra" ) diff --git a/cmd/ggit/push.go b/cmd/ggit/push.go index c092a39..ac4e3ea 100644 --- a/cmd/ggit/push.go +++ b/cmd/ggit/push.go @@ -3,9 +3,9 @@ package main import ( "errors" - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/config" - "github.com/go-git/go-git/v5/plumbing/transport" + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/config" + "github.com/go-git/go-git/v6/plumbing/transport" "github.com/spf13/cobra" "golang.org/x/term" ) diff --git a/go.mod b/go.mod index 6b22e65..47fd920 100644 --- a/go.mod +++ b/go.mod @@ -1,30 +1,30 @@ -module github.com/go-git/gogit +module github.com/go-git/cli -go 1.23.4 +go 1.23.0 require ( - github.com/go-git/go-git/v5 v5.13.0 + github.com/go-git/go-git/v6 v6.0.0-20250407095008-f3dca17d9094 github.com/spf13/cobra v1.8.1 + golang.org/x/crypto v0.36.0 + golang.org/x/term v0.30.0 ) require ( dario.cat/mergo v1.0.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.1.3 // indirect - github.com/cloudflare/circl v1.5.0 // indirect - github.com/cyphar/filepath-securejoin v0.3.5 // indirect + github.com/ProtonMail/go-crypto v1.1.6 // indirect + github.com/cloudflare/circl v1.6.0 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/gcfg/v2 v2.0.1 // indirect github.com/go-git/go-billy/v5 v5.6.0 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pjbgf/sha1cd v0.3.2 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/crypto v0.31.0 // indirect - golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e // indirect - golang.org/x/net v0.33.0 // indirect - golang.org/x/sys v0.28.0 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sys v0.31.0 // indirect ) diff --git a/go.sum b/go.sum index d1b0cc7..0008bf3 100644 --- a/go.sum +++ b/go.sum @@ -2,34 +2,36 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= -github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= +github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= -github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk= +github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cyphar/filepath-securejoin v0.3.5 h1:L81NHjquoQmcPgXcttUS9qTSR/+bXry6pbSINQGpjj4= -github.com/cyphar/filepath-securejoin v0.3.5/go.mod h1:edhVd3c6OXKjUmSrVa/tGJRS9joFTxlslFCAyaxigkE= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elazarl/goproxy v0.0.0-20241214220532-033b654b53fa h1:QXLS/iMdK+qcYeZMPHnS6z0+h7WfMz+CAydZyh+Ywa0= -github.com/elazarl/goproxy v0.0.0-20241214220532-033b654b53fa/go.mod h1:thX175TtLTzLj3p7N/Q9IiKZ7NF+p72cvL91emV0hzo= +github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= +github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/gcfg/v2 v2.0.1 h1:vIDPEdcmkwmbMCHs/0Fv/HFA9SH9ZVVI/gglNeLztF0= +github.com/go-git/gcfg/v2 v2.0.1/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs= github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8= github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git-fixtures/v5 v5.0.0-20241203230421-0753e18f8f03 h1:LumE+tQdnYW24a9RoO08w64LHTzkNkdUqBD/0QPtlEY= github.com/go-git/go-git-fixtures/v5 v5.0.0-20241203230421-0753e18f8f03/go.mod h1:hMKrMnUE4W0SJ7bFyM00dyz/HoknZoptGWzrj6M+dEM= +github.com/go-git/go-git/v6 v6.0.0-20250407095008-f3dca17d9094 h1:uyCInlkC8j67Wq1k1YVZNeUv1dFBjTUZ9tUG/rAaJZk= +github.com/go-git/go-git/v6 v6.0.0-20250407095008-f3dca17d9094/go.mod h1:1Sn9LRp6s8Vq92QPRvJoSl2qFySmiSk4PxcFGvqa6co= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -47,14 +49,12 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= @@ -66,24 +66,22 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e h1:4qufH0hlUYs6AO6XmZC3GqfDPGSXHVXUFR6OND+iJX4= -golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= -golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 6a2c312dbd1ab3fc7ea1a0ecd4cd1ae23f51d7d8 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 01:40:23 +0300 Subject: [PATCH 3/8] refactor: rename command name from ggit to gogit --- cmd/{ggit => gogit}/clone.go | 0 cmd/{ggit => gogit}/fetch.go | 0 cmd/{ggit => gogit}/main.go | 0 cmd/{ggit => gogit}/pull.go | 0 cmd/{ggit => gogit}/push.go | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename cmd/{ggit => gogit}/clone.go (100%) rename cmd/{ggit => gogit}/fetch.go (100%) rename cmd/{ggit => gogit}/main.go (100%) rename cmd/{ggit => gogit}/pull.go (100%) rename cmd/{ggit => gogit}/push.go (100%) diff --git a/cmd/ggit/clone.go b/cmd/gogit/clone.go similarity index 100% rename from cmd/ggit/clone.go rename to cmd/gogit/clone.go diff --git a/cmd/ggit/fetch.go b/cmd/gogit/fetch.go similarity index 100% rename from cmd/ggit/fetch.go rename to cmd/gogit/fetch.go diff --git a/cmd/ggit/main.go b/cmd/gogit/main.go similarity index 100% rename from cmd/ggit/main.go rename to cmd/gogit/main.go diff --git a/cmd/ggit/pull.go b/cmd/gogit/pull.go similarity index 100% rename from cmd/ggit/pull.go rename to cmd/gogit/pull.go diff --git a/cmd/ggit/push.go b/cmd/gogit/push.go similarity index 100% rename from cmd/ggit/push.go rename to cmd/gogit/push.go From a2730951777f067a8e2ba361b8806dcc2f06e5ac Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 01:42:32 +0300 Subject: [PATCH 4/8] docs: add basic README.md --- README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e510a66..d2b5204 100644 --- a/README.md +++ b/README.md @@ -1 +1,20 @@ -# cli \ No newline at end of file +# Go Git CLI + +This provides a Go Git CLI binary using `go-git`. + +## Installation + +```bash +go install github.com/go-git/cli/cmd/gogit +``` + +## Usage + +```bash +gogit [flags] +``` + +## License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + From 79ba152c51547818e4377e6292af38890fa46c48 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 01:49:21 +0300 Subject: [PATCH 5/8] feat: add update-server-info command --- cmd/gogit/update-server-info.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 cmd/gogit/update-server-info.go diff --git a/cmd/gogit/update-server-info.go b/cmd/gogit/update-server-info.go new file mode 100644 index 0000000..41dda47 --- /dev/null +++ b/cmd/gogit/update-server-info.go @@ -0,0 +1,26 @@ +package main + +import ( + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/plumbing/transport" + "github.com/go-git/go-git/v6/storage/filesystem" + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(updateServerInfoCmd) +} + +var updateServerInfoCmd = &cobra.Command{ + Use: "update-server-info", + Short: "Update the server info file", + RunE: func(cmd *cobra.Command, args []string) error { + r, err := git.PlainOpen(".") + if err != nil { + return err + } + + fs := r.Storer.(*filesystem.Storage).Filesystem() + return transport.UpdateServerInfo(r.Storer, fs) + }, +} From 792158d372dbf9041e7bd4aa18fd5a5fb3d190aa Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 01:58:26 +0300 Subject: [PATCH 6/8] feat: add upload-pack command --- cmd/gogit/upload-pack.go | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 cmd/gogit/upload-pack.go diff --git a/cmd/gogit/upload-pack.go b/cmd/gogit/upload-pack.go new file mode 100644 index 0000000..dbb69c9 --- /dev/null +++ b/cmd/gogit/upload-pack.go @@ -0,0 +1,56 @@ +package main + +import ( + "context" + "os" + "time" + + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/plumbing/transport" + "github.com/spf13/cobra" +) + +var ( + uploadPackStatelessRPC bool + uploadPackAdvertiseRefs bool + uploadPackTimeout int +) + +func init() { + uploadPackCmd.Flags().BoolVarP(&uploadPackStatelessRPC, "stateless-rpc", "", false, "Use stateless RPC") + uploadPackCmd.Flags().BoolVarP(&uploadPackAdvertiseRefs, "advertise-refs", "", false, "Advertise refs") + uploadPackCmd.Flags().IntVarP(&uploadPackTimeout, "timeout", "", 0, "Timeout in seconds") + + rootCmd.AddCommand(uploadPackCmd) +} + +var uploadPackCmd = &cobra.Command{ + Use: "upload-pack [options] ", + Short: "Run the upload-pack service", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + r, err := git.PlainOpen(args[0]) + if err != nil { + return err + } + + ctx := cmd.Context() + if uploadPackTimeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, time.Duration(uploadPackTimeout)*time.Second) + defer cancel() + } + + return transport.UploadPack( + ctx, + r.Storer, + os.Stdin, + os.Stdout, + &transport.UploadPackOptions{ + GitProtocol: os.Getenv("GIT_PROTOCOL"), + StatelessRPC: uploadPackStatelessRPC, + AdvertiseRefs: uploadPackAdvertiseRefs, + }, + ) + }, +} From ac5f5c84a3b84e3a7c0db8c759e1c052a2faa04d Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 02:02:50 +0300 Subject: [PATCH 7/8] feat: add receive-pack command --- cmd/gogit/receive-pack.go | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 cmd/gogit/receive-pack.go diff --git a/cmd/gogit/receive-pack.go b/cmd/gogit/receive-pack.go new file mode 100644 index 0000000..4b8b785 --- /dev/null +++ b/cmd/gogit/receive-pack.go @@ -0,0 +1,45 @@ +package main + +import ( + "os" + + "github.com/go-git/go-git/v6" + "github.com/go-git/go-git/v6/plumbing/transport" + "github.com/spf13/cobra" +) + +var ( + receivePackStatelessRPC bool + receivePackAdvertiseRefs bool +) + +func init() { + receivePackCmd.Flags().BoolVarP(&receivePackStatelessRPC, "stateless-rpc", "", false, "Use stateless RPC") + receivePackCmd.Flags().BoolVarP(&receivePackAdvertiseRefs, "advertise-refs", "", false, "Advertise refs") + + rootCmd.AddCommand(receivePackCmd) +} + +var receivePackCmd = &cobra.Command{ + Use: "receive-pack ", + Short: "Run the receive-pack service", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + r, err := git.PlainOpen(args[0]) + if err != nil { + return err + } + + return transport.ReceivePack( + cmd.Context(), + r.Storer, + os.Stdin, + os.Stdout, + &transport.ReceivePackOptions{ + GitProtocol: os.Getenv("GIT_PROTOCOL"), + StatelessRPC: receivePackStatelessRPC, + AdvertiseRefs: receivePackAdvertiseRefs, + }, + ) + }, +} From e5e568f1b6ba47eb35414434cbf59d93c655f762 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 9 Apr 2025 02:03:46 +0300 Subject: [PATCH 8/8] fix: update command name from ggit to gogit --- cmd/gogit/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/gogit/main.go b/cmd/gogit/main.go index a88b3f1..ad4c30a 100644 --- a/cmd/gogit/main.go +++ b/cmd/gogit/main.go @@ -13,8 +13,8 @@ import ( ) var rootCmd = &cobra.Command{ - Use: "ggit [] ", - Short: "ggit is a Git CLI that uses go-git as its backend.", + Use: "gogit [] ", + Short: "gogit is a Git CLI that uses go-git as its backend.", RunE: func(cmd *cobra.Command, _ []string) error { return cmd.Usage() },