diff options
author | Florian Klink <flokli@flokli.de> | 2024-05-05T08·23+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-05-06T15·11+0000 |
commit | 75f2a1f97d80469d7a179970377b373e89d7a28a (patch) | |
tree | 84906629fc5a214b680ddf2b54da2bdbbe9e4d6d /tvix/castore/src/import | |
parent | 281bd46a43437c02435a67239c47994b7636ba66 (diff) |
fix(tvix/castore/import): deal with entry.path() not having a parent r/8077
We got away with not properly dealing with this for the archive case, where everything is contained inside a toplevel dir, but NARs can encode a single file/symlink. Properly break if the IngestionEntry path has the ROOT as parent, and only create filling directories in the other case. Change-Id: Ib378d0d1040de7c3fe310912a0b0488c55afee83 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11590 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: Connor Brewster <cbrewster@hey.com>
Diffstat (limited to 'tvix/castore/src/import')
-rw-r--r-- | tvix/castore/src/import/mod.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/tvix/castore/src/import/mod.rs b/tvix/castore/src/import/mod.rs index 6c69d04f3026..87e289911300 100644 --- a/tvix/castore/src/import/mod.rs +++ b/tvix/castore/src/import/mod.rs @@ -121,15 +121,17 @@ where }), }; - if entry.path().components().count() == 1 { + let parent = entry + .path() + .parent() + .expect("Tvix bug: got entry with root node"); + + if parent == crate::Path::ROOT { break node; + } else { + // record node in parent directory, creating a new [Directory] if not there yet. + directories.entry(parent.to_owned()).or_default().add(node); } - - // record node in parent directory, creating a new [Directory] if not there yet. - directories - .entry(entry.path().parent().unwrap().to_owned()) - .or_default() - .add(node); }; assert!( |