diff options
Diffstat (limited to 'builtin-rev-list.c')
| -rw-r--r-- | builtin-rev-list.c | 71 | 
1 files changed, 58 insertions, 13 deletions
| diff --git a/builtin-rev-list.c b/builtin-rev-list.c index edc0bd35bb..83a7b1349e 100644 --- a/builtin-rev-list.c +++ b/builtin-rev-list.c @@ -10,6 +10,7 @@  #include "list-objects.h"  #include "builtin.h"  #include "log-tree.h" +#include "graph.h"  /* bits #0-15 in revision.h */ @@ -58,26 +59,31 @@ static const char *header_prefix;  static void finish_commit(struct commit *commit);  static void show_commit(struct commit *commit)  { +	graph_show_commit(revs.graph); +  	if (show_timestamp)  		printf("%lu ", commit->date);  	if (header_prefix)  		fputs(header_prefix, stdout); -	if (commit->object.flags & BOUNDARY) -		putchar('-'); -	else if (commit->object.flags & UNINTERESTING) -		putchar('^'); -	else if (revs.left_right) { -		if (commit->object.flags & SYMMETRIC_LEFT) -			putchar('<'); -		else -			putchar('>'); + +	if (!revs.graph) { +		if (commit->object.flags & BOUNDARY) +			putchar('-'); +		else if (commit->object.flags & UNINTERESTING) +			putchar('^'); +		else if (revs.left_right) { +			if (commit->object.flags & SYMMETRIC_LEFT) +				putchar('<'); +			else +				putchar('>'); +		}  	}  	if (revs.abbrev_commit && revs.abbrev)  		fputs(find_unique_abbrev(commit->object.sha1, revs.abbrev),  		      stdout);  	else  		fputs(sha1_to_hex(commit->object.sha1), stdout); -	if (revs.parents) { +	if (revs.print_parents) {  		struct commit_list *parents = commit->parents;  		while (parents) {  			printf(" %s", sha1_to_hex(parents->item->object.sha1)); @@ -96,9 +102,48 @@ static void show_commit(struct commit *commit)  		pretty_print_commit(revs.commit_format, commit,  				    &buf, revs.abbrev, NULL, NULL,  				    revs.date_mode, 0); -		if (buf.len) -			printf("%s%c", buf.buf, hdr_termination); +		if (revs.graph) { +			if (buf.len) { +				if (revs.commit_format != CMIT_FMT_ONELINE) +					graph_show_oneline(revs.graph); + +				graph_show_commit_msg(revs.graph, &buf); + +				/* +				 * Add a newline after the commit message. +				 * +				 * Usually, this newline produces a blank +				 * padding line between entries, in which case +				 * we need to add graph padding on this line. +				 * +				 * However, the commit message may not end in a +				 * newline.  In this case the newline simply +				 * ends the last line of the commit message, +				 * and we don't need any graph output.  (This +				 * always happens with CMIT_FMT_ONELINE, and it +				 * happens with CMIT_FMT_USERFORMAT when the +				 * format doesn't explicitly end in a newline.) +				 */ +				if (buf.len && buf.buf[buf.len - 1] == '\n') +					graph_show_padding(revs.graph); +				putchar('\n'); +			} else { +				/* +				 * If the message buffer is empty, just show +				 * the rest of the graph output for this +				 * commit. +				 */ +				if (graph_show_remainder(revs.graph)) +					putchar('\n'); +			} +		} else { +			if (buf.len) +				printf("%s%c", buf.buf, hdr_termination); +		}  		strbuf_release(&buf); +	} else { +		if (graph_show_remainder(revs.graph)) +			putchar('\n');  	}  	maybe_flush_or_die(stdout, "stdout");  	finish_commit(commit); @@ -546,7 +591,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)  	int bisect_find_all = 0;  	int quiet = 0; -	git_config(git_default_config); +	git_config(git_default_config, NULL);  	init_revisions(&revs, prefix);  	revs.abbrev = 0;  	revs.commit_format = CMIT_FMT_UNSPECIFIED; | 
