[PATCH] git-filter-branch: avoid collisions with variables in eval'ed commands

Subsystems: the rest

DORMANTno replies

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

[PATCH] git-filter-branch: avoid collisions with variables in eval'ed commands

From: <hidden>
Date: 2016-06-15 22:46:28

From: Elijah Newren <redacted>

Avoid using simple variable names like 'i', since user commands are eval'ed
and may clash with and overwrite our values.

Signed-off-by: Elijah Newren <redacted>
---

I discovered this a few months ago, but apparently never got around to
sending it earlier.  Anyway, without this patch in a repository with a
file called 'world' I see the following behavior:

$ git filter-branch --tree-filter '
   for i in $(find . -type f); do
     if ( file $i | grep "\btext\b" > /dev/null ); then
       perl -i -ple "s/\\\$(Id|Date|Source|Header|CVSHeader|Author|Revision):[^\
\$]*\\$/\\$\1\\$/" $i;
     fi;
   done ' -- --all

Rewrite 7a78604e90b9debfaa6a755019b5d3df541abcba (1/6)/usr/bin/git-filter-branch
: line 249: ./world+1: syntax error: operand expected (error token is "./world+1
")


In case anyone is wondering: This isn't the right way to nuke CVS keywords.
It's a good start, but it'll miss a few files (particularly with older
versions of the 'file' program) due to some types such as 'FORTRAN program
source' not containing 'text'.  Also, it's incredibly slow to the point
that I dropped filter-branch entirely and wrote a 'git_fast_filter' helper
(serving as a pipe between fast-export and fast-import) that I'll soon be
making available.

 git-filter-branch.sh |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 20f6f51..5da63b1 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -272,10 +272,10 @@ test $commits -eq 0 && die "Found nothing to rewrite"
 
 # Rewrite the commits
 
-i=0
+git_filter_branch_count=0
 while read commit parents; do
-	i=$(($i+1))
-	printf "\rRewrite $commit ($i/$commits)"
+	git_filter_branch_count=$(($git_filter_branch_count+1))
+	printf "\rRewrite $commit ($git_filter_branch_count/$commits)"
 
 	case "$filter_subdir" in
 	"")
-- 
1.6.0.6

Re: [PATCH] git-filter-branch: avoid collisions with variables in eval'ed commands

From: Petr Baudis <hidden>
Date: 2016-06-15 22:46:28

On Wed, Mar 25, 2009 at 03:13:01PM -0600, newren@gmail.com wrote:
From: Elijah Newren <redacted>

Avoid using simple variable names like 'i', since user commands are eval'ed
and may clash with and overwrite our values.

Signed-off-by: Elijah Newren <redacted>
Almost-acked-by: Petr Baudis [off-list ref]

But:
-i=0
+git_filter_branch_count=0
Why branch_count? It counts commits, not branches, doesn't it?

I discovered this a few months ago, but apparently never got around to
sending it earlier.  Anyway, without this patch in a repository with a
file called 'world' I see the following behavior:
Some hints:
$ git filter-branch --tree-filter '
   for i in $(find . -type f); do
This won't work right if your filenames contain $IFS.
     if ( file $i | grep "\btext\b" > /dev/null ); then
if [[ "$(file $i)" == *text* ]] might run noticeably faster (though is
slightly less precise). Having a filename-keyed cache of file types even
more so.
       perl -i -ple "s/\\\$(Id|Date|Source|Header|CVSHeader|Author|Revision):[^\
\$]*\\$/\\$\1\\$/" $i;
Using '\'' instead of " could save you quite a few backslashes in net
count.
     fi;
   done ' -- --all
-- 
				Petr "Pasky" Baudis
The average, healthy, well-adjusted adult gets up at seven-thirty
in the morning feeling just terrible. -- Jean Kerr

Re: [PATCH] git-filter-branch: avoid collisions with variables in eval'ed commands

From: Elijah Newren <hidden>
Date: 2016-06-15 22:46:28

Hi,

On Wed, Mar 25, 2009 at 3:24 PM, Petr Baudis [off-list ref] wrote:
On Wed, Mar 25, 2009 at 03:13:01PM -0600, newren@gmail.com wrote:
quoted
From: Elijah Newren <redacted>

