Revert "Revert "Merge pull request #4652 from gitbutlerapp/git2-to-gix""

This reverts commit 88496e6219.
This commit is contained in:
Sebastian Thiel 2024-08-09 10:30:52 +02:00
parent eebdae680b
commit 4c76e2a6ee
No known key found for this signature in database
GPG Key ID: 9CB5EE7895E8268B
28 changed files with 533 additions and 411 deletions

489
Cargo.lock generated
View File

@ -534,6 +534,9 @@ name = "bitflags"
version = "2.6.0" version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "bitvec" name = "bitvec"
@ -2387,6 +2390,7 @@ version = "0.0.0"
dependencies = [ dependencies = [
"bstr", "bstr",
"git2", "git2",
"gix",
"serde", "serde",
] ]
@ -2552,49 +2556,53 @@ dependencies = [
[[package]] [[package]]
name = "gix" name = "gix"
version = "0.64.0" version = "0.64.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-command", "gix-command",
"gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-config", "gix-config",
"gix-credentials", "gix-credentials",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-diff", "gix-diff",
"gix-dir", "gix-dir",
"gix-discover 0.33.0", "gix-discover 0.33.0",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-filter", "gix-filter",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-macros", "gix-macros",
"gix-mailmap",
"gix-negotiate", "gix-negotiate",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-odb", "gix-odb",
"gix-pack", "gix-pack",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-pathspec", "gix-pathspec",
"gix-prompt", "gix-prompt",
"gix-protocol",
"gix-ref 0.45.0", "gix-ref 0.45.0",
"gix-refspec", "gix-refspec",
"gix-revision", "gix-revision",
"gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-submodule", "gix-submodule",
"gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-traverse 0.39.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-transport",
"gix-traverse 0.39.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-url", "gix-url",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-worktree 0.34.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-worktree 0.34.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"once_cell", "once_cell",
"serde",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -2616,12 +2624,13 @@ dependencies = [
[[package]] [[package]]
name = "gix-actor" name = "gix-actor"
version = "0.31.5" version = "0.31.5"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"itoa 1.0.11", "itoa 1.0.11",
"serde",
"thiserror", "thiserror",
"winnow 0.6.16", "winnow 0.6.16",
] ]
@ -2646,14 +2655,15 @@ dependencies = [
[[package]] [[package]]
name = "gix-attributes" name = "gix-attributes"
version = "0.22.3" version = "0.22.3"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"kstring", "kstring",
"serde",
"smallvec", "smallvec",
"thiserror", "thiserror",
"unicode-bom", "unicode-bom",
@ -2671,7 +2681,7 @@ dependencies = [
[[package]] [[package]]
name = "gix-bitmap" name = "gix-bitmap"
version = "0.2.11" version = "0.2.11"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"thiserror", "thiserror",
] ]
@ -2688,7 +2698,7 @@ dependencies = [
[[package]] [[package]]
name = "gix-chunk" name = "gix-chunk"
version = "0.4.8" version = "0.4.8"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"thiserror", "thiserror",
] ]
@ -2696,11 +2706,11 @@ dependencies = [
[[package]] [[package]]
name = "gix-command" name = "gix-command"
version = "0.3.8" version = "0.3.8"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"shell-words", "shell-words",
] ]
@ -2721,28 +2731,29 @@ dependencies = [
[[package]] [[package]]
name = "gix-commitgraph" name = "gix-commitgraph"
version = "0.24.3" version = "0.24.3"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-chunk 0.4.8 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-chunk 0.4.8 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"memmap2", "memmap2",
"serde",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gix-config" name = "gix-config"
version = "0.38.0" version = "0.38.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-config-value", "gix-config-value",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-ref 0.45.0", "gix-ref 0.45.0",
"gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"memchr", "memchr",
"once_cell", "once_cell",
"smallvec", "smallvec",
@ -2754,11 +2765,11 @@ dependencies = [
[[package]] [[package]]
name = "gix-config-value" name = "gix-config-value"
version = "0.14.7" version = "0.14.7"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"bstr", "bstr",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"libc", "libc",
"thiserror", "thiserror",
] ]
@ -2766,16 +2777,17 @@ dependencies = [
[[package]] [[package]]
name = "gix-credentials" name = "gix-credentials"
version = "0.24.4" version = "0.24.4"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-command", "gix-command",
"gix-config-value", "gix-config-value",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-prompt", "gix-prompt",
"gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-url", "gix-url",
"serde",
"thiserror", "thiserror",
] ]
@ -2794,41 +2806,42 @@ dependencies = [
[[package]] [[package]]
name = "gix-date" name = "gix-date"
version = "0.9.0" version = "0.9.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"itoa 1.0.11", "itoa 1.0.11",
"jiff", "jiff",
"serde",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gix-diff" name = "gix-diff"
version = "0.44.1" version = "0.44.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gix-dir" name = "gix-dir"
version = "0.6.0" version = "0.6.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-discover 0.33.0", "gix-discover 0.33.0",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-pathspec", "gix-pathspec",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-worktree 0.34.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-worktree 0.34.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
@ -2851,15 +2864,15 @@ dependencies = [
[[package]] [[package]]
name = "gix-discover" name = "gix-discover"
version = "0.33.0" version = "0.33.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"dunce", "dunce",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-ref 0.45.0", "gix-ref 0.45.0",
"gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
@ -2881,14 +2894,14 @@ dependencies = [
[[package]] [[package]]
name = "gix-features" name = "gix-features"
version = "0.38.2" version = "0.38.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"crc32fast", "crc32fast",
"crossbeam-channel", "crossbeam-channel",
"flate2", "flate2",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"libc", "libc",
"once_cell", "once_cell",
"parking_lot 0.12.3", "parking_lot 0.12.3",
@ -2901,19 +2914,19 @@ dependencies = [
[[package]] [[package]]
name = "gix-filter" name = "gix-filter"
version = "0.11.3" version = "0.11.3"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"encoding_rs", "encoding_rs",
"gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-command", "gix-command",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-packetline-blocking", "gix-packetline-blocking",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -2932,11 +2945,11 @@ dependencies = [
[[package]] [[package]]
name = "gix-fs" name = "gix-fs"
version = "0.11.2" version = "0.11.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"fastrand 2.1.0", "fastrand 2.1.0",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
] ]
[[package]] [[package]]
@ -2954,12 +2967,13 @@ dependencies = [
[[package]] [[package]]
name = "gix-glob" name = "gix-glob"
version = "0.16.4" version = "0.16.4"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"bstr", "bstr",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"serde",
] ]
[[package]] [[package]]
@ -2975,9 +2989,10 @@ dependencies = [
[[package]] [[package]]
name = "gix-hash" name = "gix-hash"
version = "0.14.2" version = "0.14.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"faster-hex", "faster-hex",
"serde",
"thiserror", "thiserror",
] ]
@ -2995,9 +3010,9 @@ dependencies = [
[[package]] [[package]]
name = "gix-hashtable" name = "gix-hashtable"
version = "0.5.2" version = "0.5.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"hashbrown 0.14.5", "hashbrown 0.14.5",
"parking_lot 0.12.3", "parking_lot 0.12.3",
] ]
@ -3018,12 +3033,13 @@ dependencies = [
[[package]] [[package]]
name = "gix-ignore" name = "gix-ignore"
version = "0.11.3" version = "0.11.3"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"serde",
"unicode-bom", "unicode-bom",
] ]
@ -3058,26 +3074,27 @@ dependencies = [
[[package]] [[package]]
name = "gix-index" name = "gix-index"
version = "0.33.1" version = "0.33.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"bstr", "bstr",
"filetime", "filetime",
"fnv", "fnv",
"gix-bitmap 0.2.11 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-bitmap 0.2.11 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-traverse 0.39.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-traverse 0.39.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"hashbrown 0.14.5", "hashbrown 0.14.5",
"itoa 1.0.11", "itoa 1.0.11",
"libc", "libc",
"memmap2", "memmap2",
"rustix 0.38.34", "rustix 0.38.34",
"serde",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -3096,34 +3113,46 @@ dependencies = [
[[package]] [[package]]
name = "gix-lock" name = "gix-lock"
version = "14.0.0" version = "14.0.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gix-macros" name = "gix-macros"
version = "0.1.5" version = "0.1.5"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.68", "syn 2.0.68",
] ]
[[package]]
name = "gix-mailmap"
version = "0.23.5"
source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [
"bstr",
"gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-date 0.9.0",
"serde",
"thiserror",
]
[[package]] [[package]]
name = "gix-negotiate" name = "gix-negotiate"
version = "0.13.2" version = "0.13.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -3150,16 +3179,17 @@ dependencies = [
[[package]] [[package]]
name = "gix-object" name = "gix-object"
version = "0.42.3" version = "0.42.3"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"itoa 1.0.11", "itoa 1.0.11",
"serde",
"smallvec", "smallvec",
"thiserror", "thiserror",
"winnow 0.6.16", "winnow 0.6.16",
@ -3168,18 +3198,19 @@ dependencies = [
[[package]] [[package]]
name = "gix-odb" name = "gix-odb"
version = "0.61.1" version = "0.61.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-pack", "gix-pack",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"parking_lot 0.12.3", "parking_lot 0.12.3",
"serde",
"tempfile", "tempfile",
"thiserror", "thiserror",
] ]
@ -3187,29 +3218,41 @@ dependencies = [
[[package]] [[package]]
name = "gix-pack" name = "gix-pack"
version = "0.51.1" version = "0.51.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"clru", "clru",
"gix-chunk 0.4.8 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-chunk 0.4.8 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"memmap2", "memmap2",
"serde",
"smallvec", "smallvec",
"thiserror", "thiserror",
"uluru", "uluru",
] ]
[[package]] [[package]]
name = "gix-packetline-blocking" name = "gix-packetline"
version = "0.17.4" version = "0.17.5"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"faster-hex", "faster-hex",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror",
]
[[package]]
name = "gix-packetline-blocking"
version = "0.17.4"
source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [
"bstr",
"faster-hex",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
@ -3229,10 +3272,10 @@ dependencies = [
[[package]] [[package]]
name = "gix-path" name = "gix-path"
version = "0.10.9" version = "0.10.9"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"home", "home",
"once_cell", "once_cell",
"thiserror", "thiserror",
@ -3241,21 +3284,21 @@ dependencies = [
[[package]] [[package]]
name = "gix-pathspec" name = "gix-pathspec"
version = "0.7.6" version = "0.7.6"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"bstr", "bstr",
"gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-config-value", "gix-config-value",
"gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gix-prompt" name = "gix-prompt"
version = "0.8.6" version = "0.8.6"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-command", "gix-command",
"gix-config-value", "gix-config-value",
@ -3264,6 +3307,24 @@ dependencies = [
"thiserror", "thiserror",
] ]
[[package]]
name = "gix-protocol"
version = "0.45.2"
source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [
"bstr",
"gix-credentials",
"gix-date 0.9.0",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-transport",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"maybe-async",
"serde",
"thiserror",
"winnow 0.6.16",
]
[[package]] [[package]]
name = "gix-quote" name = "gix-quote"
version = "0.4.12" version = "0.4.12"
@ -3278,10 +3339,10 @@ dependencies = [
[[package]] [[package]]
name = "gix-quote" name = "gix-quote"
version = "0.4.12" version = "0.4.12"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"thiserror", "thiserror",
] ]
@ -3310,19 +3371,20 @@ dependencies = [
[[package]] [[package]]
name = "gix-ref" name = "gix-ref"
version = "0.45.0" version = "0.45.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"memmap2", "memmap2",
"serde",
"thiserror", "thiserror",
"winnow 0.6.16", "winnow 0.6.16",
] ]
@ -3330,12 +3392,12 @@ dependencies = [
[[package]] [[package]]
name = "gix-refspec" name = "gix-refspec"
version = "0.23.1" version = "0.23.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-revision", "gix-revision",
"gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -3343,13 +3405,14 @@ dependencies = [
[[package]] [[package]]
name = "gix-revision" name = "gix-revision"
version = "0.27.2" version = "0.27.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"serde",
"thiserror", "thiserror",
] ]
@ -3371,13 +3434,13 @@ dependencies = [
[[package]] [[package]]
name = "gix-revwalk" name = "gix-revwalk"
version = "0.13.2" version = "0.13.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -3397,22 +3460,23 @@ dependencies = [
[[package]] [[package]]
name = "gix-sec" name = "gix-sec"
version = "0.10.7" version = "0.10.7"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"libc", "libc",
"serde",
"windows-sys 0.52.0", "windows-sys 0.52.0",
] ]
[[package]] [[package]]
name = "gix-submodule" name = "gix-submodule"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-config", "gix-config",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-pathspec", "gix-pathspec",
"gix-refspec", "gix-refspec",
"gix-url", "gix-url",
@ -3437,9 +3501,9 @@ dependencies = [
[[package]] [[package]]
name = "gix-tempfile" name = "gix-tempfile"
version = "14.0.1" version = "14.0.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"libc", "libc",
"once_cell", "once_cell",
"parking_lot 0.12.3", "parking_lot 0.12.3",
@ -3481,7 +3545,23 @@ checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e"
[[package]] [[package]]
name = "gix-trace" name = "gix-trace"
version = "0.1.9" version = "0.1.9"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
[[package]]
name = "gix-transport"
version = "0.42.2"
source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [
"bstr",
"gix-command",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-packetline",
"gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-url",
"serde",
"thiserror",
]
[[package]] [[package]]
name = "gix-traverse" name = "gix-traverse"
@ -3503,15 +3583,15 @@ dependencies = [
[[package]] [[package]]
name = "gix-traverse" name = "gix-traverse"
version = "0.39.2" version = "0.39.2"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-commitgraph 0.24.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-date 0.9.0", "gix-date 0.9.0",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
@ -3519,12 +3599,13 @@ dependencies = [
[[package]] [[package]]
name = "gix-url" name = "gix-url"
version = "0.27.4" version = "0.27.4"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"home", "home",
"serde",
"thiserror", "thiserror",
"url", "url",
] ]
@ -3542,7 +3623,7 @@ dependencies = [
[[package]] [[package]]
name = "gix-utils" name = "gix-utils"
version = "0.1.12" version = "0.1.12"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"fastrand 2.1.0", "fastrand 2.1.0",
@ -3562,7 +3643,7 @@ dependencies = [
[[package]] [[package]]
name = "gix-validate" name = "gix-validate"
version = "0.8.5" version = "0.8.5"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"thiserror", "thiserror",
@ -3590,19 +3671,20 @@ dependencies = [
[[package]] [[package]]
name = "gix-worktree" name = "gix-worktree"
version = "0.34.1" version = "0.34.1"
source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" source = "git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a#7dff44754e0fdc369f92221468fb953bad9be60a"
dependencies = [ dependencies = [
"bstr", "bstr",
"gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)",
"serde",
] ]
[[package]] [[package]]
@ -4497,6 +4579,7 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747" checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747"
dependencies = [ dependencies = [
"serde",
"static_assertions", "static_assertions",
] ]
@ -4687,6 +4770,17 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
[[package]]
name = "maybe-async"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
]
[[package]] [[package]]
name = "md5" name = "md5"
version = "0.7.0" version = "0.7.0"
@ -6678,6 +6772,9 @@ name = "smallvec"
version = "1.13.2" version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "socket2" name = "socket2"

View File

@ -33,8 +33,9 @@ members = [
resolver = "2" resolver = "2"
[workspace.dependencies] [workspace.dependencies]
bstr = { version = "1.10.0", features = ["serde"] }
# Add the `tracing` or `tracing-detail` features to see more of gitoxide in the logs. Useful to see which programs it invokes. # Add the `tracing` or `tracing-detail` features to see more of gitoxide in the logs. Useful to see which programs it invokes.
gix = { git = "https://github.com/Byron/gitoxide", rev = "29898e3010bd3332418c683f2ac96aff5c8e72fa", default-features = false, features = [] } gix = { git = "https://github.com/Byron/gitoxide", rev = "7dff44754e0fdc369f92221468fb953bad9be60a", default-features = false, features = ["serde"] }
git2 = { version = "0.18.3", features = [ git2 = { version = "0.18.3", features = [
"vendored-openssl", "vendored-openssl",
"vendored-libgit2", "vendored-libgit2",

View File

@ -26,7 +26,7 @@ gitbutler-fs.workspace = true
gitbutler-diff.workspace = true gitbutler-diff.workspace = true
gitbutler-operating-modes.workspace = true gitbutler-operating-modes.workspace = true
serde = { workspace = true, features = ["std"] } serde = { workspace = true, features = ["std"] }
bstr = "1.10.0" bstr.workspace = true
diffy = "0.4.0" diffy = "0.4.0"
hex = "0.4.3" hex = "0.4.3"
regex = "1.10" regex = "1.10"

View File

@ -31,9 +31,9 @@ pub struct BaseBranch {
pub remote_url: String, pub remote_url: String,
pub push_remote_name: Option<String>, pub push_remote_name: Option<String>,
pub push_remote_url: String, pub push_remote_url: String,
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub base_sha: git2::Oid, pub base_sha: git2::Oid,
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub current_sha: git2::Oid, pub current_sha: git2::Oid,
pub behind: usize, pub behind: usize,
pub upstream_commits: Vec<RemoteCommit>, pub upstream_commits: Vec<RemoteCommit>,

View File

@ -2,7 +2,9 @@ use crate::VirtualBranchesExt;
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use bstr::{BStr, BString, ByteSlice}; use bstr::{BStr, BString, ByteSlice};
use core::fmt; use core::fmt;
use gitbutler_branch::{Branch as GitButlerBranch, BranchId, ReferenceExtGix, Target}; use gitbutler_branch::{
Branch as GitButlerBranch, BranchId, BranchIdentity, ReferenceExtGix, Target,
};
use gitbutler_command_context::CommandContext; use gitbutler_command_context::CommandContext;
use gitbutler_reference::normalize_branch_name; use gitbutler_reference::normalize_branch_name;
use gix::prelude::ObjectIdExt; use gix::prelude::ObjectIdExt;
@ -33,9 +35,12 @@ pub fn list_branches(
for reference in platform.all()?.filter_map(Result::ok) { for reference in platform.all()?.filter_map(Result::ok) {
// Loosely match on branch names // Loosely match on branch names
if let Some(branch_names) = &filter_branch_names { if let Some(branch_names) = &filter_branch_names {
let has_matching_name = branch_names let has_matching_name = branch_names.iter().any(|branch_name| {
.iter() reference
.any(|branch_name| reference.name().as_bstr().ends_with_str(&branch_name.0)); .name()
.as_bstr()
.ends_with_str(branch_name.as_bstr())
});
if !has_matching_name { if !has_matching_name {
continue; continue;
@ -189,9 +194,13 @@ fn branch_group_to_branch(
}; };
if virtual_branch.is_none() if virtual_branch.is_none()
&& local_branches && local_branches.iter().any(|b| {
.iter() b.name()
.any(|b| b.name().given_name(remotes).as_deref().ok() == Some(target.branch.branch())) .identity(remotes)
.as_deref()
.ok()
.map_or(false, |identity| identity == target.branch.branch())
})
{ {
return Ok(None); return Ok(None);
} }
@ -203,11 +212,10 @@ fn branch_group_to_branch(
in_workspace: branch.in_workspace, in_workspace: branch.in_workspace,
}); });
// TODO(ST): keep the type alive, don't reduce to BString let mut remotes: Vec<gix::remote::Name<'static>> = Vec::new();
let mut remotes: Vec<BString> = Vec::new();
for branch in remote_branches.iter() { for branch in remote_branches.iter() {
if let Some(remote_name) = branch.remote_name(gix::remote::Direction::Fetch) { if let Some(remote_name) = branch.remote_name(gix::remote::Direction::Fetch) {
remotes.push(remote_name.as_bstr().into()); remotes.push(remote_name.to_owned());
} }
} }
@ -293,7 +301,7 @@ impl GroupBranch<'_> {
fn identity(&self, remotes: &BTreeSet<Cow<'_, BStr>>) -> Option<BranchIdentity> { fn identity(&self, remotes: &BTreeSet<Cow<'_, BStr>>) -> Option<BranchIdentity> {
match self { match self {
GroupBranch::Local(branch) | GroupBranch::Remote(branch) => { GroupBranch::Local(branch) | GroupBranch::Remote(branch) => {
branch.name().given_name(remotes).ok() branch.name().identity(remotes).ok()
} }
// The identity of a Virtual branch is derived from the source refname, upstream or the branch given name, in that order // The identity of a Virtual branch is derived from the source refname, upstream or the branch given name, in that order
GroupBranch::Virtual(branch) => { GroupBranch::Virtual(branch) => {
@ -302,10 +310,10 @@ impl GroupBranch<'_> {
let rich_name = branch.name.clone(); let rich_name = branch.name.clone();
let rich_name = normalize_branch_name(&rich_name).ok()?; let rich_name = normalize_branch_name(&rich_name).ok()?;
let identity = name_from_source.unwrap_or(name_from_upstream.unwrap_or(&rich_name)); let identity = name_from_source.unwrap_or(name_from_upstream.unwrap_or(&rich_name));
Some(identity.to_string()) Some(identity.into())
} }
} }
.map(BranchIdentity) .map(BranchIdentity::from)
} }
} }
@ -313,14 +321,13 @@ impl GroupBranch<'_> {
/// This excludes the target branch as well as gitbutler specific branches. /// This excludes the target branch as well as gitbutler specific branches.
fn should_list_git_branch(identity: &BranchIdentity) -> bool { fn should_list_git_branch(identity: &BranchIdentity) -> bool {
// Exclude gitbutler technical branches (not useful for the user) // Exclude gitbutler technical branches (not useful for the user)
let is_technical = [ const TECHNICAL_IDENTITIES: &[&[u8]] = &[
"gitbutler/integration", b"gitbutler/integration",
"gitbutler/target", b"gitbutler/target",
"gitbutler/oplog", b"gitbutler/oplog",
"HEAD", b"HEAD",
] ];
.contains(&&*identity.0); !TECHNICAL_IDENTITIES.contains(&identity.as_bytes())
!is_technical
} }
/// A filter that can be applied to the branch listing /// A filter that can be applied to the branch listing
@ -347,8 +354,8 @@ pub struct BranchListing {
pub name: BranchIdentity, pub name: BranchIdentity,
/// This is a list of remotes that this branch can be found on (e.g. `origin`, `upstream` etc.), /// This is a list of remotes that this branch can be found on (e.g. `origin`, `upstream` etc.),
/// by collecting remotes from all local branches with the same identity that have a tracking setup. /// by collecting remotes from all local branches with the same identity that have a tracking setup.
#[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy_vec")] #[serde(serialize_with = "gitbutler_serde::as_string_lossy_vec_remote_name")]
pub remotes: Vec<BString>, pub remotes: Vec<gix::remote::Name<'static>>,
/// The branch may or may not have a virtual branch associated with it. /// The branch may or may not have a virtual branch associated with it.
pub virtual_branch: Option<VirtualBranchReference>, pub virtual_branch: Option<VirtualBranchReference>,
/// Timestamp in milliseconds since the branch was last updated. /// Timestamp in milliseconds since the branch was last updated.
@ -370,43 +377,16 @@ pub struct BranchListing {
/// Represents a "commit author" or "signature", based on the data from the git history /// Represents a "commit author" or "signature", based on the data from the git history
#[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash)]
pub struct Author { pub struct Author {
// TODO(ST): use `BString` here to not degenerate information
/// The name of the author as configured in the git config /// The name of the author as configured in the git config
pub name: Option<String>, pub name: Option<BString>,
/// The email of the author as configured in the git config /// The email of the author as configured in the git config
pub email: Option<String>, pub email: Option<BString>,
}
/// The identity of a branch as to allow to group similar branches together.
///
/// * For *local* branches, it is what's left without the standard prefix, like `refs/heads`, e.g. `main`
/// for `refs/heads/main` or `feat/one` for `refs/heads/feat/one`.
/// * For *remote* branches, it is what's without the prefix and remote name, like `main` for `refs/remotes/origin/main`.
/// or `feat/one` for `refs/remotes/my/special/remote/feat/one`.
/// * For virtual branches, it's either the above if there is a `source_refname` or an `upstream`, or it's the normalized
/// name of the virtual branch.
#[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash, Ord, PartialOrd)]
pub struct BranchIdentity(String);
/// Facilitate obtaining this type from the UI - otherwise it would be better not to have it as it should be
/// a particular thing, not any string.
impl From<String> for BranchIdentity {
fn from(value: String) -> Self {
BranchIdentity(value)
}
}
/// Also not for testing.
impl From<&str> for BranchIdentity {
fn from(value: &str) -> Self {
BranchIdentity(value.into())
}
} }
impl From<git2::Signature<'_>> for Author { impl From<git2::Signature<'_>> for Author {
fn from(value: git2::Signature) -> Self { fn from(value: git2::Signature) -> Self {
let name = value.name().map(str::to_string); let name = value.name().map(str::to_string).map(Into::into);
let email = value.email().map(str::to_string); let email = value.email().map(str::to_string).map(Into::into);
Author { name, email } Author { name, email }
} }
} }
@ -414,8 +394,8 @@ impl From<git2::Signature<'_>> for Author {
impl From<gix::actor::SignatureRef<'_>> for Author { impl From<gix::actor::SignatureRef<'_>> for Author {
fn from(value: gix::actor::SignatureRef<'_>) -> Self { fn from(value: gix::actor::SignatureRef<'_>) -> Self {
Author { Author {
name: Some(value.name.to_string()), name: Some(value.name.to_owned()),
email: Some(value.email.to_string()), email: Some(value.email.to_owned()),
} }
} }
} }
@ -436,9 +416,13 @@ pub struct VirtualBranchReference {
/// a list of enriched branch data in the form of `BranchData`. /// a list of enriched branch data in the form of `BranchData`.
pub fn get_branch_listing_details( pub fn get_branch_listing_details(
ctx: &CommandContext, ctx: &CommandContext,
branch_names: impl IntoIterator<Item = impl Into<BranchIdentity>>, branch_names: impl IntoIterator<Item = impl TryInto<BranchIdentity>>,
) -> Result<Vec<BranchListingDetails>> { ) -> Result<Vec<BranchListingDetails>> {
let branch_names: Vec<_> = branch_names.into_iter().map(Into::into).collect(); let branch_names: Vec<_> = branch_names
.into_iter()
.map(TryInto::try_into)
.filter_map(Result::ok)
.collect();
let repo = ctx.repository(); let repo = ctx.repository();
let branches = list_branches(ctx, None, Some(branch_names.clone()))?; let branches = list_branches(ctx, None, Some(branch_names.clone()))?;
let default_target = ctx let default_target = ctx
@ -536,10 +520,10 @@ pub struct BranchEntry {
/// The name of the branch (e.g. `main`, `feature/branch`) /// The name of the branch (e.g. `main`, `feature/branch`)
pub name: String, pub name: String,
/// The head commit of the branch /// The head commit of the branch
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
head: git2::Oid, head: git2::Oid,
/// The commit base of the branch /// The commit base of the branch
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
base: git2::Oid, base: git2::Oid,
/// The list of commits associated with the branch /// The list of commits associated with the branch
pub commits: Vec<CommitEntry>, pub commits: Vec<CommitEntry>,
@ -568,18 +552,17 @@ pub struct RemoteBranchEntry {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct CommitEntry { pub struct CommitEntry {
/// The commit sha that it can be referenced by /// The commit sha that it can be referenced by
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub id: git2::Oid, pub id: git2::Oid,
/// If the commit is referencing a specific change, this is its change id /// If the commit is referencing a specific change, this is its change id
pub change_id: Option<String>, pub change_id: Option<String>,
/// The commit message /// The commit message
#[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")]
pub description: BString, pub description: BString,
/// The timestamp of the commit in milliseconds /// The timestamp of the commit in milliseconds
pub created_at: u128, pub created_at: u128,
/// The author of the commit /// The author of the commit
pub authors: Vec<Author>, pub authors: Vec<Author>,
/// The parent commits of the commit /// The parent commits of the commit
#[serde(with = "gitbutler_serde::serde::oid_vec")] #[serde(with = "gitbutler_serde::oid_vec")]
pub parent_ids: Vec<git2::Oid>, pub parent_ids: Vec<git2::Oid>,
} }

View File

@ -21,16 +21,15 @@ use crate::{
#[derive(Debug, PartialEq, Clone, Serialize)] #[derive(Debug, PartialEq, Clone, Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct VirtualBranchCommit { pub struct VirtualBranchCommit {
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub id: git2::Oid, pub id: git2::Oid,
#[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")]
pub description: BString, pub description: BString,
pub created_at: u128, pub created_at: u128,
pub author: Author, pub author: Author,
pub is_remote: bool, pub is_remote: bool,
pub files: Vec<VirtualBranchFile>, pub files: Vec<VirtualBranchFile>,
pub is_integrated: bool, pub is_integrated: bool,
#[serde(with = "gitbutler_serde::serde::oid_vec")] #[serde(with = "gitbutler_serde::oid_vec")]
pub parent_ids: Vec<git2::Oid>, pub parent_ids: Vec<git2::Oid>,
pub branch_id: BranchId, pub branch_id: BranchId,
pub change_id: Option<String>, pub change_id: Option<String>,

View File

@ -24,7 +24,6 @@ use serde::Serialize;
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct VirtualBranchHunk { pub struct VirtualBranchHunk {
pub id: String, pub id: String,
#[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")]
pub diff: BString, pub diff: BString,
pub modified_at: u128, pub modified_at: u128,
pub file_path: PathBuf, pub file_path: PathBuf,
@ -50,7 +49,7 @@ pub struct VirtualBranchHunk {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct HunkLock { pub struct HunkLock {
pub branch_id: BranchId, pub branch_id: BranchId,
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub commit_id: git2::Oid, pub commit_id: git2::Oid,
} }

View File

@ -41,6 +41,6 @@ mod commit;
mod hunk; mod hunk;
pub use branch::{ pub use branch::{
get_branch_listing_details, list_branches, Author, BranchIdentity, BranchListing, get_branch_listing_details, list_branches, Author, BranchListing, BranchListingDetails,
BranchListingDetails, BranchListingFilter, BranchListingFilter,
}; };

View File

@ -23,7 +23,7 @@ use crate::author::Author;
#[derive(Debug, Clone, Serialize, PartialEq)] #[derive(Debug, Clone, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct RemoteBranch { pub struct RemoteBranch {
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub sha: git2::Oid, pub sha: git2::Oid,
pub name: Refname, pub name: Refname,
pub upstream: Option<RemoteRefname>, pub upstream: Option<RemoteRefname>,
@ -36,13 +36,13 @@ pub struct RemoteBranch {
#[derive(Debug, Clone, Serialize, PartialEq)] #[derive(Debug, Clone, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct RemoteBranchData { pub struct RemoteBranchData {
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub sha: git2::Oid, pub sha: git2::Oid,
pub name: Refname, pub name: Refname,
pub upstream: Option<RemoteRefname>, pub upstream: Option<RemoteRefname>,
pub behind: u32, pub behind: u32,
pub commits: Vec<RemoteCommit>, pub commits: Vec<RemoteCommit>,
#[serde(with = "gitbutler_serde::serde::oid_opt", default)] #[serde(with = "gitbutler_serde::oid_opt", default)]
pub fork_point: Option<git2::Oid>, pub fork_point: Option<git2::Oid>,
} }
@ -50,12 +50,11 @@ pub struct RemoteBranchData {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct RemoteCommit { pub struct RemoteCommit {
pub id: String, pub id: String,
#[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")]
pub description: BString, pub description: BString,
pub created_at: u128, pub created_at: u128,
pub author: Author, pub author: Author,
pub change_id: Option<String>, pub change_id: Option<String>,
#[serde(with = "gitbutler_serde::serde::oid_vec")] #[serde(with = "gitbutler_serde::oid_vec")]
pub parent_ids: Vec<git2::Oid>, pub parent_ids: Vec<git2::Oid>,
} }

View File

@ -68,13 +68,13 @@ pub struct VirtualBranch {
pub updated_at: u128, pub updated_at: u128,
pub selected_for_changes: bool, pub selected_for_changes: bool,
pub allow_rebasing: bool, pub allow_rebasing: bool,
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub head: git2::Oid, pub head: git2::Oid,
/// The merge base between the target branch and the virtual branch /// The merge base between the target branch and the virtual branch
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub merge_base: git2::Oid, pub merge_base: git2::Oid,
/// The fork point between the target branch and the virtual branch /// The fork point between the target branch and the virtual branch
#[serde(with = "gitbutler_serde::serde::oid_opt", default)] #[serde(with = "gitbutler_serde::oid_opt", default)]
pub fork_point: Option<git2::Oid>, pub fork_point: Option<git2::Oid>,
} }

View File

@ -137,8 +137,8 @@ fn one_branch_on_integration_multiple_remotes() -> Result<()> {
mod util { mod util {
use anyhow::Result; use anyhow::Result;
use bstr::BString; use gitbutler_branch::BranchIdentity;
use gitbutler_branch_actions::{BranchIdentity, BranchListing, BranchListingFilter}; use gitbutler_branch_actions::{BranchListing, BranchListingFilter};
use gitbutler_command_context::CommandContext; use gitbutler_command_context::CommandContext;
/// A flattened and simplified mirror of `BranchListing` for comparing the actual and expected data. /// A flattened and simplified mirror of `BranchListing` for comparing the actual and expected data.
@ -154,7 +154,7 @@ mod util {
impl Default for ExpectedBranchListing<'static> { impl Default for ExpectedBranchListing<'static> {
fn default() -> Self { fn default() -> Self {
ExpectedBranchListing { ExpectedBranchListing {
identity: "<invalid identity - should always be specified".into(), identity: "invalid-identity-should-always-be-specified".into(),
remotes: vec![], remotes: vec![],
virtual_branch_given_name: None, virtual_branch_given_name: None,
virtual_branch_in_workspace: false, virtual_branch_in_workspace: false,
@ -182,7 +182,7 @@ mod util {
expected expected
.remotes .remotes
.into_iter() .into_iter()
.map(BString::from) .map(|name| gix::remote::Name::Symbol(name.into()))
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
"remotes: {msg}" "remotes: {msg}"
); );

View File

@ -8,7 +8,7 @@ publish = false
[dependencies] [dependencies]
anyhow = "1.0.86" anyhow = "1.0.86"
git2.workspace = true git2.workspace = true
gix.workspace = true gix = { workspace = true, features = ["serde"] }
gitbutler-reference.workspace = true gitbutler-reference.workspace = true
gitbutler-serde.workspace = true gitbutler-serde.workspace = true
gitbutler-id.workspace = true gitbutler-id.workspace = true
@ -18,7 +18,7 @@ gitbutler-diff.workspace = true
itertools = "0.13" itertools = "0.13"
toml = "0.8.15" toml = "0.8.15"
serde = { workspace = true, features = ["std"] } serde = { workspace = true, features = ["std"] }
bstr = "1.10.0" bstr.workspace = true
md5 = "0.7.0" md5 = "0.7.0"
hex = "0.4.3" hex = "0.4.3"
tracing = "0.1.40" tracing = "0.1.40"

View File

@ -1,7 +1,9 @@
use anyhow::Result; use anyhow::Result;
use bstr::BStr;
use gitbutler_id::id::Id; use gitbutler_id::id::Id;
use gitbutler_reference::{normalize_branch_name, Refname, RemoteRefname, VirtualRefname}; use gitbutler_reference::{normalize_branch_name, Refname, RemoteRefname, VirtualRefname};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::ops::Deref;
use crate::ownership::BranchOwnershipClaims; use crate::ownership::BranchOwnershipClaims;
@ -24,7 +26,7 @@ pub struct Branch {
/// The local tracking branch, holding the state of the remote. /// The local tracking branch, holding the state of the remote.
pub upstream: Option<RemoteRefname>, pub upstream: Option<RemoteRefname>,
// upstream_head is the last commit on we've pushed to the upstream branch // upstream_head is the last commit on we've pushed to the upstream branch
#[serde(with = "gitbutler_serde::serde::oid_opt", default)] #[serde(with = "gitbutler_serde::oid_opt", default)]
pub upstream_head: Option<git2::Oid>, pub upstream_head: Option<git2::Oid>,
#[serde( #[serde(
serialize_with = "serialize_u128", serialize_with = "serialize_u128",
@ -37,10 +39,10 @@ pub struct Branch {
)] )]
pub updated_timestamp_ms: u128, pub updated_timestamp_ms: u128,
/// tree is the last git tree written to a session, or merge base tree if this is new. use this for delta calculation from the session data /// tree is the last git tree written to a session, or merge base tree if this is new. use this for delta calculation from the session data
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub tree: git2::Oid, pub tree: git2::Oid,
/// head is id of the last "virtual" commit in this branch /// head is id of the last "virtual" commit in this branch
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub head: git2::Oid, pub head: git2::Oid,
pub ownership: BranchOwnershipClaims, pub ownership: BranchOwnershipClaims,
// order is the number by which UI should sort branches // order is the number by which UI should sort branches
@ -135,3 +137,52 @@ pub struct BranchCreateRequest {
pub order: Option<usize>, pub order: Option<usize>,
pub selected_for_changes: Option<bool>, pub selected_for_changes: Option<bool>,
} }
/// The identity of a branch as to allow to group similar branches together.
///
/// * For *local* branches, it is what's left without the standard prefix, like `refs/heads`, e.g. `main`
/// for `refs/heads/main` or `feat/one` for `refs/heads/feat/one`.
/// * For *remote* branches, it is what's without the prefix and remote name, like `main` for `refs/remotes/origin/main`.
/// or `feat/one` for `refs/remotes/my/special/remote/feat/one`.
/// * For virtual branches, it's either the above if there is a `source_refname` or an `upstream`, or it's the normalized
/// name of the virtual branch.
#[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash, Ord, PartialOrd)]
pub struct BranchIdentity(
/// The identity is always a valid reference name, full or partial.
pub gix::refs::PartialName,
);
impl Deref for BranchIdentity {
type Target = BStr;
fn deref(&self) -> &Self::Target {
self.0.as_ref().as_bstr()
}
}
/// Facilitate obtaining this type from the UI.
impl TryFrom<String> for BranchIdentity {
type Error = gix::refs::name::Error;
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
gix::refs::PartialName::try_from(value).map(BranchIdentity)
}
}
/// Used in testing, and **panics** if the value isn't a valid partial ref name
impl From<&str> for BranchIdentity {
fn from(value: &str) -> Self {
gix::refs::PartialName::try_from(value)
.map(BranchIdentity)
.expect("BUG: value must be valid ref name")
}
}
/// Used in for short-name conversions
impl TryFrom<&BStr> for BranchIdentity {
type Error = gix::refs::name::Error;
fn try_from(value: &BStr) -> std::result::Result<Self, Self::Error> {
gix::refs::PartialName::try_from(value.to_owned()).map(BranchIdentity)
}
}

View File

@ -1,7 +1,7 @@
mod branch; mod branch;
use anyhow::Context; use anyhow::Context;
pub use branch::{Branch, BranchCreateRequest, BranchId, BranchUpdateRequest}; pub use branch::{Branch, BranchCreateRequest, BranchId, BranchIdentity, BranchUpdateRequest};
use bstr::ByteSlice; use bstr::ByteSlice;
mod branch_ext; mod branch_ext;
pub use branch_ext::BranchExt; pub use branch_ext::BranchExt;

View File

@ -1,3 +1,4 @@
use crate::BranchIdentity;
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use bstr::{BStr, ByteSlice}; use bstr::{BStr, ByteSlice};
use gix::refs::Category; use gix::refs::Category;
@ -19,15 +20,15 @@ pub trait ReferenceExt {
// TODO(ST): replace the original with this one. // TODO(ST): replace the original with this one.
pub trait ReferenceExtGix { pub trait ReferenceExtGix {
/// Fetches a branches name without the remote name attached /// Produces a name by removing all prefixes, leaving only its actual name. All known
/// `remotes` are needed to be able to strip remote names.
/// ///
/// refs/heads/my-branch -> my-branch /// Here are some examples:
/// refs/remotes/origin/my-branch -> my-branch
/// refs/remotes/Byron/gitbutler/my-branch -> my-branch (where the remote is Byron/gitbutler)
/// ///
/// An ideal implementation wouldn't require us to list all the references, /// `refs/heads/my-branch` -> `my-branch`
/// but there doesn't seem to be a libgit2 solution to this. /// `refs/remotes/origin/my-branch` -> `my-branch`
fn given_name(&self, remotes: &BTreeSet<Cow<'_, BStr>>) -> Result<String>; /// `refs/remotes/Byron/gitbutler/my-branch` -> `my-branch` (where the remote is `Byron/gitbutler`)
fn identity(&self, remotes: &BTreeSet<Cow<'_, BStr>>) -> Result<BranchIdentity>;
} }
impl<'repo> ReferenceExt for git2::Reference<'repo> { impl<'repo> ReferenceExt for git2::Reference<'repo> {
@ -65,13 +66,12 @@ impl<'repo> ReferenceExt for git2::Reference<'repo> {
} }
impl ReferenceExtGix for &gix::refs::FullNameRef { impl ReferenceExtGix for &gix::refs::FullNameRef {
// TODO: make this `identity()`, and use `BranchIdentity` type. fn identity(&self, remotes: &BTreeSet<Cow<'_, BStr>>) -> Result<BranchIdentity> {
fn given_name(&self, remotes: &BTreeSet<Cow<'_, BStr>>) -> Result<String> {
let (category, shorthand_name) = self let (category, shorthand_name) = self
.category_and_short_name() .category_and_short_name()
.context("Branch could not be categorized")?; .context("Branch could not be categorized")?;
if !matches!(category, Category::RemoteBranch) { if !matches!(category, Category::RemoteBranch) {
return Ok(shorthand_name.to_string()); return Ok(shorthand_name.try_into()?);
} }
let longest_remote = remotes let longest_remote = remotes
@ -91,7 +91,6 @@ impl ReferenceExtGix for &gix::refs::FullNameRef {
))? ))?
.into(); .into();
// TODO(correctness): this should be `BString`, but can't change it yet. Ok(shorthand_name.try_into()?)
Ok(shorthand_name.to_string())
} }
} }

View File

@ -7,5 +7,5 @@ publish = false
[dependencies] [dependencies]
git2.workspace = true git2.workspace = true
bstr = "1.10.0" bstr.workspace = true
uuid.workspace = true uuid.workspace = true

View File

@ -7,7 +7,7 @@ publish = false
[dependencies] [dependencies]
git2.workspace = true git2.workspace = true
bstr = "1.10.0" bstr.workspace = true
md5 = "0.7.0" md5 = "0.7.0"
anyhow = "1.0.86" anyhow = "1.0.86"
hex = "0.4.3" hex = "0.4.3"

View File

@ -49,10 +49,7 @@ pub struct GitHunk {
pub new_start: u32, pub new_start: u32,
pub new_lines: u32, pub new_lines: u32,
/// The `+`, `-` or ` ` prefixed lines of the diff produced by `git2`, along with their line separator. /// The `+`, `-` or ` ` prefixed lines of the diff produced by `git2`, along with their line separator.
#[serde( #[serde(rename = "diff")]
rename = "diff",
serialize_with = "gitbutler_serde::serde::as_string_lossy"
)]
pub diff_lines: BString, pub diff_lines: BString,
pub binary: bool, pub binary: bool,
pub change_type: ChangeType, pub change_type: ChangeType,

View File

@ -7,7 +7,7 @@ publish = false
[dependencies] [dependencies]
serde = { workspace = true, features = ["std"]} serde = { workspace = true, features = ["std"]}
bstr = "1.10.0" bstr.workspace = true
anyhow = "1.0.86" anyhow = "1.0.86"
gix = { workspace = true, features = ["dirwalk", "credentials", "parallel"] } gix = { workspace = true, features = ["dirwalk", "credentials", "parallel"] }
walkdir = "2.5.0" walkdir = "2.5.0"

View File

@ -16,10 +16,10 @@ use strum::EnumString;
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct Snapshot { pub struct Snapshot {
/// The id of the commit that represents the snapshot /// The id of the commit that represents the snapshot
#[serde(rename = "id", with = "gitbutler_serde::serde::oid")] #[serde(rename = "id", with = "gitbutler_serde::oid")]
pub commit_id: git2::Oid, pub commit_id: git2::Oid,
/// Snapshot creation time in seconds from Unix epoch seconds, based on a commit as `commit_id`. /// Snapshot creation time in seconds from Unix epoch seconds, based on a commit as `commit_id`.
#[serde(serialize_with = "gitbutler_serde::serde::as_time_seconds_from_unix_epoch")] #[serde(serialize_with = "gitbutler_serde::as_time_seconds_from_unix_epoch")]
pub created_at: git2::Time, pub created_at: git2::Time,
/// The number of working directory lines added in the snapshot /// The number of working directory lines added in the snapshot
pub lines_added: usize, pub lines_added: usize,

View File

@ -26,7 +26,7 @@ fn unix_epoch() -> SystemTime {
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
pub struct Oplog { pub struct Oplog {
/// This is the sha of the last oplog commit /// This is the sha of the last oplog commit
#[serde(with = "gitbutler_serde::serde::oid_opt", default)] #[serde(with = "gitbutler_serde::oid_opt", default)]
pub head_sha: Option<git2::Oid>, pub head_sha: Option<git2::Oid>,
/// The time when the last snapshot was created. Seconds since Epoch /// The time when the last snapshot was created. Seconds since Epoch
#[serde( #[serde(

View File

@ -61,7 +61,7 @@ impl FetchResult {
#[derive(Debug, Deserialize, Serialize, Copy, Clone)] #[derive(Debug, Deserialize, Serialize, Copy, Clone)]
pub struct CodePushState { pub struct CodePushState {
#[serde(with = "gitbutler_serde::serde::oid")] #[serde(with = "gitbutler_serde::oid")]
pub id: git2::Oid, pub id: git2::Oid,
pub timestamp: time::SystemTime, pub timestamp: time::SystemTime,
} }

View File

@ -6,9 +6,11 @@ use super::error::Error;
#[derive(Debug, Clone, Hash, PartialEq, Eq)] #[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub struct Refname { pub struct Refname {
// contains name of the remote, e.x. "origin" or "upstream" /// contains name of the remote, e.x. "origin" or "upstream"
remote: String, remote: String,
// contains name of the branch, e.x. "master" or "main" /// contains name of the branch, e.x. "master" or "main"
// TODO(ST): use `BString` for this, or maybe figure out if there could
// be better abstractions for `Refname`, or a better name for the type.
branch: String, branch: String,
} }

View File

@ -9,7 +9,7 @@ publish = false
git2.workspace = true git2.workspace = true
gix.workspace = true gix.workspace = true
anyhow = "1.0.86" anyhow = "1.0.86"
bstr = "1.10.0" bstr.workspace = true
tokio = { workspace = true, features = [ "rt-multi-thread", "rt", "macros", "sync" ] } tokio = { workspace = true, features = [ "rt-multi-thread", "rt", "macros", "sync" ] }
gitbutler-git.workspace = true gitbutler-git.workspace = true
tracing = "0.1.40" tracing = "0.1.40"

View File

@ -7,5 +7,6 @@ publish = false
[dependencies] [dependencies]
git2.workspace = true git2.workspace = true
gix.workspace = true
serde = { workspace = true, features = ["std"]} serde = { workspace = true, features = ["std"]}
bstr = "1.10.0" bstr.workspace = true

View File

@ -1 +1,89 @@
pub mod serde; use serde::Serialize;
pub fn as_string_lossy_vec_remote_name<S>(
v: &[gix::remote::Name<'static>],
s: S,
) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let vec: Vec<String> = v.iter().map(|v| v.as_bstr().to_string()).collect();
vec.serialize(s)
}
pub fn as_time_seconds_from_unix_epoch<S>(v: &git2::Time, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.seconds().serialize(s)
}
pub mod oid_opt {
use serde::{Deserialize, Deserializer, Serialize};
pub fn serialize<S>(v: &Option<git2::Oid>, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.as_ref().map(|v| v.to_string()).serialize(s)
}
pub fn deserialize<'de, D>(d: D) -> Result<Option<git2::Oid>, D::Error>
where
D: Deserializer<'de>,
{
let hex = <Option<String> as Deserialize>::deserialize(d)?;
hex.map(|v| {
v.parse()
.map_err(|err: git2::Error| serde::de::Error::custom(err.to_string()))
})
.transpose()
}
}
pub mod oid_vec {
use serde::{Deserialize, Deserializer, Serialize};
pub fn serialize<S>(v: &[git2::Oid], s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let vec: Vec<String> = v.iter().map(|v| v.to_string()).collect();
vec.serialize(s)
}
pub fn deserialize<'de, D>(d: D) -> Result<Vec<git2::Oid>, D::Error>
where
D: Deserializer<'de>,
{
let hex = <Vec<String> as Deserialize>::deserialize(d)?;
let hex: Result<Vec<git2::Oid>, D::Error> = hex
.into_iter()
.map(|v| {
git2::Oid::from_str(v.as_str())
.map_err(|err: git2::Error| serde::de::Error::custom(err.to_string()))
})
.collect();
hex
}
}
pub mod oid {
use serde::{Deserialize, Deserializer, Serialize};
pub fn serialize<S>(v: &git2::Oid, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.to_string().serialize(s)
}
pub fn deserialize<'de, D>(d: D) -> Result<git2::Oid, D::Error>
where
D: Deserializer<'de>,
{
let hex = String::deserialize(d)?;
hex.parse()
.map_err(|err: git2::Error| serde::de::Error::custom(err.to_string()))
}
}

View File

@ -1,94 +0,0 @@
use bstr::{BString, ByteSlice};
use serde::Serialize;
pub fn as_string_lossy<S>(v: &BString, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.to_str_lossy().serialize(s)
}
pub fn as_string_lossy_vec<S>(v: &[BString], s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let vec: Vec<String> = v.iter().map(|v| v.to_string()).collect();
vec.serialize(s)
}
pub fn as_time_seconds_from_unix_epoch<S>(v: &git2::Time, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.seconds().serialize(s)
}
pub mod oid_opt {
use serde::{Deserialize, Deserializer, Serialize};
pub fn serialize<S>(v: &Option<git2::Oid>, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.as_ref().map(|v| v.to_string()).serialize(s)
}
pub fn deserialize<'de, D>(d: D) -> Result<Option<git2::Oid>, D::Error>
where
D: Deserializer<'de>,
{
let hex = <Option<String> as Deserialize>::deserialize(d)?;
hex.map(|v| {
v.parse()
.map_err(|err: git2::Error| serde::de::Error::custom(err.to_string()))
})
.transpose()
}
}
pub mod oid_vec {
use serde::{Deserialize, Deserializer, Serialize};
pub fn serialize<S>(v: &[git2::Oid], s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let vec: Vec<String> = v.iter().map(|v| v.to_string()).collect();
vec.serialize(s)
}
pub fn deserialize<'de, D>(d: D) -> Result<Vec<git2::Oid>, D::Error>
where
D: Deserializer<'de>,
{
let hex = <Vec<String> as Deserialize>::deserialize(d)?;
let hex: Result<Vec<git2::Oid>, D::Error> = hex
.into_iter()
.map(|v| {
git2::Oid::from_str(v.as_str())
.map_err(|err: git2::Error| serde::de::Error::custom(err.to_string()))
})
.collect();
hex
}
}
pub mod oid {
use serde::{Deserialize, Deserializer, Serialize};
pub fn serialize<S>(v: &git2::Oid, s: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
v.to_string().serialize(s)
}
pub fn deserialize<'de, D>(d: D) -> Result<git2::Oid, D::Error>
where
D: Deserializer<'de>,
{
let hex = String::deserialize(d)?;
hex.parse()
.map_err(|err: git2::Error| serde::de::Error::custom(err.to_string()))
}
}

View File

@ -8,4 +8,4 @@ publish = false
[dependencies] [dependencies]
url = { version = "2.5.2", features = ["serde"] } url = { version = "2.5.2", features = ["serde"] }
thiserror.workspace = true thiserror.workspace = true
bstr = "1.10.0" bstr.workspace = true