Show More
@@ -345,14 +345,6 b' impl<G: Graph> MissingAncestors<G> {' | |||
|
345 | 345 | if revs_visit.remove(&curr) { |
|
346 | 346 | missing.push(curr); |
|
347 | 347 | this_visit_is_revs = true; |
|
348 | } else if bases_visit.contains(&curr) { | |
|
349 | this_visit_is_revs = false; | |
|
350 | } else { | |
|
351 | // not an ancestor of revs or bases: ignore | |
|
352 | continue; | |
|
353 | } | |
|
354 | ||
|
355 | { | |
|
356 | 348 | for p in self.graph.parents(curr)?.iter().cloned() { |
|
357 | 349 | if p == NULL_REVISION { |
|
358 | 350 | continue; |
@@ -378,6 +370,35 b' impl<G: Graph> MissingAncestors<G> {' | |||
|
378 | 370 | } |
|
379 | 371 | } |
|
380 | 372 | } |
|
373 | } else if bases_visit.contains(&curr) { | |
|
374 | this_visit_is_revs = false; | |
|
375 | for p in self.graph.parents(curr)?.iter().cloned() { | |
|
376 | if p == NULL_REVISION { | |
|
377 | continue; | |
|
378 | } | |
|
379 | let in_other_visit = if this_visit_is_revs { | |
|
380 | bases_visit.contains(&p) | |
|
381 | } else { | |
|
382 | revs_visit.contains(&p) | |
|
383 | }; | |
|
384 | if in_other_visit || both_visit.contains(&p) { | |
|
385 | // p is implicitely in this_visit. | |
|
386 | // This means p is or should be in bothvisit | |
|
387 | // TODO optim: hence if bothvisit, we look up twice | |
|
388 | revs_visit.remove(&p); | |
|
389 | bases_visit.insert(p); | |
|
390 | both_visit.insert(p); | |
|
391 | } else { | |
|
392 | // visit later | |
|
393 | if this_visit_is_revs { | |
|
394 | revs_visit.insert(p); | |
|
395 | } else { | |
|
396 | bases_visit.insert(p); | |
|
397 | } | |
|
398 | } | |
|
399 | } | |
|
400 | } else { | |
|
401 | // not an ancestor of revs or bases: ignore | |
|
381 | 402 | } |
|
382 | 403 | } |
|
383 | 404 | missing.reverse(); |
General Comments 0
You need to be logged in to leave comments.
Login now