find_alive performance (matters a lot for unrecord)
[?]
Apr 29, 2021, 3:56 PM
AD6M434OFUCH6ISHP7GXSNNRBHEWP242ZDH7QCVCYLHMRASGE5MQCDependencies
- [2]
SFQBWL6PImproving unrecord performance (8 times faster on my tests) - [3]
3KHT2M5ZFixing alive vertex detection in down contexts too - [4]
I52XSRUHMassive cleanup, and simplification - [5]
YN63NUZOSanakirja 1.0 - [6]
WZVCLZKYaddress clippy lints - [7]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting). - [8]
6YMDOZIBRefactoring apply - [9]
CCLLB7OIUpgrading to Sanakirja 0.15 + version bump - [10]
VO5OQW4WRemoving anyhow in libpijul - [11]
I24UEJQLVarious post-fire fixes - [12]
T7CAACFBFixing zombie conflicts (some vertices were wrongly detected alive)
Change contents
- replacement in libpijul/src/find_alive.rs at line 9
let mut stack = vec![SerializedEdge::empty(vertex0.start_pos(), ChangeId::ROOT)];let mut stack = vec![(SerializedEdge::empty(vertex0.start_pos(), ChangeId::ROOT), 0)]; - replacement in libpijul/src/find_alive.rs at line 12
while let Some(elt) = stack.pop() {while let Some((elt, len)) = stack.pop() { - edit in libpijul/src/find_alive.rs at line 28
&& *vertex != vertex0 - replacement in libpijul/src/find_alive.rs at line 30[3.764807]→[3.134756:134799](∅→∅),[3.134799]→[3.764849:764923](∅→∅),[3.764849]→[3.764849:764923](∅→∅)
alive.insert(*vertex);stack.truncate(elt_index);break;if *vertex == vertex0 {assert!(alive.is_empty());return Ok(alive)} else {alive.insert(*vertex);stack.truncate(elt_index);break;} - replacement in libpijul/src/find_alive.rs at line 42
stack.push(*v)stack.push((*v, len + 1)) - replacement in libpijul/src/find_alive.rs at line 56
let mut stack = vec![(SerializedEdge::empty(vertex0.end_pos(), ChangeId::ROOT), false)];let mut stack = vec![SerializedEdge::empty(vertex0.end_pos(), ChangeId::ROOT)]; - replacement in libpijul/src/find_alive.rs at line 59
// `to_self` tells whether we've already marked a vertex alive// along the path from `vertex0`. This can happen if the only// vertices alive are from change `change`.while let Some((elt, mut to_self)) = stack.pop() {while let Some(elt) = stack.pop() { - edit in libpijul/src/find_alive.rs at line 68
debug!("stack = {:?}", stack); - replacement in libpijul/src/find_alive.rs at line 74[3.15838]→[3.766233:766283](∅→∅),[3.64879]→[3.766233:766283](∅→∅),[3.115289]→[3.766233:766283](∅→∅),[3.766233]→[3.766233:766283](∅→∅)
debug!("find_alive_up: v = {:?}", v);debug!("find_alive_up: v = {:?} change = {:?}", v, change); - replacement in libpijul/src/find_alive.rs at line 88
if is_file {if is_file && vertex != vertex0 { - replacement in libpijul/src/find_alive.rs at line 94[3.767445]→[3.135385:135438](∅→∅),[3.135438]→[2.332:378](∅→∅),[2.378]→[3.16362:16444](∅→∅),[3.135438]→[3.16362:16444](∅→∅),[3.16362]→[3.16362:16444](∅→∅),[3.16444]→[2.379:420](∅→∅)
if v.introduced_by() != change {alive.insert(vertex);stack.truncate(elt_index);break;} else if !to_self {if vertex != vertex0 { - edit in libpijul/src/find_alive.rs at line 96
to_self = true; - edit in libpijul/src/find_alive.rs at line 97
stack.truncate(elt_index);stack.truncate(elt_index);break; - replacement in libpijul/src/find_alive.rs at line 103
if is_file {if is_file && vertex != vertex0 { - replacement in libpijul/src/find_alive.rs at line 109
stack.push((*v, to_self))stack.push(*v)