diff --git a/rust/hg-core/src/revlog/index.rs b/rust/hg-core/src/revlog/index.rs --- a/rust/hg-core/src/revlog/index.rs +++ b/rust/hg-core/src/revlog/index.rs @@ -599,15 +599,18 @@ impl Index { &self, rev: Revision, stop_rev: Option, + using_general_delta: Option, ) -> Result<(Vec, bool), HgError> { let mut current_rev = rev; let mut entry = self.get_entry(rev).unwrap(); let mut chain = vec![]; + let using_general_delta = + using_general_delta.unwrap_or_else(|| self.uses_generaldelta()); while current_rev.0 != entry.base_revision_or_base_of_delta_chain().0 && stop_rev.map(|r| r != current_rev).unwrap_or(true) { chain.push(current_rev); - let new_rev = if self.uses_generaldelta() { + let new_rev = if using_general_delta { entry.base_revision_or_base_of_delta_chain() } else { UncheckedRevision(current_rev.0 - 1) diff --git a/rust/hg-cpython/src/revlog.rs b/rust/hg-cpython/src/revlog.rs --- a/rust/hg-cpython/src/revlog.rs +++ b/rust/hg-cpython/src/revlog.rs @@ -368,7 +368,12 @@ py_class!(pub class MixedIndex |py| { nodemap_error(py, NodeMapError::RevisionNotInIndex(stop_rev)) })?) } else {None}; - let (chain, stopped) = index.delta_chain(rev, stop_rev).map_err(|e| { + let using_general_delta = args.get_item(py, 2) + .extract::>(py)? + .map(|i| i != 0); + let (chain, stopped) = index.delta_chain( + rev, stop_rev, using_general_delta + ).map_err(|e| { PyErr::new::(py, e.to_string()) })?;