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

Re: [PATCH] add status.relativePaths config variable

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 8, 2007, 07:47 UTC
Message-ID
<7vaboly6dv.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<7vejdxy70p.fsf@gitster.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 7 quoted lines
> I have been wondering ever since receiving this patch if this is a good
> interface change.  Was there a problem if instead:
>
> 	- The implementation of wt_status_prepare(&s) stays as before;
>
> 	- run_status(), after calling wt_status_prepare(&s), notices the
>           configuration variable, and sets s.prefix conditionally;
Which would make the rewritten patch like this...
-- >8 --
From: Jeff King <peff@peff.net>
Date: Fri, 7 Dec 2007 16:26:07 -0500
Subject: [PATCH] add status.relativePaths config variable

The output of git-status was recently changed to output relative paths. Setting this variable to false restores the old behavior for any old-timers that prefer it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Documentation/config.txt     |    6 ++++++
 Documentation/git-status.txt |    5 ++++-
 builtin-commit.c             |    3 ++-
 t/t7502-status.sh            |   31 +++++++++++++++++++++++++++++++
 wt-status.c                  |    6 ++++++
 wt-status.h                  |    1 +
 6 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 736fcd7..79d51f2 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -762,6 +762,12 @@ showbranch.default::
 	The default set of branches for gitlink:git-show-branch[1].
 	See gitlink:git-show-branch[1].
 
+status.relativePaths::
+	By default, gitlink:git-status[1] shows paths relative to the
+	current directory. Setting this variable to `false` shows paths
+	relative to the repository root (this was the default for git
+	prior to v1.5.4).
+
 tar.umask::
 	This variable can be used to restrict the permission bits of
 	tar archive entries.  The default is 0002, which turns off the
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index b0cb6bc..bd4d787 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -42,7 +42,10 @@ template comments, and all the output lines are prefixed with '#'.
 
 The paths mentioned in the output, unlike many other git commands, are
 made relative to the current directory, if you are working in a
-subdirectory (this is on purpose, to help cutting and pasting).
+subdirectory (this is on purpose, to help cutting and pasting).  You can
+restore the older behaviour of showing the paths as relative to the top
+of the work tree by setting `status.relativepaths` configuration
+variable to `false`.
 
 
 CONFIGURATION
diff --git a/builtin-commit.c b/builtin-commit.c
index 2ec8223..19297ac 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -285,7 +285,8 @@ static int run_status(FILE *fp, const char *index_file, const char *prefix)
 	struct wt_status s;
 
 	wt_status_prepare(&s);
-	s.prefix = prefix;
+	if (wt_status_relative_paths)
+		s.prefix = prefix;
 
 	if (amend) {
 		s.amend = 1;
diff --git a/t/t7502-status.sh b/t/t7502-status.sh
index d6ae69d..9ce50ca 100755
--- a/t/t7502-status.sh
+++ b/t/t7502-status.sh
@@ -88,4 +88,35 @@ test_expect_success 'status with relative paths' '
 
 '
 
+cat > expect << \EOF
+# On branch master
+# Changes to be committed:
+#   (use "git reset HEAD <file>..." to unstage)
+#
+#	new file:   dir2/added
+#
+# Changed but not updated:
+#   (use "git add <file>..." to update what will be committed)
+#
+#	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
+EOF
+
+test_expect_success 'status without relative paths' '
+
+	git config status.relativePaths false
+	(cd dir1 && git status) > output &&
+	git diff expect output
+
+'
+
 test_done
diff --git a/wt-status.c b/wt-status.c
index 05414bb..51c1879 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -8,6 +8,7 @@
 #include "revision.h"
 #include "diffcore.h"
 
+int wt_status_relative_paths = 1;
 int wt_status_use_color = 0;
 static char wt_status_colors[][COLOR_MAXLEN] = {
 	"",         /* WT_STATUS_HEADER: normal */
@@ -400,6 +401,11 @@ int git_status_config(const char *k, const char *v)
 	if (!prefixcmp(k, "status.color.") || !prefixcmp(k, "color.status.")) {
 		int slot = parse_status_slot(k, 13);
 		color_parse(v, k, wt_status_colors[slot]);
+		return 0;
+	}
+	if (!strcmp(k, "status.relativepaths")) {
+		wt_status_relative_paths = git_config_bool(k, v);
+		return 0;
 	}
 	return git_default_config(k, v);
 }
diff --git a/wt-status.h b/wt-status.h
index 225fb4d..63d50f2 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -28,6 +28,7 @@ struct wt_status {
 
 int git_status_config(const char *var, const char *value);
 int wt_status_use_color;
+int wt_status_relative_paths;
 void wt_status_prepare(struct wt_status *s);
 void wt_status_print(struct wt_status *s);
 
-- 
1.5.3.7-2182-g108b
Previous: Junio C HamanoNext: Jeff King
Message 7 of 12 in “quote_path: convert empty path to "./"”
  1. quote_path: convert empty path to "./"Jeff King, Dec 7, 2007
  2. Johannes SchindelinDec 7, 2007
  3. Thomas HarningDec 7, 2007
  4. Jeff KingDec 7, 2007
  5. add status.relativePaths config variableJeff King, Dec 7, 2007
  6. Junio C HamanoDec 8, 2007
  7. Junio C HamanoDec 8, 2007
  8. Jeff KingDec 8, 2007
  9. Junio C HamanoDec 8, 2007
  10. Jeff KingDec 8, 2007
  11. Jeff KingDec 8, 2007
  12. Junio C HamanoDec 8, 2007

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.