threads / patch / 9727

patch, 2 partsfilter-branch: provide the convenience functions also for commit filters

Subject: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters

## tl;dr

3 messages between Aug 31, 2007 and Aug 31, 2007. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Johannes Schindelin· Aug 31, 2007, 19:05 UTC · lore

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>
---
	Evidently, this is on top of my documentation cleanup...
	Obviously, I think that these two changes are simple enough to be
	included even this late in the game for 1.5.3.  But I understand
	completely when people shout at me: "What exactly does deep
	feature freeze mean to you *knocks on Dscho's head*?"
 Documentation/git-filter-branch.txt |    3 ---
 git-filter-branch.sh                |   25 +++++++++++++++----------
 t/t7003-filter-branch.sh            |   10 ++++++++++
 3 files changed, 25 insertions(+), 13 deletions(-)
Show changes to 3 files +25 −13

Documentation/git-filter-branch.txt, git-filter-branch.sh, t/t7003-filter-branch.sh

diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index 4f89c04..456d52b 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -112,9 +112,6 @@ OPTIONS
 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 c166c97..3b041d8 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -8,15 +8,6 @@
 # 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
 }
@@ -75,6 +66,20 @@ set_ident () {
 	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=
@@ -131,7 +136,7 @@ do
 		filter_msg="$OPTARG"
 		;;
 	--commit-filter)
-		filter_commit="$OPTARG"
+		filter_commit='SOURCE_FUNCTIONS=1 . "$this_script";'" $OPTARG"
 		;;
 	--tag-name-filter)
 		filter_tag_name="$OPTARG"
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index bc6e2dd..c79853d 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -159,4 +159,14 @@ test_expect_success 'barf on invalid name' '
 	! 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
-- 
1.5.3.rc7.18.gc9b59
Junio C Hamano· Aug 31, 2007, 20:59 UTC · re: Johannes Schindelin · lore

Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 	Obviously, I think that these two changes are simple enough to be
> 	included even this late in the game for 1.5.3.  But I understand
> 	completely when people shout at me: "What exactly does deep
> 	feature freeze mean to you *knocks on Dscho's head*?"

My response to those people who might shout is that this is merely a step to complete a _new_ program that was not in _any_ released version to make it feature complete. You do not have to even pretend that filter-branch did not exist before -- it actually didn't. The new part might be buggier than other parts, but that's the same way as any other software development process. If the new 'map' does not work as advertised there is always 1.5.3.1.

Thanks.
Johannes Schindelin· Aug 31, 2007, 21:10 UTC · re: Junio C Hamano · lore

Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters

Hi,
On Fri, 31 Aug 2007, Junio C Hamano wrote:
Show 14 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > 	Obviously, I think that these two changes are simple enough to be
> > 	included even this late in the game for 1.5.3.  But I understand
> > 	completely when people shout at me: "What exactly does deep
> > 	feature freeze mean to you *knocks on Dscho's head*?"
> 
> My response to those people who might shout is that this is merely a 
> step to complete a _new_ program that was not in _any_ released version 
> to make it feature complete.  You do not have to even pretend that 
> filter-branch did not exist before -- it actually didn't.  The new part 
> might be buggier than other parts, but that's the same way as any other 
> software development process.  If the new 'map' does not work as 
> advertised there is always 1.5.3.1.
Thank you for your encouraging words.

And yes, if there are bugs, I will be more than happy to fix them; and a released version always gets more eyes than an unreleased one.

Thanks, Dscho

← back to recent threads