* [PATCH] We do not like "HEAD" as a new branch name
@ 2005-12-15 11:46 Johannes Schindelin
2005-12-15 16:27 ` H. Peter Anvin
2005-12-15 19:34 ` Junio C Hamano
0 siblings, 2 replies; 10+ messages in thread
From: Johannes Schindelin @ 2005-12-15 11:46 UTC (permalink / raw)
To: git, junkio
This makes git-check-ref-format fail for "HEAD". Since the check is only
executed when creating refs, the existing symbolic ref is safe.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
This patch was triggered by Alex' mail. Even if it should be a
rare case, it could catch some bad errors: Just try to run
git checkout -b HEAD
and imagine what a regular git user makes of the error
message...
refs.c | 5 +++++
t/t3300-funny-names.sh | 2 ++
2 files changed, 7 insertions(+), 0 deletions(-)
04d60f0bf743f91d03e03acebf123db527cb7507
diff --git a/refs.c b/refs.c
index bda45f7..293bfe7 100644
--- a/refs.c
+++ b/refs.c
@@ -332,6 +332,11 @@ int check_ref_format(const char *ref)
if (ch == '.' || bad_ref_char(ch))
return -1;
+ /* do not allow "HEAD" as ref name */
+ if (ch == 'H' && (!strcmp(cp, "EAD") ||
+ !strncmp(cp, "EAD/", 4)))
+ return -1;
+
/* scan the rest of the path component */
while ((ch = *cp++) != 0) {
if (bad_ref_char(ch))
diff --git a/t/t3300-funny-names.sh b/t/t3300-funny-names.sh
index 897c378..8ebd896 100755
--- a/t/t3300-funny-names.sh
+++ b/t/t3300-funny-names.sh
@@ -139,4 +139,6 @@ test_expect_success 'git-apply non-git d
git-apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
diff -u expected current'
+test_expect_failure 'HEAD is special' 'git checkout -b HEAD'
+
test_done
--
0.99.9.GIT
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 11:46 [PATCH] We do not like "HEAD" as a new branch name Johannes Schindelin
@ 2005-12-15 16:27 ` H. Peter Anvin
2005-12-15 16:40 ` Johannes Schindelin
2005-12-15 19:34 ` Junio C Hamano
1 sibling, 1 reply; 10+ messages in thread
From: H. Peter Anvin @ 2005-12-15 16:27 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git, junkio
Johannes Schindelin wrote:
> This makes git-check-ref-format fail for "HEAD". Since the check is only
> executed when creating refs, the existing symbolic ref is safe.
> diff --git a/refs.c b/refs.c
> index bda45f7..293bfe7 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -332,6 +332,11 @@ int check_ref_format(const char *ref)
> if (ch == '.' || bad_ref_char(ch))
> return -1;
>
> + /* do not allow "HEAD" as ref name */
> + if (ch == 'H' && (!strcmp(cp, "EAD") ||
> + !strncmp(cp, "EAD/", 4)))
> + return -1;
> +
> /* scan the rest of the path component */
> while ((ch = *cp++) != 0) {
If you're have to open-code it, you might want to just do it all the way:
if (ch == 'H' && cp[0] == 'E' && cp[1] == 'A' && cp[2] == 'D' &&
(cp[3] == '\0' || cp[3] == '/'))
-hpa
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 16:27 ` H. Peter Anvin
@ 2005-12-15 16:40 ` Johannes Schindelin
2005-12-15 17:00 ` Alex Riesen
0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2005-12-15 16:40 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: git, junkio
Hi,
On Thu, 15 Dec 2005, H. Peter Anvin wrote:
> Johannes Schindelin wrote:
> > This makes git-check-ref-format fail for "HEAD". Since the check is only
> > executed when creating refs, the existing symbolic ref is safe.
>
> > diff --git a/refs.c b/refs.c
> > index bda45f7..293bfe7 100644
> > --- a/refs.c
> > +++ b/refs.c
> > @@ -332,6 +332,11 @@ int check_ref_format(const char *ref)
> > if (ch == '.' || bad_ref_char(ch))
> > return -1;
> > + /* do not allow "HEAD" as ref name */
> > + if (ch == 'H' && (!strcmp(cp, "EAD") ||
> > + !strncmp(cp, "EAD/", 4)))
> > + return -1;
> > +
> > /* scan the rest of the path component */
> > while ((ch = *cp++) != 0) {
>
> If you're have to open-code it, you might want to just do it all the way:
>
> if (ch == 'H' && cp[0] == 'E' && cp[1] == 'A' && cp[2] == 'D' &&
> (cp[3] == '\0' || cp[3] == '/'))
;-)
I don't really care. I could have used !strcmp(cp - 1, "HEAD"), just as
well...
Ciao,
Dscho
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 16:40 ` Johannes Schindelin
@ 2005-12-15 17:00 ` Alex Riesen
0 siblings, 0 replies; 10+ messages in thread
From: Alex Riesen @ 2005-12-15 17:00 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: H. Peter Anvin, git, junkio
On 12/15/05, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> >
> > If you're have to open-code it, you might want to just do it all the way:
> >
> I don't really care. I could have used !strcmp(cp - 1, "HEAD"), just as
> well...
>
...which would be more readable and greppable.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 11:46 [PATCH] We do not like "HEAD" as a new branch name Johannes Schindelin
2005-12-15 16:27 ` H. Peter Anvin
@ 2005-12-15 19:34 ` Junio C Hamano
2005-12-15 22:41 ` Johannes Schindelin
1 sibling, 1 reply; 10+ messages in thread
From: Junio C Hamano @ 2005-12-15 19:34 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> + /* do not allow "HEAD" as ref name */
> + if (ch == 'H' && (!strcmp(cp, "EAD") ||
> + !strncmp(cp, "EAD/", 4)))
Why forbid HEAD in the middle, like "refs/heads/HEAD/frotz"?
Confusion avoidance?
We might want to forbid anything that matches /^.*_?HEAD$/ to catch
ORIG_HEAD for example, though.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 19:34 ` Junio C Hamano
@ 2005-12-15 22:41 ` Johannes Schindelin
2005-12-15 23:38 ` Junio C Hamano
0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2005-12-15 22:41 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Hi,
On Thu, 15 Dec 2005, Junio C Hamano wrote:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
> > + /* do not allow "HEAD" as ref name */
> > + if (ch == 'H' && (!strcmp(cp, "EAD") ||
> > + !strncmp(cp, "EAD/", 4)))
>
> Why forbid HEAD in the middle, like "refs/heads/HEAD/frotz"?
> Confusion avoidance?
Exactly.
> We might want to forbid anything that matches /^.*_?HEAD$/ to catch
> ORIG_HEAD for example, though.
Okay, I think this is what *I* would want to be illegal:
HEAD,
ORIG_HEAD,
FETCH_HEAD
MERGE_HEAD
Others? Or should I really test for just *anything* ending in _HEAD
besides HEAD itself?
Ciao,
Dscho
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 22:41 ` Johannes Schindelin
@ 2005-12-15 23:38 ` Junio C Hamano
2005-12-16 1:40 ` Johannes Schindelin
0 siblings, 1 reply; 10+ messages in thread
From: Junio C Hamano @ 2005-12-15 23:38 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> Okay, I think this is what *I* would want to be illegal:
>
> HEAD,
> ORIG_HEAD,
> FETCH_HEAD
> MERGE_HEAD
>
> Others? Or should I really test for just *anything* ending in _HEAD
> besides HEAD itself?
Just to futureproof ourselves, how about this?
/^(?:.*/)?(?:[A-Z0-9]+_)?HEAD$/
The last path component being "HEAD" or capital-or-digit
followed by underscore followed by "HEAD".
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-15 23:38 ` Junio C Hamano
@ 2005-12-16 1:40 ` Johannes Schindelin
2005-12-16 6:34 ` Junio C Hamano
0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2005-12-16 1:40 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Hi,
On Thu, 15 Dec 2005, Junio C Hamano wrote:
> Just to futureproof ourselves, how about this?
>
> /^(?:.*/)?(?:[A-Z0-9]+_)?HEAD$/
>
> The last path component being "HEAD" or capital-or-digit
> followed by underscore followed by "HEAD".
Okay. Why not go the full nine yards, and not be difficult about it:
diff --git a/refs.c b/refs.c
--- a/refs.c
+++ b/refs.c
@@ -345,6 +345,11 @@ int check_ref_format(const char *ref)
if (!ch) {
if (level < 2)
return -1; /* at least of form "heads/blah" */
+
+ /* do not allow ref name to end in "HEAD" */
+ if (cp - ref > 4 && !strcmp(cp - 4, "HEAD"))
+ return -1;
+
return 0;
}
}
Ciao,
Dscho
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-16 1:40 ` Johannes Schindelin
@ 2005-12-16 6:34 ` Junio C Hamano
2005-12-16 11:32 ` Johannes Schindelin
0 siblings, 1 reply; 10+ messages in thread
From: Junio C Hamano @ 2005-12-16 6:34 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> Okay. Why not go the full nine yards, and not be difficult about it:
That's fine. There is an off-by-one in your code, though.
I've committed it with a tweak.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] We do not like "HEAD" as a new branch name
2005-12-16 6:34 ` Junio C Hamano
@ 2005-12-16 11:32 ` Johannes Schindelin
0 siblings, 0 replies; 10+ messages in thread
From: Johannes Schindelin @ 2005-12-16 11:32 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Hi,
On Thu, 15 Dec 2005, Junio C Hamano wrote:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
> > Okay. Why not go the full nine yards, and not be difficult about it:
>
> That's fine. There is an off-by-one in your code, though.
> I've committed it with a tweak.
Thanks. I did test it (quickly), and t3300 said it was fine. Strange.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2005-12-16 11:32 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-12-15 11:46 [PATCH] We do not like "HEAD" as a new branch name Johannes Schindelin
2005-12-15 16:27 ` H. Peter Anvin
2005-12-15 16:40 ` Johannes Schindelin
2005-12-15 17:00 ` Alex Riesen
2005-12-15 19:34 ` Junio C Hamano
2005-12-15 22:41 ` Johannes Schindelin
2005-12-15 23:38 ` Junio C Hamano
2005-12-16 1:40 ` Johannes Schindelin
2005-12-16 6:34 ` Junio C Hamano
2005-12-16 11:32 ` Johannes Schindelin
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).