From: Jens Lehmann <Jens.Lehmann@web.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] disallow refs containing successive slashes
Date: Sun, 11 Oct 2009 12:42:44 +0200 [thread overview]
Message-ID: <4AD1B6A4.8060405@web.de> (raw)
In-Reply-To: <7vws327wbp.fsf@alter.siamese.dyndns.org>
Junio C Hamano schrieb:
> Jens Lehmann <Jens.Lehmann@web.de> writes:
>
>> When creating branches using names starting with '/' or containing a '//',
>> a leading slash would just vanish and successive slashes were 'compressed'
>> into just one slash.
>
> Hmm. We already do that without your patch.
>
> $ git branch /foo//bar
> $ git for-each-ref --format='%(refname)'
> refs/heads/foo/bar
> refs/heads/master
> $ git branch -d /foo//bar
> Deleted branch /foo//bar (was deadbeef)
> $ git for-each-ref --format='%(refname)'
> refs/heads/master
Yes, but git changes the name silently from '/foo//bar' to 'foo/bar'!
The automagical removal of some slashes leads to strange behaviour when
using such names:
$ git checkout -b foo/bar
Switched to a new branch 'foo/bar'
$ git checkout -b /foo//bar
fatal: A branch named '/foo//bar' already exists.
$ git for-each-ref --format='%(refname)'
refs/heads/foo/bar
refs/heads/master
git claims wrongly that "A branch named '/foo//bar' already exists.".
And that same happens to tag and repo names, leading to other strange
effects:
$ git tag /foo//bar
$ git tag
foo/bar
That is not the tagname the user provided.
$ git remote add /foo//bar git://git.kernel.org/pub/scm/git/git.git
$ git remote show
warning: Config remote shorthand cannot begin with '/': /foo//bar.url
warning: Config remote shorthand cannot begin with '/': /foo//bar.fetch
$ git fetch /foo//bar
warning: Config remote shorthand cannot begin with '/': /foo//bar.url
warning: Config remote shorthand cannot begin with '/': /foo//bar.fetch
fatal: 'foo/bar' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Note: git fetch uses both versions of the remote name in its output.
>> I became aware of this issue while looking into problems occuring
>> when a user created a branch starting with a '/' in git gui (e.g.
>> "/foo"). Strange things happen, while git gui shows the current
>> branch as "/foo" under the hood a branch "foo" (without the slash)
>> had been created. But then you can't delete "/foo" from git gui,
>> because a branch of that name doesn't exist.
>
> Perhaps an interface to give a cleaned-up version, e.g.
>
> $ git check-ref-format --print refs/heads//foo/bar
> refs/heads/foo/bar
>
> is what you want in order to fix git-gui? I dunno.
Yes, one solution could be to fix every application handling branch, tag
or repo names to mimic the namechange done in the bowels of git. But i
think it is not worth the hassle. Every application i tested (git gui,
gitk and a handful of git commands) just assumes - and i think rightfully
so - that refnames will not change while they are being created (And they
do call "git check-ref-format" or strbuf_check_branch_ref() and friends
to make sure they have a valid refname, but it gets changed nonetheless).
With this patch you get an error every time you try to create such a
refname in the first place and the strange effects and the ambiguity
of refnames ('/foo//bar' is a synonym for 'foo/bar' right now) just
go away.
The motivation for this patch was a confused user at my dayjob. IMHO
most people don't use '/foo//bar' on purpose but the extra slashes get
there through typos, copy & paste errors and such. Then generating an
error might just be the Right Thing to do to avoid the problems with
the changed refname afterwards.
next prev parent reply other threads:[~2009-10-11 10:50 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-10 17:49 [PATCH] disallow refs containing successive slashes Jens Lehmann
2009-10-10 21:50 ` Junio C Hamano
2009-10-11 10:42 ` Jens Lehmann [this message]
2009-10-11 18:52 ` Junio C Hamano
2009-10-12 0:31 ` Jonathan Nieder
2009-10-12 2:47 ` Nanako Shiraishi
2009-10-12 5:25 ` [PATCH/RFC 0/4] plumbing to help fix git-gui Jonathan Nieder
2009-10-12 5:27 ` [PATCH 1/4] Add tests for git check-ref-format Jonathan Nieder
2009-10-12 5:28 ` [PATCH 2/4] Documentation: describe check-ref-format --branch Jonathan Nieder
2009-10-12 5:31 ` [PATCH/RFC 3/4] git check-ref-format --print Jonathan Nieder
2009-10-12 14:39 ` Shawn O. Pearce
2009-10-12 21:06 ` Junio C Hamano
2009-10-12 23:26 ` Shawn O. Pearce
2009-10-12 23:36 ` Junio C Hamano
2009-10-13 4:49 ` Jonathan Nieder
2009-10-12 5:33 ` [PATCH/RFC 4/4] check-ref-format: simplify --print implementation Jonathan Nieder
2009-10-12 5:45 ` [PATCH/RFC 0/4] plumbing to help fix git-gui Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AD1B6A4.8060405@web.de \
--to=jens.lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).