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

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

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

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:22

Johannes Schindelin [off-list ref] 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.

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

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:43:22

Hi,

On Wed, 18 Jul 2007, Junio C Hamano wrote:
Johannes Schindelin [off-list ref] writes:
quoted
+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

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

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:43:22

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 <redacted>
---

	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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help