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. Signed-off-by: Michael J Gruber <git@xxxxxxxxxxxxxxxxxxxx> --- Documentation/git-commit.txt | 4 ++++ t/t7508-status.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ wt-status.c | 10 ++++++++++ 3 files changed, 57 insertions(+) diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index 1e74b75..f14d2ec 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -284,6 +284,10 @@ configuration variable documented in linkgit:git-config[1]. would be committed at the bottom of the commit message template. Note that this diff output doesn't have its 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:: --quiet:: diff --git a/t/t7508-status.sh b/t/t7508-status.sh index 4989e98..6779195 100755 --- a/t/t7508-status.sh +++ b/t/t7508-status.sh @@ -139,6 +139,49 @@ test_expect_success 'status -v' ' test_cmp expect output ' +cat >expect <<\EOF +On branch master +Changes to be committed: + (use "git reset HEAD <file>..." to unstage) + + new file: dir2/added + +Changes not staged for commit: + (use "git add <file>..." to update what will be committed) + (use "git checkout -- <file>..." to discard changes in working directory) + + modified: dir1/modified + +Untracked files: + (use "git add <file>..." to include in what will be committed) + + dir1/untracked + dir2/modified + dir2/untracked + expect + output + untracked + +diff --git HEAD=base-commit/dir2/added INDEX=staged-for-commit/dir2/added +new file mode 100644 +index 0000000..00750ed +--- /dev/null ++++ INDEX=staged-for-commit/dir2/added +@@ -0,0 +1 @@ ++3 +diff --git INDEX=staged-for-commit/dir1/modified WORKTREE=not-staged-for-commit/dir1/modified +index e69de29..d00491f 100644 +--- INDEX=staged-for-commit/dir1/modified ++++ WORKTREE=not-staged-for-commit/dir1/modified +@@ -0,0 +1 @@ ++1 +EOF + +test_expect_success 'status -v -v' ' + git status -v -v >output && + test_cmp expect output +' + test_expect_success 'setup fake editor' ' cat >.git/editor <<-\EOF && #! /bin/sh diff --git a/wt-status.c b/wt-status.c index 29666d0..b6e9837 100644 --- a/wt-status.c +++ b/wt-status.c @@ -873,7 +873,17 @@ static void wt_status_print_verbose(struct wt_status *s) rev.diffopt.use_color = 0; wt_status_add_cut_line(s->fp); } + if (s->verbose > 1) { + rev.diffopt.a_prefix = "HEAD=base-commit/"; + rev.diffopt.b_prefix = "INDEX=staged-for-commit/"; + } /* else use prefix as per user config */ run_diff_index(&rev, 1); + if (s->verbose > 1) { + setup_work_tree(); + rev.diffopt.a_prefix = "INDEX=staged-for-commit/"; + rev.diffopt.b_prefix = "WORKTREE=not-staged-for-commit/"; + run_diff_files(&rev, 0); + } } static void wt_status_print_tracking(struct wt_status *s) -- 2.3.1.303.g5174db1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html