All of lore.kernel.org
 help / color / mirror / Atom feed
From: Karsten Blees <karsten.blees@gmail.com>
To: Junio C Hamano <gitster@pobox.com>, Lee Hopkins <leerhop@gmail.com>
Cc: "Duy Nguyen" <pclouds@gmail.com>,
	"Johannes Sixt" <j.sixt@viscovery.net>,
	"Torsten Bögershausen" <tboegi@web.de>,
	"Git Mailing List" <git@vger.kernel.org>
Subject: Re: Branch Name Case Sensitivity
Date: Tue, 04 Mar 2014 14:23:05 +0100	[thread overview]
Message-ID: <5315D3B9.6050602@gmail.com> (raw)
In-Reply-To: <xmqqsiqzrwzr.fsf@gitster.dls.corp.google.com>

Am 03.03.2014 18:51, schrieb Junio C Hamano:
> Lee Hopkins <leerhop@gmail.com> writes:
> 
>> I went ahead and took a stab at a solution. My solution is more
>> aggressive than a warning, I actually prevent the creation of
>> ambiguous refs. My changes are also in refs.c, which may not be
>> appropriate, but it seemed like the natural place.
>>
>> I have never contributed to Git (in fact this is my first dive into
>> the source) and my C is a bit rusty, so bear with me, this is just a
>> suggestion:
>>
>> ---
>>  refs.c |   31 ++++++++++++++++++++++++-------
>>  1 files changed, 24 insertions(+), 7 deletions(-)
> 
> Starting something like this from forbidding is likely to turn out
> to be a very bad idea that can break existing repositories.
> 

Its sure worth considering what should be done with pre-existing duplicates. However, repositories with such refs are already broken on case-insensitive filesystems, and allowing something that's known to be broken is even more dangerous, IMO.

An alternative approach could be to encode upper-case letters in loose refs if core.ignorecase == true (e.g. "Foo" -> "%46oo"). Although this may pose a problem for commands that bypass the refs API / plumbing for whatever reason.

> A new configuration
> 
> 	refs.caseInsensitive = {warn|error|allow}
> 

s/caseInsensitive/caseSensitive/
Its case-sensitive refs that cause trouble, case-insensitive refs would be fine on all platforms.

I still don't see why we need an extra setting for this. The problems are inherently caused by case-insensitive filesystems, and we already have 'core.ignorecase' for that (its even automatically configured). Having an extra setting for refs is somewhat like making 'core.ignorecase' configurable per sub-directory.

> that defaults to "warn" and the user can choose to set to "error" to
> forbid, would be more palatable, I would say.
> 
> If the variable is not in 'core.' namespace, you should implement
> this check at the Porcelain level, allowing lower-level tools like
> update-ref as an escape hatch that let users bypass the restriction
> to be used to correct breakages; it would mean an unconditional "if
> !stricmp(), it is an error" in refs.c will not work well.
> 
> I think it might be OK to have
> 
> 	core.allowCaseInsentitiveRefs = {yes|no|warn}
> 
> which defaults to 'warn' (and 'yes' corresponds to 'allow', 'no'
> corresponds to 'error', in the previous suggestion), instead. If we
> wanted to prevent even lower-level tools like update-ref from
> bypassing the check, that is.
> 

Its the plumbing that's broken, so implementing checks at the porcelain level won't help much. In particular, git-update-ref currently drops branches (or resets them to an earlier state) and messes up reflogs.

  reply	other threads:[~2014-03-04 13:23 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-26 21:06 Branch Name Case Sensitivity Lee Hopkins
2014-02-27 19:50 ` Junio C Hamano
2014-02-27 20:32   ` Torsten Bögershausen
2014-02-27 20:37     ` Lee Hopkins
2014-02-27 21:00       ` Michael Haggerty
2014-02-27 22:24     ` Karsten Blees
2014-02-27 23:38       ` Lee Hopkins
2014-02-28  6:41         ` Johannes Sixt
2014-02-28 13:56           ` Karsten Blees
2014-02-28 14:10             ` Lee Hopkins
2014-02-28 18:58             ` Junio C Hamano
2014-02-28 23:22               ` Duy Nguyen
2014-02-28 23:28                 ` Junio C Hamano
2014-03-01  2:42                   ` Lee Hopkins
2014-03-01  6:54                     ` Torsten Bögershausen
2014-03-01 19:38                       ` Lee Hopkins
2014-03-03 10:03                       ` Karsten Blees
2014-03-03 14:21                         ` Lee Hopkins
2014-03-03 17:51                     ` Junio C Hamano
2014-03-04 13:23                       ` Karsten Blees [this message]
2014-03-04 20:37                         ` Torsten Bögershausen
2014-03-05 14:02                           ` Lee Hopkins
2014-02-28  9:13         ` Michael Haggerty
2014-02-28 14:31           ` Duy Nguyen
2014-02-28 14:45             ` Michael Haggerty
2014-02-28  9:11       ` Stephen Leake
2014-02-28  9:49         ` Michael Haggerty

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=5315D3B9.6050602@gmail.com \
    --to=karsten.blees@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j.sixt@viscovery.net \
    --cc=leerhop@gmail.com \
    --cc=pclouds@gmail.com \
    --cc=tboegi@web.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.