aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/diff-options.txt7
-rw-r--r--diff.c4
-rw-r--r--revision.c2
3 files changed, 10 insertions, 3 deletions
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 286c30c01..8dc5b001c 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -170,10 +170,13 @@ endif::git-format-patch[]
Swap two inputs; that is, show differences from index or
on-disk file to tree contents.
---relative::
+--relative[=<path>]::
When run from a subdirectory of the project, it can be
told to exclude changes outside the directory and show
- pathnames relative to it with this option.
+ pathnames relative to it with this option. When you are
+ not in a subdirectory (e.g. in a bare repository), you
+ can name which subdirectory to make the output relative
+ to by giving a <path> as an argument.
--text::
Treat all files as text.
diff --git a/diff.c b/diff.c
index db4bd557b..2b89b1600 100644
--- a/diff.c
+++ b/diff.c
@@ -2302,6 +2302,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
options->detect_rename = 0;
else if (!strcmp(arg, "--relative"))
DIFF_OPT_SET(options, RELATIVE_NAME);
+ else if (!prefixcmp(arg, "--relative=")) {
+ DIFF_OPT_SET(options, RELATIVE_NAME);
+ options->prefix = arg + 11;
+ }
/* xdiff options */
else if (!strcmp(arg, "-w") || !strcmp(arg, "--ignore-all-space"))
diff --git a/revision.c b/revision.c
index 6d9188b6c..4d6f57b64 100644
--- a/revision.c
+++ b/revision.c
@@ -720,7 +720,7 @@ void init_revisions(struct rev_info *revs, const char *prefix)
revs->commit_format = CMIT_FMT_DEFAULT;
diff_setup(&revs->diffopt);
- if (prefix) {
+ if (prefix && !revs->diffopt.prefix) {
revs->diffopt.prefix = prefix;
revs->diffopt.prefix_length = strlen(prefix);
}