summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f0fd889)
raw | patch | inline | side by side (parent: f0fd889)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Fri, 31 Aug 2007 19:05:36 +0000 (20:05 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sat, 1 Sep 2007 06:22:51 +0000 (23:22 -0700) |
Move the convenience functions to the top of git-filter-branch.sh, and
return from the script when the environment variable SOURCE_FUNCTIONS is
set.
By sourcing git-filter-branch with that variable set automatically, all
commit filters may access the convenience functions like "map".
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
return from the script when the environment variable SOURCE_FUNCTIONS is
set.
By sourcing git-filter-branch with that variable set automatically, all
commit filters may access the convenience functions like "map".
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-filter-branch.txt | patch | blob | history | |
git-filter-branch.sh | patch | blob | history | |
t/t7003-filter-branch.sh | patch | blob | history |
index 4f89c04a88260bb82d02458767bef18b08121395..456d52bb2490ded4552bb3ea2a00e30d27b73770 100644 (file)
As a special extension, the commit filter may emit multiple
commit ids; in that case, ancestors of the original commit will
have all of them as parents.
-+
-Note that the 'map' function is not available in the commit filter yet.
-This will be changed in a future version.
--tag-name-filter <command>::
This is the filter for rewriting tag names. When passed,
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index c166c978ec2a6e1dc26d8fb117c12ae59ca5b7fd..3b041d81efd7e96a49c40eba0e23fc0b18508c82 100755 (executable)
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
# a new branch. You can specify a number of filters to modify the commits,
# files and trees.
-USAGE="[--env-filter <command>] [--tree-filter <command>] \
-[--index-filter <command>] [--parent-filter <command>] \
-[--msg-filter <command>] [--commit-filter <command>] \
-[--tag-name-filter <command>] [--subdirectory-filter <directory>] \
-[--original <namespace>] [-d <directory>] [-f | --force] \
-[<rev-list options>...]"
-
-. git-sh-setup
-
warn () {
echo "$*" >&2
}
echo "[ -n \"\$GIT_${uid}_NAME\" ] || export GIT_${uid}_NAME=\"\${GIT_${uid}_EMAIL%%@*}\""
}
+# This script can be sourced by the commit filter to get the functions
+test "a$SOURCE_FUNCTIONS" = a1 && return
+this_script="$(cd "$(dirname "$0")"; pwd)"/$(basename "$0")
+export this_script
+
+USAGE="[--env-filter <command>] [--tree-filter <command>] \
+[--index-filter <command>] [--parent-filter <command>] \
+[--msg-filter <command>] [--commit-filter <command>] \
+[--tag-name-filter <command>] [--subdirectory-filter <directory>] \
+[--original <namespace>] [-d <directory>] [-f | --force] \
+[<rev-list options>...]"
+
+. git-sh-setup
+
tempdir=.git-rewrite
filter_env=
filter_tree=
filter_msg="$OPTARG"
;;
--commit-filter)
- filter_commit="$OPTARG"
+ filter_commit='SOURCE_FUNCTIONS=1 . "$this_script";'" $OPTARG"
;;
--tag-name-filter)
filter_tag_name="$OPTARG"
index bc6e2ddb19093fbdc9e4f94cbec71d369f0251ed..c79853d986ab31da6813576fe003f8a5885e0b64 100755 (executable)
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
! git filter-branch -f HEAD^
'
+test_expect_success '"map" works in commit filter' '
+ git filter-branch -f --commit-filter "\
+ parent=\$(git rev-parse \$GIT_COMMIT^) &&
+ mapped=\$(map \$parent) &&
+ actual=\$(echo \"\$@\" | sed \"s/^.*-p //\") &&
+ test \$mapped = \$actual &&
+ git commit-tree \"\$@\";" master~2..master &&
+ git rev-parse --verify master
+'
+
test_done