builtin-commit: Include the diff in the commit message when verbose.
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>
This commit is contained in:

committed by
Junio C Hamano

parent
2888605c64
commit
99a1269458
@ -662,7 +662,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
|||||||
int header_len;
|
int header_len;
|
||||||
struct strbuf sb;
|
struct strbuf sb;
|
||||||
const char *index_file, *reflog_msg;
|
const char *index_file, *reflog_msg;
|
||||||
char *nl;
|
char *nl, *p;
|
||||||
unsigned char commit_sha1[20];
|
unsigned char commit_sha1[20];
|
||||||
struct ref_lock *ref_lock;
|
struct ref_lock *ref_lock;
|
||||||
|
|
||||||
@ -758,6 +758,12 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
|||||||
rollback_index_files();
|
rollback_index_files();
|
||||||
exit(1);
|
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);
|
stripspace(&sb, 1);
|
||||||
if (sb.len < header_len || message_is_empty(&sb, header_len)) {
|
if (sb.len < header_len || message_is_empty(&sb, header_len)) {
|
||||||
rollback_index_files();
|
rollback_index_files();
|
||||||
|
16
wt-status.c
16
wt-status.c
@ -315,12 +315,28 @@ static void wt_status_print_untracked(struct wt_status *s)
|
|||||||
static void wt_status_print_verbose(struct wt_status *s)
|
static void wt_status_print_verbose(struct wt_status *s)
|
||||||
{
|
{
|
||||||
struct rev_info rev;
|
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);
|
init_revisions(&rev, NULL);
|
||||||
setup_revisions(0, NULL, &rev, s->reference);
|
setup_revisions(0, NULL, &rev, s->reference);
|
||||||
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
|
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
|
||||||
rev.diffopt.detect_rename = 1;
|
rev.diffopt.detect_rename = 1;
|
||||||
wt_read_cache(s);
|
wt_read_cache(s);
|
||||||
run_diff_index(&rev, 1);
|
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)
|
void wt_status_print(struct wt_status *s)
|
||||||
|
Reference in New Issue
Block a user