Avoid using simple variable names like 'i', since user commands are eval'ed
and may clash with and overwrite our values.

Signed-off-by: Elijah Newren <redacted>
Almost-acked-by: Petr Baudis [off-list ref]

But:
quoted
-i=0
+git_filter_branch_count=0
Why branch_count? It counts commits, not branches, doesn't it?
Oh, I was just changing i->git_filter_branch_i, then thought as long
as it was long I might as well use a word instead of "i".  Didn't
think about the combined meaning.  How about
"git_filter_branch_commit_count"?  Maybe a double underscore between
the "namespace" and the "variable"?
quoted
I discovered this a few months ago, but apparently never got around to
sending it earlier.  Anyway, without this patch in a repository with a
file called 'world' I see the following behavior:
Some hints:
quoted
$ git filter-branch --tree-filter '
   for i in $(find . -type f); do
This won't work right if your filenames contain $IFS.
Yeah, luckily for me, my repository didn't have any filenames with
whitespace.  :-)
quoted
     if ( file $i | grep "\btext\b" > /dev/null ); then
if [[ "$(file $i)" == *text* ]] might run noticeably faster (though is
slightly less precise). Having a filename-keyed cache of file types even
more so.
quoted
       perl -i -ple "s/\\\$(Id|Date|Source|Header|CVSHeader|Author|Revision):[^\
\$]*\\$/\\$\1\\$/" $i;
Using '\'' instead of " could save you quite a few backslashes in net
count.
Cool, thanks for the tips.

Re: [PATCH] git-filter-branch: avoid collisions with variables in eval'ed commands

From: <hidden>
Date: 2016-06-15 22:46:28

From: Elijah Newren <redacted>

Avoid using simple variable names like 'i', since user commands are eval'ed
and may clash with and overwrite our values.

Signed-off-by: Elijah Newren <redacted>
---

If you have a different preference for the variable name, I'd be happy to
change it (again).  All I care about is avoiding conflicts with what people
might pass in their scripts.

 git-filter-branch.sh |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 20f6f51..b90d3df 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -272,10 +272,10 @@ test $commits -eq 0 && die "Found nothing to rewrite"
 
 # Rewrite the commits
 
-i=0
+git_filter_branch__commit_count=0
 while read commit parents; do
-	i=$(($i+1))
-	printf "\rRewrite $commit ($i/$commits)"
+	git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1))
+	printf "\rRewrite $commit ($git_filter_branch__commit_count/$commits)"
 
 	case "$filter_subdir" in
 	"")
-- 
1.6.0.6

Re: [PATCH] git-filter-branch: avoid collisions with variables in eval'ed commands

From: Petr Baudis <hidden>
Date: 2016-06-15 22:46:28

On Wed, Mar 25, 2009 at 03:33:31PM -0600, Elijah Newren wrote:
Hi,

On Wed, Mar 25, 2009 at 3:24 PM, Petr Baudis [off-list ref] wrote:
quoted
On Wed, Mar 25, 2009 at 03:13:01PM -0600, newren@gmail.com wrote:
quoted
From: Elijah Newren <redacted>

Avoid using simple variable names like 'i', since user commands are eval'ed
and may clash with and overwrite our values.

Signed-off-by: Elijah Newren <redacted>
Almost-acked-by: Petr Baudis [off-list ref]

But:
quoted
-i=0
+git_filter_branch_count=0
Why branch_count? It counts commits, not branches, doesn't it?
Oh, I was just changing i->git_filter_branch_i, then thought as long
as it was long I might as well use a word instead of "i".  Didn't
think about the combined meaning.  How about
"git_filter_branch_commit_count"?  Maybe a double underscore between
the "namespace" and the "variable"?
Oh, I sort of thought it's "git-filter branch count", not
"git-filter-branch count". I'm dumbed down from all day spent in IKEA
I guess. :/

I'd personally just use $__git_i, $__git_commit or something, but YMMV.

-- 
				Petr "Pasky" Baudis
The average, healthy, well-adjusted adult gets up at seven-thirty
in the morning feeling just terrible. -- Jean Kerr
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help