* Bug: git branch -D can be used to delete branch which is currently checked out - Part 2
@ 2016-03-10 8:39 Marcus Kida
2016-03-10 12:15 ` Johannes Schindelin
0 siblings, 1 reply; 6+ messages in thread
From: Marcus Kida @ 2016-03-10 8:39 UTC (permalink / raw)
To: git
Proposed solution:
Use `strcasecmp`, `stricmp`, `strcmpi` here: https://github.com/git/git/blob/f02fbc4f9433937ee0463d0342d6d7d97e1f6f1e/builtin/branch.c#L218
Not sure if/which one of this will work on POSIX as well as MS too though.
Thank you.
Cheers,
Marcus
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Bug: git branch -D can be used to delete branch which is currently checked out - Part 2
2016-03-10 8:39 Bug: git branch -D can be used to delete branch which is currently checked out - Part 2 Marcus Kida
@ 2016-03-10 12:15 ` Johannes Schindelin
2016-03-10 18:30 ` Marcus Kida
2016-03-10 21:20 ` Marcus Kida
0 siblings, 2 replies; 6+ messages in thread
From: Johannes Schindelin @ 2016-03-10 12:15 UTC (permalink / raw)
To: Marcus Kida; +Cc: git
Hi Marcus,
On Thu, 10 Mar 2016, Marcus Kida wrote:
> Proposed solution:
>
> Use `strcasecmp`, `stricmp`, `strcmpi` here: https://github.com/git/git/blob/f02fbc4f9433937ee0463d0342d6d7d97e1f6f1e/builtin/branch.c#L218
>
> Not sure if/which one of this will work on POSIX as well as MS too though.
This is not quite a solution (it is not a patch). And you *definitely*
want to make the use of strcasecmp() contingent on ignore_case. You are
not alone on this world, after all, and other people have case-sensitive
filesystems. It's totally doable, of course.
So, do you feel up to the task?
Ciao,
Johannes
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Bug: git branch -D can be used to delete branch which is currently checked out - Part 2
2016-03-10 12:15 ` Johannes Schindelin
@ 2016-03-10 18:30 ` Marcus Kida
2016-03-10 22:41 ` Jeff King
2016-03-10 21:20 ` Marcus Kida
1 sibling, 1 reply; 6+ messages in thread
From: Marcus Kida @ 2016-03-10 18:30 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
Hi Johannes,
thank you for the feedback.
I will fix this, test it and send a patch.
Cheers,
Marcus
> On 10 Mar 2016, at 11:15 PM, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
>
> Hi Marcus,
>
>> On Thu, 10 Mar 2016, Marcus Kida wrote:
>>
>> Proposed solution:
>>
>> Use `strcasecmp`, `stricmp`, `strcmpi` here: https://github.com/git/git/blob/f02fbc4f9433937ee0463d0342d6d7d97e1f6f1e/builtin/branch.c#L218
>>
>> Not sure if/which one of this will work on POSIX as well as MS too though.
>
> This is not quite a solution (it is not a patch). And you *definitely*
> want to make the use of strcasecmp() contingent on ignore_case. You are
> not alone on this world, after all, and other people have case-sensitive
> filesystems. It's totally doable, of course.
>
> So, do you feel up to the task?
>
> Ciao,
> Johannes
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Bug: git branch -D can be used to delete branch which is currently checked out - Part 2
2016-03-10 12:15 ` Johannes Schindelin
2016-03-10 18:30 ` Marcus Kida
@ 2016-03-10 21:20 ` Marcus Kida
1 sibling, 0 replies; 6+ messages in thread
From: Marcus Kida @ 2016-03-10 21:20 UTC (permalink / raw)
To: Johannes Schindelin, Junio C Hamano; +Cc: git
Hi Johannes,
Hi Junio,
here you’ll find a patch to hotfix the “delete-a-branch-you’re-on" issue.
As Junio already stated there’s many more places where case (in)sensitivity is not handled correctly but this patch would at least prevent you from deleting the branch you’re currently working on (which happened to me yesterday and lead to quite some additional stress).
If you think this isn’t worth patching now, please discard my patch.
If you think it’s worth patching and implementing a more advanced filesystem backend at a later time, please apply it.
If tested this and validate it works @ 2.8.0-rc1.
Thank you.
---
diff --git a/builtin/branch.c b/builtin/branch.c
index 7b45b6b..46bde61 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -215,7 +215,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
int flags = 0;
strbuf_branchname(&bname, argv[i]);
- if (kinds == FILTER_REFS_BRANCHES && !strcmp(head, bname.buf)) {
+ if (kinds == FILTER_REFS_BRANCHES && !strcasecmp(head, bname.buf)) {
error(_("Cannot delete the branch '%s' "
"which you are currently on."), bname.buf);
ret = 1;
---
Cheers,
Marcus
> On 10 Mar 2016, at 11:15 PM, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
>
> Hi Marcus,
>
> On Thu, 10 Mar 2016, Marcus Kida wrote:
>
>> Proposed solution:
>>
>> Use `strcasecmp`, `stricmp`, `strcmpi` here: https://github.com/git/git/blob/f02fbc4f9433937ee0463d0342d6d7d97e1f6f1e/builtin/branch.c#L218
>>
>> Not sure if/which one of this will work on POSIX as well as MS too though.
>
> This is not quite a solution (it is not a patch). And you *definitely*
> want to make the use of strcasecmp() contingent on ignore_case. You are
> not alone on this world, after all, and other people have case-sensitive
> filesystems. It's totally doable, of course.
>
> So, do you feel up to the task?
>
> Ciao,
> Johannes
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: Bug: git branch -D can be used to delete branch which is currently checked out - Part 2
2016-03-10 18:30 ` Marcus Kida
@ 2016-03-10 22:41 ` Jeff King
2016-03-10 22:43 ` Marcus Kida
0 siblings, 1 reply; 6+ messages in thread
From: Jeff King @ 2016-03-10 22:41 UTC (permalink / raw)
To: Marcus Kida; +Cc: Johannes Schindelin, git
On Fri, Mar 11, 2016 at 05:30:00AM +1100, Marcus Kida wrote:
> thank you for the feedback.
> I will fix this, test it and send a patch.
Unfortunately, I think this issue is a little more complicated.
There's some prior discussion in
http://thread.gmane.org/gmane.comp.version-control.git/284022
and
http://thread.gmane.org/gmane.comp.version-control.git/276456/focus=276506
The latter, in particular, shows a case where this approach will do the
wrong thing. The fundamental issue is that refs are potentially stored
in _two_ places: the filesystem, and the packed-refs file. And the
latter is always case-sensitive, while the former sometimes is and
sometimes isn't. But because the storage all happens behind the scenes,
the user has no way of reliably disambiguating (e.g., does "foo" refer
to your checked-out "FOO", or are you intentionally trying to delete an
extraneous "FOO" that ended up in the packed-refs file?).
-Peff
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Bug: git branch -D can be used to delete branch which is currently checked out - Part 2
2016-03-10 22:41 ` Jeff King
@ 2016-03-10 22:43 ` Marcus Kida
0 siblings, 0 replies; 6+ messages in thread
From: Marcus Kida @ 2016-03-10 22:43 UTC (permalink / raw)
To: Jeff King; +Cc: Johannes Schindelin, git
Fair enough,
thank you. I’m going to take a look at the previous threads.
I’d also be keen to help working on those issues.
> On 11 Mar 2016, at 9:41 AM, Jeff King <peff@peff.net> wrote:
>
> On Fri, Mar 11, 2016 at 05:30:00AM +1100, Marcus Kida wrote:
>
>> thank you for the feedback.
>> I will fix this, test it and send a patch.
>
> Unfortunately, I think this issue is a little more complicated.
>
> There's some prior discussion in
>
> http://thread.gmane.org/gmane.comp.version-control.git/284022
>
> and
>
> http://thread.gmane.org/gmane.comp.version-control.git/276456/focus=276506
>
> The latter, in particular, shows a case where this approach will do the
> wrong thing. The fundamental issue is that refs are potentially stored
> in _two_ places: the filesystem, and the packed-refs file. And the
> latter is always case-sensitive, while the former sometimes is and
> sometimes isn't. But because the storage all happens behind the scenes,
> the user has no way of reliably disambiguating (e.g., does "foo" refer
> to your checked-out "FOO", or are you intentionally trying to delete an
> extraneous "FOO" that ended up in the packed-refs file?).
>
> -Peff
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-03-10 22:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-10 8:39 Bug: git branch -D can be used to delete branch which is currently checked out - Part 2 Marcus Kida
2016-03-10 12:15 ` Johannes Schindelin
2016-03-10 18:30 ` Marcus Kida
2016-03-10 22:41 ` Jeff King
2016-03-10 22:43 ` Marcus Kida
2016-03-10 21:20 ` Marcus Kida
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.