mirror of
https://github.com/extrawurst/gitui.git
synced 2024-11-26 12:35:14 +03:00
Add LogWalkerWithoutFilter, using gitoxide (#2275)
* Add LogWalkerWithoutFilter, using gitoxide * Use feature revision for gix --------- Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
This commit is contained in:
parent
95bbbda9af
commit
d30de223fe
682
Cargo.lock
generated
682
Cargo.lock
generated
@ -149,6 +149,18 @@ version = "1.0.86"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arc-swap"
|
||||||
|
version = "1.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arrayvec"
|
||||||
|
version = "0.7.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "asyncgit"
|
name = "asyncgit"
|
||||||
version = "0.26.3"
|
version = "0.26.3"
|
||||||
@ -161,6 +173,7 @@ dependencies = [
|
|||||||
"fuzzy-matcher",
|
"fuzzy-matcher",
|
||||||
"git2",
|
"git2",
|
||||||
"git2-hooks",
|
"git2-hooks",
|
||||||
|
"gix",
|
||||||
"invalidstring",
|
"invalidstring",
|
||||||
"log",
|
"log",
|
||||||
"openssl-sys",
|
"openssl-sys",
|
||||||
@ -294,6 +307,17 @@ dependencies = [
|
|||||||
"cipher",
|
"cipher",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bstr"
|
||||||
|
version = "1.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
"regex-automata",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bugreport"
|
name = "bugreport"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@ -433,6 +457,21 @@ version = "0.7.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
|
checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clru"
|
||||||
|
version = "0.6.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cmake"
|
||||||
|
version = "0.1.50"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -483,6 +522,19 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam"
|
||||||
|
version = "0.8.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-channel",
|
||||||
|
"crossbeam-deque",
|
||||||
|
"crossbeam-epoch",
|
||||||
|
"crossbeam-queue",
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-channel"
|
name = "crossbeam-channel"
|
||||||
version = "0.5.13"
|
version = "0.5.13"
|
||||||
@ -511,6 +563,15 @@ dependencies = [
|
|||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam-queue"
|
||||||
|
version = "0.3.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.20"
|
version = "0.8.20"
|
||||||
@ -658,6 +719,12 @@ dependencies = [
|
|||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dunce"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "easy-cast"
|
name = "easy-cast"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
@ -773,6 +840,12 @@ dependencies = [
|
|||||||
"regex",
|
"regex",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "faster-hex"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastrand"
|
name = "fastrand"
|
||||||
version = "2.1.0"
|
version = "2.1.0"
|
||||||
@ -822,6 +895,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
|
checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
|
"libz-ng-sys",
|
||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1089,6 +1163,517 @@ dependencies = [
|
|||||||
"which",
|
"which",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix"
|
||||||
|
version = "0.63.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "984c5018adfa7a4536ade67990b3ebc6e11ab57b3d6cd9968de0947ca99b4b06"
|
||||||
|
dependencies = [
|
||||||
|
"gix-actor",
|
||||||
|
"gix-commitgraph",
|
||||||
|
"gix-config",
|
||||||
|
"gix-date",
|
||||||
|
"gix-diff",
|
||||||
|
"gix-discover",
|
||||||
|
"gix-features",
|
||||||
|
"gix-fs",
|
||||||
|
"gix-glob",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-hashtable",
|
||||||
|
"gix-index",
|
||||||
|
"gix-lock",
|
||||||
|
"gix-macros",
|
||||||
|
"gix-object",
|
||||||
|
"gix-odb",
|
||||||
|
"gix-pack",
|
||||||
|
"gix-path",
|
||||||
|
"gix-ref",
|
||||||
|
"gix-refspec",
|
||||||
|
"gix-revision",
|
||||||
|
"gix-revwalk",
|
||||||
|
"gix-sec",
|
||||||
|
"gix-tempfile",
|
||||||
|
"gix-trace",
|
||||||
|
"gix-traverse",
|
||||||
|
"gix-url",
|
||||||
|
"gix-utils",
|
||||||
|
"gix-validate",
|
||||||
|
"once_cell",
|
||||||
|
"parking_lot",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-actor"
|
||||||
|
version = "0.31.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d69c59d392c7e6c94385b6fd6089d6df0fe945f32b4357687989f3aee253cd7f"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-date",
|
||||||
|
"gix-utils",
|
||||||
|
"itoa",
|
||||||
|
"thiserror",
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-bitmap"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a371db66cbd4e13f0ed9dc4c0fea712d7276805fccc877f77e96374d317e87ae"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-chunk"
|
||||||
|
version = "0.4.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "45c8751169961ba7640b513c3b24af61aa962c967aaf04116734975cd5af0c52"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-commitgraph"
|
||||||
|
version = "0.24.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f7b102311085da4af18823413b5176d7c500fb2272eaf391cfa8635d8bcb12c4"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-chunk",
|
||||||
|
"gix-features",
|
||||||
|
"gix-hash",
|
||||||
|
"memmap2",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-config"
|
||||||
|
version = "0.37.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "53fafe42957e11d98e354a66b6bd70aeea00faf2f62dd11164188224a507c840"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-config-value",
|
||||||
|
"gix-features",
|
||||||
|
"gix-glob",
|
||||||
|
"gix-path",
|
||||||
|
"gix-ref",
|
||||||
|
"gix-sec",
|
||||||
|
"memchr",
|
||||||
|
"once_cell",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
"unicode-bom",
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-config-value"
|
||||||
|
version = "0.14.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fbd06203b1a9b33a78c88252a625031b094d9e1b647260070c25b09910c0a804"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.5.0",
|
||||||
|
"bstr",
|
||||||
|
"gix-path",
|
||||||
|
"libc",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-date"
|
||||||
|
version = "0.8.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "367ee9093b0c2b04fd04c5c7c8b6a1082713534eab537597ae343663a518fa99"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"itoa",
|
||||||
|
"thiserror",
|
||||||
|
"time",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-diff"
|
||||||
|
version = "0.44.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "40b9bd8b2d07b6675a840b56a6c177d322d45fa082672b0dad8f063b25baf0a4"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-object",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-discover"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fc27c699b63da66b50d50c00668bc0b7e90c3a382ef302865e891559935f3dbf"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"dunce",
|
||||||
|
"gix-fs",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-path",
|
||||||
|
"gix-ref",
|
||||||
|
"gix-sec",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-features"
|
||||||
|
version = "0.38.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac7045ac9fe5f9c727f38799d002a7ed3583cd777e3322a7c4b43e3cf437dc69"
|
||||||
|
dependencies = [
|
||||||
|
"crc32fast",
|
||||||
|
"crossbeam-channel",
|
||||||
|
"flate2",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-trace",
|
||||||
|
"gix-utils",
|
||||||
|
"jwalk",
|
||||||
|
"libc",
|
||||||
|
"once_cell",
|
||||||
|
"parking_lot",
|
||||||
|
"prodash",
|
||||||
|
"sha1",
|
||||||
|
"sha1_smol",
|
||||||
|
"thiserror",
|
||||||
|
"walkdir",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-fs"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c3338ff92a2164f5209f185ec0cd316f571a72676bb01d27e22f2867ba69f77a"
|
||||||
|
dependencies = [
|
||||||
|
"fastrand",
|
||||||
|
"gix-features",
|
||||||
|
"gix-utils",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-glob"
|
||||||
|
version = "0.16.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c2a29ad0990cf02c48a7aac76ed0dbddeb5a0d070034b83675cc3bbf937eace4"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.5.0",
|
||||||
|
"bstr",
|
||||||
|
"gix-features",
|
||||||
|
"gix-path",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-hash"
|
||||||
|
version = "0.14.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f93d7df7366121b5018f947a04d37f034717e113dcf9ccd85c34b58e57a74d5e"
|
||||||
|
dependencies = [
|
||||||
|
"faster-hex",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-hashtable"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ddf80e16f3c19ac06ce415a38b8591993d3f73aede049cb561becb5b3a8e242"
|
||||||
|
dependencies = [
|
||||||
|
"gix-hash",
|
||||||
|
"hashbrown",
|
||||||
|
"parking_lot",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-index"
|
||||||
|
version = "0.33.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2d8c5a5f1c58edcbc5692b174cda2703aba82ed17d7176ff4c1752eb48b1b167"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.5.0",
|
||||||
|
"bstr",
|
||||||
|
"filetime",
|
||||||
|
"fnv",
|
||||||
|
"gix-bitmap",
|
||||||
|
"gix-features",
|
||||||
|
"gix-fs",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-lock",
|
||||||
|
"gix-object",
|
||||||
|
"gix-traverse",
|
||||||
|
"gix-utils",
|
||||||
|
"gix-validate",
|
||||||
|
"hashbrown",
|
||||||
|
"itoa",
|
||||||
|
"libc",
|
||||||
|
"memmap2",
|
||||||
|
"rustix",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-lock"
|
||||||
|
version = "14.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e3bc7fe297f1f4614774989c00ec8b1add59571dc9b024b4c00acb7dedd4e19d"
|
||||||
|
dependencies = [
|
||||||
|
"gix-tempfile",
|
||||||
|
"gix-utils",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-macros"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "999ce923619f88194171a67fb3e6d613653b8d4d6078b529b15a765da0edcc17"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-object"
|
||||||
|
version = "0.42.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1fe2dc4a41191c680c942e6ebd630c8107005983c4679214fdb1007dcf5ae1df"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-actor",
|
||||||
|
"gix-date",
|
||||||
|
"gix-features",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-utils",
|
||||||
|
"gix-validate",
|
||||||
|
"itoa",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-odb"
|
||||||
|
version = "0.61.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e92b9790e2c919166865d0825b26cc440a387c175bed1b43a2fa99c0e9d45e98"
|
||||||
|
dependencies = [
|
||||||
|
"arc-swap",
|
||||||
|
"gix-date",
|
||||||
|
"gix-features",
|
||||||
|
"gix-fs",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-object",
|
||||||
|
"gix-pack",
|
||||||
|
"gix-path",
|
||||||
|
"gix-quote",
|
||||||
|
"parking_lot",
|
||||||
|
"tempfile",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-pack"
|
||||||
|
version = "0.51.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7a8da51212dbff944713edb2141ed7e002eea326b8992070374ce13a6cb610b3"
|
||||||
|
dependencies = [
|
||||||
|
"clru",
|
||||||
|
"gix-chunk",
|
||||||
|
"gix-features",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-hashtable",
|
||||||
|
"gix-object",
|
||||||
|
"gix-path",
|
||||||
|
"gix-tempfile",
|
||||||
|
"memmap2",
|
||||||
|
"parking_lot",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
"uluru",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-path"
|
||||||
|
version = "0.10.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "23623cf0f475691a6d943f898c4d0b89f5c1a2a64d0f92bce0e0322ee6528783"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-trace",
|
||||||
|
"home",
|
||||||
|
"once_cell",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-quote"
|
||||||
|
version = "0.4.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbff4f9b9ea3fa7a25a70ee62f545143abef624ac6aa5884344e70c8b0a1d9ff"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-utils",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-ref"
|
||||||
|
version = "0.44.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3394a2997e5bc6b22ebc1e1a87b41eeefbcfcff3dbfa7c4bd73cb0ac8f1f3e2e"
|
||||||
|
dependencies = [
|
||||||
|
"gix-actor",
|
||||||
|
"gix-date",
|
||||||
|
"gix-features",
|
||||||
|
"gix-fs",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-lock",
|
||||||
|
"gix-object",
|
||||||
|
"gix-path",
|
||||||
|
"gix-tempfile",
|
||||||
|
"gix-utils",
|
||||||
|
"gix-validate",
|
||||||
|
"memmap2",
|
||||||
|
"thiserror",
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-refspec"
|
||||||
|
version = "0.23.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dde848865834a54fe4d9b4573f15d0e9a68eaf3d061b42d3ed52b4b8acf880b2"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-revision",
|
||||||
|
"gix-validate",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-revision"
|
||||||
|
version = "0.27.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "63e08f8107ed1f93a83bcfbb4c38084c7cb3f6cd849793f1d5eec235f9b13b2b"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-date",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-hashtable",
|
||||||
|
"gix-object",
|
||||||
|
"gix-revwalk",
|
||||||
|
"gix-trace",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-revwalk"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4181db9cfcd6d1d0fd258e91569dbb61f94cb788b441b5294dd7f1167a3e788f"
|
||||||
|
dependencies = [
|
||||||
|
"gix-commitgraph",
|
||||||
|
"gix-date",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-hashtable",
|
||||||
|
"gix-object",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-sec"
|
||||||
|
version = "0.10.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fddc27984a643b20dd03e97790555804f98cf07404e0e552c0ad8133266a79a1"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.5.0",
|
||||||
|
"gix-path",
|
||||||
|
"libc",
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-tempfile"
|
||||||
|
version = "14.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3b0e276cd08eb2a22e9f286a4f13a222a01be2defafa8621367515375644b99"
|
||||||
|
dependencies = [
|
||||||
|
"gix-fs",
|
||||||
|
"libc",
|
||||||
|
"once_cell",
|
||||||
|
"parking_lot",
|
||||||
|
"tempfile",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-trace"
|
||||||
|
version = "0.1.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-traverse"
|
||||||
|
version = "0.39.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f20cb69b63eb3e4827939f42c05b7756e3488ef49c25c412a876691d568ee2a0"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.5.0",
|
||||||
|
"gix-commitgraph",
|
||||||
|
"gix-date",
|
||||||
|
"gix-hash",
|
||||||
|
"gix-hashtable",
|
||||||
|
"gix-object",
|
||||||
|
"gix-revwalk",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-url"
|
||||||
|
version = "0.27.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0db829ebdca6180fbe32be7aed393591df6db4a72dbbc0b8369162390954d1cf"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"gix-features",
|
||||||
|
"gix-path",
|
||||||
|
"home",
|
||||||
|
"thiserror",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-utils"
|
||||||
|
version = "0.1.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "35192df7fd0fa112263bad8021e2df7167df4cc2a6e6d15892e1e55621d3d4dc"
|
||||||
|
dependencies = [
|
||||||
|
"fastrand",
|
||||||
|
"unicode-normalization",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gix-validate"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "82c27dd34a49b1addf193c92070bcbf3beaf6e10f16a78544de6372e146a0acf"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "group"
|
name = "group"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
@ -1265,6 +1850,16 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jwalk"
|
||||||
|
version = "0.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2735847566356cd2179a2a38264839308f7079fa96e6bd5a42d740460e003c56"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam",
|
||||||
|
"rayon",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kqueue"
|
name = "kqueue"
|
||||||
version = "1.0.8"
|
version = "1.0.8"
|
||||||
@ -1344,6 +1939,16 @@ dependencies = [
|
|||||||
"vcpkg",
|
"vcpkg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libz-ng-sys"
|
||||||
|
version = "1.1.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c6409efc61b12687963e602df8ecf70e8ddacf95bc6576bcf16e3ac6328083c5"
|
||||||
|
dependencies = [
|
||||||
|
"cmake",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libz-sys"
|
name = "libz-sys"
|
||||||
version = "1.1.16"
|
version = "1.1.16"
|
||||||
@ -1393,6 +1998,15 @@ version = "2.7.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memmap2"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.7.3"
|
version = "0.7.3"
|
||||||
@ -1497,6 +2111,15 @@ dependencies = [
|
|||||||
"libm",
|
"libm",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num_threads"
|
||||||
|
version = "0.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "object"
|
name = "object"
|
||||||
version = "0.36.0"
|
version = "0.36.0"
|
||||||
@ -1785,6 +2408,12 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "prodash"
|
||||||
|
version = "28.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.36"
|
version = "1.0.36"
|
||||||
@ -2110,6 +2739,33 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha1"
|
||||||
|
version = "0.10.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"cpufeatures",
|
||||||
|
"digest",
|
||||||
|
"sha1-asm",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha1-asm"
|
||||||
|
version = "0.5.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "286acebaf8b67c1130aedffad26f594eff0c1292389158135327d2e23aed582b"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha1_smol"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha2"
|
name = "sha2"
|
||||||
version = "0.10.8"
|
version = "0.10.8"
|
||||||
@ -2436,7 +3092,9 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"deranged",
|
"deranged",
|
||||||
"itoa",
|
"itoa",
|
||||||
|
"libc",
|
||||||
"num-conv",
|
"num-conv",
|
||||||
|
"num_threads",
|
||||||
"powerfmt",
|
"powerfmt",
|
||||||
"serde",
|
"serde",
|
||||||
"time-core",
|
"time-core",
|
||||||
@ -2502,12 +3160,27 @@ version = "1.17.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uluru"
|
||||||
|
version = "3.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7c8a2469e56e6e5095c82ccd3afb98dad95f7af7929aab6d8ba8d6e0f73657da"
|
||||||
|
dependencies = [
|
||||||
|
"arrayvec",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-bidi"
|
name = "unicode-bidi"
|
||||||
version = "0.3.15"
|
version = "0.3.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
|
checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-bom"
|
||||||
|
version = "2.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
@ -2845,6 +3518,15 @@ version = "0.52.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winnow"
|
||||||
|
version = "0.6.13"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winsafe"
|
name = "winsafe"
|
||||||
version = "0.0.19"
|
version = "0.0.19"
|
||||||
|
@ -19,6 +19,7 @@ easy-cast = "0.5"
|
|||||||
fuzzy-matcher = "0.3"
|
fuzzy-matcher = "0.3"
|
||||||
git2 = "0.19"
|
git2 = "0.19"
|
||||||
git2-hooks = { path = "../git2-hooks", version = "0.3" }
|
git2-hooks = { path = "../git2-hooks", version = "0.3" }
|
||||||
|
gix = { version = "0.63", default-features = false, features = ["max-performance", "revision"] }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
# git2 = { path = "../../extern/git2-rs", features = ["vendored-openssl"]}
|
# git2 = { path = "../../extern/git2-rs", features = ["vendored-openssl"]}
|
||||||
# git2 = { git="https://github.com/extrawurst/git2-rs.git", rev="fc13dcc", features = ["vendored-openssl"]}
|
# git2 = { git="https://github.com/extrawurst/git2-rs.git", rev="fc13dcc", features = ["vendored-openssl"]}
|
||||||
|
@ -93,6 +93,24 @@ pub enum Error {
|
|||||||
#[error("sign error: {0}")]
|
#[error("sign error: {0}")]
|
||||||
Sign(#[from] crate::sync::sign::SignError),
|
Sign(#[from] crate::sync::sign::SignError),
|
||||||
|
|
||||||
|
///
|
||||||
|
#[error("gix::open error: {0}")]
|
||||||
|
GixOpen(#[from] Box<gix::open::Error>),
|
||||||
|
|
||||||
|
///
|
||||||
|
#[error("gix::reference::find::existing error: {0}")]
|
||||||
|
GixReferenceFindExisting(
|
||||||
|
#[from] gix::reference::find::existing::Error,
|
||||||
|
),
|
||||||
|
|
||||||
|
///
|
||||||
|
#[error("gix::head::peel::to_commit error: {0}")]
|
||||||
|
GixHeadPeelToCommit(#[from] gix::head::peel::to_commit::Error),
|
||||||
|
|
||||||
|
///
|
||||||
|
#[error("gix::revision::walk error: {0}")]
|
||||||
|
GixRevisionWalk(#[from] gix::revision::walk::Error),
|
||||||
|
|
||||||
///
|
///
|
||||||
#[error("amend error: config commit.gpgsign=true detected.\ngpg signing is not supported for amending non-last commits")]
|
#[error("amend error: config commit.gpgsign=true detected.\ngpg signing is not supported for amending non-last commits")]
|
||||||
SignAmendNonLastCommit,
|
SignAmendNonLastCommit,
|
||||||
@ -120,3 +138,9 @@ impl<T> From<crossbeam_channel::SendError<T>> for Error {
|
|||||||
Self::Generic(format!("send error: {error}"))
|
Self::Generic(format!("send error: {error}"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<gix::open::Error> for Error {
|
||||||
|
fn from(error: gix::open::Error) -> Self {
|
||||||
|
Self::GixOpen(Box::new(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
error::Result,
|
error::Result,
|
||||||
sync::{
|
sync::{
|
||||||
repo, CommitId, LogWalker, RepoPath, SharedCommitFilterFn,
|
repo, CommitId, LogWalker, LogWalkerWithoutFilter, RepoPath,
|
||||||
|
SharedCommitFilterFn,
|
||||||
},
|
},
|
||||||
AsyncGitNotification, Error,
|
AsyncGitNotification, Error,
|
||||||
};
|
};
|
||||||
@ -198,6 +199,34 @@ impl AsyncLog {
|
|||||||
arc_background: &Arc<AtomicBool>,
|
arc_background: &Arc<AtomicBool>,
|
||||||
sender: &Sender<AsyncGitNotification>,
|
sender: &Sender<AsyncGitNotification>,
|
||||||
filter: Option<SharedCommitFilterFn>,
|
filter: Option<SharedCommitFilterFn>,
|
||||||
|
) -> Result<()> {
|
||||||
|
filter.map_or_else(
|
||||||
|
|| {
|
||||||
|
Self::fetch_helper_without_filter(
|
||||||
|
repo_path,
|
||||||
|
arc_current,
|
||||||
|
arc_background,
|
||||||
|
sender,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
|filter| {
|
||||||
|
Self::fetch_helper_with_filter(
|
||||||
|
repo_path,
|
||||||
|
arc_current,
|
||||||
|
arc_background,
|
||||||
|
sender,
|
||||||
|
filter,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fetch_helper_with_filter(
|
||||||
|
repo_path: &RepoPath,
|
||||||
|
arc_current: &Arc<Mutex<AsyncLogResult>>,
|
||||||
|
arc_background: &Arc<AtomicBool>,
|
||||||
|
sender: &Sender<AsyncGitNotification>,
|
||||||
|
filter: SharedCommitFilterFn,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let start_time = Instant::now();
|
let start_time = Instant::now();
|
||||||
|
|
||||||
@ -206,7 +235,50 @@ impl AsyncLog {
|
|||||||
|
|
||||||
let r = repo(repo_path)?;
|
let r = repo(repo_path)?;
|
||||||
let mut walker =
|
let mut walker =
|
||||||
LogWalker::new(&r, LIMIT_COUNT)?.filter(filter);
|
LogWalker::new(&r, LIMIT_COUNT)?.filter(Some(filter));
|
||||||
|
|
||||||
|
loop {
|
||||||
|
entries.clear();
|
||||||
|
let read = walker.read(&mut entries)?;
|
||||||
|
|
||||||
|
let mut current = arc_current.lock()?;
|
||||||
|
current.commits.extend(entries.iter());
|
||||||
|
current.duration = start_time.elapsed();
|
||||||
|
|
||||||
|
if read == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Self::notify(sender);
|
||||||
|
|
||||||
|
let sleep_duration =
|
||||||
|
if arc_background.load(Ordering::Relaxed) {
|
||||||
|
SLEEP_BACKGROUND
|
||||||
|
} else {
|
||||||
|
SLEEP_FOREGROUND
|
||||||
|
};
|
||||||
|
|
||||||
|
thread::sleep(sleep_duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
log::trace!("revlog visited: {}", walker.visited());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fetch_helper_without_filter(
|
||||||
|
repo_path: &RepoPath,
|
||||||
|
arc_current: &Arc<Mutex<AsyncLogResult>>,
|
||||||
|
arc_background: &Arc<AtomicBool>,
|
||||||
|
sender: &Sender<AsyncGitNotification>,
|
||||||
|
) -> Result<()> {
|
||||||
|
let start_time = Instant::now();
|
||||||
|
|
||||||
|
let mut entries = vec![CommitId::default(); LIMIT_COUNT];
|
||||||
|
entries.resize(0, CommitId::default());
|
||||||
|
|
||||||
|
let mut repo = gix::open(repo_path.gitpath())?;
|
||||||
|
let mut walker =
|
||||||
|
LogWalkerWithoutFilter::new(&mut repo, LIMIT_COUNT)?;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
entries.clear();
|
entries.clear();
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
use super::{CommitId, SharedCommitFilterFn};
|
use super::{CommitId, SharedCommitFilterFn};
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
use git2::{Commit, Oid, Repository};
|
use git2::{Commit, Oid, Repository};
|
||||||
|
use gix::{revision::Walk, traverse::commit::simple::Sorting};
|
||||||
use std::{
|
use std::{
|
||||||
cmp::Ordering,
|
cmp::Ordering,
|
||||||
collections::{BinaryHeap, HashSet},
|
collections::{BinaryHeap, HashSet},
|
||||||
@ -108,6 +109,78 @@ impl<'a> LogWalker<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// This is separate from `LogWalker` because filtering currently (June 2024) works through
|
||||||
|
/// `SharedCommitFilterFn`.
|
||||||
|
///
|
||||||
|
/// `SharedCommitFilterFn` requires access to a `git2::repo::Repository` because, under the hood,
|
||||||
|
/// it calls into functions that work with a `git2::repo::Repository`. It seems unwise to open a
|
||||||
|
/// repo both through `gix::open` and `Repository::open_ext` at the same time, so there is a
|
||||||
|
/// separate struct that works with `gix::Repository` only.
|
||||||
|
///
|
||||||
|
/// A more long-term option is to refactor filtering to work with a `gix::Repository` and to remove
|
||||||
|
/// `LogWalker` once this is done, but this is a larger effort.
|
||||||
|
pub struct LogWalkerWithoutFilter<'a> {
|
||||||
|
walk: Walk<'a>,
|
||||||
|
limit: usize,
|
||||||
|
visited: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> LogWalkerWithoutFilter<'a> {
|
||||||
|
///
|
||||||
|
pub fn new(
|
||||||
|
repo: &'a mut gix::Repository,
|
||||||
|
limit: usize,
|
||||||
|
) -> Result<Self> {
|
||||||
|
// This seems to be an object cache size that yields optimal performance. There’s no specific
|
||||||
|
// reason this is 2^14, so benchmarking might reveal that there’s better values.
|
||||||
|
repo.object_cache_size_if_unset(2_usize.pow(14));
|
||||||
|
|
||||||
|
let commit = repo.head()?.peel_to_commit_in_place()?;
|
||||||
|
|
||||||
|
let tips = [commit.id];
|
||||||
|
|
||||||
|
let platform = repo
|
||||||
|
.rev_walk(tips)
|
||||||
|
.sorting(Sorting::ByCommitTimeNewestFirst)
|
||||||
|
.use_commit_graph(false);
|
||||||
|
|
||||||
|
let walk = platform.all()?;
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
walk,
|
||||||
|
limit,
|
||||||
|
visited: 0,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
pub const fn visited(&self) -> usize {
|
||||||
|
self.visited
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
pub fn read(&mut self, out: &mut Vec<CommitId>) -> Result<usize> {
|
||||||
|
let mut count = 0_usize;
|
||||||
|
|
||||||
|
while let Some(Ok(info)) = self.walk.next() {
|
||||||
|
let bytes = info.id.as_bytes();
|
||||||
|
let commit_id: CommitId = Oid::from_bytes(bytes)?.into();
|
||||||
|
|
||||||
|
out.push(commit_id);
|
||||||
|
|
||||||
|
count += 1;
|
||||||
|
|
||||||
|
if count == self.limit {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.visited += count;
|
||||||
|
|
||||||
|
Ok(count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
@ -183,6 +256,40 @@ mod tests {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_logwalker_without_filter() -> Result<()> {
|
||||||
|
let file_path = Path::new("foo");
|
||||||
|
let (_td, repo) = repo_init_empty().unwrap();
|
||||||
|
let root = repo.path().parent().unwrap();
|
||||||
|
let repo_path: &RepoPath =
|
||||||
|
&root.as_os_str().to_str().unwrap().into();
|
||||||
|
|
||||||
|
File::create(root.join(file_path))?.write_all(b"a")?;
|
||||||
|
stage_add_file(repo_path, file_path).unwrap();
|
||||||
|
commit(repo_path, "commit1").unwrap();
|
||||||
|
File::create(root.join(file_path))?.write_all(b"a")?;
|
||||||
|
stage_add_file(repo_path, file_path).unwrap();
|
||||||
|
let oid2 = commit(repo_path, "commit2").unwrap();
|
||||||
|
|
||||||
|
let mut repo = gix::open(repo_path.gitpath()).unwrap();
|
||||||
|
let mut walk = LogWalkerWithoutFilter::new(&mut repo, 100)?;
|
||||||
|
let mut items = Vec::new();
|
||||||
|
assert!(matches!(walk.read(&mut items), Ok(2)));
|
||||||
|
|
||||||
|
let info = get_commits_info(repo_path, &items, 50).unwrap();
|
||||||
|
dbg!(&info);
|
||||||
|
|
||||||
|
assert_eq!(items.len(), 2);
|
||||||
|
assert_eq!(items[0], oid2);
|
||||||
|
|
||||||
|
let mut items = Vec::new();
|
||||||
|
assert!(matches!(walk.read(&mut items), Ok(0)));
|
||||||
|
|
||||||
|
assert_eq!(items.len(), 0);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_logwalker_with_filter() -> Result<()> {
|
fn test_logwalker_with_filter() -> Result<()> {
|
||||||
let file_path = Path::new("foo");
|
let file_path = Path::new("foo");
|
||||||
|
@ -71,7 +71,7 @@ pub use hooks::{
|
|||||||
};
|
};
|
||||||
pub use hunks::{reset_hunk, stage_hunk, unstage_hunk};
|
pub use hunks::{reset_hunk, stage_hunk, unstage_hunk};
|
||||||
pub use ignore::add_to_ignore;
|
pub use ignore::add_to_ignore;
|
||||||
pub use logwalker::LogWalker;
|
pub use logwalker::{LogWalker, LogWalkerWithoutFilter};
|
||||||
pub use merge::{
|
pub use merge::{
|
||||||
abort_pending_rebase, abort_pending_state,
|
abort_pending_rebase, abort_pending_state,
|
||||||
continue_pending_rebase, merge_branch, merge_commit, merge_msg,
|
continue_pending_rebase, merge_branch, merge_commit, merge_msg,
|
||||||
|
Loading…
Reference in New Issue
Block a user