X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=rev-list.c;h=63391fc1136d4d4045db6406face4c53915cd5bf;hb=abb7c7b31c0896bd838bbb6437b310db5a42227a;hp=0b142c1a6f79bf12901da71ca4e336cc32488171;hpb=36b5b3c65948694d9a92de5a17f2b97c3cd84879;p=git.git diff --git a/rev-list.c b/rev-list.c index 0b142c1a..63391fc1 100644 --- a/rev-list.c +++ b/rev-list.c @@ -12,6 +12,7 @@ #define COUNTED (1u << 2) #define SHOWN (1u << 3) #define TREECHANGE (1u << 4) +#define TMP_MARK (1u << 5) /* for isolated cases; clean after use */ static const char rev_list_usage[] = "git-rev-list [OPTION] ... [ -- paths... ]\n" @@ -31,6 +32,7 @@ static const char rev_list_usage[] = " --objects\n" " --unpacked\n" " --header | --pretty\n" +" --abbrev=nr | --no-abbrev\n" " special purpose:\n" " --bisect" ; @@ -42,6 +44,7 @@ static int tag_objects = 0; static int tree_objects = 0; static int blob_objects = 0; static int verbose_header = 0; +static int abbrev = DEFAULT_ABBREV; static int show_parents = 0; static int hdr_termination = 0; static const char *commit_prefix = ""; @@ -72,9 +75,21 @@ static void show_commit(struct commit *commit) if (show_parents) { struct commit_list *parents = commit->parents; while (parents) { - printf(" %s", sha1_to_hex(parents->item->object.sha1)); + struct object *o = &(parents->item->object); parents = parents->next; + if (o->flags & TMP_MARK) + continue; + printf(" %s", sha1_to_hex(o->sha1)); + o->flags |= TMP_MARK; } + /* TMP_MARK is a general purpose flag that can + * be used locally, but the user should clean + * things up after it is done with them. + */ + for (parents = commit->parents; + parents; + parents = parents->next) + parents->item->object.flags &= ~TMP_MARK; } if (commit_format == CMIT_FMT_ONELINE) putchar(' '); @@ -83,7 +98,7 @@ static void show_commit(struct commit *commit) if (verbose_header) { static char pretty_header[16384]; - pretty_print_commit(commit_format, commit, ~0, pretty_header, sizeof(pretty_header), 0); + pretty_print_commit(commit_format, commit, ~0, pretty_header, sizeof(pretty_header), abbrev); printf("%s%c", pretty_header, hdr_termination); } fflush(stdout); @@ -749,6 +764,21 @@ int main(int argc, const char **argv) struct commit *commit; unsigned char sha1[20]; + /* accept -, like traditilnal "head" */ + if ((*arg == '-') && isdigit(arg[1])) { + max_count = atoi(arg + 1); + continue; + } + if (!strcmp(arg, "-n")) { + if (++i >= argc) + die("-n requires an argument"); + max_count = atoi(argv[i]); + continue; + } + if (!strncmp(arg,"-n",2)) { + max_count = atoi(arg + 2); + continue; + } if (!strncmp(arg, "--max-count=", 12)) { max_count = atoi(arg + 12); continue; @@ -767,6 +797,18 @@ int main(int argc, const char **argv) verbose_header = 1; continue; } + if (!strcmp(arg, "--no-abbrev")) { + abbrev = 0; + continue; + } + if (!strncmp(arg, "--abbrev=", 9)) { + abbrev = strtoul(arg + 9, NULL, 10); + if (abbrev && abbrev < MINIMUM_ABBREV) + abbrev = MINIMUM_ABBREV; + else if (40 < abbrev) + abbrev = 40; + continue; + } if (!strncmp(arg, "--pretty", 8)) { commit_format = get_commit_format(arg+8); verbose_header = 1;