git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
@ 2007-07-18 15:52 Johannes Schindelin
  2007-07-19  0:19 ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2007-07-18 15:52 UTC (permalink / raw)
  To: git, gitster


By sourcing git-filter-branch and stopping after the function definitions,
the commit filter can now access the convenience functions like "map".

This is done automatically if you specify a commit filter.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 git-filter-branch.sh |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 0d000ed..b574612 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -8,9 +8,6 @@
 # a new branch. You can specify a number of filters to modify the commits,
 # files and trees.
 
-USAGE="git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE]"
-. git-sh-setup
-
 warn () {
         echo "$*" >&2
 }
@@ -69,6 +66,13 @@ 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")
+
+USAGE="git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE]"
+. git-sh-setup
+
 tempdir=.git-rewrite
 filter_env=
 filter_tree=
@@ -118,7 +122,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"
-- 
1.5.3.rc1.16.g9d6f-dirty

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
  2007-07-18 15:52 [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters Johannes Schindelin
@ 2007-07-19  0:19 ` Junio C Hamano
  2007-07-19  1:16   ` Johannes Schindelin
  2007-07-19  1:25   ` [REVISED PATCH " Johannes Schindelin
  0 siblings, 2 replies; 7+ messages in thread
From: Junio C Hamano @ 2007-07-19  0:19 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, gitster

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> +this_script="$(cd "$(dirname "$0")"; pwd)"/$(basename "$0")
> ...
> +		filter_commit="SOURCE_FUNCTIONS=1 . \"$this_script\"; $OPTARG"

Hmmmmmm.

Care to enlighten why this is not just:

	filter_commit="SOURCE_FUNCTIONS=1 . \"$0\"; $OPTARG"

Is it because you cd(1) around in the script, and it can be
relative to where you started?

In either case, are you quoting potential funnies (such as '"'
or '\\') in "$0" sufficiently?  Exporting this_script variable,
and changing the above to

	filter_commit='SOURCE_FUNCTIONS=1 . "$this_script";'" $OPTARG"

to arrange the shell that is invoked with 'sh -c' to expand its
value would make it smaller problem, I suspect.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
  2007-07-19  0:19 ` Junio C Hamano
@ 2007-07-19  1:16   ` Johannes Schindelin
  2007-07-19  1:25   ` [REVISED PATCH " Johannes Schindelin
  1 sibling, 0 replies; 7+ messages in thread
From: Johannes Schindelin @ 2007-07-19  1:16 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi,

On Wed, 18 Jul 2007, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > +this_script="$(cd "$(dirname "$0")"; pwd)"/$(basename "$0")
> > ...
> > +		filter_commit="SOURCE_FUNCTIONS=1 . \"$this_script\"; $OPTARG"
> 
> Hmmmmmm.
> 
> Care to enlighten why this is not just:
> 
> 	filter_commit="SOURCE_FUNCTIONS=1 . \"$0\"; $OPTARG"
> 
> Is it because you cd(1) around in the script, and it can be
> relative to where you started?

Yes.

> In either case, are you quoting potential funnies (such as '"'
> or '\\') in "$0" sufficiently?  Exporting this_script variable,
> and changing the above to
> 
> 	filter_commit='SOURCE_FUNCTIONS=1 . "$this_script";'" $OPTARG"
> 
> to arrange the shell that is invoked with 'sh -c' to expand its
> value would make it smaller problem, I suspect.

Will do.  You know, I do have my problems with correct quoting, and the 
way I did it in this patch was always good enough for me.  Which does not 
mean much...

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [REVISED PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
  2007-07-19  0:19 ` Junio C Hamano
  2007-07-19  1:16   ` Johannes Schindelin
@ 2007-07-19  1:25   ` Johannes Schindelin
  1 sibling, 0 replies; 7+ messages in thread
From: Johannes Schindelin @ 2007-07-19  1:25 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git


By sourcing git-filter-branch and stopping after the function definitions,
the commit filter can now access the convenience functions like "map".

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

	On Wed, 18 Jul 2007, Junio C Hamano wrote:

	> Exporting this_script variable, and changing the above to
	> 
	> 	filter_commit='SOURCE_FUNCTIONS=1 . "$this_script";'" $OPTARG"
	> 
	> to arrange the shell that is invoked with 'sh -c' to expand its 
	> value would make it smaller problem, I suspect.

	Hereby done.

	<shameless plug>rebase -i rocks</shameless>

 git-filter-branch.sh |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 0d000ed..3113937 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -8,9 +8,6 @@
 # a new branch. You can specify a number of filters to modify the commits,
 # files and trees.
 
-USAGE="git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE]"
-. git-sh-setup
-
 warn () {
         echo "$*" >&2
 }
@@ -69,6 +66,14 @@ 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="git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE]"
+. git-sh-setup
+
 tempdir=.git-rewrite
 filter_env=
 filter_tree=
@@ -118,7 +123,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"
-- 
1.5.3.rc1.16.g9d6f-dirty

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
@ 2007-08-31 19:05 Johannes Schindelin
  2007-08-31 20:59 ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2007-08-31 19:05 UTC (permalink / raw)
  To: git, gitster


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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
  2007-08-31 19:05 [PATCH " Johannes Schindelin
@ 2007-08-31 20:59 ` Junio C Hamano
  2007-08-31 21:10   ` Johannes Schindelin
  0 siblings, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2007-08-31 20:59 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, gitster

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.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters
  2007-08-31 20:59 ` Junio C Hamano
@ 2007-08-31 21:10   ` Johannes Schindelin
  0 siblings, 0 replies; 7+ messages in thread
From: Johannes Schindelin @ 2007-08-31 21:10 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-08-31 21:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-18 15:52 [PATCH 1/2] filter-branch: provide the convenience functions also for commit filters Johannes Schindelin
2007-07-19  0:19 ` Junio C Hamano
2007-07-19  1:16   ` Johannes Schindelin
2007-07-19  1:25   ` [REVISED PATCH " Johannes Schindelin
  -- strict thread matches above, loose matches on Subject: below --
2007-08-31 19:05 [PATCH " Johannes Schindelin
2007-08-31 20:59 ` Junio C Hamano
2007-08-31 21:10   ` Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).