summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-02 17:12:18 +0530
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-02 17:12:18 +0530
commitf0e53be0fe93c53269399b3c7c843266dcae5b88 (patch)
tree2dce1f9f9b933cf3a39e9412040fe01a89cdfd09
parentdec4afc358aa30521d564068b219eca129245782 (diff)
probably a bit closer to a correct implementation.
It's much harder than expected :(. These graph traversals!
-rw-r--r--src/interactive.rs28
-rw-r--r--tests/interactive.rs6
2 files changed, 25 insertions, 9 deletions
diff --git a/src/interactive.rs b/src/interactive.rs
index 7f20728..77bcbc7 100644
--- a/src/interactive.rs
+++ b/src/interactive.rs
@@ -68,7 +68,6 @@ mod app {
let mut data = EntryData::default();
match entry {
Ok(entry) => {
- dbg!(entry.depth);
data.name = entry.file_name;
let file_size = match entry.metadata {
Some(Ok(ref m)) if !m.is_dir() => m.len(),
@@ -86,14 +85,26 @@ mod app {
match (entry.depth, previous_depth) {
(n, p) if n > p => {
sizes_per_depth_level.push(current_size_at_depth);
- current_size_at_depth = 0;
+ current_size_at_depth = file_size;
parent_node_idx = previous_node_idx;
}
(n, p) if n < p => {
- parent_node_idx = tree
- .neighbors_directed(parent_node_idx, Direction::Incoming)
- .next()
- .expect("every node in the iteration has a parent");
+ for _ in n..p {
+ let size_at_level_above = sizes_per_depth_level
+ .pop()
+ .expect("sizes per level to be in sync with graph");
+ tree.node_weight_mut(parent_node_idx)
+ .expect("node for parent index we just retrieved")
+ .size = current_size_at_depth;
+ current_size_at_depth += size_at_level_above;
+ parent_node_idx = tree
+ .neighbors_directed(
+ parent_node_idx,
+ Direction::Incoming,
+ )
+ .next()
+ .expect("every node in the iteration has a parent");
+ }
}
_ => {
current_size_at_depth += file_size;
@@ -111,6 +122,11 @@ mod app {
}
}
+ dbg!(previous_depth);
+ dbg!(sizes_per_depth_level);
+ dbg!(current_size_at_depth);
+ // TODO finish size computation - there may still be unresolved sizes on the stack
+
Ok(TerminalApp {
tree,
root_index,
diff --git a/tests/interactive.rs b/tests/interactive.rs
index a181362..38c5952 100644
--- a/tests/interactive.rs
+++ b/tests/interactive.rs
@@ -58,7 +58,7 @@ mod app {
}
n
};
- let root_size = 1259325;
+ let root_size = 1259070;
let r = add_node("", root_size, None);
{
let s = add_node("sample-01", root_size, Some(r));
@@ -67,7 +67,7 @@ mod app {
add_node("a", 256, Some(s));
add_node("b.empty", 0, Some(s));
add_node("c.lnk", 1, Some(s));
- let d = add_node("dir", 0, Some(s));
+ let d = add_node("dir", 1258024, Some(s));
{
add_node("1000bytes", 1000, Some(d));
add_node("dir-a.1mb", 1_000_000, Some(d));
@@ -76,7 +76,7 @@ mod app {
{
add_node(".gitkeep", 0, Some(e));
}
- let sub = add_node("sub", 0, Some(d));
+ let sub = add_node("sub", 256_000, Some(d));
{
add_node("dir-sub-a.256kb", 256_000, Some(sub));
}