{"thread":{"id":"29297","subject":"[PATCH] Fix incorrect ref namespace check","startedAt":"2012-01-05T12:35:24Z","lastAt":"2012-01-11T04:49:51Z","messageCount":5,"participants":["Nguyễn Thái Ngọc Duy","Junio C Hamano","Nguyen Thai Ngoc Duy","Michael Haggerty"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"181970","messageId":"1325766924-14943-1-git-send-email-pclouds@gmail.com","threadId":"29297","inReplyTo":null,"subject":"[PATCH] Fix incorrect ref namespace check","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-01-05T12:35:24Z","receivedAt":"2012-01-05T12:35:24Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"The reason why the trailing slash is needed is obvious. refs/stash is\nnot a namespace, but a single ref. Do full string compare on it.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n builtin/fetch.c  |    2 +-\n builtin/remote.c |    2 +-\n log-tree.c       |    2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/fetch.c b/builtin/fetch.c\nindex 33ad3aa..daa68d2 100644\n--- a/builtin/fetch.c\n+++ b/builtin/fetch.c\n@@ -573,7 +573,7 @@ static void find_non_local_tags(struct transport *transport,\n \n \tfor_each_ref(add_existing, &existing_refs);\n \tfor (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n-\t\tif (prefixcmp(ref->name, \"refs/tags\"))\n+\t\tif (prefixcmp(ref->name, \"refs/tags/\"))\n \t\t\tcontinue;\n \n \t\t/*\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex 583eec9..f54a89a 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -534,7 +534,7 @@ static int add_branch_for_removal(const char *refname,\n \t}\n \n \t/* don't delete non-remote-tracking refs */\n-\tif (prefixcmp(refname, \"refs/remotes\")) {\n+\tif (prefixcmp(refname, \"refs/remotes/\")) {\n \t\t/* advise user how to delete local branches */\n \t\tif (!prefixcmp(refname, \"refs/heads/\"))\n \t\t\tstring_list_append(branches->skipped,\ndiff --git a/log-tree.c b/log-tree.c\nindex 319bd31..9a88fcc 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -119,7 +119,7 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in\n \t\ttype = DECORATION_REF_REMOTE;\n \telse if (!prefixcmp(refname, \"refs/tags/\"))\n \t\ttype = DECORATION_REF_TAG;\n-\telse if (!prefixcmp(refname, \"refs/stash\"))\n+\telse if (!strcmp(refname, \"refs/stash\"))\n \t\ttype = DECORATION_REF_STASH;\n \telse if (!prefixcmp(refname, \"HEAD\"))\n \t\ttype = DECORATION_REF_HEAD;\n-- \n1.7.8.36.g69ee2\n"},{"id":"181972","messageId":"1325767180-15083-1-git-send-email-pclouds@gmail.com","threadId":"29297","inReplyTo":"1325766924-14943-1-git-send-email-pclouds@gmail.com","subject":"[PATCH] Fix incorrect ref namespace check","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-01-05T12:39:40Z","receivedAt":"2012-01-05T12:39:40Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"The reason why the trailing slash is needed is obvious. refs/stash and\nHEAD are not namespace, but complete refs. Do full string compare on them.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n---\n I missed prefixcmp(..., \"HEAD\") right below prefixcmp(..., \"refs/stash\")\n\n builtin/fetch.c  |    2 +-\n builtin/remote.c |    2 +-\n log-tree.c       |    4 ++--\n 3 files changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/builtin/fetch.c b/builtin/fetch.c\nindex 33ad3aa..daa68d2 100644\n--- a/builtin/fetch.c\n+++ b/builtin/fetch.c\n@@ -573,7 +573,7 @@ static void find_non_local_tags(struct transport *transport,\n \n \tfor_each_ref(add_existing, &existing_refs);\n \tfor (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n-\t\tif (prefixcmp(ref->name, \"refs/tags\"))\n+\t\tif (prefixcmp(ref->name, \"refs/tags/\"))\n \t\t\tcontinue;\n \n \t\t/*\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex 583eec9..f54a89a 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -534,7 +534,7 @@ static int add_branch_for_removal(const char *refname,\n \t}\n \n \t/* don't delete non-remote-tracking refs */\n-\tif (prefixcmp(refname, \"refs/remotes\")) {\n+\tif (prefixcmp(refname, \"refs/remotes/\")) {\n \t\t/* advise user how to delete local branches */\n \t\tif (!prefixcmp(refname, \"refs/heads/\"))\n \t\t\tstring_list_append(branches->skipped,\ndiff --git a/log-tree.c b/log-tree.c\nindex 319bd31..535b905 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -119,9 +119,9 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in\n \t\ttype = DECORATION_REF_REMOTE;\n \telse if (!prefixcmp(refname, \"refs/tags/\"))\n \t\ttype = DECORATION_REF_TAG;\n-\telse if (!prefixcmp(refname, \"refs/stash\"))\n+\telse if (!strcmp(refname, \"refs/stash\"))\n \t\ttype = DECORATION_REF_STASH;\n-\telse if (!prefixcmp(refname, \"HEAD\"))\n+\telse if (!strcmp(refname, \"HEAD\"))\n \t\ttype = DECORATION_REF_HEAD;\n \n \tif (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS)\n-- \n1.7.8.36.g69ee2\n"},{"id":"181985","messageId":"7v39bunmno.fsf@alter.siamese.dyndns.org","threadId":"29297","inReplyTo":"1325767180-15083-1-git-send-email-pclouds@gmail.com","subject":"Re: [PATCH] Fix incorrect ref namespace check","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2012-01-05T16:23:39Z","receivedAt":"2012-01-05T16:23:39Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n\n> The reason why the trailing slash is needed is obvious. refs/stash and\n> HEAD are not namespace, but complete refs. Do full string compare on them.\n>\n> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n> ---\n>  I missed prefixcmp(..., \"HEAD\") right below prefixcmp(..., \"refs/stash\")\n\nAs Michael has been actively showing interest in cleaning up the area, he\nshould have been CC'ed, I would think.\n\n>\n>  builtin/fetch.c  |    2 +-\n>  builtin/remote.c |    2 +-\n>  log-tree.c       |    4 ++--\n>  3 files changed, 4 insertions(+), 4 deletions(-)\n>\n> diff --git a/builtin/fetch.c b/builtin/fetch.c\n> index 33ad3aa..daa68d2 100644\n> --- a/builtin/fetch.c\n> +++ b/builtin/fetch.c\n> @@ -573,7 +573,7 @@ static void find_non_local_tags(struct transport *transport,\n>  \n>  \tfor_each_ref(add_existing, &existing_refs);\n>  \tfor (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n> -\t\tif (prefixcmp(ref->name, \"refs/tags\"))\n> +\t\tif (prefixcmp(ref->name, \"refs/tags/\"))\n>  \t\t\tcontinue;\n>  \n>  \t\t/*\n> diff --git a/builtin/remote.c b/builtin/remote.c\n> index 583eec9..f54a89a 100644\n> --- a/builtin/remote.c\n> +++ b/builtin/remote.c\n> @@ -534,7 +534,7 @@ static int add_branch_for_removal(const char *refname,\n>  \t}\n>  \n>  \t/* don't delete non-remote-tracking refs */\n> -\tif (prefixcmp(refname, \"refs/remotes\")) {\n> +\tif (prefixcmp(refname, \"refs/remotes/\")) {\n>  \t\t/* advise user how to delete local branches */\n>  \t\tif (!prefixcmp(refname, \"refs/heads/\"))\n>  \t\t\tstring_list_append(branches->skipped,\n> diff --git a/log-tree.c b/log-tree.c\n> index 319bd31..535b905 100644\n> --- a/log-tree.c\n> +++ b/log-tree.c\n> @@ -119,9 +119,9 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in\n>  \t\ttype = DECORATION_REF_REMOTE;\n>  \telse if (!prefixcmp(refname, \"refs/tags/\"))\n>  \t\ttype = DECORATION_REF_TAG;\n> -\telse if (!prefixcmp(refname, \"refs/stash\"))\n> +\telse if (!strcmp(refname, \"refs/stash\"))\n>  \t\ttype = DECORATION_REF_STASH;\n> -\telse if (!prefixcmp(refname, \"HEAD\"))\n> +\telse if (!strcmp(refname, \"HEAD\"))\n>  \t\ttype = DECORATION_REF_HEAD;\n>  \n>  \tif (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS)\n"},{"id":"182296","messageId":"CACsJy8Af=PjXE4sHqSk1v8qoraivOnT2w495W1c1dVQBW1s-cQ@mail.gmail.com","threadId":"29297","inReplyTo":"7v39bunmno.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH] Fix incorrect ref namespace check","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2012-01-11T01:54:43Z","receivedAt":"2012-01-11T01:54:43Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Any comments Mike?\n\n2012/1/5 Junio C Hamano <gitster@pobox.com>:\n> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n>\n>> The reason why the trailing slash is needed is obvious. refs/stash and\n>> HEAD are not namespace, but complete refs. Do full string compare on them.\n>>\n>> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n>> ---\n>>  I missed prefixcmp(..., \"HEAD\") right below prefixcmp(..., \"refs/stash\")\n>\n> As Michael has been actively showing interest in cleaning up the area, he\n> should have been CC'ed, I would think.\n>\n>>\n>>  builtin/fetch.c  |    2 +-\n>>  builtin/remote.c |    2 +-\n>>  log-tree.c       |    4 ++--\n>>  3 files changed, 4 insertions(+), 4 deletions(-)\n>>\n>> diff --git a/builtin/fetch.c b/builtin/fetch.c\n>> index 33ad3aa..daa68d2 100644\n>> --- a/builtin/fetch.c\n>> +++ b/builtin/fetch.c\n>> @@ -573,7 +573,7 @@ static void find_non_local_tags(struct transport *transport,\n>>\n>>       for_each_ref(add_existing, &existing_refs);\n>>       for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n>> -             if (prefixcmp(ref->name, \"refs/tags\"))\n>> +             if (prefixcmp(ref->name, \"refs/tags/\"))\n>>                       continue;\n>>\n>>               /*\n>> diff --git a/builtin/remote.c b/builtin/remote.c\n>> index 583eec9..f54a89a 100644\n>> --- a/builtin/remote.c\n>> +++ b/builtin/remote.c\n>> @@ -534,7 +534,7 @@ static int add_branch_for_removal(const char *refname,\n>>       }\n>>\n>>       /* don't delete non-remote-tracking refs */\n>> -     if (prefixcmp(refname, \"refs/remotes\")) {\n>> +     if (prefixcmp(refname, \"refs/remotes/\")) {\n>>               /* advise user how to delete local branches */\n>>               if (!prefixcmp(refname, \"refs/heads/\"))\n>>                       string_list_append(branches->skipped,\n>> diff --git a/log-tree.c b/log-tree.c\n>> index 319bd31..535b905 100644\n>> --- a/log-tree.c\n>> +++ b/log-tree.c\n>> @@ -119,9 +119,9 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in\n>>               type = DECORATION_REF_REMOTE;\n>>       else if (!prefixcmp(refname, \"refs/tags/\"))\n>>               type = DECORATION_REF_TAG;\n>> -     else if (!prefixcmp(refname, \"refs/stash\"))\n>> +     else if (!strcmp(refname, \"refs/stash\"))\n>>               type = DECORATION_REF_STASH;\n>> -     else if (!prefixcmp(refname, \"HEAD\"))\n>> +     else if (!strcmp(refname, \"HEAD\"))\n>>               type = DECORATION_REF_HEAD;\n>>\n>>       if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS)\n\n\n\n-- \nDuy\n"},{"id":"182315","messageId":"4F0D14EF.4000908@alum.mit.edu","threadId":"29297","inReplyTo":"CACsJy8Af=PjXE4sHqSk1v8qoraivOnT2w495W1c1dVQBW1s-cQ@mail.gmail.com","subject":"Re: [PATCH] Fix incorrect ref namespace check","fromName":"Michael Haggerty","fromEmail":"mhagger@alum.mit.edu","sentAt":"2012-01-11T04:49:51Z","receivedAt":"2012-01-11T04:49:51Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"On 01/11/2012 02:54 AM, Nguyen Thai Ngoc Duy wrote:\n> Any comments Mike?\n\nLooks fine to me.\n\nTheoretically, we could add an API for iterating over references\n*excluding* a particular namespace, which (after hierarchical refs is\naccepted) could be implemented a bit more efficiently than iterating\nover all references and then excluding those in the unwanted namespace.\n But I think it would be far more trouble than it's worth.\n\nMichael\n\n> 2012/1/5 Junio C Hamano <gitster@pobox.com>:\n>> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:\n>>\n>>> The reason why the trailing slash is needed is obvious. refs/stash and\n>>> HEAD are not namespace, but complete refs. Do full string compare on them.\n>>>\n>>> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n>>> ---\n>>>  I missed prefixcmp(..., \"HEAD\") right below prefixcmp(..., \"refs/stash\")\n>>\n>> As Michael has been actively showing interest in cleaning up the area, he\n>> should have been CC'ed, I would think.\n>>\n>>>\n>>>  builtin/fetch.c  |    2 +-\n>>>  builtin/remote.c |    2 +-\n>>>  log-tree.c       |    4 ++--\n>>>  3 files changed, 4 insertions(+), 4 deletions(-)\n>>>\n>>> diff --git a/builtin/fetch.c b/builtin/fetch.c\n>>> index 33ad3aa..daa68d2 100644\n>>> --- a/builtin/fetch.c\n>>> +++ b/builtin/fetch.c\n>>> @@ -573,7 +573,7 @@ static void find_non_local_tags(struct transport *transport,\n>>>\n>>>       for_each_ref(add_existing, &existing_refs);\n>>>       for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n>>> -             if (prefixcmp(ref->name, \"refs/tags\"))\n>>> +             if (prefixcmp(ref->name, \"refs/tags/\"))\n>>>                       continue;\n>>>\n>>>               /*\n>>> diff --git a/builtin/remote.c b/builtin/remote.c\n>>> index 583eec9..f54a89a 100644\n>>> --- a/builtin/remote.c\n>>> +++ b/builtin/remote.c\n>>> @@ -534,7 +534,7 @@ static int add_branch_for_removal(const char *refname,\n>>>       }\n>>>\n>>>       /* don't delete non-remote-tracking refs */\n>>> -     if (prefixcmp(refname, \"refs/remotes\")) {\n>>> +     if (prefixcmp(refname, \"refs/remotes/\")) {\n>>>               /* advise user how to delete local branches */\n>>>               if (!prefixcmp(refname, \"refs/heads/\"))\n>>>                       string_list_append(branches->skipped,\n>>> diff --git a/log-tree.c b/log-tree.c\n>>> index 319bd31..535b905 100644\n>>> --- a/log-tree.c\n>>> +++ b/log-tree.c\n>>> @@ -119,9 +119,9 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in\n>>>               type = DECORATION_REF_REMOTE;\n>>>       else if (!prefixcmp(refname, \"refs/tags/\"))\n>>>               type = DECORATION_REF_TAG;\n>>> -     else if (!prefixcmp(refname, \"refs/stash\"))\n>>> +     else if (!strcmp(refname, \"refs/stash\"))\n>>>               type = DECORATION_REF_STASH;\n>>> -     else if (!prefixcmp(refname, \"HEAD\"))\n>>> +     else if (!strcmp(refname, \"HEAD\"))\n>>>               type = DECORATION_REF_HEAD;\n>>>\n>>>       if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS)\n> \n> \n> \n\n\n-- \nMichael Haggerty\nmhagger@alum.mit.edu\nhttp://softwareswirl.blogspot.com/\n"}]}