From: Linus Torvalds Date: Tue, 12 Jul 2005 01:27:25 +0000 (-0700) Subject: git-rev-parse: Allow a "zeroth" parent of a commit - the commit itself. X-Git-Tag: v0.99.1~56 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=79162bb8ad43aefb23172b9f164ea13ac2b60744;p=git.git git-rev-parse: Allow a "zeroth" parent of a commit - the commit itself. This sounds nonsensical, but it's useful to make sure that the result is a commit. For example, "git-rev-parse v2.6.12" will return the _tag_ object for v2.6.12, but "git-rev-parse v2.6.12^0" will return the _commit_ object associated with that tag (and v2.6.12^1 will return the first parent). Also, since the "parent" code will actually parse the commit, this, together with the "--verify" flag, will verify not only that the result is a single SHA1, but will also have verified that it's a proper commit that we can see. --- diff --git a/rev-parse.c b/rev-parse.c index 4c307cd80..43af88b5a 100644 --- a/rev-parse.c +++ b/rev-parse.c @@ -97,6 +97,10 @@ static int get_parent(char *name, unsigned char *result, int idx) return -1; if (parse_commit(commit)) return -1; + if (!idx) { + memcpy(result, commit->object.sha1, 20); + return 0; + } p = commit->parents; while (p) { if (!--idx) { @@ -238,7 +242,7 @@ static int get_extended_sha1(char *name, unsigned char *sha1) int len = strlen(name); parent = 1; - if (len > 2 && name[len-1] >= '1' && name[len-1] <= '9') { + if (len > 2 && name[len-1] >= '0' && name[len-1] <= '9') { parent = name[len-1] - '0'; len--; }