Compare commits
2 Commits
1e184f075e
...
d605da00e6
| Author | SHA1 | Date | |
|---|---|---|---|
| d605da00e6 | |||
| 93a3de9588 |
+3
-18
@@ -4,7 +4,6 @@ go 1.25.3
|
||||
|
||||
require (
|
||||
github.com/gdamore/tcell/v2 v2.13.8
|
||||
github.com/go-git/go-git/v5 v5.12.0
|
||||
github.com/go-ldap/ldap/v3 v3.4.6
|
||||
github.com/goccy/go-yaml v1.19.0
|
||||
github.com/pkg/sftp v1.13.10
|
||||
@@ -18,45 +17,29 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
dario.cat/mergo v1.0.0 // indirect
|
||||
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect
|
||||
github.com/DataDog/zstd v1.5.7 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.3.0 // indirect
|
||||
github.com/cloudflare/circl v1.6.3 // indirect
|
||||
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/emirpasic/gods v1.18.1 // indirect
|
||||
github.com/expr-lang/expr v1.17.8
|
||||
github.com/gdamore/encoding v1.0.1 // indirect
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
||||
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
||||
github.com/gofrs/uuid v4.0.0+incompatible // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
||||
github.com/klauspost/compress v1.18.3 // indirect
|
||||
github.com/kr/fs v0.1.0 // indirect
|
||||
github.com/libgit2/git2go/v34 v34.0.0
|
||||
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||
github.com/pjbgf/sha1cd v0.3.0 // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
github.com/sassoftware/go-rpmutils v0.4.1-0.20250318174028-2660c86d578c // indirect
|
||||
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
|
||||
github.com/skeema/knownhosts v1.2.2 // indirect
|
||||
github.com/ulikunitz/xz v0.5.15 // indirect
|
||||
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
||||
golang.org/x/mod v0.31.0 // indirect
|
||||
golang.org/x/sync v0.19.0 // indirect
|
||||
golang.org/x/sys v0.40.0 // indirect
|
||||
golang.org/x/term v0.39.0 // indirect
|
||||
golang.org/x/tools v0.40.0 // indirect
|
||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
|
||||
modernc.org/libc v1.50.9 // indirect
|
||||
modernc.org/mathutil v1.6.0 // indirect
|
||||
@@ -66,3 +49,5 @@ require (
|
||||
)
|
||||
|
||||
replace repokit => ../../repokit
|
||||
|
||||
replace github.com/libgit2/git2go/v34 => ../../git2go
|
||||
|
||||
+6
-70
@@ -1,95 +1,51 @@
|
||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8=
|
||||
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
|
||||
github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE=
|
||||
github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
|
||||
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
|
||||
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
||||
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
||||
github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw=
|
||||
github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
|
||||
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 h1:Kk6a4nehpJ3UuJRqlA3JxYxBZEqCeOmATOvrbT4p9RA=
|
||||
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4=
|
||||
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.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
|
||||
github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
|
||||
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
|
||||
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
||||
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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
|
||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
|
||||
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
||||
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
||||
github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM=
|
||||
github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4=
|
||||
github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw=
|
||||
github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo=
|
||||
github.com/gdamore/tcell/v2 v2.13.8 h1:Mys/Kl5wfC/GcC5Cx4C2BIQH9dbnhnkPgS9/wF3RlfU=
|
||||
github.com/gdamore/tcell/v2 v2.13.8/go.mod h1:+Wfe208WDdB7INEtCsNrAN6O2m+wsTPk1RAovjaILlo=
|
||||
github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
|
||||
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
||||
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/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
|
||||
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
|
||||
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/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
|
||||
github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
|
||||
github.com/go-ldap/ldap/v3 v3.4.6 h1:ert95MdbiG7aWo/oPYp9btL3KJlMPKnP58r09rI8T+A=
|
||||
github.com/go-ldap/ldap/v3 v3.4.6/go.mod h1:IGMQANNtxpsOzj7uUAMjpGBaOVTC4DYyIy8VsTdxmtc=
|
||||
github.com/goccy/go-yaml v1.19.0 h1:EmkZ9RIsX+Uq4DYFowegAuJo8+xdX3T/2dwNPXbxEYE=
|
||||
github.com/goccy/go-yaml v1.19.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo=
|
||||
github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
|
||||
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
||||
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
|
||||
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
||||
github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw=
|
||||
github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
|
||||
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag=
|
||||
github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
|
||||
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
|
||||
github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
|
||||
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/pkg/sftp v1.13.10 h1:+5FbKNTe5Z9aspU88DPIKJ9z2KZoaGCu6Sr6kKR/5mU=
|
||||
github.com/pkg/sftp v1.13.10/go.mod h1:bJ1a7uDhrX/4OII+agvy28lzRvQrmIQuaHrcI1HbeGA=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
@@ -100,21 +56,12 @@ github.com/rivo/tview v0.42.0 h1:b/ftp+RxtDsHSaynXTbJb+/n/BxDEi+W3UfF5jILK6c=
|
||||
github.com/rivo/tview v0.42.0/go.mod h1:cSfIYfhpSGCjp3r/ECJb+GKS7cGJnqV8vfjQPwoXyfY=
|
||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||
github.com/sassoftware/go-rpmutils v0.4.1-0.20250318174028-2660c86d578c h1:Y+MtXJBE7rpqj0nk6GhSzD/48pXSKNEJPIYhtoSCbjk=
|
||||
github.com/sassoftware/go-rpmutils v0.4.1-0.20250318174028-2660c86d578c/go.mod h1:VUUStX9NPEzk7/CvNEFpOue4M0G4MYP9NVlbHzDiwm0=
|
||||
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=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A=
|
||||
github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
|
||||
github.com/sosedoff/gitkit v0.4.0 h1:opyQJ/h9xMRLsz2ca/2CRXtstePcpldiZN8DpLLF8Os=
|
||||
github.com/sosedoff/gitkit v0.4.0/go.mod h1:V3EpGZ0nvCBhXerPsbDeqtyReNb48cwP9KtkUYTKT5I=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
@@ -122,15 +69,13 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
|
||||
github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
|
||||
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||
golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
|
||||
golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
|
||||
@@ -138,9 +83,9 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
|
||||
golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
@@ -154,11 +99,9 @@ golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@@ -166,6 +109,7 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
|
||||
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
@@ -175,7 +119,6 @@ golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
|
||||
golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
@@ -191,13 +134,6 @@ golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
|
||||
golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
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.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
+167
-100
@@ -1,43 +1,46 @@
|
||||
package git
|
||||
|
||||
import "errors"
|
||||
import "strings"
|
||||
|
||||
import git "github.com/go-git/go-git/v5"
|
||||
import "github.com/go-git/go-git/v5/plumbing"
|
||||
import "github.com/go-git/go-git/v5/plumbing/object"
|
||||
import "github.com/go-git/go-git/v5/plumbing/storer"
|
||||
import git2go "github.com/libgit2/git2go/v34"
|
||||
|
||||
func GetDefaultBranch(repoPath string) (string, error) {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var head *plumbing.Reference
|
||||
var target plumbing.ReferenceName
|
||||
var targetRef *plumbing.Reference
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
var head *git2go.Reference
|
||||
var target string
|
||||
var targetRef *git2go.Reference
|
||||
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer repo.Free()
|
||||
|
||||
_ = EnsureHead(repoPath)
|
||||
head, err = repo.Reference(plumbing.HEAD, false)
|
||||
|
||||
head, err = repo.References.Lookup("HEAD")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if head.Type() == plumbing.SymbolicReference {
|
||||
target = head.Target()
|
||||
targetRef, err = repo.Reference(target, true)
|
||||
defer head.Free()
|
||||
|
||||
if head.Type() == git2go.ReferenceSymbolic {
|
||||
target = head.SymbolicTarget()
|
||||
targetRef, err = repo.References.Lookup(target)
|
||||
if err != nil {
|
||||
if errors.Is(err, plumbing.ErrReferenceNotFound) {
|
||||
if git2go.IsErrorCode(err, git2go.ErrorCodeNotFound) {
|
||||
return "", nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
if targetRef.Hash().IsZero() {
|
||||
defer targetRef.Free()
|
||||
if targetRef.Target() == nil {
|
||||
return "", nil
|
||||
}
|
||||
return target.Short(), nil
|
||||
return targetRef.Shorthand(), nil
|
||||
}
|
||||
return head.Name().Short(), nil
|
||||
return head.Shorthand(), nil
|
||||
}
|
||||
|
||||
type BranchInfo struct {
|
||||
@@ -49,38 +52,51 @@ type BranchInfo struct {
|
||||
}
|
||||
|
||||
func ListBranchInfos(repoPath string) ([]BranchInfo, error) {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var iter storer.ReferenceIter
|
||||
var iter *git2go.BranchIterator
|
||||
var branches []BranchInfo
|
||||
var ref *plumbing.Reference
|
||||
var commit *object.Commit
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
iter, err = repo.Branches()
|
||||
defer repo.Free()
|
||||
|
||||
iter, err = repo.NewBranchIterator(git2go.BranchLocal)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer iter.Close()
|
||||
err = iter.ForEach(func(r *plumbing.Reference) error {
|
||||
ref = r
|
||||
if ref.Hash().IsZero() {
|
||||
defer iter.Free()
|
||||
|
||||
err = iter.ForEach(func(branch *git2go.Branch, _ git2go.BranchType) error {
|
||||
var name string
|
||||
var oid *git2go.Oid
|
||||
var commit *git2go.Commit
|
||||
var ferr error
|
||||
|
||||
name, ferr = branch.Name()
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
oid = branch.Target()
|
||||
if oid == nil {
|
||||
branches = append(branches, BranchInfo{Name: name})
|
||||
return nil
|
||||
}
|
||||
commit, err = repo.CommitObject(ref.Hash())
|
||||
if err != nil {
|
||||
branches = append(branches, BranchInfo{Name: ref.Name().Short()})
|
||||
commit, ferr = repo.LookupCommit(oid)
|
||||
if ferr != nil {
|
||||
branches = append(branches, BranchInfo{Name: name})
|
||||
return nil
|
||||
}
|
||||
branches = append(branches, BranchInfo{
|
||||
Name: ref.Name().Short(),
|
||||
LastHash: commit.Hash.String(),
|
||||
LastAuthor: commit.Author.Name,
|
||||
LastWhen: commit.Author.When.UTC().Format(timeFormat),
|
||||
LastMessage: strings.TrimSpace(commit.Message),
|
||||
Name: name,
|
||||
LastHash: commit.Id().String(),
|
||||
LastAuthor: commit.Author().Name,
|
||||
LastWhen: commit.Author().When.UTC().Format(timeFormat),
|
||||
LastMessage: strings.TrimSpace(commit.Message()),
|
||||
})
|
||||
commit.Free()
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
@@ -90,137 +106,188 @@ func ListBranchInfos(repoPath string) ([]BranchInfo, error) {
|
||||
}
|
||||
|
||||
func SetDefaultBranch(repoPath string, branch string) error {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var refName plumbing.ReferenceName
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
var ref *git2go.Reference
|
||||
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
refName = plumbing.NewBranchReferenceName(branch)
|
||||
_, err = repo.Reference(refName, true)
|
||||
defer repo.Free()
|
||||
|
||||
ref, err = repo.References.Lookup("refs/heads/" + branch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = repo.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, refName))
|
||||
return err
|
||||
ref.Free()
|
||||
return repo.SetHead("refs/heads/" + branch)
|
||||
}
|
||||
|
||||
func CreateBranch(repoPath string, name string, from string) error {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var commit *object.Commit
|
||||
var refName plumbing.ReferenceName
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
var existing *git2go.Branch
|
||||
var commit *git2go.Commit
|
||||
var created *git2go.Branch
|
||||
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
refName = plumbing.NewBranchReferenceName(name)
|
||||
_, err = repo.Reference(refName, true)
|
||||
defer repo.Free()
|
||||
|
||||
existing, err = repo.LookupBranch(name, git2go.BranchLocal)
|
||||
if err == nil {
|
||||
return err
|
||||
existing.Free()
|
||||
return nil
|
||||
}
|
||||
|
||||
commit, err = resolveCommit(repo, from)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = repo.Storer.SetReference(plumbing.NewHashReference(refName, commit.Hash))
|
||||
return err
|
||||
defer commit.Free()
|
||||
|
||||
created, err = repo.CreateBranch(name, commit, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
created.Free()
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteBranch(repoPath string, branch string) error {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var refName plumbing.ReferenceName
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
var b *git2go.Branch
|
||||
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
refName = plumbing.NewBranchReferenceName(branch)
|
||||
err = repo.Storer.RemoveReference(refName)
|
||||
return err
|
||||
defer repo.Free()
|
||||
|
||||
b, err = repo.LookupBranch(branch, git2go.BranchLocal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer b.Free()
|
||||
return b.Delete()
|
||||
}
|
||||
|
||||
func RenameBranch(repoPath string, from string, to string) error {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var fromRef *plumbing.Reference
|
||||
var toRefName plumbing.ReferenceName
|
||||
var fromRefName plumbing.ReferenceName
|
||||
var head *plumbing.Reference
|
||||
var b *git2go.Branch
|
||||
var moved *git2go.Branch
|
||||
var head *git2go.Reference
|
||||
|
||||
if from == to {
|
||||
return nil
|
||||
}
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromRefName = plumbing.NewBranchReferenceName(from)
|
||||
toRefName = plumbing.NewBranchReferenceName(to)
|
||||
fromRef, err = repo.Reference(fromRefName, true)
|
||||
defer repo.Free()
|
||||
|
||||
b, err = repo.LookupBranch(from, git2go.BranchLocal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = repo.Storer.SetReference(plumbing.NewHashReference(toRefName, fromRef.Hash()))
|
||||
defer b.Free()
|
||||
|
||||
moved, err = b.Move(to, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
head, err = repo.Reference(plumbing.HEAD, false)
|
||||
if err == nil && head.Type() == plumbing.SymbolicReference && head.Target() == fromRefName {
|
||||
_ = repo.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, toRefName))
|
||||
moved.Free()
|
||||
|
||||
// If HEAD still points at the old branch name, repoint it at the new one.
|
||||
head, err = repo.References.Lookup("HEAD")
|
||||
if err == nil {
|
||||
if head.Type() == git2go.ReferenceSymbolic && head.SymbolicTarget() == "refs/heads/"+from {
|
||||
_ = repo.SetHead("refs/heads/" + to)
|
||||
}
|
||||
head.Free()
|
||||
}
|
||||
err = repo.Storer.RemoveReference(fromRefName)
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
func EnsureHead(repoPath string) error {
|
||||
var repo *git.Repository
|
||||
var repo *git2go.Repository
|
||||
var err error
|
||||
var head *plumbing.Reference
|
||||
var target plumbing.ReferenceName
|
||||
var refName plumbing.ReferenceName
|
||||
var iter storer.ReferenceIter
|
||||
var first *plumbing.Reference
|
||||
repo, err = git.PlainOpen(repoPath)
|
||||
var head *git2go.Reference
|
||||
var target string
|
||||
var targetRef *git2go.Reference
|
||||
var iter *git2go.BranchIterator
|
||||
var firstName string
|
||||
|
||||
repo, err = git2go.OpenRepository(repoPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
head, err = repo.Reference(plumbing.HEAD, false)
|
||||
defer repo.Free()
|
||||
|
||||
head, err = repo.References.Lookup("HEAD")
|
||||
if err == nil {
|
||||
if head.Type() == plumbing.SymbolicReference {
|
||||
target = head.Target()
|
||||
_, err = repo.Reference(target, true)
|
||||
if head.Type() == git2go.ReferenceSymbolic {
|
||||
target = head.SymbolicTarget()
|
||||
head.Free()
|
||||
targetRef, err = repo.References.Lookup(target)
|
||||
if err == nil {
|
||||
targetRef.Free()
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
head.Free()
|
||||
return nil
|
||||
}
|
||||
}
|
||||
refName = plumbing.NewBranchReferenceName("main")
|
||||
_, err = repo.Reference(refName, true)
|
||||
if err == nil {
|
||||
return repo.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, refName))
|
||||
|
||||
if branchExists(repo, "main") {
|
||||
return repo.SetHead("refs/heads/main")
|
||||
}
|
||||
refName = plumbing.NewBranchReferenceName("master")
|
||||
_, err = repo.Reference(refName, true)
|
||||
if err == nil {
|
||||
return repo.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, refName))
|
||||
if branchExists(repo, "master") {
|
||||
return repo.SetHead("refs/heads/master")
|
||||
}
|
||||
iter, err = repo.Branches()
|
||||
|
||||
iter, err = repo.NewBranchIterator(git2go.BranchLocal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer iter.Close()
|
||||
err = iter.ForEach(func(r *plumbing.Reference) error {
|
||||
first = r
|
||||
return storer.ErrStop
|
||||
defer iter.Free()
|
||||
|
||||
err = iter.ForEach(func(branch *git2go.Branch, _ git2go.BranchType) error {
|
||||
var name string
|
||||
var ferr error
|
||||
if firstName != "" {
|
||||
return nil
|
||||
}
|
||||
name, ferr = branch.Name()
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
firstName = name
|
||||
return nil
|
||||
})
|
||||
if err != nil && err != storer.ErrStop {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if first == nil {
|
||||
if firstName == "" {
|
||||
return nil
|
||||
}
|
||||
return repo.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, first.Name()))
|
||||
return repo.SetHead("refs/heads/" + firstName)
|
||||
}
|
||||
|
||||
func branchExists(repo *git2go.Repository, name string) bool {
|
||||
var b *git2go.Branch
|
||||
var err error
|
||||
b, err = repo.LookupBranch(name, git2go.BranchLocal)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
b.Free()
|
||||
return true
|
||||
}
|
||||
|
||||
+497
-307
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ import "path/filepath"
|
||||
|
||||
import "codit/internal/storage"
|
||||
|
||||
import git "github.com/go-git/go-git/v5"
|
||||
import git2go "github.com/libgit2/git2go/v34"
|
||||
|
||||
type RepoManager struct {
|
||||
BaseDir string
|
||||
@@ -25,6 +25,8 @@ func (rm *RepoManager) RepoPathFor(projectID, repoName string) string {
|
||||
|
||||
func (rm *RepoManager) InitRepo(repoPath string, bare bool) error {
|
||||
var err error
|
||||
var repo *git2go.Repository
|
||||
|
||||
err = rm.Ensure()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -33,6 +35,10 @@ func (rm *RepoManager) InitRepo(repoPath string, bare bool) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = git.PlainInit(repoPath, bare)
|
||||
return err
|
||||
repo, err = git2go.InitRepository(repoPath, bare)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
repo.Free()
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -883,7 +883,7 @@ export default function RepoGitDetailPage(props: RepoGitDetailPageProps) {
|
||||
<ListItemText
|
||||
primary={commit.message}
|
||||
secondary={
|
||||
<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap' }}>
|
||||
<Box component="span" sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap' }} >
|
||||
<Tooltip title={commit.hash}>
|
||||
<Typography variant="body2" color="text.secondary" component="span">
|
||||
{commit.hash.slice(0, 8)}
|
||||
|
||||
+5
-1
@@ -9,6 +9,7 @@ DEB_PACKAGER_BASE_IMAGE = debian:stable
|
||||
|
||||
CODIT_TAR = $(RPM_TOPDIR)/SOURCES/$(NAME)-$(VERSION).tar.gz
|
||||
REPOKIT_TAR = $(RPM_TOPDIR)/SOURCES/repokit.tar.gz
|
||||
GIT2GO_TAR = $(RPM_TOPDIR)/SOURCES/git2go.tar.gz
|
||||
|
||||
all: rpm
|
||||
|
||||
@@ -22,7 +23,10 @@ $(CODIT_TAR): $(RPM_TOPDIR)
|
||||
$(REPOKIT_TAR): $(RPM_TOPDIR)
|
||||
cd $(RPM_TOPDIR)/SOURCES && rm -rf repokit && git clone https://code.miflux.com/hyung-hwan/repokit && cd repokit && git archive --format=tar.gz --prefix=repokit/ --output=$@ HEAD && cd .. && rm -rf repokit
|
||||
|
||||
rpm: $(CODIT_TAR) $(REPOKIT_TAR)
|
||||
$(GIT2GO_TAR): $(RPM_TOPDIR)
|
||||
cd $(RPM_TOPDIR)/SOURCES && rm -rf git2go && git clone https://code.miflux.com/hyung-hwan/git2go && cd git2go && git archive --format=tar.gz --prefix=git2go/ --output=$@ HEAD && cd .. && rm -rf git2go
|
||||
|
||||
rpm: $(CODIT_TAR) $(REPOKIT_TAR) $(GIT2GO_TAR)
|
||||
rpmbuild $(RPMBUILD_EXTRA_ARGS) --define "_topdir $(RPM_TOPDIR)" -ba rpm/codit.spec
|
||||
|
||||
deb-image:
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
Source: codit
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: Codit Maintainers <root@localhost>
|
||||
Build-Depends: debhelper-compat (= 13), golang-go
|
||||
Maintainer: Hyung-Hwan Chung <hyunghwan.chung@gmail.com>
|
||||
Build-Depends: debhelper-compat (= 13), golang-go, libgit2-dev, libssh2-dev
|
||||
Standards-Version: 4.6.2
|
||||
Rules-Requires-Root: no
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ Release: 1%{?dist}
|
||||
License: BSD
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
Source1: repokit.tar.gz
|
||||
Source2: git2go.tar.gz
|
||||
|
||||
Requires(pre): shadow-utils
|
||||
Requires(post,preun,postun): systemd
|
||||
@@ -18,6 +19,8 @@ BuildRequires: golang
|
||||
BuildRequires: nodejs
|
||||
BuildRequires: npm
|
||||
BuildRequires: systemd-rpm-macros
|
||||
BuildRequires: libgit2-devel
|
||||
BuildRequires: libssh2-devel
|
||||
|
||||
%description
|
||||
Codit server with the bundled web frontend.
|
||||
@@ -25,6 +28,7 @@ Codit server with the bundled web frontend.
|
||||
%prep
|
||||
%setup -q
|
||||
tar -C.. -xvf %{SOURCE1}
|
||||
tar -C.. -xvf %{SOURCE2}
|
||||
|
||||
%build
|
||||
pushd frontend
|
||||
|
||||
@@ -13,6 +13,9 @@ OUT_DIR="${PKG_DIR}/DEB"
|
||||
REPOKIT_DIR="${CODIT_REPOKIT_DIR:-${ROOT_DIR}/../repokit}"
|
||||
REPOKIT_URL="${CODIT_REPOKIT_URL:-https://code.miflux.com/hyung-hwan/repokit}"
|
||||
|
||||
GIT2GO_DIR="${CODIT_REPOKIT_DIR:-${ROOT_DIR}/../git2go}"
|
||||
GIT2GO_URL="${CODIT_REPOKIT_URL:-https://code.miflux.com/hyung-hwan/git2go}"
|
||||
|
||||
printf '%s\n' "Building frontend natively..."
|
||||
cd "${ROOT_DIR}/frontend"
|
||||
npm ci
|
||||
@@ -44,6 +47,15 @@ else
|
||||
rm -rf "${WORK_DIR}/repokit/.git"
|
||||
fi
|
||||
|
||||
if [ -d "${GIT2GO_DIR}/.git" ] || [ -f "${GIT2GO_DIR}/go.mod" ]; then
|
||||
printf '%s\n' "Copying git2go from ${GIT2GO_DIR}..."
|
||||
rsync -a --delete --exclude .git "${GIT2GO_DIR}/" "${WORK_DIR}/git2go/"
|
||||
else
|
||||
printf '%s\n' "Cloning git2go from ${GIT2GO_URL}..."
|
||||
git clone "${GIT2GO_URL}" "${WORK_DIR}/git2go"
|
||||
rm -rf "${WORK_DIR}/git2go/.git"
|
||||
fi
|
||||
|
||||
cp -a "${WORK_DIR}/codit/packaging/debian" "${WORK_DIR}/codit/debian"
|
||||
|
||||
docker run --rm ${DOCKER_RUN_XARGS} \
|
||||
|
||||
Reference in New Issue
Block a user