rust/hg-core/src/ancestors.rs
changeset 41714 70827ebba453
parent 41246 619ee4039bd4
child 41715 fccb61a1777b
equal deleted inserted replaced
41713:9de6c4f61608 41714:70827ebba453
    77         Ok(this)
    77         Ok(this)
    78     }
    78     }
    79 
    79 
    80     #[inline]
    80     #[inline]
    81     fn conditionally_push_rev(&mut self, rev: Revision) {
    81     fn conditionally_push_rev(&mut self, rev: Revision) {
    82         if self.stoprev <= rev && !self.seen.contains(&rev) {
    82         if self.stoprev <= rev && self.seen.insert(rev) {
    83             self.seen.insert(rev);
       
    84             self.visit.push(rev);
    83             self.visit.push(rev);
    85         }
    84         }
    86     }
    85     }
    87 
    86 
    88     /// Consumes partially the iterator to tell if the given target
    87     /// Consumes partially the iterator to tell if the given target
   152         };
   151         };
   153         let [p1, p2] = match self.graph.parents(current) {
   152         let [p1, p2] = match self.graph.parents(current) {
   154             Ok(ps) => ps,
   153             Ok(ps) => ps,
   155             Err(e) => return Some(Err(e)),
   154             Err(e) => return Some(Err(e)),
   156         };
   155         };
   157         if p1 < self.stoprev || self.seen.contains(&p1) {
   156         if p1 < self.stoprev || !self.seen.insert(p1) {
   158             self.visit.pop();
   157             self.visit.pop();
   159         } else {
   158         } else {
   160             *(self.visit.peek_mut().unwrap()) = p1;
   159             *(self.visit.peek_mut().unwrap()) = p1;
   161             self.seen.insert(p1);
       
   162         };
   160         };
   163 
   161 
   164         self.conditionally_push_rev(p2);
   162         self.conditionally_push_rev(p2);
   165         Some(Ok(current))
   163         Some(Ok(current))
   166     }
   164     }