filter-branch: stop special-casing $filter_subdir argument
authorThomas Rast <trast@student.ethz.ch>
Wed, 11 Nov 2009 08:53:46 +0000 (09:53 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 Nov 2009 19:26:43 +0000 (11:26 -0800)
commit2c1d2d818895d896f706835142a75978aabdbdc9
tree0a7b2e4288afa85cee809e0e434f465b158f26c5
parent78d553b7d7b269bb22ebd8b1198657c37484a3a0
filter-branch: stop special-casing $filter_subdir argument

Handling $filter_subdir in the usual way requires a separate case at
every use, because the variable is empty when unused.

Furthermore, --subdirectory-filter supplies its own '--', and if the user
provided one himself, such as in

  git filter-branch --subdirectory-filter subdir -- --all -- subdir/file

an extra '--' was used as path filter in the call to git-rev-list that
determines the commits that shall be rewritten.

To keep the argument handling sane, we filter $@ to contain only the
non-revision arguments, and store all revisions in $ref_args.  The
$ref_args are easy to handle since only the SHA1s are needed; the
actual branch names have already been stored in $tempdir/heads at this
point.

An extra separating -- is only required if the user did not provide
any non-revision arguments, as the latter disambiguate the
$filter_subdir following after them (or fail earlier because they are
ambiguous themselves).

Thanks to Johannes Sixt for suggesting this solution.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-filter-branch.sh