From: Dmitry Potapov Date: Sun, 30 Dec 2007 10:31:46 GMT Subject: Re: [PATCH] git-filter-branch could be confused by similar names Message-ID: <20071230103146.GU13968@dpotapov.dyndns.org> In-Reply-To: Hi, On Sat, Dec 29, 2007 at 11:36:51PM +0100, Johannes Schindelin wrote: > > On Tue, 25 Dec 2007, Dmitry Potapov wrote: > > > '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'. > > > > Signed-off-by: Dmitry Potapov > > --- > > git-filter-branch.sh | 2 +- > > t/t7003-filter-branch.sh | 10 ++++++++++ > > 2 files changed, 11 insertions(+), 1 deletions(-) > > > > diff --git a/git-filter-branch.sh b/git-filter-branch.sh > > index dbab1a9..b89a720 100755 > > --- a/git-filter-branch.sh > > +++ b/git-filter-branch.sh > > @@ -219,7 +219,7 @@ do > > ;; > > *) > > ref="$(git for-each-ref --format='%(refname)' | > > - grep /"$ref")" > > + grep '^refs/[^/]\+/'"$ref"'$')" > > Hmm. I wonder if this is a proper solution. It still does not error out > when you have a tag and a branch of the same name. > Are you sure? I had created a tag and a branch with the same name, and then tried git filter-branch on it, and it did error out: === warning: refname 'test1' is ambiguous. Which ref do you want to rewrite? === Maybe, my fix is not a perfect solution, but it works correctly in all known to me situations, while the original code is clearly broken in most common cases, like when you have created a tag with a name that consists of the name of a branch plus some arbitrary suffix. When you run git-filter-branch on that branch, you only get: "Which ref do you want to rewrite?", which is very confusing, because you have only one reference with the given name. Dmitry