Merge branch 'dw/diff-no-index-doc'

When the user types "git diff" outside a working tree, thinking he
is inside one, the current error message that is a single-liner
"usage: git diff --no-index <path> <path>" may not be sufficient to
make him realize the mistake. Add "Not a git repository" to the
error message when we fell into the "--no-index" mode without an
explicit command line option to instruct us to do so.

* dw/diff-no-index-doc:
  diff --no-index: describe in a separate paragraph
  diff --no-index: clarify operation when not inside a repository
This commit is contained in:
Junio C Hamano 2013-09-17 11:42:44 -07:00
commit cd8c891b74
2 changed files with 22 additions and 5 deletions

View File

@ -28,10 +28,15 @@ two blob objects, or changes between two files on disk.
words, the differences are what you _could_ tell Git to words, the differences are what you _could_ tell Git to
further add to the index but you still haven't. You can further add to the index but you still haven't. You can
stage these changes by using linkgit:git-add[1]. stage these changes by using linkgit:git-add[1].
+
If exactly two paths are given and at least one points outside 'git diff' --no-index [--options] [--] [<path>...]::
the current repository, 'git diff' will compare the two files /
directories. This behavior can be forced by --no-index. This form is to compare the given two paths on the
filesystem. You can omit the `--no-index` option when
running the command in a working tree controlled by Git and
at least one of the paths points outside the working tree,
or when running the command outside a working tree
controlled by Git.
'git diff' [--options] --cached [<commit>] [--] [<path>...]:: 'git diff' [--options] --cached [<commit>] [--] [<path>...]::

View File

@ -215,9 +215,21 @@ void diff_no_index(struct rev_info *revs,
path_inside_repo(prefix, argv[i+1]))) path_inside_repo(prefix, argv[i+1])))
return; return;
} }
if (argc != i + 2) if (argc != i + 2) {
if (!no_index) {
/*
* There was no --no-index and there were not two
* paths. It is possible that the user intended
* to do an inside-repository operation.
*/
fprintf(stderr, "Not a git repository\n");
fprintf(stderr,
"To compare two paths outside a working tree:\n");
}
/* Give the usage message for non-repository usage and exit. */
usagef("git diff %s <path> <path>", usagef("git diff %s <path> <path>",
no_index ? "--no-index" : "[--no-index]"); no_index ? "--no-index" : "[--no-index]");
}
diff_setup(&revs->diffopt); diff_setup(&revs->diffopt);
for (i = 1; i < argc - 2; ) { for (i = 1; i < argc - 2; ) {