[email protected] (Dale R. Worley) writes:
> The error message has been updated from [PATCH]. "git diff" outside a
> repository now produces:
>
> Not a git repository
> To compare two paths outside a working tree:
> usage: git diff [--no-index] <path> <path>
>
> This should inform the user of his error regardless of whether he
> intended to perform a within-repository "git diff" or an
> out-of-repository "git diff".
>
> This message is closer to the message that other Git commands produce:
>
> fatal: Not a git repository (or any parent up to mount parent )
> Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
>
> "git diff --no-index" produces the same message as before (since the
> user is clearly invoking the non-repository behavior):
>
> usage: git diff --no-index <path> <path>
The above result looks good and I find the reasoning stated here
very sound.
> Regarding the change to git-diff.txt, perhaps "forced ... by executing
> 'git diff' outside of a working tree" is not the best wording, but it
> should be clear to the reader that (1) it is possible to execute 'git
> diff' outside of a working tree, and (2) when doing so, the behavior
> will be as if '--no-index' was specified.
Then perhaps we can avoid the confusing "forced" by phrasing it like
so?
This behaviour can be forced by --no-index. Also 'git diff
<path> <path>' outside of a working tree can be used to compare
two named paths.
Let's step back a bit, though. The original text is:
'git diff' [--options] [--] [<path>...]::
This form is to view the changes you made relative to
the index (staging area for the next commit). In other
words, the differences are what you _could_ tell Git to
further add to the index but you still haven't. You can
stage these changes by using linkgit:git-add[1].
+
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.
which _primarily_ explains how the index and the working tree
contents are compared, but also mixes the description of the
"--no-index" hack, which is quite different. As its name suggests,
it is not about comparing with the index---in fact, it is not even
about Git at all. Just a pair of random paths that do not have
anything to do with Git are compared.
I suspect that it may be a good idea to split the section altogether
to reduce confusion like what triggered this thread, e.g.
'git diff' [--options] [--] [<path>...]::
This form is to view the changes you made relative to
the index (staging area for the next commit). In other
words, the differences are what you _could_ tell Git to
further add to the index but you still haven't. You can
stage these changes by using linkgit:git-add[1].
'git diff' --no-index [--options] [--] <path> <path>::
This form is to compare the given two paths on the
filesystem. When run in a working tree controlled by
Git, if at least one of the paths points outside the
working tree, or when run outside a working tree
controlled by Git, you can omit the `--no-index` option.
For now, I'll queue your version as-is modulo style fixes, while
waiting for others to help polishing the documentation better.
> I've also added some comments for the new code.
Thanks.
> Documentation/git-diff.txt | 3 ++-
> diff-no-index.c | 12 +++++++++++-
> 2 files changed, 13 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..9734ec3 100644
> --- a/diff-no-index.c
> +++ b/diff-no-index.c
> @@ -215,9 +215,19 @@ 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) {
> + /* 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>",
> no_index ? "--no-index" : "[--no-index]");
> + }
>
> diff_setup(&revs->diffopt);
> for (i = 1; i < argc - 2; ) {
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html