X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=commit.c;h=c550a00d8242f9a57e0bd008d952f24e1b91ad35;hb=bbe0c9b8d82aa98aad2ae7e6554cc0b9e2836363;hp=97205bfb2ceaf77c2b90552327c9a4a1de83a39d;hpb=f2d4227530499db3e273ae84f30adfd4b70791c6;p=git.git diff --git a/commit.c b/commit.c index 97205bfb..c550a00d 100644 --- a/commit.c +++ b/commit.c @@ -438,13 +438,13 @@ static int add_merge_info(enum cmit_fmt fmt, char *buf, const struct commit *com while (parent) { struct commit *p = parent->item; + const char *hex = abbrev + ? find_unique_abbrev(p->object.sha1, abbrev) + : sha1_to_hex(p->object.sha1); + char *dots = (abbrev && strlen(hex) != 40) ? "..." : ""; parent = parent->next; - offset += sprintf(buf + offset, - abbrev ? " %s..." : " %s", - abbrev - ? find_unique_abbrev(p->object.sha1, abbrev) - : sha1_to_hex(p->object.sha1)); + offset += sprintf(buf + offset, " %s%s", hex, dots); } buf[offset++] = '\n'; return offset; @@ -571,7 +571,7 @@ int count_parents(struct commit * commit) /* * Performs an in-place topological sort on the list supplied. */ -void sort_in_topological_order(struct commit_list ** list) +void sort_in_topological_order(struct commit_list ** list, int lifo) { struct commit_list * next = *list; struct commit_list * work = NULL, **insert; @@ -630,7 +630,10 @@ void sort_in_topological_order(struct commit_list ** list) } next=next->next; } + /* process the list in topological order */ + if (!lifo) + sort_by_date(&work); while (work) { struct commit * work_item = pop_commit(&work); struct sort_node * work_node = (struct sort_node *)work_item->object.util; @@ -647,8 +650,12 @@ void sort_in_topological_order(struct commit_list ** list) * guaranteeing topological order. */ pn->indegree--; - if (!pn->indegree) - commit_list_insert(parent, &work); + if (!pn->indegree) { + if (!lifo) + insert_by_date(parent, &work); + else + commit_list_insert(parent, &work); + } } parents=parents->next; }