提交 40555000 编写于 作者: M Michael J Gruber 提交者: Junio C Hamano

commit/status: show the index-worktree diff with -v -v

git commit and git status in long format show the diff between HEAD
and the index when given -v. This allows previewing a commit to be made.

They also list tracked files with unstaged changes, but without a diff.

Introduce '-v -v' which shows the diff between the index and the
worktree in addition to the HEAD index diff. This allows a review of unstaged
changes which might be missing from the commit.

In the case of '-v -v', additonal header lines

Changes to be committed:

and

Changes not staged for commit:

are inserted before the diffs, which are equal to those in the status
part; the latter preceded by 50*"-" to make it stick out more.
Signed-off-by: NMichael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 f8c65c1f
...@@ -284,6 +284,10 @@ configuration variable documented in linkgit:git-config[1]. ...@@ -284,6 +284,10 @@ configuration variable documented in linkgit:git-config[1].
would be committed at the bottom of the commit message would be committed at the bottom of the commit message
template. Note that this diff output doesn't have its template. Note that this diff output doesn't have its
lines prefixed with '#'. lines prefixed with '#'.
+
If specified twice, show in addition the unified diff between
what would be committed and the worktree files, i.e. the unstaged
changes to tracked files.
-q:: -q::
--quiet:: --quiet::
......
...@@ -143,6 +143,17 @@ test_expect_success 'status -v' ' ...@@ -143,6 +143,17 @@ test_expect_success 'status -v' '
test_i18ncmp expect-with-v output test_i18ncmp expect-with-v output
' '
test_expect_success 'status -v -v' '
(cat expect &&
echo "Changes to be committed:" &&
git -c diff.mnemonicprefix=true diff --cached &&
echo "--------------------------------------------------" &&
echo "Changes not staged for commit:" &&
git -c diff.mnemonicprefix=true diff) >expect-with-v &&
git status -v -v >output &&
test_i18ncmp expect-with-v output
'
test_expect_success 'setup fake editor' ' test_expect_success 'setup fake editor' '
cat >.git/editor <<-\EOF && cat >.git/editor <<-\EOF &&
#! /bin/sh #! /bin/sh
......
...@@ -849,6 +849,8 @@ static void wt_status_print_verbose(struct wt_status *s) ...@@ -849,6 +849,8 @@ static void wt_status_print_verbose(struct wt_status *s)
{ {
struct rev_info rev; struct rev_info rev;
struct setup_revision_opt opt; struct setup_revision_opt opt;
int dirty_submodules;
const char *c = color(WT_STATUS_HEADER, s);
init_revisions(&rev, NULL); init_revisions(&rev, NULL);
DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV); DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV);
...@@ -873,7 +875,25 @@ static void wt_status_print_verbose(struct wt_status *s) ...@@ -873,7 +875,25 @@ static void wt_status_print_verbose(struct wt_status *s)
rev.diffopt.use_color = 0; rev.diffopt.use_color = 0;
wt_status_add_cut_line(s->fp); wt_status_add_cut_line(s->fp);
} }
if (s->verbose > 1 && s->commitable) {
/* print_updated() printed a header, so do we */
if (s->fp != stdout)
wt_status_print_trailer(s);
status_printf_ln(s, c, _("Changes to be committed:"));
rev.diffopt.a_prefix = "c/";
rev.diffopt.b_prefix = "i/";
} /* else use prefix as per user config */
run_diff_index(&rev, 1); run_diff_index(&rev, 1);
if (s->verbose > 1 &&
wt_status_check_worktree_changes(s, &dirty_submodules)) {
status_printf_ln(s, c,
"--------------------------------------------------");
status_printf_ln(s, c, _("Changes not staged for commit:"));
setup_work_tree();
rev.diffopt.a_prefix = "i/";
rev.diffopt.b_prefix = "w/";
run_diff_files(&rev, 0);
}
} }
static void wt_status_print_tracking(struct wt_status *s) static void wt_status_print_tracking(struct wt_status *s)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册