[PATCH] git-diff: Clarify operation when not inside a repository.
From: Dale R. Worley <hidden>
Date: 2016-06-15 22:58:28
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Clarify documentation for git-diff: State that when not inside a
repository, --no-index is implied (and thus two arguments are
mandatory).
Clarify error message from diff-no-index to inform user that CWD is
not inside a repository and thus two arguments are mandatory.
Signed-off-by: Dale Worley <redacted>
---
This clarification is to avoid a problem I ran into. I executed 'git
diff' in the remote working tree of a repository, and not in the
repository directory itself. Because of that, git-diff assumed
git-diff --no-index, and executed diff-no-index. Since I hadn't
provided paths, diff-no-index produced an error message.
Unfortunately, the error message presupposes that the decision to
execute diff-no-index reflects the user's intention, thus leaving me
confused, as the error message is only:
usage: git diff [--no-index] <path> <path>
and does not cover the case I intended. This patch changes the
message to notify the user that he is getting --no-index semantics
because he is outside of a repository:
Not within a git repository:
usage: git diff [--no-index] <path> <path>
The additional line is suppressed if the user specified --no-index.
The documentation is expanded to state that execution outside of a
repository forces --no-index behavior. Previously, the manual implied
this but did not state it, making it easy for the user to overlook
that it's possible to run git-diff outside of a repository.
Dale
Documentation/git-diff.txt | 3 ++-
diff-no-index.c | 6 +++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index 78d6d50..9f74989 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt@@ -31,7 +31,8 @@ two blob objects, or changes between two files on disk. + If exactly two paths are given and at least one points outside the current repository, 'git diff' will compare the two files / -directories. This behavior can be forced by --no-index. +directories. This behavior can be forced by --no-index or by +executing 'git diff' outside of a working tree. 'git diff' [--options] --cached [<commit>] [--] [<path>...]::
diff --git a/diff-no-index.c b/diff-no-index.c
index e66fdf3..98c5f76 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c@@ -215,9 +215,13 @@ void diff_no_index(struct rev_info *revs, path_inside_repo(prefix, argv[i+1]))) return; } - if (argc != i + 2) + if (argc != i + 2) { + if (!no_index) { + fprintf(stderr, "Not within a git repository:\n"); + } usagef("git diff %s <path> <path>", no_index ? "--no-index" : "[--no-index]"); + } diff_setup(&revs->diffopt); for (i = 1; i < argc - 2; ) {
--
1.7.7.6