git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] filter-branch: work correctly with ambiguous refnames

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 5, 2008, 20:28 UTC
Message-ID
<7vabnk81aw.fsf_-_@gitster.siamese.dyndns.org>
In-Reply-To
<alpine.LSU.1.00.0801051601490.10101@racer.site>

'git-filter-branch branch' could fail producing the error: "Which ref do you want to rewrite?" if existed another branch or tag, which name was 'branch-something' or 'something/branch'.

[jc: original report and fix were done between Dmitry Potapov and Dscho; I rewrote it using "rev-parse --symbolic-full-name"]

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
 >> But at that point I would say that exposing the refname dwimming
 >> logic to the scripts could be a much cleaner solution.
 >
 > I considered that when ripping the script from cogito, but it seemed to me 
 > at that time that not requiring an up-to-date git for testing the script 
 > would be better.
 >
 > Now is a different situation, however, so I agree.
 It was already tied to the specific git version when
 git-filter-branch became part of git.git ;-)  
 I do not use filter-branch myself very often, but I think this
 is worth fixing.  The additional --no-flags and sed are to deal
 with something like:
	--topo-order master..next
 although I do not offhand know if filter-branch would work with
 things like --topo-order and --first-parent.
 git-filter-branch.sh |   22 +++-------------------
 1 files changed, 3 insertions(+), 19 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index ae29f47..ebf05ca 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -209,25 +209,9 @@ ORIG_GIT_INDEX_FILE="$GIT_INDEX_FILE"
 GIT_WORK_TREE=.
 export GIT_DIR GIT_WORK_TREE
 
-# These refs should be updated if their heads were rewritten
-
-git rev-parse --revs-only --symbolic "$@" |
-while read ref
-do
-	# normalize ref
-	case "$ref" in
-	HEAD)
-		ref="$(git symbolic-ref "$ref")"
-	;;
-	refs/*)
-	;;
-	*)
-		ref="$(git for-each-ref --format='%(refname)' |
-			grep /"$ref")"
-	esac
-
-	git check-ref-format "$ref" && echo "$ref"
-done > "$tempdir"/heads
+# The refs should be updated if their heads were rewritten
+git rev-parse --no-flags --revs-only --symbolic-full-name "$@" |
+sed -e '/^^/d' >"$tempdir"/heads
 
 test -s "$tempdir"/heads ||
 	die "Which ref do you want to rewrite?"
-- 
1.5.4.rc2.38.gd6da3
Previous: Junio C HamanoNext: Johannes Schindelin
Message 14 of 18 in “git-filter-branch could be confused by similar names”
  1. git-filter-branch could be confused by similar namesDmitry Potapov, Dec 25, 2007
  2. Johannes SchindelinDec 29, 2007
  3. Dmitry PotapovDec 30, 2007
  4. Johannes SchindelinDec 30, 2007
  5. Dmitry PotapovDec 30, 2007
  6. Johannes SchindelinDec 30, 2007
  7. Dmitry PotapovDec 30, 2007
  8. git-filter-branch could be confused by similar namesDmitry Potapov, Dec 30, 2007
  9. Junio C HamanoJan 3, 2008
  10. Dmitry PotapovJan 4, 2008
  11. Junio C HamanoJan 4, 2008
  12. Johannes SchindelinJan 5, 2008
  13. 1/2 git-rev-parse --symbolic-full-nameJunio C Hamano, Jan 5, 2008
  14. 2/2 filter-branch: work correctly with ambiguous refnamesJunio C Hamano, Jan 5, 2008
  15. Johannes SchindelinJan 6, 2008
  16. Junio C HamanoJan 6, 2008
  17. Johannes SchindelinJan 6, 2008
  18. Junio C HamanoJan 5, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.