diff --git a/Cargo.lock b/Cargo.lock index a18dbb273..b77795fe1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2387,6 +2387,7 @@ version = "0.0.0" dependencies = [ "bstr", "git2", + "gix", "serde", ] @@ -2552,48 +2553,48 @@ dependencies = [ [[package]] name = "gix" 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 = [ - "gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-attributes 0.22.3 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "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-credentials", "gix-date 0.9.0", "gix-diff", "gix-dir", "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-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-lock 14.0.0 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-macros", "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-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-prompt", "gix-ref 0.45.0", "gix-refspec", "gix-revision", - "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-sec 0.10.7 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-submodule", - "gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-traverse 0.39.2 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-traverse 0.39.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-url", - "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-worktree 0.34.1 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-worktree 0.34.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "once_cell", "smallvec", "thiserror", @@ -2616,11 +2617,11 @@ dependencies = [ [[package]] name = "gix-actor" 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 = [ "bstr", "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", "thiserror", "winnow 0.6.16", @@ -2646,13 +2647,13 @@ dependencies = [ [[package]] name = "gix-attributes" 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 = [ "bstr", - "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "kstring", "smallvec", "thiserror", @@ -2671,7 +2672,7 @@ dependencies = [ [[package]] name = "gix-bitmap" 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 = [ "thiserror", ] @@ -2688,7 +2689,7 @@ dependencies = [ [[package]] name = "gix-chunk" 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 = [ "thiserror", ] @@ -2696,11 +2697,11 @@ dependencies = [ [[package]] name = "gix-command" 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 = [ "bstr", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.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=7dff44754e0fdc369f92221468fb953bad9be60a)", "shell-words", ] @@ -2721,12 +2722,12 @@ dependencies = [ [[package]] name = "gix-commitgraph" 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 = [ "bstr", - "gix-chunk 0.4.8 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "memmap2", "thiserror", ] @@ -2734,15 +2735,15 @@ dependencies = [ [[package]] name = "gix-config" 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 = [ "bstr", "gix-config-value", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "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", "once_cell", "smallvec", @@ -2754,11 +2755,11 @@ dependencies = [ [[package]] name = "gix-config-value" 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 = [ "bitflags 2.6.0", "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", "thiserror", ] @@ -2766,15 +2767,15 @@ dependencies = [ [[package]] name = "gix-credentials" 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 = [ "bstr", "gix-command", "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-sec 0.10.7 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-url", "thiserror", ] @@ -2794,7 +2795,7 @@ dependencies = [ [[package]] name = "gix-date" 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 = [ "bstr", "itoa 1.0.11", @@ -2805,30 +2806,30 @@ dependencies = [ [[package]] name = "gix-diff" 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 = [ "bstr", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "thiserror", ] [[package]] name = "gix-dir" 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 = [ "bstr", "gix-discover 0.33.0", - "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-pathspec", - "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-worktree 0.34.1 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-worktree 0.34.1 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "thiserror", ] @@ -2851,15 +2852,15 @@ dependencies = [ [[package]] name = "gix-discover" 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 = [ "bstr", "dunce", - "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "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", ] @@ -2881,14 +2882,14 @@ dependencies = [ [[package]] name = "gix-features" 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 = [ "crc32fast", "crossbeam-channel", "flate2", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "libc", "once_cell", "parking_lot 0.12.3", @@ -2901,19 +2902,19 @@ dependencies = [ [[package]] name = "gix-filter" 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 = [ "bstr", "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-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-packetline-blocking", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-quote 0.4.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "smallvec", "thiserror", ] @@ -2932,11 +2933,11 @@ dependencies = [ [[package]] name = "gix-fs" 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 = [ "fastrand 2.1.0", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", ] [[package]] @@ -2954,12 +2955,12 @@ dependencies = [ [[package]] name = "gix-glob" 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 = [ "bitflags 2.6.0", "bstr", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", ] [[package]] @@ -2975,7 +2976,7 @@ dependencies = [ [[package]] name = "gix-hash" 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 = [ "faster-hex", "thiserror", @@ -2995,9 +2996,9 @@ dependencies = [ [[package]] name = "gix-hashtable" 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 = [ - "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", "parking_lot 0.12.3", ] @@ -3018,12 +3019,12 @@ dependencies = [ [[package]] name = "gix-ignore" 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 = [ "bstr", - "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-trace 0.1.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "unicode-bom", ] @@ -3058,21 +3059,21 @@ dependencies = [ [[package]] name = "gix-index" 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 = [ "bitflags 2.6.0", "bstr", "filetime", "fnv", - "gix-bitmap 0.2.11 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-traverse 0.39.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-validate 0.8.5 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-validate 0.8.5 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "hashbrown 0.14.5", "itoa 1.0.11", "libc", @@ -3096,17 +3097,17 @@ dependencies = [ [[package]] name = "gix-lock" 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 = [ - "gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "thiserror", ] [[package]] name = "gix-macros" 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 = [ "proc-macro2", "quote", @@ -3116,14 +3117,14 @@ dependencies = [ [[package]] name = "gix-negotiate" 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 = [ "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-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-revwalk 0.13.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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "smallvec", "thiserror", ] @@ -3150,15 +3151,15 @@ dependencies = [ [[package]] name = "gix-object" 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 = [ "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-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-validate 0.8.5 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "itoa 1.0.11", "smallvec", "thiserror", @@ -3168,17 +3169,17 @@ dependencies = [ [[package]] name = "gix-odb" 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 = [ "arc-swap", "gix-date 0.9.0", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "gix-pack", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-quote 0.4.12 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "parking_lot 0.12.3", "tempfile", "thiserror", @@ -3187,15 +3188,15 @@ dependencies = [ [[package]] name = "gix-pack" 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 = [ "clru", - "gix-chunk 0.4.8 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "memmap2", "smallvec", "thiserror", @@ -3205,11 +3206,11 @@ dependencies = [ [[package]] name = "gix-packetline-blocking" version = "0.17.4" -source = "git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa#29898e3010bd3332418c683f2ac96aff5c8e72fa" +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=29898e3010bd3332418c683f2ac96aff5c8e72fa)", + "gix-trace 0.1.9 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "thiserror", ] @@ -3229,10 +3230,10 @@ dependencies = [ [[package]] name = "gix-path" 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 = [ "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", "once_cell", "thiserror", @@ -3241,21 +3242,21 @@ dependencies = [ [[package]] name = "gix-pathspec" 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 = [ "bitflags 2.6.0", "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-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "thiserror", ] [[package]] name = "gix-prompt" 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 = [ "gix-command", "gix-config-value", @@ -3278,10 +3279,10 @@ dependencies = [ [[package]] name = "gix-quote" 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 = [ "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", ] @@ -3310,18 +3311,18 @@ dependencies = [ [[package]] name = "gix-ref" 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 = [ - "gix-actor 0.31.5 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-lock 14.0.0 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-tempfile 14.0.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-utils 0.1.12 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-validate 0.8.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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "memmap2", "thiserror", "winnow 0.6.16", @@ -3330,12 +3331,12 @@ dependencies = [ [[package]] name = "gix-refspec" 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 = [ "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-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", "thiserror", ] @@ -3343,13 +3344,13 @@ dependencies = [ [[package]] name = "gix-revision" 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 = [ "bstr", "gix-date 0.9.0", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-revwalk 0.13.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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-revwalk 0.13.2 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "thiserror", ] @@ -3371,13 +3372,13 @@ dependencies = [ [[package]] name = "gix-revwalk" 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 = [ - "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-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=7dff44754e0fdc369f92221468fb953bad9be60a)", "smallvec", "thiserror", ] @@ -3397,10 +3398,10 @@ dependencies = [ [[package]] name = "gix-sec" 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 = [ "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", "windows-sys 0.52.0", ] @@ -3408,11 +3409,11 @@ dependencies = [ [[package]] name = "gix-submodule" 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 = [ "bstr", "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-refspec", "gix-url", @@ -3437,9 +3438,9 @@ dependencies = [ [[package]] name = "gix-tempfile" 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 = [ - "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", "once_cell", "parking_lot 0.12.3", @@ -3481,7 +3482,7 @@ checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e" [[package]] name = "gix-trace" 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-traverse" @@ -3503,15 +3504,15 @@ dependencies = [ [[package]] name = "gix-traverse" 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 = [ "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-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hashtable 0.5.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-revwalk 0.13.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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", "smallvec", "thiserror", ] @@ -3519,11 +3520,11 @@ dependencies = [ [[package]] name = "gix-url" 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 = [ "bstr", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", "home", "thiserror", "url", @@ -3542,7 +3543,7 @@ dependencies = [ [[package]] name = "gix-utils" 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 = [ "bstr", "fastrand 2.1.0", @@ -3562,7 +3563,7 @@ dependencies = [ [[package]] name = "gix-validate" 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 = [ "bstr", "thiserror", @@ -3590,19 +3591,19 @@ dependencies = [ [[package]] name = "gix-worktree" 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 = [ "bstr", - "gix-attributes 0.22.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-features 0.38.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-fs 0.11.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-glob 0.16.4 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-hash 0.14.2 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-ignore 0.11.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-index 0.33.1 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-object 0.42.3 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-path 0.10.9 (git+https://github.com/Byron/gitoxide?rev=29898e3010bd3332418c683f2ac96aff5c8e72fa)", - "gix-validate 0.8.5 (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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", + "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=7dff44754e0fdc369f92221468fb953bad9be60a)", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a133d4dea..a02bf4abb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,8 +33,9 @@ members = [ resolver = "2" [workspace.dependencies] +bstr = "1.10.0" # 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 = [] } git2 = { version = "0.18.3", features = [ "vendored-openssl", "vendored-libgit2", diff --git a/crates/gitbutler-branch-actions/Cargo.toml b/crates/gitbutler-branch-actions/Cargo.toml index 7226a900a..193ba8441 100644 --- a/crates/gitbutler-branch-actions/Cargo.toml +++ b/crates/gitbutler-branch-actions/Cargo.toml @@ -26,7 +26,7 @@ gitbutler-fs.workspace = true gitbutler-diff.workspace = true gitbutler-operating-modes.workspace = true serde = { workspace = true, features = ["std"] } -bstr = "1.10.0" +bstr.workspace = true diffy = "0.4.0" hex = "0.4.3" regex = "1.10" diff --git a/crates/gitbutler-branch-actions/src/base.rs b/crates/gitbutler-branch-actions/src/base.rs index 2e94bf058..7b3656fd3 100644 --- a/crates/gitbutler-branch-actions/src/base.rs +++ b/crates/gitbutler-branch-actions/src/base.rs @@ -31,9 +31,9 @@ pub struct BaseBranch { pub remote_url: String, pub push_remote_name: Option, pub push_remote_url: String, - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub base_sha: git2::Oid, - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub current_sha: git2::Oid, pub behind: usize, pub upstream_commits: Vec, diff --git a/crates/gitbutler-branch-actions/src/branch.rs b/crates/gitbutler-branch-actions/src/branch.rs index c2fb8f094..ea42bfb65 100644 --- a/crates/gitbutler-branch-actions/src/branch.rs +++ b/crates/gitbutler-branch-actions/src/branch.rs @@ -1,10 +1,13 @@ use crate::VirtualBranchesExt; use anyhow::{Context, Result}; -use bstr::{BStr, BString, ByteSlice}; +use bstr::{BStr, ByteSlice}; 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_reference::normalize_branch_name; +use gitbutler_serde::BStringForFrontend; use gix::prelude::ObjectIdExt; use gix::reference::Category; use serde::{Deserialize, Serialize}; @@ -33,9 +36,12 @@ pub fn list_branches( for reference in platform.all()?.filter_map(Result::ok) { // Loosely match on branch names if let Some(branch_names) = &filter_branch_names { - let has_matching_name = branch_names - .iter() - .any(|branch_name| reference.name().as_bstr().ends_with_str(&branch_name.0)); + let has_matching_name = branch_names.iter().any(|branch_name| { + reference + .name() + .as_bstr() + .ends_with_str(branch_name.as_bstr()) + }); if !has_matching_name { continue; @@ -189,9 +195,13 @@ fn branch_group_to_branch( }; if virtual_branch.is_none() - && local_branches - .iter() - .any(|b| b.name().given_name(remotes).as_deref().ok() == Some(target.branch.branch())) + && local_branches.iter().any(|b| { + b.name() + .identity(remotes) + .as_deref() + .ok() + .map_or(false, |identity| identity == target.branch.branch()) + }) { return Ok(None); } @@ -203,11 +213,10 @@ fn branch_group_to_branch( in_workspace: branch.in_workspace, }); - // TODO(ST): keep the type alive, don't reduce to BString - let mut remotes: Vec = Vec::new(); + let mut remotes: Vec> = Vec::new(); for branch in remote_branches.iter() { 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 +302,7 @@ impl GroupBranch<'_> { fn identity(&self, remotes: &BTreeSet>) -> Option { match self { 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 GroupBranch::Virtual(branch) => { @@ -302,10 +311,10 @@ impl GroupBranch<'_> { let rich_name = branch.name.clone(); let rich_name = normalize_branch_name(&rich_name).ok()?; 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 +322,13 @@ impl GroupBranch<'_> { /// This excludes the target branch as well as gitbutler specific branches. fn should_list_git_branch(identity: &BranchIdentity) -> bool { // Exclude gitbutler technical branches (not useful for the user) - let is_technical = [ - "gitbutler/integration", - "gitbutler/target", - "gitbutler/oplog", - "HEAD", - ] - .contains(&&*identity.0); - !is_technical + const TECHNICAL_IDENTITIES: &[&[u8]] = &[ + b"gitbutler/integration", + b"gitbutler/target", + b"gitbutler/oplog", + b"HEAD", + ]; + !TECHNICAL_IDENTITIES.contains(&identity.as_bytes()) } /// A filter that can be applied to the branch listing @@ -347,8 +355,8 @@ pub struct BranchListing { pub name: BranchIdentity, /// 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. - #[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy_vec")] - pub remotes: Vec, + #[serde(serialize_with = "gitbutler_serde::as_string_lossy_vec_remote_name")] + pub remotes: Vec>, /// The branch may or may not have a virtual branch associated with it. pub virtual_branch: Option, /// Timestamp in milliseconds since the branch was last updated. @@ -370,43 +378,16 @@ pub struct BranchListing { /// Represents a "commit author" or "signature", based on the data from the git history #[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash)] pub struct Author { - // TODO(ST): use `BString` here to not degenerate information /// The name of the author as configured in the git config - pub name: Option, + pub name: Option, /// The email of the author as configured in the git config - pub email: Option, -} - -/// 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 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()) - } + pub email: Option, } impl From> for Author { fn from(value: git2::Signature) -> Self { - let name = value.name().map(str::to_string); - let email = value.email().map(str::to_string); + let name = value.name().map(str::to_string).map(Into::into); + let email = value.email().map(str::to_string).map(Into::into); Author { name, email } } } @@ -414,8 +395,8 @@ impl From> for Author { impl From> for Author { fn from(value: gix::actor::SignatureRef<'_>) -> Self { Author { - name: Some(value.name.to_string()), - email: Some(value.email.to_string()), + name: Some(value.name.to_owned().into()), + email: Some(value.email.to_owned().into()), } } } @@ -436,9 +417,13 @@ pub struct VirtualBranchReference { /// a list of enriched branch data in the form of `BranchData`. pub fn get_branch_listing_details( ctx: &CommandContext, - branch_names: impl IntoIterator>, + branch_names: impl IntoIterator>, ) -> Result> { - 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 branches = list_branches(ctx, None, Some(branch_names.clone()))?; let default_target = ctx @@ -536,10 +521,10 @@ pub struct BranchEntry { /// The name of the branch (e.g. `main`, `feature/branch`) pub name: String, /// The head commit of the branch - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] head: git2::Oid, /// The commit base of the branch - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] base: git2::Oid, /// The list of commits associated with the branch pub commits: Vec, @@ -568,18 +553,17 @@ pub struct RemoteBranchEntry { #[serde(rename_all = "camelCase")] pub struct CommitEntry { /// The commit sha that it can be referenced by - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub id: git2::Oid, /// If the commit is referencing a specific change, this is its change id pub change_id: Option, /// The commit message - #[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")] - pub description: BString, + pub description: BStringForFrontend, /// The timestamp of the commit in milliseconds pub created_at: u128, /// The author of the commit pub authors: Vec, /// The parent commits of the commit - #[serde(with = "gitbutler_serde::serde::oid_vec")] + #[serde(with = "gitbutler_serde::oid_vec")] pub parent_ids: Vec, } diff --git a/crates/gitbutler-branch-actions/src/commit.rs b/crates/gitbutler-branch-actions/src/commit.rs index ae8a3a791..a9a296df5 100644 --- a/crates/gitbutler-branch-actions/src/commit.rs +++ b/crates/gitbutler-branch-actions/src/commit.rs @@ -1,14 +1,13 @@ -use anyhow::{Context, Result}; -use bstr::BString; -use gitbutler_branch::{Branch, BranchId}; -use gitbutler_command_context::CommandContext; -use gitbutler_commit::commit_ext::CommitExt; -use serde::Serialize; - use crate::{ author::Author, file::{list_virtual_commit_files, VirtualBranchFile}, }; +use anyhow::{Context, Result}; +use gitbutler_branch::{Branch, BranchId}; +use gitbutler_command_context::CommandContext; +use gitbutler_commit::commit_ext::CommitExt; +use gitbutler_serde::BStringForFrontend; +use serde::Serialize; // this is the struct that maps to the view `Commit` type in Typescript // it is derived from walking the git commits between the `Branch.head` commit @@ -21,16 +20,15 @@ use crate::{ #[derive(Debug, PartialEq, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct VirtualBranchCommit { - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub id: git2::Oid, - #[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")] - pub description: BString, + pub description: BStringForFrontend, pub created_at: u128, pub author: Author, pub is_remote: bool, pub files: Vec, pub is_integrated: bool, - #[serde(with = "gitbutler_serde::serde::oid_vec")] + #[serde(with = "gitbutler_serde::oid_vec")] pub parent_ids: Vec, pub branch_id: BranchId, pub change_id: Option, @@ -62,7 +60,7 @@ pub(crate) fn commit_to_vbranch_commit( id: commit.id(), created_at: timestamp * 1000, author: commit.author().into(), - description: message, + description: message.into(), is_remote, files, is_integrated, diff --git a/crates/gitbutler-branch-actions/src/hunk.rs b/crates/gitbutler-branch-actions/src/hunk.rs index cf10ad4b3..1cdf7ed4f 100644 --- a/crates/gitbutler-branch-actions/src/hunk.rs +++ b/crates/gitbutler-branch-actions/src/hunk.rs @@ -5,9 +5,9 @@ use std::{ time::SystemTime, }; -use bstr::BString; use gitbutler_branch::BranchId; use gitbutler_diff::{GitHunk, Hunk, HunkHash}; +use gitbutler_serde::BStringForFrontend; use itertools::Itertools; use md5::Digest; use serde::Serialize; @@ -24,8 +24,7 @@ use serde::Serialize; #[serde(rename_all = "camelCase")] pub struct VirtualBranchHunk { pub id: String, - #[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")] - pub diff: BString, + pub diff: BStringForFrontend, pub modified_at: u128, pub file_path: PathBuf, #[serde(serialize_with = "gitbutler_branch::serde::hash_to_hex")] @@ -50,7 +49,7 @@ pub struct VirtualBranchHunk { #[serde(rename_all = "camelCase")] pub struct HunkLock { pub branch_id: BranchId, - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub commit_id: git2::Oid, } diff --git a/crates/gitbutler-branch-actions/src/lib.rs b/crates/gitbutler-branch-actions/src/lib.rs index ff65038f9..8ffae0891 100644 --- a/crates/gitbutler-branch-actions/src/lib.rs +++ b/crates/gitbutler-branch-actions/src/lib.rs @@ -41,6 +41,6 @@ mod commit; mod hunk; pub use branch::{ - get_branch_listing_details, list_branches, Author, BranchIdentity, BranchListing, - BranchListingDetails, BranchListingFilter, + get_branch_listing_details, list_branches, Author, BranchListing, BranchListingDetails, + BranchListingFilter, }; diff --git a/crates/gitbutler-branch-actions/src/remote.rs b/crates/gitbutler-branch-actions/src/remote.rs index bd354bb29..b6c49a4d2 100644 --- a/crates/gitbutler-branch-actions/src/remote.rs +++ b/crates/gitbutler-branch-actions/src/remote.rs @@ -1,16 +1,15 @@ use std::path::Path; +use crate::author::Author; use anyhow::{Context, Result}; -use bstr::BString; use gitbutler_branch::{ReferenceExt, Target, VirtualBranchesHandle}; use gitbutler_command_context::CommandContext; use gitbutler_commit::commit_ext::CommitExt; use gitbutler_reference::{Refname, RemoteRefname}; use gitbutler_repo::{LogUntil, RepoActionsExt, RepositoryExt}; +use gitbutler_serde::BStringForFrontend; use serde::Serialize; -use crate::author::Author; - // this struct is a mapping to the view `RemoteBranch` type in Typescript // found in src-tauri/src/routes/repo/[project_id]/types.ts // @@ -23,7 +22,7 @@ use crate::author::Author; #[derive(Debug, Clone, Serialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct RemoteBranch { - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub sha: git2::Oid, pub name: Refname, pub upstream: Option, @@ -36,13 +35,13 @@ pub struct RemoteBranch { #[derive(Debug, Clone, Serialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct RemoteBranchData { - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub sha: git2::Oid, pub name: Refname, pub upstream: Option, pub behind: u32, pub commits: Vec, - #[serde(with = "gitbutler_serde::serde::oid_opt", default)] + #[serde(with = "gitbutler_serde::oid_opt", default)] pub fork_point: Option, } @@ -50,12 +49,11 @@ pub struct RemoteBranchData { #[serde(rename_all = "camelCase")] pub struct RemoteCommit { pub id: String, - #[serde(serialize_with = "gitbutler_serde::serde::as_string_lossy")] - pub description: BString, + pub description: BStringForFrontend, pub created_at: u128, pub author: Author, pub change_id: Option, - #[serde(with = "gitbutler_serde::serde::oid_vec")] + #[serde(with = "gitbutler_serde::oid_vec")] pub parent_ids: Vec, } @@ -188,7 +186,7 @@ pub(crate) fn commit_to_remote_commit(commit: &git2::Commit) -> RemoteCommit { let parent_ids = commit.parents().map(|c| c.id()).collect(); RemoteCommit { id: commit.id().to_string(), - description: commit.message_bstr().to_owned(), + description: commit.message_bstr().into(), created_at: commit.time().seconds().try_into().unwrap(), author: commit.author().into(), change_id: commit.change_id(), diff --git a/crates/gitbutler-branch-actions/src/virtual.rs b/crates/gitbutler-branch-actions/src/virtual.rs index aa2b182ed..7334e4e5a 100644 --- a/crates/gitbutler-branch-actions/src/virtual.rs +++ b/crates/gitbutler-branch-actions/src/virtual.rs @@ -68,13 +68,13 @@ pub struct VirtualBranch { pub updated_at: u128, pub selected_for_changes: bool, pub allow_rebasing: bool, - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub head: git2::Oid, /// 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, /// 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, } diff --git a/crates/gitbutler-branch-actions/tests/virtual_branches/list.rs b/crates/gitbutler-branch-actions/tests/virtual_branches/list.rs index 83e0321e5..809032959 100644 --- a/crates/gitbutler-branch-actions/tests/virtual_branches/list.rs +++ b/crates/gitbutler-branch-actions/tests/virtual_branches/list.rs @@ -137,8 +137,8 @@ fn one_branch_on_integration_multiple_remotes() -> Result<()> { mod util { use anyhow::Result; - use bstr::BString; - use gitbutler_branch_actions::{BranchIdentity, BranchListing, BranchListingFilter}; + use gitbutler_branch::BranchIdentity; + use gitbutler_branch_actions::{BranchListing, BranchListingFilter}; use gitbutler_command_context::CommandContext; /// 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> { fn default() -> Self { ExpectedBranchListing { - identity: ">(), "remotes: {msg}" ); diff --git a/crates/gitbutler-branch/Cargo.toml b/crates/gitbutler-branch/Cargo.toml index dcb22737d..76f46e935 100644 --- a/crates/gitbutler-branch/Cargo.toml +++ b/crates/gitbutler-branch/Cargo.toml @@ -8,7 +8,7 @@ publish = false [dependencies] anyhow = "1.0.86" git2.workspace = true -gix.workspace = true +gix = { workspace = true, features = [] } gitbutler-reference.workspace = true gitbutler-serde.workspace = true gitbutler-id.workspace = true @@ -18,7 +18,7 @@ gitbutler-diff.workspace = true itertools = "0.13" toml = "0.8.15" serde = { workspace = true, features = ["std"] } -bstr = "1.10.0" +bstr.workspace = true md5 = "0.7.0" hex = "0.4.3" tracing = "0.1.40" diff --git a/crates/gitbutler-branch/src/branch.rs b/crates/gitbutler-branch/src/branch.rs index 548ba1a1e..5a0b5bc43 100644 --- a/crates/gitbutler-branch/src/branch.rs +++ b/crates/gitbutler-branch/src/branch.rs @@ -1,7 +1,9 @@ use anyhow::Result; +use bstr::{BStr, ByteSlice}; use gitbutler_id::id::Id; use gitbutler_reference::{normalize_branch_name, Refname, RemoteRefname, VirtualRefname}; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize, Serializer}; +use std::ops::Deref; use crate::ownership::BranchOwnershipClaims; @@ -24,7 +26,7 @@ pub struct Branch { /// The local tracking branch, holding the state of the remote. pub upstream: Option, // 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, #[serde( serialize_with = "serialize_u128", @@ -37,10 +39,10 @@ pub struct Branch { )] 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 - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub tree: git2::Oid, /// 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 ownership: BranchOwnershipClaims, // order is the number by which UI should sort branches @@ -135,3 +137,61 @@ pub struct BranchCreateRequest { pub order: Option, pub selected_for_changes: Option, } + +/// 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, PartialEq, Eq, Hash, Ord, PartialOrd)] +pub struct BranchIdentity( + /// The identity is always a valid reference name, full or partial. + pub gix::refs::PartialName, +); + +impl Serialize for BranchIdentity { + fn serialize(&self, s: S) -> std::result::Result + where + S: Serializer, + { + self.0.as_ref().as_bstr().to_str_lossy().serialize(s) + } +} + +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 for BranchIdentity { + type Error = gix::refs::name::Error; + + fn try_from(value: String) -> std::result::Result { + 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 { + gix::refs::PartialName::try_from(value.to_owned()).map(BranchIdentity) + } +} diff --git a/crates/gitbutler-branch/src/lib.rs b/crates/gitbutler-branch/src/lib.rs index 04cf5a144..773036604 100644 --- a/crates/gitbutler-branch/src/lib.rs +++ b/crates/gitbutler-branch/src/lib.rs @@ -1,7 +1,7 @@ mod branch; use anyhow::Context; -pub use branch::{Branch, BranchCreateRequest, BranchId, BranchUpdateRequest}; +pub use branch::{Branch, BranchCreateRequest, BranchId, BranchIdentity, BranchUpdateRequest}; use bstr::ByteSlice; mod branch_ext; pub use branch_ext::BranchExt; diff --git a/crates/gitbutler-branch/src/reference_ext.rs b/crates/gitbutler-branch/src/reference_ext.rs index f7e693cf1..83d8e6a38 100644 --- a/crates/gitbutler-branch/src/reference_ext.rs +++ b/crates/gitbutler-branch/src/reference_ext.rs @@ -1,3 +1,4 @@ +use crate::BranchIdentity; use anyhow::{Context, Result}; use bstr::{BStr, ByteSlice}; use gix::refs::Category; @@ -19,15 +20,15 @@ pub trait ReferenceExt { // TODO(ST): replace the original with this one. 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 - /// refs/remotes/origin/my-branch -> my-branch - /// refs/remotes/Byron/gitbutler/my-branch -> my-branch (where the remote is Byron/gitbutler) + /// Here are some examples: /// - /// An ideal implementation wouldn't require us to list all the references, - /// but there doesn't seem to be a libgit2 solution to this. - fn given_name(&self, remotes: &BTreeSet>) -> Result; + /// `refs/heads/my-branch` -> `my-branch` + /// `refs/remotes/origin/my-branch` -> `my-branch` + /// `refs/remotes/Byron/gitbutler/my-branch` -> `my-branch` (where the remote is `Byron/gitbutler`) + fn identity(&self, remotes: &BTreeSet>) -> Result; } impl<'repo> ReferenceExt for git2::Reference<'repo> { @@ -65,13 +66,12 @@ impl<'repo> ReferenceExt for git2::Reference<'repo> { } impl ReferenceExtGix for &gix::refs::FullNameRef { - // TODO: make this `identity()`, and use `BranchIdentity` type. - fn given_name(&self, remotes: &BTreeSet>) -> Result { + fn identity(&self, remotes: &BTreeSet>) -> Result { let (category, shorthand_name) = self .category_and_short_name() .context("Branch could not be categorized")?; if !matches!(category, Category::RemoteBranch) { - return Ok(shorthand_name.to_string()); + return Ok(shorthand_name.try_into()?); } let longest_remote = remotes @@ -91,7 +91,6 @@ impl ReferenceExtGix for &gix::refs::FullNameRef { ))? .into(); - // TODO(correctness): this should be `BString`, but can't change it yet. - Ok(shorthand_name.to_string()) + Ok(shorthand_name.try_into()?) } } diff --git a/crates/gitbutler-commit/Cargo.toml b/crates/gitbutler-commit/Cargo.toml index 83636bb8b..fb1de5b99 100644 --- a/crates/gitbutler-commit/Cargo.toml +++ b/crates/gitbutler-commit/Cargo.toml @@ -7,5 +7,5 @@ publish = false [dependencies] git2.workspace = true -bstr = "1.10.0" +bstr.workspace = true uuid.workspace = true diff --git a/crates/gitbutler-diff/Cargo.toml b/crates/gitbutler-diff/Cargo.toml index 8293e1b40..353633341 100644 --- a/crates/gitbutler-diff/Cargo.toml +++ b/crates/gitbutler-diff/Cargo.toml @@ -7,7 +7,7 @@ publish = false [dependencies] git2.workspace = true -bstr = "1.10.0" +bstr.workspace = true md5 = "0.7.0" anyhow = "1.0.86" hex = "0.4.3" diff --git a/crates/gitbutler-diff/src/diff.rs b/crates/gitbutler-diff/src/diff.rs index feb45a6b8..6585a5761 100644 --- a/crates/gitbutler-diff/src/diff.rs +++ b/crates/gitbutler-diff/src/diff.rs @@ -7,6 +7,7 @@ use std::{ use anyhow::{Context, Result}; use bstr::{BStr, BString, ByteSlice, ByteVec}; +use gitbutler_serde::BStringForFrontend; use serde::{Deserialize, Serialize}; use tracing::instrument; @@ -49,11 +50,8 @@ pub struct GitHunk { pub new_start: u32, pub new_lines: u32, /// The `+`, `-` or ` ` prefixed lines of the diff produced by `git2`, along with their line separator. - #[serde( - rename = "diff", - serialize_with = "gitbutler_serde::serde::as_string_lossy" - )] - pub diff_lines: BString, + #[serde(rename = "diff")] + pub diff_lines: BStringForFrontend, pub binary: bool, pub change_type: ChangeType, } @@ -310,7 +308,7 @@ pub fn hunks_by_filepath( old_lines, new_start, new_lines, - diff_lines: line.into_owned(), + diff_lines: line.into_owned().into(), binary: false, change_type, } @@ -416,7 +414,7 @@ pub fn reverse_hunk(hunk: &GitHunk) -> Option { old_lines: hunk.new_lines, new_start: hunk.old_start, new_lines: hunk.old_lines, - diff_lines: diff, + diff_lines: diff.into(), binary: hunk.binary, change_type: hunk.change_type, }) diff --git a/crates/gitbutler-fs/Cargo.toml b/crates/gitbutler-fs/Cargo.toml index 7a7376a1a..3ce2f763f 100644 --- a/crates/gitbutler-fs/Cargo.toml +++ b/crates/gitbutler-fs/Cargo.toml @@ -7,7 +7,7 @@ publish = false [dependencies] serde = { workspace = true, features = ["std"]} -bstr = "1.10.0" +bstr.workspace = true anyhow = "1.0.86" gix = { workspace = true, features = ["dirwalk", "credentials", "parallel"] } walkdir = "2.5.0" diff --git a/crates/gitbutler-oplog/src/entry.rs b/crates/gitbutler-oplog/src/entry.rs index fd9df371f..5456c663b 100644 --- a/crates/gitbutler-oplog/src/entry.rs +++ b/crates/gitbutler-oplog/src/entry.rs @@ -16,10 +16,10 @@ use strum::EnumString; #[serde(rename_all = "camelCase")] pub struct 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, /// 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, /// The number of working directory lines added in the snapshot pub lines_added: usize, diff --git a/crates/gitbutler-oplog/src/state.rs b/crates/gitbutler-oplog/src/state.rs index 9ff06cb40..f648af241 100644 --- a/crates/gitbutler-oplog/src/state.rs +++ b/crates/gitbutler-oplog/src/state.rs @@ -26,7 +26,7 @@ fn unix_epoch() -> SystemTime { #[derive(Serialize, Deserialize, Debug)] pub struct Oplog { /// 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, /// The time when the last snapshot was created. Seconds since Epoch #[serde( diff --git a/crates/gitbutler-project/src/project.rs b/crates/gitbutler-project/src/project.rs index dfa7e58a8..485a91e0e 100644 --- a/crates/gitbutler-project/src/project.rs +++ b/crates/gitbutler-project/src/project.rs @@ -61,7 +61,7 @@ impl FetchResult { #[derive(Debug, Deserialize, Serialize, Copy, Clone)] pub struct CodePushState { - #[serde(with = "gitbutler_serde::serde::oid")] + #[serde(with = "gitbutler_serde::oid")] pub id: git2::Oid, pub timestamp: time::SystemTime, } diff --git a/crates/gitbutler-reference/src/refname/remote.rs b/crates/gitbutler-reference/src/refname/remote.rs index 1197619d9..1f119b85f 100644 --- a/crates/gitbutler-reference/src/refname/remote.rs +++ b/crates/gitbutler-reference/src/refname/remote.rs @@ -6,9 +6,11 @@ use super::error::Error; #[derive(Debug, Clone, Hash, PartialEq, Eq)] 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, - // 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, } diff --git a/crates/gitbutler-repo/Cargo.toml b/crates/gitbutler-repo/Cargo.toml index e819f141f..73397bb0a 100644 --- a/crates/gitbutler-repo/Cargo.toml +++ b/crates/gitbutler-repo/Cargo.toml @@ -9,7 +9,7 @@ publish = false git2.workspace = true gix.workspace = true anyhow = "1.0.86" -bstr = "1.10.0" +bstr.workspace = true tokio = { workspace = true, features = [ "rt-multi-thread", "rt", "macros", "sync" ] } gitbutler-git.workspace = true tracing = "0.1.40" diff --git a/crates/gitbutler-serde/Cargo.toml b/crates/gitbutler-serde/Cargo.toml index f9a8f9164..e2df75ace 100644 --- a/crates/gitbutler-serde/Cargo.toml +++ b/crates/gitbutler-serde/Cargo.toml @@ -7,5 +7,6 @@ publish = false [dependencies] git2.workspace = true +gix.workspace = true serde = { workspace = true, features = ["std"]} -bstr = "1.10.0" +bstr.workspace = true diff --git a/crates/gitbutler-serde/src/bstring.rs b/crates/gitbutler-serde/src/bstring.rs new file mode 100644 index 000000000..86b982ab5 --- /dev/null +++ b/crates/gitbutler-serde/src/bstring.rs @@ -0,0 +1,72 @@ +use bstr::{BStr, BString, ByteSlice}; +use serde::{Serialize, Serializer}; +use std::ops::{Deref, DerefMut}; + +/// A form of `BString` for use in structures that are going to be serialized for the frontend as string. +/// +/// ### Note +/// +/// `BString` provides its own serialize implementation, but serializes as list of bytes, something that +/// would break the UI. Thus, whenever `BString` is involved, a custom serialization or this type +/// will be required. +#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash, Default)] +pub struct BStringForFrontend(BString); + +impl Serialize for BStringForFrontend { + fn serialize(&self, s: S) -> Result + where + S: Serializer, + { + self.0.to_str_lossy().serialize(s) + } +} + +impl Deref for BStringForFrontend { + type Target = BString; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for BStringForFrontend { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl AsRef<[u8]> for BStringForFrontend { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +impl AsRef for BStringForFrontend { + fn as_ref(&self) -> &BStr { + self.0.as_ref() + } +} + +impl From for BStringForFrontend { + fn from(value: String) -> Self { + BStringForFrontend(value.into()) + } +} + +impl From for BStringForFrontend { + fn from(value: BString) -> Self { + BStringForFrontend(value) + } +} + +impl From<&BStr> for BStringForFrontend { + fn from(value: &BStr) -> Self { + BStringForFrontend(value.into()) + } +} + +impl PartialEq<&str> for BStringForFrontend { + fn eq(&self, other: &&str) -> bool { + self.0.eq(other) + } +} diff --git a/crates/gitbutler-serde/src/lib.rs b/crates/gitbutler-serde/src/lib.rs index 82b2d0949..9f1d3246a 100644 --- a/crates/gitbutler-serde/src/lib.rs +++ b/crates/gitbutler-serde/src/lib.rs @@ -1 +1,92 @@ -pub mod serde; +use serde::Serialize; + +mod bstring; +pub use bstring::BStringForFrontend; + +pub fn as_string_lossy_vec_remote_name( + v: &[gix::remote::Name<'static>], + s: S, +) -> Result +where + S: serde::Serializer, +{ + let vec: Vec = v.iter().map(|v| v.as_bstr().to_string()).collect(); + vec.serialize(s) +} + +pub fn as_time_seconds_from_unix_epoch(v: &git2::Time, s: S) -> Result +where + S: serde::Serializer, +{ + v.seconds().serialize(s) +} + +pub mod oid_opt { + use serde::{Deserialize, Deserializer, Serialize}; + + pub fn serialize(v: &Option, s: S) -> Result + where + S: serde::Serializer, + { + v.as_ref().map(|v| v.to_string()).serialize(s) + } + + pub fn deserialize<'de, D>(d: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let hex = 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(v: &[git2::Oid], s: S) -> Result + where + S: serde::Serializer, + { + let vec: Vec = v.iter().map(|v| v.to_string()).collect(); + vec.serialize(s) + } + + pub fn deserialize<'de, D>(d: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let hex = as Deserialize>::deserialize(d)?; + let hex: Result, 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(v: &git2::Oid, s: S) -> Result + where + S: serde::Serializer, + { + v.to_string().serialize(s) + } + + pub fn deserialize<'de, D>(d: D) -> Result + where + D: Deserializer<'de>, + { + let hex = String::deserialize(d)?; + hex.parse() + .map_err(|err: git2::Error| serde::de::Error::custom(err.to_string())) + } +} diff --git a/crates/gitbutler-serde/src/serde.rs b/crates/gitbutler-serde/src/serde.rs deleted file mode 100644 index ba0d467f9..000000000 --- a/crates/gitbutler-serde/src/serde.rs +++ /dev/null @@ -1,94 +0,0 @@ -use bstr::{BString, ByteSlice}; -use serde::Serialize; - -pub fn as_string_lossy(v: &BString, s: S) -> Result -where - S: serde::Serializer, -{ - v.to_str_lossy().serialize(s) -} - -pub fn as_string_lossy_vec(v: &[BString], s: S) -> Result -where - S: serde::Serializer, -{ - let vec: Vec = v.iter().map(|v| v.to_string()).collect(); - vec.serialize(s) -} - -pub fn as_time_seconds_from_unix_epoch(v: &git2::Time, s: S) -> Result -where - S: serde::Serializer, -{ - v.seconds().serialize(s) -} - -pub mod oid_opt { - use serde::{Deserialize, Deserializer, Serialize}; - - pub fn serialize(v: &Option, s: S) -> Result - where - S: serde::Serializer, - { - v.as_ref().map(|v| v.to_string()).serialize(s) - } - - pub fn deserialize<'de, D>(d: D) -> Result, D::Error> - where - D: Deserializer<'de>, - { - let hex = 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(v: &[git2::Oid], s: S) -> Result - where - S: serde::Serializer, - { - let vec: Vec = v.iter().map(|v| v.to_string()).collect(); - vec.serialize(s) - } - - pub fn deserialize<'de, D>(d: D) -> Result, D::Error> - where - D: Deserializer<'de>, - { - let hex = as Deserialize>::deserialize(d)?; - let hex: Result, 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(v: &git2::Oid, s: S) -> Result - where - S: serde::Serializer, - { - v.to_string().serialize(s) - } - - pub fn deserialize<'de, D>(d: D) -> Result - where - D: Deserializer<'de>, - { - let hex = String::deserialize(d)?; - hex.parse() - .map_err(|err: git2::Error| serde::de::Error::custom(err.to_string())) - } -} diff --git a/crates/gitbutler-url/Cargo.toml b/crates/gitbutler-url/Cargo.toml index 1a6ccb2f7..ace8ff621 100644 --- a/crates/gitbutler-url/Cargo.toml +++ b/crates/gitbutler-url/Cargo.toml @@ -8,4 +8,4 @@ publish = false [dependencies] url = { version = "2.5.2", features = ["serde"] } thiserror.workspace = true -bstr = "1.10.0" +bstr.workspace = true