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

3 messages from 2007-08-31 to 2007-08-31. Participants: Johannes Schindelin, Junio C Hamano.
Thread: https://gitlist.dev/t/9727

## Johannes Schindelin, 2007-08-31 19:05

Subject: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
Message-ID: <Pine.LNX.4.64.0708312005070.28586@racer.site>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0708312005070.28586%40racer.site

```

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(-)

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, 2007-08-31 20:59

Subject: Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
Message-ID: <7vzm07xvwa.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vzm07xvwa.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <Pine.LNX.4.64.0708312005070.28586@racer.site>

```
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, 2007-08-31 21:10

Subject: Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
Message-ID: <Pine.LNX.4.64.0708312209480.28586@racer.site>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0708312209480.28586%40racer.site
In-Reply-To: <7vzm07xvwa.fsf@gitster.siamese.dyndns.org>

```
Hi,

On Fri, 31 Aug 2007, Junio C Hamano wrote:

> 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

```
