git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-diff: Clarify operation when not inside a repository.

From
Dale R. Worley <worley@alum.mit.edu>
Date
Aug 21, 2013, 17:34 UTC
Message-ID
<201308211734.r7LHYwNh008859@hobgoblin.ariadne.com>

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 <worley@ariadne.com>
---
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
Next: Junio C Hamano
Message 1 of 7 in “git-diff: Clarify operation when not inside a repository.”
  1. git-diff: Clarify operation when not inside a repository.Dale R. Worley, Aug 21, 2013
  2. Junio C HamanoAug 21, 2013
  3. [PATCHv2] git-diff: Clarify operation when not inside a repository.Dale R. Worley, Aug 22, 2013
  4. Junio C HamanoAug 22, 2013
  5. Dale R. WorleyAug 23, 2013
  6. Junio C HamanoAug 28, 2013
  7. Dale R. WorleyAug 29, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.