Skip to content

Commit

Permalink
builtin-commit: Include the diff in the commit message when verbose.
Browse files Browse the repository at this point in the history
run_diff_index() and the entire diff machinery is hard coded to output
to stdout, so just redirect that and restore it when done.

Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Kristian Høgsberg authored and Junio C Hamano committed Nov 23, 2007
1 parent 2888605 commit 99a1269
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
8 changes: 7 additions & 1 deletion builtin-commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
int header_len;
struct strbuf sb;
const char *index_file, *reflog_msg;
char *nl;
char *nl, *p;
unsigned char commit_sha1[20];
struct ref_lock *ref_lock;

Expand Down Expand Up @@ -758,6 +758,12 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
rollback_index_files();
exit(1);
}

/* Truncate the message just before the diff, if any. */
p = strstr(sb.buf, "\ndiff --git a/");
if (p != NULL)
strbuf_setlen(&sb, p - sb.buf);

stripspace(&sb, 1);
if (sb.len < header_len || message_is_empty(&sb, header_len)) {
rollback_index_files();
Expand Down
16 changes: 16 additions & 0 deletions wt-status.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,12 +315,28 @@ static void wt_status_print_untracked(struct wt_status *s)
static void wt_status_print_verbose(struct wt_status *s)
{
struct rev_info rev;
int saved_stdout;

fflush(s->fp);

/* Sigh, the entire diff machinery is hardcoded to output to
* stdout. Do the dup-dance...*/
saved_stdout = dup(STDOUT_FILENO);
if (saved_stdout < 0 ||dup2(fileno(s->fp), STDOUT_FILENO) < 0)
die("couldn't redirect stdout\n");

init_revisions(&rev, NULL);
setup_revisions(0, NULL, &rev, s->reference);
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
rev.diffopt.detect_rename = 1;
wt_read_cache(s);
run_diff_index(&rev, 1);

fflush(stdout);

if (dup2(saved_stdout, STDOUT_FILENO) < 0)
die("couldn't restore stdout\n");
close(saved_stdout);
}

void wt_status_print(struct wt_status *s)
Expand Down

0 comments on commit 99a1269

Please sign in to comment.