X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=rev-list.c;h=6e6ffde39600f048f5c365dd478256feba321db9;hb=58e60dd203362ecb9fdea765dcc2eb573892dbaf;hp=ac7a47fdce01ec8ae45198420da3d6ec81d8ebf1;hpb=7b34c2fae0d2875b35ad1cc0e416b9c2b9b02b1f;p=git.git diff --git a/rev-list.c b/rev-list.c index ac7a47fd..6e6ffde3 100644 --- a/rev-list.c +++ b/rev-list.c @@ -14,19 +14,25 @@ #define TREECHANGE (1u << 4) static const char rev_list_usage[] = - "git-rev-list [OPTION] commit-id \n" - " --max-count=nr\n" - " --max-age=epoch\n" - " --min-age=epoch\n" - " --parents\n" - " --bisect\n" - " --objects\n" - " --unpacked\n" - " --header\n" - " --pretty\n" - " --no-merges\n" - " --merge-order [ --show-breaks ]\n" - " --topo-order"; +"git-rev-list [OPTION] ... [ -- paths... ]\n" +" limiting output:\n" +" --max-count=nr\n" +" --max-age=epoch\n" +" --min-age=epoch\n" +" --sparse\n" +" --no-merges\n" +" --all\n" +" ordering output:\n" +" --merge-order [ --show-breaks ]\n" +" --topo-order\n" +" formatting output:\n" +" --parents\n" +" --objects\n" +" --unpacked\n" +" --header | --pretty\n" +" special purpose:\n" +" --bisect" +; static int dense = 1; static int unpacked = 0; @@ -613,13 +619,10 @@ static void add_pending_object(struct object *obj, const char *name) add_object(obj, &pending_objects, name); } -static struct commit *get_commit_reference(const char *name, unsigned int flags) +static struct commit *get_commit_reference(const char *name, const unsigned char *sha1, unsigned int flags) { - unsigned char sha1[20]; struct object *object; - if (get_sha1(name, sha1)) - return NULL; object = parse_object(sha1); if (!object) die("bad object %s", name); @@ -697,7 +700,7 @@ static struct commit_list **global_lst; static int include_one_commit(const char *path, const unsigned char *sha1) { - struct commit *com = get_commit_reference(path, 0); + struct commit *com = get_commit_reference(path, sha1, 0); handle_one_commit(com, global_lst); return 0; } @@ -720,6 +723,7 @@ int main(int argc, const char **argv) const char *arg = argv[i]; char *dotdot; struct commit *commit; + unsigned char sha1[20]; if (!strncmp(arg, "--max-count=", 12)) { max_count = atoi(arg + 12); @@ -808,15 +812,19 @@ int main(int argc, const char **argv) flags = 0; dotdot = strstr(arg, ".."); if (dotdot) { + unsigned char from_sha1[20]; char *next = dotdot + 2; - struct commit *exclude = NULL; - struct commit *include = NULL; *dotdot = 0; if (!*next) next = "HEAD"; - exclude = get_commit_reference(arg, UNINTERESTING); - include = get_commit_reference(next, 0); - if (exclude && include) { + if (!get_sha1(arg, from_sha1) && !get_sha1(next, sha1)) { + struct commit *exclude; + struct commit *include; + + exclude = get_commit_reference(arg, from_sha1, UNINTERESTING); + include = get_commit_reference(next, sha1, 0); + if (!exclude || !include) + die("Invalid revision range %s..%s", arg, next); limited = 1; handle_one_commit(exclude, &list); handle_one_commit(include, &list); @@ -829,9 +837,9 @@ int main(int argc, const char **argv) arg++; limited = 1; } - commit = get_commit_reference(arg, flags); - if (!commit) + if (get_sha1(arg, sha1) < 0) break; + commit = get_commit_reference(arg, sha1, flags); handle_one_commit(commit, &list); }