aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock437
-rw-r--r--Cargo.toml2
-rw-r--r--src/repo/git/mod.rs42
-rw-r--r--src/repo/mod.rs8
-rw-r--r--src/update/mod.rs28
5 files changed, 343 insertions, 174 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a8f1516..7f55092 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,6 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
-version = 3
+version = 4
[[package]]
name = "addr2line"
@@ -163,6 +163,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
name = "bstr"
version = "1.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -193,9 +202,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
[[package]]
name = "cc"
-version = "1.2.17"
+version = "1.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
+checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c"
dependencies = [
"shlex",
]
@@ -297,6 +306,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
name = "crc32fast"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -332,10 +350,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
name = "darling"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
@@ -343,9 +371,9 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
@@ -357,9 +385,9 @@ dependencies = [
[[package]]
name = "darling_macro"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
@@ -423,6 +451,16 @@ dependencies = [
]
[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
name = "displaydoc"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -462,9 +500,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "errno"
-version = "0.3.10"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
+checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
dependencies = [
"libc",
"windows-sys 0.59.0",
@@ -513,9 +551,9 @@ dependencies = [
[[package]]
name = "flate2"
-version = "1.1.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
+checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -632,6 +670,16 @@ dependencies = [
]
[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
name = "getrandom"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -692,9 +740,9 @@ dependencies = [
[[package]]
name = "gix"
-version = "0.70.0"
+version = "0.71.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "736f14636705f3a56ea52b553e67282519418d9a35bb1e90b3a9637a00296b68"
+checksum = "a61e71ec6817fc3c9f12f812682cfe51ee6ea0d2e27e02fc3849c35524617435"
dependencies = [
"gix-actor",
"gix-attributes",
@@ -747,23 +795,23 @@ dependencies = [
[[package]]
name = "gix-actor"
-version = "0.33.2"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20018a1a6332e065f1fcc8305c1c932c6b8c9985edea2284b3c79dc6fa3ee4b2"
+checksum = "f438c87d4028aca4b82f82ba8d8ab1569823cfb3e5bc5fa8456a71678b2a20e7"
dependencies = [
"bstr",
"gix-date",
"gix-utils",
"itoa",
"thiserror 2.0.12",
- "winnow 0.6.26",
+ "winnow 0.7.6",
]
[[package]]
name = "gix-attributes"
-version = "0.24.0"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f151000bf662ef5f641eca6102d942ee31ace80f271a3ef642e99776ce6ddb38"
+checksum = "e4e25825e0430aa11096f8b65ced6780d4a96a133f81904edceebb5344c8dd7f"
dependencies = [
"bstr",
"gix-glob",
@@ -796,25 +844,25 @@ dependencies = [
[[package]]
name = "gix-command"
-version = "0.4.1"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb410b84d6575db45e62025a9118bdbf4d4b099ce7575a76161e898d9ca98df1"
+checksum = "c0378995847773a697f8e157fe2963ecf3462fe64be05b7b3da000b3b472def8"
dependencies = [
"bstr",
"gix-path",
+ "gix-quote",
"gix-trace",
"shell-words",
]
[[package]]
name = "gix-commitgraph"
-version = "0.26.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e23a8ec2d8a16026a10dafdb6ed51bcfd08f5d97f20fa52e200bc50cb72e4877"
+checksum = "043cbe49b7a7505150db975f3cb7c15833335ac1e26781f615454d9d640a28fe"
dependencies = [
"bstr",
"gix-chunk",
- "gix-features",
"gix-hash",
"memmap2",
"thiserror 2.0.12",
@@ -822,9 +870,9 @@ dependencies = [
[[package]]
name = "gix-config"
-version = "0.43.0"
+version = "0.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "377c1efd2014d5d469e0b3cd2952c8097bce9828f634e04d5665383249f1d9e9"
+checksum = "9c6f830bf746604940261b49abf7f655d2c19cadc9f4142ae9379e3a316e8cfa"
dependencies = [
"bstr",
"gix-config-value",
@@ -838,14 +886,14 @@ dependencies = [
"smallvec",
"thiserror 2.0.12",
"unicode-bom",
- "winnow 0.6.26",
+ "winnow 0.7.6",
]
[[package]]
name = "gix-config-value"
-version = "0.14.11"
+version = "0.14.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11365144ef93082f3403471dbaa94cfe4b5e72743bdb9560719a251d439f4cee"
+checksum = "8dc2c844c4cf141884678cabef736fd91dd73068b9146e6f004ba1a0457944b6"
dependencies = [
"bitflags 2.9.0",
"bstr",
@@ -856,9 +904,9 @@ dependencies = [
[[package]]
name = "gix-credentials"
-version = "0.27.0"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf950f9ee1690bb9c4388b5152baa8a9f41ad61e5cf1ba0ec8c207b08dab9e45"
+checksum = "25322308aaf65789536b860d21137c3f7b69004ac4971c15c1abb08d3951c062"
dependencies = [
"bstr",
"gix-command",
@@ -873,9 +921,9 @@ dependencies = [
[[package]]
name = "gix-date"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c57c477b645ee248b173bb1176b52dd528872f12c50375801a58aaf5ae91113f"
+checksum = "daa30058ec7d3511fbc229e4f9e696a35abd07ec5b82e635eff864a2726217e4"
dependencies = [
"bstr",
"itoa",
@@ -885,9 +933,9 @@ dependencies = [
[[package]]
name = "gix-diff"
-version = "0.50.0"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62afb7f4ca0acdf4e9dad92065b2eb1bf2993bcc5014b57bc796e3a365b17c4d"
+checksum = "a2c975dad2afc85e4e233f444d1efbe436c3cdcf3a07173984509c436d00a3f8"
dependencies = [
"bstr",
"gix-attributes",
@@ -909,9 +957,9 @@ dependencies = [
[[package]]
name = "gix-dir"
-version = "0.12.0"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1d78db3927a12f7d1b788047b84efacaab03ef25738bd1c77856ad8966bd57b"
+checksum = "5879497bd3815d8277ed864ec8975290a70de5b62bb92d2d666a4cefc5d4793b"
dependencies = [
"bstr",
"gix-discover",
@@ -929,9 +977,9 @@ dependencies = [
[[package]]
name = "gix-discover"
-version = "0.38.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0c2414bdf04064e0f5a5aa029dfda1e663cf9a6c4bfc8759f2d369299bb65d8"
+checksum = "f7fb8a4349b854506a3915de18d3341e5f1daa6b489c8affc9ca0d69efe86781"
dependencies = [
"bstr",
"dunce",
@@ -945,31 +993,30 @@ dependencies = [
[[package]]
name = "gix-features"
-version = "0.40.0"
+version = "0.41.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bfdd4838a8d42bd482c9f0cb526411d003ee94cc7c7b08afe5007329c71d554"
+checksum = "016d6050219458d14520fe22bdfdeb9cb71631dec9bc2724767c983f60109634"
dependencies = [
"bytes",
"crc32fast",
"crossbeam-channel",
"flate2",
- "gix-hash",
+ "gix-path",
"gix-trace",
"gix-utils",
"libc",
"once_cell",
"parking_lot",
"prodash",
- "sha1_smol",
"thiserror 2.0.12",
"walkdir",
]
[[package]]
name = "gix-filter"
-version = "0.17.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdcc36cd7dbc63ed0ec3558645886553d1afd3cd09daa5efb9cba9cceb942bbb"
+checksum = "cb2b2bbffdc5cc9b2b82fc82da1b98163c9b423ac2b45348baa83a947ac9ab89"
dependencies = [
"bstr",
"encoding_rs",
@@ -988,20 +1035,23 @@ dependencies = [
[[package]]
name = "gix-fs"
-version = "0.13.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "182e7fa7bfdf44ffb7cfe7451b373cdf1e00870ac9a488a49587a110c562063d"
+checksum = "951e886120dc5fa8cac053e5e5c89443f12368ca36811b2e43d1539081f9c111"
dependencies = [
+ "bstr",
"fastrand",
"gix-features",
+ "gix-path",
"gix-utils",
+ "thiserror 2.0.12",
]
[[package]]
name = "gix-glob"
-version = "0.18.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e9c7249fa0a78f9b363aa58323db71e0a6161fd69860ed6f48dedf0ef3a314e"
+checksum = "20972499c03473e773a2099e5fd0c695b9b72465837797a51a43391a1635a030"
dependencies = [
"bitflags 2.9.0",
"bstr",
@@ -1011,19 +1061,21 @@ dependencies = [
[[package]]
name = "gix-hash"
-version = "0.16.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e81c5ec48649b1821b3ed066a44efb95f1a268b35c1d91295e61252539fbe9f8"
+checksum = "834e79722063958b03342edaa1e17595cd2939bb2b3306b3225d0815566dcb49"
dependencies = [
"faster-hex",
+ "gix-features",
+ "sha1-checked",
"thiserror 2.0.12",
]
[[package]]
name = "gix-hashtable"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "189130bc372accd02e0520dc5ab1cef318dcc2bc829b76ab8d84bbe90ac212d1"
+checksum = "f06066d8702a9186dc1fdc1ed751ff2d7e924ceca21cb5d51b8f990c9c2e014a"
dependencies = [
"gix-hash",
"hashbrown 0.14.5",
@@ -1032,9 +1084,9 @@ dependencies = [
[[package]]
name = "gix-ignore"
-version = "0.13.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f529dcb80bf9855c0a7c49f0ac588df6d6952d63a63fefc254b9c869d2cdf6f"
+checksum = "9a27c8380f493a10d1457f756a3f81924d578fc08d6535e304dfcafbf0261d18"
dependencies = [
"bstr",
"gix-glob",
@@ -1045,9 +1097,9 @@ dependencies = [
[[package]]
name = "gix-index"
-version = "0.38.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acd12e3626879369310fffe2ac61acc828613ef656b50c4ea984dd59d7dc85d8"
+checksum = "855bece2d4153453aa5d0a80d51deea1ce8cd6a3b4cf213da85ac344ccb908a7"
dependencies = [
"bitflags 2.9.0",
"bstr",
@@ -1073,9 +1125,9 @@ dependencies = [
[[package]]
name = "gix-lock"
-version = "16.0.0"
+version = "17.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9739815270ff6940968441824d162df9433db19211ca9ba8c3fc1b50b849c642"
+checksum = "df47b8f11c34520db5541bc5fc9fbc8e4b0bdfcec3736af89ccb1a5728a0126f"
dependencies = [
"gix-tempfile",
"gix-utils",
@@ -1084,9 +1136,9 @@ dependencies = [
[[package]]
name = "gix-negotiate"
-version = "0.18.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6a8af1ef7bbe303d30b55312b7f4d33e955de43a3642ae9b7347c623d80ef80"
+checksum = "dad912acf5a68a7defa4836014337ff4381af8c3c098f41f818a8c524285e57b"
dependencies = [
"bitflags 2.9.0",
"gix-commitgraph",
@@ -1100,9 +1152,9 @@ dependencies = [
[[package]]
name = "gix-object"
-version = "0.47.0"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddc4b3a0044244f0fe22347fb7a79cca165e37829d668b41b85ff46a43e5fd68"
+checksum = "4943fcdae6ffc135920c9ea71e0362ed539182924ab7a85dd9dac8d89b0dd69a"
dependencies = [
"bstr",
"gix-actor",
@@ -1116,14 +1168,14 @@ dependencies = [
"itoa",
"smallvec",
"thiserror 2.0.12",
- "winnow 0.6.26",
+ "winnow 0.7.6",
]
[[package]]
name = "gix-odb"
-version = "0.67.0"
+version = "0.68.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e93457df69cd09573608ce9fa4f443fbd84bc8d15d8d83adecd471058459c1b"
+checksum = "50306d40dcc982eb6b7593103f066ea6289c7b094cb9db14f3cd2be0b9f5e610"
dependencies = [
"arc-swap",
"gix-date",
@@ -1142,9 +1194,9 @@ dependencies = [
[[package]]
name = "gix-pack"
-version = "0.57.0"
+version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc13a475b3db735617017fb35f816079bf503765312d4b1913b18cf96f3fa515"
+checksum = "9b65fffb09393c26624ca408d32cfe8776fb94cd0a5cdf984905e1d2f39779cb"
dependencies = [
"clru",
"gix-chunk",
@@ -1163,9 +1215,9 @@ dependencies = [
[[package]]
name = "gix-packetline"
-version = "0.18.3"
+version = "0.18.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7e5ae6bc3ac160a6bf44a55f5537813ca3ddb08549c0fd3e7ef699c73c439cd"
+checksum = "123844a70cf4d5352441dc06bab0da8aef61be94ec239cb631e0ba01dc6d3a04"
dependencies = [
"bstr",
"faster-hex",
@@ -1175,9 +1227,9 @@ dependencies = [
[[package]]
name = "gix-packetline-blocking"
-version = "0.18.2"
+version = "0.18.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cbf8767c6abd5a6779f586702b5bcd8702380f4208219449cf1c9d0cd1e17c"
+checksum = "1ecf3ea2e105c7e45587bac04099824301262a6c43357fad5205da36dbb233b3"
dependencies = [
"bstr",
"faster-hex",
@@ -1187,9 +1239,9 @@ dependencies = [
[[package]]
name = "gix-path"
-version = "0.10.14"
+version = "0.10.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c40f12bb65a8299be0cfb90fe718e3be236b7a94b434877012980863a883a99f"
+checksum = "f910668e2f6b2a55ff35a1f04df88a1a049f7b868507f4cbeeaa220eaba7be87"
dependencies = [
"bstr",
"gix-trace",
@@ -1200,9 +1252,9 @@ dependencies = [
[[package]]
name = "gix-pathspec"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6430d3a686c08e9d59019806faa78c17315fe22ae73151a452195857ca02f86c"
+checksum = "fef8422c3c9066d649074b24025125963f85232bfad32d6d16aea9453b82ec14"
dependencies = [
"bitflags 2.9.0",
"bstr",
@@ -1215,9 +1267,9 @@ dependencies = [
[[package]]
name = "gix-prompt"
-version = "0.9.1"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79f2185958e1512b989a007509df8d61dca014aa759a22bee80cfa6c594c3b6d"
+checksum = "fbf9cbf6239fd32f2c2c9c57eeb4e9b28fa1c9b779fa0e3b7c455eb1ca49d5f0"
dependencies = [
"gix-command",
"gix-config-value",
@@ -1228,9 +1280,9 @@ dependencies = [
[[package]]
name = "gix-protocol"
-version = "0.48.0"
+version = "0.49.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c61bd61afc6b67d213241e2100394c164be421e3f7228d3521b04f48ca5ba90"
+checksum = "5678ddae1d62880bc30e2200be1b9387af3372e0e88e21f81b4e7f8367355b5a"
dependencies = [
"bstr",
"gix-credentials",
@@ -1249,14 +1301,14 @@ dependencies = [
"gix-utils",
"maybe-async",
"thiserror 2.0.12",
- "winnow 0.6.26",
+ "winnow 0.7.6",
]
[[package]]
name = "gix-quote"
-version = "0.4.15"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e49357fccdb0c85c0d3a3292a9f6db32d9b3535959b5471bb9624908f4a066c6"
+checksum = "1b005c550bf84de3b24aa5e540a23e6146a1c01c7d30470e35d75a12f827f969"
dependencies = [
"bstr",
"gix-utils",
@@ -1265,9 +1317,9 @@ dependencies = [
[[package]]
name = "gix-ref"
-version = "0.50.0"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47adf4c5f933429f8554e95d0d92eee583cfe4b95d2bf665cd6fd4a1531ee20c"
+checksum = "b2e1f7eb6b7ce82d2d19961f74bd637bab3ea79b1bc7bfb23dbefc67b0415d8b"
dependencies = [
"gix-actor",
"gix-features",
@@ -1281,14 +1333,14 @@ dependencies = [
"gix-validate",
"memmap2",
"thiserror 2.0.12",
- "winnow 0.6.26",
+ "winnow 0.7.6",
]
[[package]]
name = "gix-refspec"
-version = "0.28.0"
+version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59650228d8f612f68e7f7a25f517fcf386c5d0d39826085492e94766858b0a90"
+checksum = "1d8587b21e2264a6e8938d940c5c99662779c13a10741a5737b15fc85c252ffc"
dependencies = [
"bstr",
"gix-hash",
@@ -1300,9 +1352,9 @@ dependencies = [
[[package]]
name = "gix-revision"
-version = "0.32.0"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fe28bbccca55da6d66e6c6efc6bb4003c29d407afd8178380293729733e6b53"
+checksum = "342caa4e158df3020cadf62f656307c3948fe4eacfdf67171d7212811860c3e9"
dependencies = [
"bstr",
"gix-commitgraph",
@@ -1315,9 +1367,9 @@ dependencies = [
[[package]]
name = "gix-revwalk"
-version = "0.18.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4ecb80c235b1e9ef2b99b23a81ea50dd569a88a9eb767179793269e0e616247"
+checksum = "2dc7c3d7e5cdc1ab8d35130106e4af0a4f9f9eca0c81f4312b690780e92bde0d"
dependencies = [
"gix-commitgraph",
"gix-date",
@@ -1330,9 +1382,9 @@ dependencies = [
[[package]]
name = "gix-sec"
-version = "0.10.11"
+version = "0.10.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d84dae13271f4313f8d60a166bf27e54c968c7c33e2ffd31c48cafe5da649875"
+checksum = "47aeb0f13de9ef2f3033f5ff218de30f44db827ac9f1286f9ef050aacddd5888"
dependencies = [
"bitflags 2.9.0",
"gix-path",
@@ -1342,9 +1394,9 @@ dependencies = [
[[package]]
name = "gix-shallow"
-version = "0.2.0"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab72543011e303e52733c85bef784603ef39632ddf47f69723def52825e35066"
+checksum = "cc0598aacfe1d52575a21c9492fee086edbb21e228ec36c819c42ab923f434c3"
dependencies = [
"bstr",
"gix-hash",
@@ -1354,9 +1406,9 @@ dependencies = [
[[package]]
name = "gix-status"
-version = "0.17.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "414cc1d85079d7ca32c3ab4a6479bf7e174cd251c74a82339c6cc393da3f4883"
+checksum = "605a6d0eb5891680c46e24b2ee7a63ef7bd39cb136dc7c7e55172960cf68b2f5"
dependencies = [
"bstr",
"filetime",
@@ -1377,9 +1429,9 @@ dependencies = [
[[package]]
name = "gix-submodule"
-version = "0.17.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74972fe8d46ac8a09490ae1e843b4caf221c5b157c5ac17057e8e1c38417a3ac"
+checksum = "78c7390c2059505c365e9548016d4edc9f35749c6a9112b7b1214400bbc68da2"
dependencies = [
"bstr",
"gix-config",
@@ -1392,9 +1444,9 @@ dependencies = [
[[package]]
name = "gix-tempfile"
-version = "16.0.0"
+version = "17.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2558f423945ef24a8328c55d1fd6db06b8376b0e7013b1bb476cc4ffdf678501"
+checksum = "3d6de439bbb9a5d3550c9c7fab0e16d2d637d120fcbe0dfbc538772a187f099b"
dependencies = [
"dashmap",
"gix-fs",
@@ -1412,9 +1464,9 @@ checksum = "7c396a2036920c69695f760a65e7f2677267ccf483f25046977d87e4cb2665f7"
[[package]]
name = "gix-transport"
-version = "0.45.0"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11187418489477b1b5b862ae1aedbbac77e582f2c4b0ef54280f20cfe5b964d9"
+checksum = "b3f68c2870bfca8278389d2484a7f2215b67d0b0cc5277d3c72ad72acf41787e"
dependencies = [
"base64",
"bstr",
@@ -1431,9 +1483,9 @@ dependencies = [
[[package]]
name = "gix-traverse"
-version = "0.44.0"
+version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bec70e53896586ef32a3efa7e4427b67308531ed186bb6120fb3eca0f0d61b4"
+checksum = "36c0b049f8bdb61b20016694102f7b507f2e1727e83e9c5e6dad4f7d84ff7384"
dependencies = [
"bitflags 2.9.0",
"gix-commitgraph",
@@ -1448,9 +1500,9 @@ dependencies = [
[[package]]
name = "gix-url"
-version = "0.29.0"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "29218c768b53dd8f116045d87fec05b294c731a4b2bdd257eeca2084cc150b13"
+checksum = "48dfe23f93f1ddb84977d80bb0dd7aa09d1bf5d5afc0c9b6820cccacc25ae860"
dependencies = [
"bstr",
"gix-features",
@@ -1462,9 +1514,9 @@ dependencies = [
[[package]]
name = "gix-utils"
-version = "0.1.14"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff08f24e03ac8916c478c8419d7d3c33393da9bb41fa4c24455d5406aeefd35f"
+checksum = "189f8724cf903e7fd57cfe0b7bc209db255cacdcb22c781a022f52c3a774f8d0"
dependencies = [
"bstr",
"fastrand",
@@ -1473,9 +1525,9 @@ dependencies = [
[[package]]
name = "gix-validate"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9eaa01c3337d885617c0a42e92823922a2aea71f4caeace6fe87002bdcadbd90"
+checksum = "34b5f1253109da6c79ed7cf6e1e38437080bb6d704c76af14c93e2f255234084"
dependencies = [
"bstr",
"thiserror 2.0.12",
@@ -1483,9 +1535,9 @@ dependencies = [
[[package]]
name = "gix-worktree"
-version = "0.39.0"
+version = "0.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6673512f7eaa57a6876adceca6978a501d6c6569a4f177767dc405f8b9778958"
+checksum = "f7760dbc4b79aa274fed30adc0d41dca6b917641f26e7867c4071b1fb4dc727b"
dependencies = [
"bstr",
"gix-attributes",
@@ -1502,9 +1554,9 @@ dependencies = [
[[package]]
name = "gix-worktree-state"
-version = "0.17.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86f5e199ad5af972086683bd31d640c82cb85885515bf86d86236c73ce575bf0"
+checksum = "490eb4d38ec2735b3466840aa3881b44ec1a4c180d6a658abfab03910380e18b"
dependencies = [
"bstr",
"gix-features",
@@ -1622,7 +1674,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http",
- "indexmap 2.8.0",
+ "indexmap 2.9.0",
"slab",
"tokio",
"tokio-util",
@@ -1764,9 +1816,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
+checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
dependencies = [
"bytes",
"futures-channel",
@@ -1774,6 +1826,7 @@ dependencies = [
"http",
"http-body",
"hyper",
+ "libc",
"pin-project-lite",
"socket2",
"tokio",
@@ -1783,9 +1836,9 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.62"
+version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
@@ -1846,9 +1899,9 @@ dependencies = [
[[package]]
name = "icu_locid_transform_data"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
+checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d"
[[package]]
name = "icu_normalizer"
@@ -1870,9 +1923,9 @@ dependencies = [
[[package]]
name = "icu_normalizer_data"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
+checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
[[package]]
name = "icu_properties"
@@ -1891,9 +1944,9 @@ dependencies = [
[[package]]
name = "icu_properties_data"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
+checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
[[package]]
name = "icu_provider"
@@ -1971,9 +2024,9 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
+checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
dependencies = [
"equivalent",
"hashbrown 0.15.2",
@@ -2018,10 +2071,11 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jiff"
-version = "0.1.29"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c04ef77ae73f3cf50510712722f0c4e8b46f5aaa1bf5ffad2ae213e6495e78e5"
+checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488"
dependencies = [
+ "jiff-static",
"jiff-tzdb-platform",
"log",
"portable-atomic",
@@ -2031,6 +2085,17 @@ dependencies = [
]
[[package]]
+name = "jiff-static"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
+[[package]]
name = "jiff-tzdb"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2164,9 +2229,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "miniz_oxide"
-version = "0.8.5"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
+checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430"
dependencies = [
"adler2",
]
@@ -2222,9 +2287,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.21.1"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "os_str_bytes"
@@ -2483,9 +2548,9 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.5.10"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
+checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
dependencies = [
"bitflags 2.9.0",
]
@@ -2622,9 +2687,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "1.0.3"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96"
+checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
dependencies = [
"bitflags 2.9.0",
"errno",
@@ -2757,10 +2822,25 @@ dependencies = [
]
[[package]]
-name = "sha1_smol"
-version = "1.0.1"
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1-checked"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d"
+checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423"
+dependencies = [
+ "digest",
+ "sha1",
+]
[[package]]
name = "sharded-slab"
@@ -2794,15 +2874,15 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.14.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
[[package]]
name = "socket2"
-version = "0.5.8"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
dependencies = [
"libc",
"windows-sys 0.52.0",
@@ -2910,7 +2990,7 @@ dependencies = [
"fastrand",
"getrandom 0.3.2",
"once_cell",
- "rustix 1.0.3",
+ "rustix 1.0.5",
"windows-sys 0.59.0",
]
@@ -3006,9 +3086,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.44.1"
+version = "1.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
+checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
dependencies = [
"backtrace",
"bytes",
@@ -3081,11 +3161,11 @@ version = "0.22.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
dependencies = [
- "indexmap 2.8.0",
+ "indexmap 2.9.0",
"serde",
"serde_spanned",
"toml_datetime",
- "winnow 0.7.4",
+ "winnow 0.7.6",
]
[[package]]
@@ -3194,6 +3274,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
name = "uluru"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3441,11 +3527,37 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-core"
-version = "0.52.0"
+version = "0.61.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings 0.4.0",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
]
[[package]]
@@ -3461,7 +3573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
dependencies = [
"windows-result",
- "windows-strings",
+ "windows-strings 0.3.1",
"windows-targets 0.53.0",
]
@@ -3484,6 +3596,15 @@ dependencies = [
]
[[package]]
+name = "windows-strings"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3640,9 +3761,9 @@ dependencies = [
[[package]]
name = "winnow"
-version = "0.7.4"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
+checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10"
dependencies = [
"memchr",
]
diff --git a/Cargo.toml b/Cargo.toml
index 912aafb..71e81ea 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -19,7 +19,7 @@ once_cell = "1"
gitlab = "0.1710"
graphql_client = "0.14"
-gix = { version = "0.70", default-features = false, features = [
+gix = { version = "0.71", default-features = false, features = [
"status",
"index",
"credentials",
diff --git a/src/repo/git/mod.rs b/src/repo/git/mod.rs
index b88a13f..24b1e1a 100644
--- a/src/repo/git/mod.rs
+++ b/src/repo/git/mod.rs
@@ -2,12 +2,12 @@ use super::{LocalRepoState, Repo, RepoError};
use anyhow::Context;
use gix::{
- bstr::BString,
+ bstr::{BString, ByteSlice},
refs::{
transaction::{LogChange, PreviousValue, RefEdit},
FullName,
},
- remote, Id, ObjectId, Remote,
+ remote, Id, ObjectId, Reference, Remote,
};
use tracing::debug;
@@ -33,6 +33,34 @@ impl Repo {
return Ok(LocalRepoState::UnbornHead);
}
+ let head = self.repo()?.head().unwrap();
+ let branch = head.referent_name().unwrap();
+ let default_branch = self.default_branch()?;
+
+ if !branch.as_bstr().contains_str(default_branch) {
+ return Ok(LocalRepoState::NonDefaultBranch);
+ }
+
+ let default_ref = self.default_remote_ref()?.into_fully_peeled_id().unwrap();
+
+ let head_ref = repo
+ .head_ref()
+ .map_err(|_| RepoError::NoHead)?
+ .ok_or(RepoError::NoHead)?
+ .into_fully_peeled_id()
+ .unwrap();
+
+ let unpushed_commits = head_ref
+ .ancestors()
+ .with_boundary([default_ref])
+ .all()
+ .unwrap()
+ .count();
+
+ if default_ref != head_ref && unpushed_commits > 0 {
+ return Ok(LocalRepoState::UnpushedCommits(unpushed_commits));
+ }
+
Ok(LocalRepoState::Clean)
}
}
@@ -45,7 +73,7 @@ impl Repo {
.context("fetch: failed to find default remote")?)
}
- pub fn default_branch(&self) -> Result<BString, RepoError> {
+ pub fn default_remote_ref(&self) -> Result<Reference, RepoError> {
let repo = self.repo()?;
let remote = self.default_remote()?;
let remote_name = remote.name().context("remote does not have name")?;
@@ -56,6 +84,14 @@ impl Repo {
debug!("got ref to origin: {:?}", origin_ref);
+ Ok(origin_ref)
+ }
+
+ pub fn default_branch(&self) -> Result<BString, RepoError> {
+ let remote = self.default_remote()?;
+ let remote_name = remote.name().context("remote does not have name")?;
+ let origin_ref = self.default_remote_ref()?;
+
if let Some(origin_ref) = origin_ref.target().try_name() {
let shortened = origin_ref.shorten().to_string();
diff --git a/src/repo/mod.rs b/src/repo/mod.rs
index 538bf31..480a486 100644
--- a/src/repo/mod.rs
+++ b/src/repo/mod.rs
@@ -8,8 +8,8 @@ use tracing::error;
use crate::forge::Project;
mod aggregate;
-mod repostate;
mod git;
+mod repostate;
pub use aggregate::*;
pub use repostate::*;
@@ -47,6 +47,8 @@ pub enum RepoError {
NoLocalRepo,
#[error("local git repo does not have a remote")]
NoRemoteFound,
+ #[error("no head found")]
+ NoHead,
#[error("could not determine default branch based on remote HEAD")]
NoDefaultBranch,
#[error("repo is not checked out")]
@@ -65,6 +67,10 @@ pub enum RepoError {
pub enum LocalRepoState {
#[error("operation in progress: {0:?}")]
InProgress(gix::state::InProgress),
+ #[error("currently checked out branch is not default")]
+ NonDefaultBranch,
+ #[error("{0} unpushed commits")]
+ UnpushedCommits(usize),
#[error("head is detached")]
DetachedHead,
#[error("head is unborn")]
diff --git a/src/update/mod.rs b/src/update/mod.rs
index e5e9f4c..e43f108 100644
--- a/src/update/mod.rs
+++ b/src/update/mod.rs
@@ -1,5 +1,6 @@
use std::fmt::{Debug, Display};
+use gix::bstr::ByteSlice;
use tracing::debug;
use crate::{
@@ -43,16 +44,23 @@ impl Repo {
let mut progress = gix::progress::Discard {};
- let _fetched = self.fetch()?;
- let (remote, head) = self.default_remote_head()?;
- debug!("default remote and head: {:?} {:?}", remote, head);
- // TODO check out only if the default branch is currently checked out
- self.checkout(&remote, head, &mut progress)?;
- debug!("finished checkout");
+ let fetched = self.fetch()?;
- // TODO do not update if there are unpushed commits
- self.update_default_branch_ref(&remote, head)?;
- debug!("updated default branch reference");
+ if fetched {
+ let (remote, head_id) = self.default_remote_head()?;
+ debug!("default remote and head: {:?} {:?}", remote, head_id);
+
+ self.checkout(&remote, head_id, &mut progress)?;
+ debug!("finished checkout");
+
+ // TODO do not update if there are unpushed commits
+ self.update_default_branch_ref(&remote, head_id)?;
+ debug!("updated default branch reference");
+
+ return Ok(UpdateResult::merged(self.name.clone()));
+ }
+
+ Ok(UpdateResult::no_changes(self.name.clone()))
// let merged = repo.branches(Some(BranchType::Local))?
// .filter_map(|x| x.ok())
@@ -77,8 +85,6 @@ impl Repo {
// } else {
// Ok(UpdateResult::no_changes(self.name.clone()))
// }
-
- Ok(UpdateResult::no_changes(self.name.clone()))
}
}