{"thread":{"id":"1466","subject":"[PATCH] Fix git-rev-parse's parent handling","startedAt":"2005-08-10T03:07:36Z","lastAt":"2005-08-10T17:28:49Z","messageCount":2,"participants":["Johannes Schindelin","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"7018","messageId":"Pine.LNX.4.63.0508100506260.11734@wgmdd8.biozentrum.uni-wuerzburg.de","threadId":"1466","inReplyTo":null,"subject":"[PATCH] Fix git-rev-parse's parent handling","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2005-08-10T03:07:36Z","receivedAt":"2005-08-10T03:07:36Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"git-rev-parse HEAD^1 would fail, because of an off-by-one bug (but HEAD^ \nwould yield the expected result). Also, when the parent does not exist, do \nnot silently return an incorrect SHA1. Of course, this no longer applies \nto git-rev-parse alone, but every user of get_sha1().\n\nWhile at it, add a test.\n\nSigned-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>\n\n---\n\n sha1_name.c                  |    9 ++++++---\n t/t6101-rev-parse-parents.sh |   33 +++++++++++++++++++++++++++++++++\n 2 files changed, 39 insertions(+), 3 deletions(-)\n create mode 100644 t/t6101-rev-parse-parents.sh\n\n83c1ab3e9bcba4eca5e055e27f8f4fb0b78518a5\ndiff --git a/sha1_name.c b/sha1_name.c\n--- a/sha1_name.c\n+++ b/sha1_name.c\n@@ -202,15 +202,18 @@ static int get_sha1_1(const char *name, \n \t\tparent = name[len-1] - '0';\n \t\tlen -= 2;\n \t}\n-\telse if (len > 1 && name[len-1] == '^')\n+\telse if (len > 1 && name[len-1] == '^') {\n \t\tparent = 1;\n-\telse\n+\t\tlen--;\n+\t} else\n \t\tparent = -1;\n \n \tif (0 <= parent) {\n-\t\tret = get_parent(name, len-1, sha1, parent);\n+\t\tret = get_parent(name, len, sha1, parent);\n \t\tif (!ret)\n \t\t\treturn 0;\n+\t\telse if(parent>0)\n+\t\t\treturn ret;\n \t}\n \tret = get_sha1_basic(name, len, sha1);\n \tif (!ret)\ndiff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh\nnew file mode 100644\n--- /dev/null\n+++ b/t/t6101-rev-parse-parents.sh\n@@ -0,0 +1,33 @@\n+#!/bin/sh\n+#\n+# Copyright (c) 2005 Johannes Schindelin\n+#\n+\n+test_description='Test git-rev-parse with different parent options'\n+\n+. ./test-lib.sh\n+. ../t6000lib.sh # t6xxx specific functions\n+\n+date >path0\n+git-update-cache --add path0\n+save_tag tree git-write-tree\n+hide_error save_tag start unique_commit \"start\" tree\n+save_tag second unique_commit \"second\" tree -p start\n+hide_error save_tag start2 unique_commit \"start2\" tree\n+save_tag two_parents unique_commit \"next\" tree -p second -p start2\n+save_tag final unique_commit \"final\" tree -p two_parents\n+\n+test_expect_success 'start is valid' 'git-rev-parse start | grep \"^[0-9a-f]\\{40\\}$\"'\n+test_expect_success 'start^0' \"test $(cat .git/refs/tags/start) = $(git-rev-parse start^0)\"\n+test_expect_success 'start^1 not valid' \"test $(git-rev-parse start^1) = start^1\"\n+test_expect_success 'second^1 = second^' \"test $(git-rev-parse second^1) = $(git-rev-parse second^)\"\n+test_expect_success 'final^1^1^1' \"test $(git-rev-parse start) = $(git-rev-parse final^1^1^1)\"\n+test_expect_success 'final^1^1^1 = final^^^' \"test $(git-rev-parse final^1^1^1) = $(git-rev-parse final^^^)\"\n+test_expect_success 'final^1^2' \"test $(git-rev-parse start2) = $(git-rev-parse final^1^2)\"\n+test_expect_success 'final^1^2 != final^1^1' \"test $(git-rev-parse final^1^2) != $(git-rev-parse final^1^1)\"\n+test_expect_success 'final^1^3 not valid' \"test $(git-rev-parse final^1^3) = final^1^3\"\n+test_expect_failure '--verify start2^1' 'git-rev-parse --verify start2^1'\n+test_expect_success '--verify start2^0' 'git-rev-parse --verify start2^0'\n+\n+test_done\n+\n"},{"id":"7032","messageId":"7v7jetsnu6.fsf@assigned-by-dhcp.cox.net","threadId":"1466","inReplyTo":"Pine.LNX.4.63.0508100506260.11734@wgmdd8.biozentrum.uni-wuerzburg.de","subject":"Re: [PATCH] Fix git-rev-parse's parent handling","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-08-10T17:28:49Z","receivedAt":"2005-08-10T17:28:49Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> git-rev-parse HEAD^1 would fail,\n\nThanks.  Time to find a brown paper bag ;-).\n"}]}