git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv3 3/3] commit/status: show the index-worktree diff with -v -v

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Mar 5, 2015, 14:13 UTC
Message-ID
<cae757b238bdd71bf8d03f9040a08466194c3440.1425564336.git.git@drmicha.warpmail.net>
In-Reply-To
<xmqqr3t479ey.fsf@gitster.dls.corp.google.com>

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.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
 Documentation/git-commit.txt |  4 ++++
 t/t7508-status.sh            | 10 ++++++++++
 wt-status.c                  | 16 ++++++++++++++++
 3 files changed, 30 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 e3c9cf9..b392376 100755
--- a/t/t7508-status.sh
+++ b/t/t7508-status.sh
@@ -143,6 +143,16 @@ test_expect_success 'status -v' '
 	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 "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' '
 	cat >.git/editor <<-\EOF &&
 	#! /bin/sh
diff --git a/wt-status.c b/wt-status.c
index 29666d0..3cdb356 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -849,6 +849,8 @@ static void wt_status_print_verbose(struct wt_status *s)
 {
 	struct rev_info rev;
 	struct setup_revision_opt opt;
+	int dirty_submodules;
+	const char *c = color(WT_STATUS_HEADER, s);
 
 	init_revisions(&rev, NULL);
 	DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV);
@@ -873,7 +875,21 @@ 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 && s->commitable) {
+		/* print_updated() printed header */
+		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);
+	if (s->verbose > 1 &&
+	    wt_status_check_worktree_changes(s, &dirty_submodules)) {
+		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)
-- 
2.3.1.303.g5174db1
Previous: Michael J Gruber
Message 30 of 30 in “How to prevent empty git commit --amend”
  1. Ivo AnjoJan 13, 2015
  2. Daniel Knittl-FrankJan 13, 2015
  3. Ivo AnjoJan 13, 2015
  4. Michael J GruberJan 13, 2015
  5. Matthieu MoyJan 14, 2015
  6. Ivo AnjoJan 14, 2015
  7. Matthieu MoyJan 14, 2015
  8. Junio C HamanoJan 14, 2015
  9. Junio C HamanoJan 14, 2015
  10. commit/status: show the index-worktree with -v -vMichael J Gruber, Jan 15, 2015
  11. Junio C HamanoJan 15, 2015
  12. Junio C HamanoJan 15, 2015
  13. Michael J GruberJan 16, 2015
  14. 0/2 More diffs for commit/statusMichael J Gruber, Mar 3, 2015
  15. 1/2 t7508: test git status -vMichael J Gruber, Mar 3, 2015
  16. Junio C HamanoMar 3, 2015
  17. Junio C HamanoMar 3, 2015
  18. Michael J GruberMar 4, 2015
  19. Junio C HamanoMar 4, 2015
  20. 2/2 commit/status: show the index-worktree diff with -v -vMichael J Gruber, Mar 3, 2015
  21. Junio C HamanoMar 3, 2015
  22. Michael J GruberMar 4, 2015
  23. Junio C HamanoMar 4, 2015
  24. 0/3 More diffs for commit/statusMichael J Gruber, Mar 5, 2015
  25. Junio C HamanoMar 5, 2015
  26. Junio C HamanoMar 5, 2015
  27. Junio C HamanoMar 5, 2015
  28. 1/3 t7508: .gitignore 'expect' and 'output' filesMichael J Gruber, Mar 5, 2015
  29. 2/3 t7508: test git status -vMichael J Gruber, Mar 5, 2015
  30. 3/3 commit/status: show the index-worktree diff with -v -vMichael J Gruber, Mar 5, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.