597 /// `stoprev` was hit. |
597 /// `stoprev` was hit. |
598 pub fn delta_chain( |
598 pub fn delta_chain( |
599 &self, |
599 &self, |
600 rev: Revision, |
600 rev: Revision, |
601 stop_rev: Option<Revision>, |
601 stop_rev: Option<Revision>, |
|
602 using_general_delta: Option<bool>, |
602 ) -> Result<(Vec<Revision>, bool), HgError> { |
603 ) -> Result<(Vec<Revision>, bool), HgError> { |
603 let mut current_rev = rev; |
604 let mut current_rev = rev; |
604 let mut entry = self.get_entry(rev).unwrap(); |
605 let mut entry = self.get_entry(rev).unwrap(); |
605 let mut chain = vec![]; |
606 let mut chain = vec![]; |
|
607 let using_general_delta = |
|
608 using_general_delta.unwrap_or_else(|| self.uses_generaldelta()); |
606 while current_rev.0 != entry.base_revision_or_base_of_delta_chain().0 |
609 while current_rev.0 != entry.base_revision_or_base_of_delta_chain().0 |
607 && stop_rev.map(|r| r != current_rev).unwrap_or(true) |
610 && stop_rev.map(|r| r != current_rev).unwrap_or(true) |
608 { |
611 { |
609 chain.push(current_rev); |
612 chain.push(current_rev); |
610 let new_rev = if self.uses_generaldelta() { |
613 let new_rev = if using_general_delta { |
611 entry.base_revision_or_base_of_delta_chain() |
614 entry.base_revision_or_base_of_delta_chain() |
612 } else { |
615 } else { |
613 UncheckedRevision(current_rev.0 - 1) |
616 UncheckedRevision(current_rev.0 - 1) |
614 }; |
617 }; |
615 current_rev = self.check_revision(new_rev).ok_or_else(|| { |
618 current_rev = self.check_revision(new_rev).ok_or_else(|| { |