git-config support for diff.relative setting
PATCH v2 1/1 git-config support for diff.relative setting
By default, git-diff shows changes and pathnames relative to the repository root. Setting the diff.relative config option to "true" shows pathnames relative to the current directory and excludes changes outside this directory (identical to "git diff --relative").
--- Documentation/diff-config.txt | 6 ++++++ diff.c | 8 ++++++++ t/t4045-diff-relative.sh | 21 +++++++++++++++++++++ 3 files changed, 35 insertions(+)
Documentation/diff-config.txt +6 -0
@@ -182,3 +182,9 @@ diff.algorithm:: low-occurrence common elements". -- + + +diff.relative:: + By default, linkgit:git-diff[1] shows changes and pathnames + relative to the repository root. Setting this variable to + `true` shows pathnames relative to the current directory and + excludes changes outside this directory.
diff.c +0 -0
@@ -223,6 +223,14 @@ int git_diff_ui_config(const char *var, const char
*value, void *cb)
return 0;
}
+ if (!strcmp(var, "diff.relative")) {
+ if (git_config_bool(var, value))
+ DIFF_OPT_SET(&default_diff_options, RELATIVE_NAME);
+ else
+ DIFF_OPT_CLR(&default_diff_options, RELATIVE_NAME);
+ return 0;
+ }
+
if (git_color_config(var, value, cb) < 0)
return -1;
t/t4045-diff-relative.sh +21 -0
@@ -29,6 +29,23 @@ test_expect_success "-p $*" " " } +check_config() { +expect=$1; shift +cat >expected <<EOF +diff --git a/$expect b/$expect +new file mode 100644 +index 0000000..25c05ef +--- /dev/null ++++ b/$expect +@@ -0,0 +1 @@ ++other content +EOF +test_expect_success "git-config diff.relative=true in $1" " + (cd $1; git -c diff.relative=true diff -p HEAD^ >../actual) && + test_cmp expected actual +" +} + check_numstat() { expect=$1; shift cat >expected <<EOF
@@ -69,5 +86,9 @@ for type in diff numstat stat raw; do check_$type file2 --relative=subdir check_$type dir/file2 --relative=sub done +for type in config; do + check_$type file2 subdir/ + check_$type file2 subdir +done test_done
Signature · 1 line
1.9.1
From: <[email protected]>
Quoted 1 line
By default, git-diff shows changes and pathnames relative to the repository root. Setting the diff.relative config option to "true" shows pathnames relative to the current directory and excludes changes outside this directory (identical to "git diff --relative").
Shouldn't this (identical to "git diff --relative") also be included in the documentation change? It would truly clarify the intenbt for the reader.
Quoted 13 lines
Signed-off-by Brandon Phillips <[email protected]>--- Documentation/diff-config.txt | 6 ++++++ diff.c | 8 ++++++++ t/t4045-diff-relative.sh | 21 +++++++++++++++++++++ 3 files changed, 35 insertions(+)Documentation/diff-config.txt +0
-0
Documentation/diff-config.txt diff.algorithm:: · line 190
Quoted 9 lines
Documentation/diff-config.txt +6
-0@@ -182,3 +182,9 @@ diff.algorithm:: low-occurrence common elements". -- + + +diff.relative:: + By default, linkgit:git-diff[1] shows changes and pathnames + relative to the repository root. Setting this variable to + `true` shows pathnames relative to the current directory and + excludes changes outside this directory.
Insert (identical to "git diff --relative") here?
Quoted 51 lines
diff.c +0
-0@@ -223,6 +223,14 @@ int git_diff_ui_config(const char *var, constchar
*value, void *cb)
return 0;
}+ if (!strcmp(var, "diff.relative")) {
+ if (git_config_bool(var, value))
+DIFF_OPT_SET(&default_diff_options, RELATIVE_NAME);
+ else
+DIFF_OPT_CLR(&default_diff_options, RELATIVE_NAME);
+ return 0;
+ }diff.c +1
-0+if (git_color_config (var, value, cb) <0 )return -1 ;t/t4045-diff-relative.sh +17
-0@@ -29,6 +29,23 @@ test_expect_success "-p $*" " " } +check_config() { +expect=$1; shift +cat >expected <<EOF +diff --git a/$expect b/$expect +new file mode 100644 +index 0000000..25c05ef +--- /dev/null ++++ b/$expect +@@ -0,0 +1 @@ ++other content +EOF +test_expect_success "git-config diff.relative=true in $1" " + (cd $1; git -c diff.relative=true diff -p HEAD^ >../actual) && + test_cmp expected actual +" +} + check_numstat() { expect=$1; shift cat >expected <<EOF
t/t4045-diff-relative.sh for type in diff numstat stat raw; do · line 94
Quoted 9 lines
t/t4045-diff-relative.sh +4
-0@@ -69,5 +86,9 @@ for type in diff numstat stat raw; do check_$type file2 --relative=subdir check_$type dir/file2 --relative=sub done +for type in config; do + check_$type file2 subdir/ + check_$type file2 subdir +done test_done
Philip
Quoted 8 lines · Philip Oakley
From: <[email protected]>
Quoted 4 lines
By default, git-diff shows changes and pathnames relative to the repository root. Setting the diff.relative config option to "true" shows pathnames relative to the current directory and excludes changes outside this directory (identical to "git diff --relative").
Shouldn't this
(identical to "git diff --relative")also be included in the documentation change? It would truly clarify the intenbt for the reader.
A configuration that sticks a non-default behaviour without a way to revert to the default is a no-no.
There should be a way to run non-relative diff in a repository that has the configuration set, perhaps by overriding with some command line option (e.g. "--no-relative").
Quoted 4 lines
"Philip Oakley" <[email protected]> wrote:
Shouldn't this(identical to "git diff --relative")also be included in the documentation change? It would truly clarify the intenbt for the reader.
Updated as follows:
+diff.relative::
+ Show pathnames relative to the current directory and exclude
+ changes outside this directory; equivalent to the 'git diff'
+ option '--relative'.
Quoted 4 lines
"Junio C Hamano" <[email protected]> wrote:
There should be a way to run non-relative diff in a repository that has the configuration set, perhaps by overriding with some command line option (e.g. "--no-relative").
Good idea; I'll put together a second patch for a "--no-relative" option to disable diff.relative.
-----Original Message-----
From: Junio C Hamano <[email protected]>
Sent: 12/20/2014 09:58 PM
To: Philip Oakley <[email protected]>
CC: <[email protected]>, "Git Mailing List" <[email protected]>,
"Duy Nguyen" <[email protected]>, "Jonathan Nieder" <[email protected]>
Subject: Re: [PATCH v2] git-config support for diff.relative setting
Quoted 8 lines · Philip Oakley
From: <[email protected]>
Quoted 4 lines
By default, git-diff shows changes and pathnames relative to the repository root. Setting the diff.relative config option to "true" shows pathnames relative to the current directory and excludes changes outside this directory (identical to "git diff --relative").
Shouldn't this
(identical to "git diff --relative")also be included in the documentation change? It would truly clarify the intenbt for the reader.
A configuration that sticks a non-default behaviour without a way to revert to the default is a no-no.
There should be a way to run non-relative diff in a repository that has the configuration set, perhaps by overriding with some command line option (e.g. "--no-relative").
Quoted 11 lines · [email protected] writes:
Quoted 4 lines
"Philip Oakley" <[email protected]> wrote:
Shouldn't this(identical to "git diff --relative")also be included in the documentation change? It would truly clarify the intenbt for the reader.Updated as follows:
(quoted diff) +4
-0+diff.relative:: + Show pathnames relative to the current directory and exclude + changes outside this directory; equivalent to the 'git diff' + option '--relative'.
Quoted 7 lines
Quoted 4 lines
"Junio C Hamano" <[email protected]> wrote:
There should be a way to run non-relative diff in a repository that has the configuration set, perhaps by overriding with some command line option (e.g. "--no-relative").Good idea; I'll put together a second patch for a "--no-relative" option to disable diff.relative.
The order should be first to add --no-relative, which should allow you to say
$ alias gd "git diff --relative"
$ gd --no-relativewhich would expand to "git diff --relative --no-relative" to defeat the earlier one on the command line, and then add diff.relative in the second patch, I would think. A natural consequence of the latter would be that these would steps work as expected:
$ git config diff.relative no
$ git diff
$ git diff --relative
$ git diff --no-relative
$ git config diff.relative yes
$ git diff
$ git diff --relative
$ git diff --no-relativewhich should be tested in a new set of tests added to t4045.
For the first patch, I would expect a new set of tests added to t4045 to check at least the following:
$ git diff --no-relative $ git diff --no-relative --relative $ git diff --relative --no-relative
Thanks.