Browse Source

filter-branch: retire --remap-to-ancestor

We can be clever and know by ourselves when we need the behavior
implied by "--remap-to-ancestor". No need to encumber users by having
them exposed to it as a tunable. (Option kept for backward compatibility,
but it's now a no-op.)

Signed-off-by: Csaba Henk <csaba@gluster.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Csaba Henk 14 years ago committed by Junio C Hamano
parent
commit
7ec344d802
  1. 26
      Documentation/git-filter-branch.txt
  2. 10
      git-filter-branch.sh
  3. 18
      t/t7003-filter-branch.sh

26
Documentation/git-filter-branch.txt

@ -159,18 +159,7 @@ to other tags will be rewritten to point to the underlying commit. @@ -159,18 +159,7 @@ to other tags will be rewritten to point to the underlying commit.
--subdirectory-filter <directory>::
Only look at the history which touches the given subdirectory.
The result will contain that directory (and only that) as its
project root. Implies --remap-to-ancestor.

--remap-to-ancestor::
Rewrite refs to the nearest rewritten ancestor instead of
ignoring them.
+
Normally, positive refs on the command line are only changed if the
commit they point to was rewritten. However, you can limit the extent
of this rewriting by using linkgit:rev-list[1] arguments, e.g., path
limiters. Refs pointing to such excluded commits would then normally
be ignored. With this option, they are instead rewritten to point at
the nearest ancestor that was not excluded.
project root. Implies <<Remap_to_ancestor>>.

--prune-empty::
Some kind of filters will generate empty commits, that left the tree
@ -204,7 +193,18 @@ the nearest ancestor that was not excluded. @@ -204,7 +193,18 @@ the nearest ancestor that was not excluded.
Arguments for 'git rev-list'. All positive refs included by
these options are rewritten. You may also specify options
such as '--all', but you must use '--' to separate them from
the 'git filter-branch' options.
the 'git filter-branch' options. Implies <<Remap_to_ancestor>>.


[[Remap_to_ancestor]]
Remap to ancestor
~~~~~~~~~~~~~~~~~

By using linkgit:rev-list[1] arguments, e.g., path limiters, you can limit the
set of revisions which get rewritten. However, positive refs on the command
line are distinguished: we don't let them be excluded by such limiters. For
this purpose, they are instead rewritten to point at the nearest ancestor that
was not excluded.


Examples

10
git-filter-branch.sh

@ -139,6 +139,7 @@ do @@ -139,6 +139,7 @@ do
continue
;;
--remap-to-ancestor)
# deprecated ($remap_to_ancestor is set now automatically)
shift
remap_to_ancestor=t
continue
@ -265,7 +266,14 @@ mkdir ../map || die "Could not create map/ directory" @@ -265,7 +266,14 @@ mkdir ../map || die "Could not create map/ directory"

# we need "--" only if there are no path arguments in $@
nonrevs=$(git rev-parse --no-revs "$@") || exit
test -z "$nonrevs" && dashdash=-- || dashdash=
if test -z "$nonrevs"
then
dashdash=--
else
dashdash=
remap_to_ancestor=t
fi

rev_args=$(git rev-parse --revs-only "$@")

case "$filter_subdir" in

18
t/t7003-filter-branch.sh

@ -307,6 +307,24 @@ test_expect_success '--remap-to-ancestor with filename filters' ' @@ -307,6 +307,24 @@ test_expect_success '--remap-to-ancestor with filename filters' '
test $orig_invariant = $(git rev-parse invariant)
'

test_expect_success 'automatic remapping to ancestor with filename filters' '
git checkout master &&
git reset --hard A &&
test_commit add-foo2 foo 1 &&
git branch moved-foo2 &&
test_commit add-bar2 bar a &&
git branch invariant2 &&
orig_invariant=$(git rev-parse invariant2) &&
git branch moved-bar2 &&
test_commit change-foo2 foo 2 &&
git filter-branch -f \
moved-foo2 moved-bar2 A..master \
-- -- foo &&
test $(git rev-parse moved-foo2) = $(git rev-parse moved-bar2) &&
test $(git rev-parse moved-foo2) = $(git rev-parse master^) &&
test $orig_invariant = $(git rev-parse invariant2)
'

test_expect_success 'setup submodule' '
rm -fr ?* .git &&
git init &&

Loading…
Cancel
Save