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

[PATCH 2/2 (v2)] reset: make the output more user-friendly.

From
Matthieu Moy <matthieu.moy@imag.fr>
Date
Aug 7, 2009, 20:24 UTC
Message-ID
<1249676676-5051-2-git-send-email-Matthieu.Moy@imag.fr>
In-Reply-To
<1249676676-5051-1-git-send-email-Matthieu.Moy@imag.fr>

git reset without argument displays a summary of the remaining unstaged changes. The problem with these is that they look like an error message, and the format is inconsistant with the format used in other places like "git diff --name-status".

This patch mimics the output of "git diff --name-status", and adds a header to make it clear the output is informative, and not an error.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
---

As noted by Junio, my previous version did actually display the header unconditionnaly. This version displays it as the first change is found.

 read-cache.c     |   22 +++++++++++++++++-----
 t/t7102-reset.sh |    3 ++-
 2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/read-cache.c b/read-cache.c
index f1aff81..4a4f4a5 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1065,6 +1065,15 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
 	return updated;
 }
 
+static void show_file(const char * fmt, const char * name, int in_porcelain, int * first)
+{
+	if (in_porcelain && *first) {
+		printf("Unstaged changes after reset:\n");
+		*first=0;
+	}
+	printf(fmt, name);
+}
+
 int refresh_index(struct index_state *istate, unsigned int flags, const char **pathspec, char *seen)
 {
 	int i;
@@ -1074,11 +1083,14 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p
 	int quiet = (flags & REFRESH_QUIET) != 0;
 	int not_new = (flags & REFRESH_IGNORE_MISSING) != 0;
 	int ignore_submodules = (flags & REFRESH_IGNORE_SUBMODULES) != 0;
+	int first = 1;
+	int in_porcelain = (flags & REFRESH_IN_PORCELAIN);
 	unsigned int options = really ? CE_MATCH_IGNORE_VALID : 0;
-	const char *needs_update_message;
+	const char *needs_update_fmt;
+	const char *needs_merge_fmt;
 
-	needs_update_message = ((flags & REFRESH_IN_PORCELAIN)
-				? "locally modified" : "needs update");
+	needs_update_fmt = (in_porcelain ? "M\t%s\n" : "%s: needs update\n");
+	needs_merge_fmt = (in_porcelain ? "U\t%s\n" : "%s: needs merge\n");
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct cache_entry *ce, *new;
 		int cache_errno = 0;
@@ -1094,7 +1106,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p
 			i--;
 			if (allow_unmerged)
 				continue;
-			printf("%s: needs merge\n", ce->name);
+			show_file(needs_merge_fmt, ce->name, in_porcelain, &first);
 			has_errors = 1;
 			continue;
 		}
@@ -1117,7 +1129,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p
 			}
 			if (quiet)
 				continue;
-			printf("%s: %s\n", ce->name, needs_update_message);
+			show_file(needs_update_fmt, ce->name, in_porcelain, &first);
 			has_errors = 1;
 			continue;
 		}
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index e637c7d..e85ff02 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -419,7 +419,8 @@ test_expect_success 'resetting an unmodified path is a no-op' '
 '
 
 cat > expect << EOF
-file2: locally modified
+Unstaged changes after reset:
+M	file2
 EOF
 
 test_expect_success '--mixed refreshes the index' '
-- 
1.6.4.62.g39c83.dirty
Previous: Matthieu MoyNext: Junio C Hamano
Message 9 of 20 in “Message from git reset: confusing?”
  1. Matthieu MoyAug 5, 2009
  2. Junio C HamanoAug 5, 2009
  3. Avery PennarunAug 5, 2009
  4. John TapsellAug 5, 2009
  5. Sverre RabbelierAug 5, 2009
  6. Matthieu MoyAug 6, 2009
  7. Junio C HamanoAug 6, 2009
  8. 1/2 Rename REFRESH_SAY_CHANGED to REFRESH_IN_PORCELAIN.Matthieu Moy, Aug 7, 2009
  9. 2/2 reset: make the output more user-friendly.Matthieu Moy, Aug 7, 2009
  10. Junio C HamanoAug 7, 2009
  11. Matthieu MoyAug 8, 2009
  12. Matthieu MoyAug 17, 2009
  13. Junio C HamanoAug 17, 2009
  14. 1/2 Rename REFRESH_SAY_CHANGED to REFRESH_IN_PORCELAIN.Matthieu Moy, Aug 21, 2009
  15. 2/2 reset: make the output more user-friendly.Matthieu Moy, Aug 21, 2009
  16. Junio C HamanoAug 22, 2009
  17. Matthieu MoyAug 22, 2009
  18. Junio C HamanoAug 23, 2009
  19. Matthieu MoyAug 23, 2009
  20. Reece DunnAug 23, 2009

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.