refactor(tvix/castore): drop {Directory,File,Symlink}Node
Add a `SymlinkTarget` type to represent validated symlink targets. With this, no invalid states are representable, so we can make `Node` be just an enum of all three kind of types, and allow access to these fields directly. Change-Id: I20bdd480c8d5e64a827649f303c97023b7e390f2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12216 Reviewed-by: benjaminedwardwebb <benjaminedwardwebb@gmail.com> Autosubmit: flokli <flokli@flokli.de> Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI
This commit is contained in:
parent
49b173786c
commit
8ea7d2b60e
27 changed files with 555 additions and 461 deletions
|
|
@ -2,6 +2,7 @@ use super::Directory;
|
|||
use super::DirectoryService;
|
||||
use crate::B3Digest;
|
||||
use crate::Error;
|
||||
use crate::Node;
|
||||
use async_stream::try_stream;
|
||||
use futures::stream::BoxStream;
|
||||
use std::collections::{HashSet, VecDeque};
|
||||
|
|
@ -57,15 +58,15 @@ pub fn traverse_directory<'a, DS: DirectoryService + 'static>(
|
|||
// enqueue all child directory digests to the work queue, as
|
||||
// long as they're not part of the worklist or already sent.
|
||||
// This panics if the digest looks invalid, it's supposed to be checked first.
|
||||
for (_, child_directory_node) in current_directory.directories() {
|
||||
let child_digest = child_directory_node.digest();
|
||||
|
||||
if worklist_directory_digests.contains(child_digest)
|
||||
|| sent_directory_digests.contains(child_digest)
|
||||
{
|
||||
continue;
|
||||
for (_, child_directory_node) in current_directory.nodes() {
|
||||
if let Node::Directory{digest: child_digest, ..} = child_directory_node {
|
||||
if worklist_directory_digests.contains(child_digest)
|
||||
|| sent_directory_digests.contains(child_digest)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
worklist_directory_digests.push_back(child_digest.clone());
|
||||
}
|
||||
worklist_directory_digests.push_back(child_digest.clone());
|
||||
}
|
||||
|
||||
yield current_directory;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue