From 46f721c8fee9f1c027f96e2bf987ce6e7d05ab94 Mon Sep 17 00:00:00 2001 From: Jeff King 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 Signed-off-by: Junio C Hamano --- Documentation/config.txt | 6 ++++++ Documentation/git-status.txt | 7 ++++++- builtin-commit.c | 3 ++- t/t7502-status.sh | 31 +++++++++++++++++++++++++++++++ wt-status.c | 6 ++++++ wt-status.h | 1 + 6 files changed, 52 insertions(+), 2 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 736fcd71c..79d51f26c 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 b0cb6bc8b..645dc85ce 100644 --- a/Documentation/git-status.txt +++ b/Documentation/git-status.txt @@ -42,7 +42,8 @@ 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). See +the status.relativePaths config option below. CONFIGURATION @@ -53,6 +54,10 @@ mean the same thing and the latter is kept for backward compatibility) and `color.status.` configuration variables to colorize its output. +If the config variable `status.relativePaths` is set to false, then all +paths shown are relative to the repository root, not to the current +directory. + See Also -------- gitlink:gitignore[5] diff --git a/builtin-commit.c b/builtin-commit.c index 2ec822313..19297ac02 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 d6ae69d46..9ce50cade 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 ..." to unstage) +# +# new file: dir2/added +# +# Changed but not updated: +# (use "git add ..." to update what will be committed) +# +# modified: dir1/modified +# +# Untracked files: +# (use "git add ..." 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 05414bb9e..51c187969 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 225fb4d53..63d50f287 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); -- 2.30.2