{"thread":{"id":"14692","subject":"[PATCH] rev-parse: Add support for the ^! and ^@ syntax","startedAt":"2008-07-26T16:37:56Z","lastAt":"2008-07-26T16:54:06Z","messageCount":2,"participants":["Björn Steinbrink"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"85087","messageId":"20080726163756.GA25103@atjola.homenet","threadId":"14692","inReplyTo":null,"subject":"[PATCH] rev-parse: Add support for the ^! and ^@ syntax","fromName":"Björn Steinbrink","fromEmail":"b.steinbrink@gmx.de","sentAt":"2008-07-26T16:37:56Z","receivedAt":"2008-07-26T16:37:56Z","isPatch":true,"sender":{"key":"b.steinbrink@gmx.de","avatar":"https://avatars.githubusercontent.com/u/230962?v=4"},"body":"Those shorthands are explained in the rev-parse documentation but were not\nactually supported by rev-parse itself.\n\nSigned-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>\n---\n builtin-rev-parse.c          |   32 ++++++++++++++++++++++++++++++++\n t/t6101-rev-parse-parents.sh |    2 ++\n 2 files changed, 34 insertions(+), 0 deletions(-)\n\ndiff --git a/builtin-rev-parse.c b/builtin-rev-parse.c\nindex aa71f4a..9aa049e 100644\n--- a/builtin-rev-parse.c\n+++ b/builtin-rev-parse.c\n@@ -241,6 +241,36 @@ static int try_difference(const char *arg)\n \treturn 0;\n }\n \n+static int try_parent_shorthands(const char *arg)\n+{\n+\tchar *dotdot;\n+\tunsigned char sha1[20];\n+\tstruct commit *commit;\n+\tstruct commit_list *parents;\n+\tint parents_only;\n+\n+\tif ((dotdot = strstr(arg, \"^!\")))\n+\t\tparents_only = 0;\n+\telse if ((dotdot = strstr(arg, \"^@\")))\n+\t\tparents_only = 1;\n+\n+\tif (!dotdot || dotdot[2])\n+\t\treturn 0;\n+\n+\t*dotdot = 0;\n+\tif (get_sha1(arg, sha1))\n+\t\treturn 0;\n+\n+\tif (!parents_only)\n+\t\tshow_rev(NORMAL, sha1, arg);\n+\tcommit = lookup_commit_reference(sha1);\n+\tfor (parents = commit->parents; parents; parents = parents->next)\n+\t\tshow_rev(parents_only ? NORMAL : REVERSED,\n+\t\t\t\tparents->item->object.sha1, arg);\n+\n+\treturn 1;\n+}\n+\n static int parseopt_dump(const struct option *o, const char *arg, int unset)\n {\n \tstruct strbuf *parsed = o->value;\n@@ -573,6 +603,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \t\t/* Not a flag argument */\n \t\tif (try_difference(arg))\n \t\t\tcontinue;\n+\t\tif (try_parent_shorthands(arg))\n+\t\t\tcontinue;\n \t\tname = arg;\n \t\ttype = NORMAL;\n \t\tif (*arg == '^') {\ndiff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh\nindex efc8313..919552a 100755\n--- a/t/t6101-rev-parse-parents.sh\n+++ b/t/t6101-rev-parse-parents.sh\n@@ -28,6 +28,8 @@ test_expect_success 'final^1^2 != final^1^1' \"test $(git rev-parse final^1^2) !=\n test_expect_success 'final^1^3 not valid' \"if git rev-parse --verify final^1^3; then false; else :; fi\"\n test_expect_success '--verify start2^1' 'test_must_fail git rev-parse --verify start2^1'\n test_expect_success '--verify start2^0' 'git rev-parse --verify start2^0'\n+test_expect_success 'final^1^@ = final^1^1 final^1^2' \"test \\\"$(git rev-parse final^1^@)\\\" = \\\"$(git rev-parse final^1^1 final^1^2)\\\"\"\n+test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' \"test \\\"$(git rev-parse final^1^\\!)\\\" = \\\"$(git rev-parse final^1 ^final^1^1 ^final^1^2)\\\"\"\n \n test_expect_success 'repack for next test' 'git repack -a -d'\n test_expect_success 'short SHA-1 works' '\n-- \n1.6.0.rc0.79.gb0320.dirty\n"},{"id":"85092","messageId":"20080726165406.GA26378@atjola.homenet","threadId":"14692","inReplyTo":"20080726163756.GA25103@atjola.homenet","subject":"Re: [PATCH] rev-parse: Add support for the ^! and ^@ syntax","fromName":"Björn Steinbrink","fromEmail":"b.steinbrink@gmx.de","sentAt":"2008-07-26T16:54:06Z","receivedAt":"2008-07-26T16:54:06Z","isPatch":true,"sender":{"key":"b.steinbrink@gmx.de","avatar":"https://avatars.githubusercontent.com/u/230962?v=4"},"body":"On 2008.07.26 18:37:56 +0200, Björn Steinbrink wrote:\n> Those shorthands are explained in the rev-parse documentation but were not\n> actually supported by rev-parse itself.\n> \n> Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>\n> ---\n\nAh crap, forgot to say that I wrote this because I wanted gitk to\nsupport the ^! syntax and that uses rev-parse to parse its revision\narguments. My use-case with gitk is to quickly verify a bunch of grafts\nI used to fixup the history in a git-svn repo.\n\nBjörn\n"}]}