X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=rev-list.c;h=2d97cdb64bdad56046c1dfd2fd784af54d420ca5;hb=e1ccf53a60657930ae7892387736c8b6a91ec610;hp=fae30a2b68c98555bc8c2e5c9cea84c358ec8363;hpb=1215879cdcc508e30415e45ca2c8022f4f3976d6;p=git.git diff --git a/rev-list.c b/rev-list.c index fae30a2b..2d97cdb6 100644 --- a/rev-list.c +++ b/rev-list.c @@ -15,12 +15,15 @@ static const char rev_list_usage[] = " --max-count=nr\n" " --max-age=epoch\n" " --min-age=epoch\n" + " --parents\n" " --bisect\n" " --objects\n" " --unpacked\n" " --header\n" " --pretty\n" - " --merge-order [ --show-breaks ]"; + " --no-merges\n" + " --merge-order [ --show-breaks ]\n" + " --topo-order"; static int unpacked = 0; static int bisect_list = 0; @@ -30,7 +33,7 @@ static int blob_objects = 0; static int verbose_header = 0; static int show_parents = 0; static int hdr_termination = 0; -static const char *prefix = ""; +static const char *commit_prefix = ""; static unsigned long max_age = -1; static unsigned long min_age = -1; static int max_count = -1; @@ -39,19 +42,20 @@ static int merge_order = 0; static int show_breaks = 0; static int stop_traversal = 0; static int topo_order = 0; +static int no_merges = 0; static void show_commit(struct commit *commit) { commit->object.flags |= SHOWN; if (show_breaks) { - prefix = "| "; + commit_prefix = "| "; if (commit->object.flags & DISCONTINUITY) { - prefix = "^ "; + commit_prefix = "^ "; } else if (commit->object.flags & BOUNDARY) { - prefix = "= "; + commit_prefix = "= "; } } - printf("%s%s", prefix, sha1_to_hex(commit->object.sha1)); + printf("%s%s", commit_prefix, sha1_to_hex(commit->object.sha1)); if (show_parents) { struct commit_list *parents = commit->parents; while (parents) { @@ -59,7 +63,11 @@ static void show_commit(struct commit *commit) parents = parents->next; } } - putchar('\n'); + if (commit_format == CMIT_FMT_ONELINE) + putchar(' '); + else + putchar('\n'); + if (verbose_header) { static char pretty_header[16384]; pretty_print_commit(commit_format, commit->buffer, ~0, pretty_header, sizeof(pretty_header)); @@ -82,6 +90,8 @@ static int filter_commit(struct commit * commit) } if (max_count != -1 && !max_count--) return STOP; + if (no_merges && (commit->parents && commit->parents->next)) + return CONTINUE; return DO; } @@ -408,6 +418,8 @@ static struct commit *get_commit_reference(const char *name, unsigned int flags) if (tag_objects && !(object->flags & UNINTERESTING)) add_pending_object(object, tag->tag); object = parse_object(tag->tagged->sha1); + if (!object) + die("bad object %s", sha1_to_hex(tag->tagged->sha1)); } /* @@ -471,6 +483,7 @@ int main(int argc, char **argv) struct commit_list *list = NULL; int i, limited = 0; + setup_git_directory(); for (i = 1 ; i < argc; i++) { int flags; char *arg = argv[i]; @@ -497,7 +510,14 @@ int main(int argc, char **argv) commit_format = get_commit_format(arg+8); verbose_header = 1; hdr_termination = '\n'; - prefix = "commit "; + if (commit_format == CMIT_FMT_ONELINE) + commit_prefix = ""; + else + commit_prefix = "commit "; + continue; + } + if (!strncmp(arg, "--no-merges", 11)) { + no_merges = 1; continue; } if (!strcmp(arg, "--parents")) {