diff --git a/src/filter/mod.rs b/src/filter/mod.rs index 6c6372613..96073be2d 100644 --- a/src/filter/mod.rs +++ b/src/filter/mod.rs @@ -297,20 +297,21 @@ fn apply_to_commit2( let filtered_tree = match &to_op(filter) { Op::Linear => { - let p: Vec<_> = commit.parents().collect(); + let p: Vec<_> = commit.parent_ids().collect(); if p.len() == 0 { + transaction.insert(filter, commit.id(), commit.id(), true); return Ok(Some(commit.id())); } - let parent = some_or!(apply_to_commit2(op, &p[0], transaction)?, { + let parent = some_or!(transaction.get(filter, p[0]), { return Ok(None); }); - let parent_commit = repo.find_commit(parent)?; - return Some(history::rewrite_commit( - repo, + return Some(history::create_filtered_commit( commit, - &[&parent_commit], - &commit.tree()?, + vec![parent], + commit.tree()?, + transaction, + filter, )) .transpose(); } diff --git a/tests/filter/linear.t b/tests/filter/linear.t index e8839a7c2..27f8538f9 100644 --- a/tests/filter/linear.t +++ b/tests/filter/linear.t @@ -32,6 +32,7 @@ * add file1 $ josh-filter -s :linear refs/heads/master --update refs/heads/filtered + [3] :linear $ git log --graph --pretty=%s refs/heads/filtered * Merge branch 'branch2' @@ -56,6 +57,7 @@ * add file1 $ josh-filter -s :linear refs/heads/master --update refs/heads/filtered --reverse + [3] :linear $ git log --graph --pretty=%s refs/heads/master * mod file2