refactor(tvix/cli/refscan): use wu-manber crate with &[u8] support
PR'ed at https://github.com/tvlfyi/wu-manber/pull/1, and now merged. Change-Id: I8c71e359196396a1d42a3ea2ab7ac15b137b2db0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8992 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: raitobezarius <tvl@lahfa.xyz>
This commit is contained in:
parent
aa1982c085
commit
737a6ca01e
6 changed files with 15 additions and 29 deletions
2
tvix/Cargo.lock
generated
2
tvix/Cargo.lock
generated
|
@ -3185,7 +3185,7 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
|||
[[package]]
|
||||
name = "wu-manber"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/tvlfyi/wu-manber.git#e77628cafcf45d41b9e455be86a6b1b9f46b2092"
|
||||
source = "git+https://github.com/tvlfyi/wu-manber.git#0d5b22bea136659f7de60b102a7030e0daaa503d"
|
||||
|
||||
[[package]]
|
||||
name = "xml-rs"
|
||||
|
|
|
@ -10252,8 +10252,8 @@ rec {
|
|||
workspace_member = null;
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/tvlfyi/wu-manber.git";
|
||||
rev = "e77628cafcf45d41b9e455be86a6b1b9f46b2092";
|
||||
sha256 = "02byhfiw41mlgr1c43n2iq6jw5sbyn8l1acv5v71a07h5l18q0cy";
|
||||
rev = "0d5b22bea136659f7de60b102a7030e0daaa503d";
|
||||
sha256 = "1zhk83lbq99xzyjwphv2qrb8f8qgfqwa5bbbvyzm0z0bljsjv0pd";
|
||||
};
|
||||
authors = [
|
||||
"Joe Neeman <joeneeman@gmail.com>"
|
||||
|
|
|
@ -311,9 +311,9 @@ mod derivation_builtins {
|
|||
Default::default()
|
||||
} else {
|
||||
let mut refscan = state.reference_scanner();
|
||||
drv.arguments.iter().for_each(|s| refscan.scan_str(s));
|
||||
drv.environment.values().for_each(|s| refscan.scan_bytes(s));
|
||||
refscan.scan_str(&drv.builder);
|
||||
drv.arguments.iter().for_each(|s| refscan.scan(s));
|
||||
drv.environment.values().for_each(|s| refscan.scan(s));
|
||||
refscan.scan(&drv.builder);
|
||||
refscan.finalise()
|
||||
}
|
||||
};
|
||||
|
@ -400,7 +400,7 @@ mod derivation_builtins {
|
|||
.context("evaluating the `content` parameter of builtins.toFile")?;
|
||||
|
||||
let mut refscan = state.borrow().reference_scanner();
|
||||
refscan.scan_str(content.as_str());
|
||||
refscan.scan(content.as_str());
|
||||
let refs = {
|
||||
let paths = state.borrow();
|
||||
refscan
|
||||
|
|
|
@ -37,29 +37,15 @@ impl<P: Clone + Ord + AsRef<[u8]>> ReferenceScanner<P> {
|
|||
}
|
||||
}
|
||||
|
||||
/// If the given &[u8] is also a valid UTF-8 string, scan for all non-
|
||||
/// overlapping matches and collect them in the scanner.
|
||||
/// TODO: ideally, wu-manber would just work with &[u8] directly.
|
||||
pub fn scan_bytes(&mut self, haystack: &[u8]) {
|
||||
if haystack.len() < STORE_PATH_LEN {
|
||||
return;
|
||||
}
|
||||
|
||||
match std::str::from_utf8(haystack) {
|
||||
Ok(s) => self.scan_str(s),
|
||||
Err(_) => {}
|
||||
}
|
||||
}
|
||||
|
||||
/// Scan the given str for all non-overlapping matches and collect them
|
||||
/// in the scanner.
|
||||
pub fn scan_str(&mut self, haystack: &str) {
|
||||
if haystack.len() < STORE_PATH_LEN {
|
||||
pub fn scan<S: AsRef<[u8]>>(&mut self, haystack: S) {
|
||||
if haystack.as_ref().len() < STORE_PATH_LEN {
|
||||
return;
|
||||
}
|
||||
|
||||
if let Some(searcher) = &self.searcher {
|
||||
for m in searcher.find(&haystack) {
|
||||
for m in searcher.find(haystack) {
|
||||
self.matches.push(m.pat_idx);
|
||||
}
|
||||
}
|
||||
|
@ -85,7 +71,7 @@ mod tests {
|
|||
fn test_no_patterns() {
|
||||
let mut scanner: ReferenceScanner<String> = ReferenceScanner::new(vec![]);
|
||||
|
||||
scanner.scan_str(HELLO_DRV);
|
||||
scanner.scan(HELLO_DRV);
|
||||
|
||||
let result = scanner.finalise();
|
||||
|
||||
|
@ -97,7 +83,7 @@ mod tests {
|
|||
let mut scanner = ReferenceScanner::new(vec![
|
||||
"/nix/store/4xw8n979xpivdc46a9ndcvyhwgif00hz-bash-5.1-p16".to_string(),
|
||||
]);
|
||||
scanner.scan_str(HELLO_DRV);
|
||||
scanner.scan(HELLO_DRV);
|
||||
|
||||
let result = scanner.finalise();
|
||||
|
||||
|
@ -117,7 +103,7 @@ mod tests {
|
|||
];
|
||||
|
||||
let mut scanner = ReferenceScanner::new(candidates.clone());
|
||||
scanner.scan_str(HELLO_DRV);
|
||||
scanner.scan(HELLO_DRV);
|
||||
|
||||
let result = scanner.finalise();
|
||||
assert_eq!(result.len(), 3);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"test-generator 0.3.0 (git+https://github.com/JamesGuthrie/test-generator.git?rev=82e799979980962aec1aa324ec6e0e4cad781f41#82e799979980962aec1aa324ec6e0e4cad781f41)": "08brp3qqa55hijc7xby3lam2cc84hvx1zzfqv6lj7smlczh8k32y",
|
||||
"tonic-mock 0.1.0 (git+https://github.com/brainrake/tonic-mock?branch=bump-dependencies#ec1a15510875de99d709d684190db5d9beab175e)": "0lwa03hpp0mxa6aa1zv5w68k61y4hccfm0q2ykyq392fwal8vb50",
|
||||
"wu-manber 0.1.0 (git+https://github.com/tvlfyi/wu-manber.git#e77628cafcf45d41b9e455be86a6b1b9f46b2092)": "02byhfiw41mlgr1c43n2iq6jw5sbyn8l1acv5v71a07h5l18q0cy"
|
||||
"wu-manber 0.1.0 (git+https://github.com/tvlfyi/wu-manber.git#0d5b22bea136659f7de60b102a7030e0daaa503d)": "1zhk83lbq99xzyjwphv2qrb8f8qgfqwa5bbbvyzm0z0bljsjv0pd"
|
||||
}
|
|
@ -11,7 +11,7 @@ let
|
|||
outputHashes = {
|
||||
"test-generator-0.3.0" = "08brp3qqa55hijc7xby3lam2cc84hvx1zzfqv6lj7smlczh8k32y";
|
||||
"tonic-mock-0.1.0" = "0lwa03hpp0mxa6aa1zv5w68k61y4hccfm0q2ykyq392fwal8vb50";
|
||||
"wu-manber-0.1.0" = "02byhfiw41mlgr1c43n2iq6jw5sbyn8l1acv5v71a07h5l18q0cy";
|
||||
"wu-manber-0.1.0" = "1zhk83lbq99xzyjwphv2qrb8f8qgfqwa5bbbvyzm0z0bljsjv0pd";
|
||||
};
|
||||
};
|
||||
in
|
||||
|
|
Loading…
Reference in a new issue