Re: [PATCH] filter-branch: Grok special characters in tag names
From: Johannes Sixt <hidden>
Date: 2016-06-15 22:45:12
On Donnerstag, 21. August 2008, Brandon Casey wrote:
Johannes Sixt wrote:quoted
diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 2688254..81392ad 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh@@ -412,15 +412,17 @@ if [ "$filter_tag_name" ]; then echo "$ref -> $new_ref ($sha1 -> $new_sha1)" if [ "$type" = "tag" ]; then - new_sha1=$(git cat-file tag "$ref" | + new_sha1=$( ( printf 'object %s\ntype commit\ntag %s\n' \ + "$new_sha1" "$new_ref" + git cat-file tag "$ref" | sed -n \ -e "1,/^$/{ - s/^object .*/object $new_sha1/ - s/^type .*/type commit/ - s/^tag .*/tag $new_ref/ + /^object /d + /^type /d + /^tag /dJunio complained that my initial version of this was fragile which has similarities with the above. Initially, I was blindly changing the first line to contain "object...", second line to "type...", etc.
I don't see what's wrong with that. "object" must be the first line anyway, otherwise git mktag chokes.
quoted hunk ↗ jump to hunk
Would something like the following be equivalent _and_ clearer? Emphasis on "and" because both are necessary, not because I strongly feel it to be so.diff --git a/git-filter-branch.sh b/git-filter-branch.sh index a324cf0..11c5c04 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh@@ -419,9 +419,12 @@ if [ "$filter_tag_name" ]; then new_sha1=$(git cat-file tag "$ref" | sed -n \ -e "1,/^$/{ - s/^object .*/object $new_sha1/ - s/^type .*/type commit/ - s/^tag .*/tag $new_ref/ + /^object .*/c\\ +object $new_sha1 + /^type .*/c\\ +type commit + /^tag .*/c\\ +tag $new_ref }" \ -e '/^-----BEGIN PGP SIGNATURE-----/q' \ -e 'p' |
This looks fine, too. (The '.*' in /^foo .*/c\\ is unnecessary.) -- Hannes