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

[RFC PATCH] prefix_path: show gitdir when arg is outside repo

From
emilyshaffer@google.com <emilyshaffer@google.com>
Date
Feb 14, 2020, 23:29 UTC
Message-ID
<20200214232933.243520-1-emilyshaffer@google.com>
From: Emily Shaffer <emilyshaffer@google.com>

When developing a script, it can be painful to understand why Git thinks something is outside the current repo, if the current repo isn't what the user thinks it is. Since this can be tricky to diagnose, especially in cases like submodules or nested worktrees, let's give the user a hint about which repository is offended about that path.

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
---
This one comes from a user feature request. This user is running some
Git client commands on a build machine somewhere and finding it hard to
reason about the cause of the "outside repo" error.
I see two arguments:
For:
 - A user checking their own `pwd` might still not come to the same
   conclusion Git does about the current repo, if their filesystem is in
   some weird state
 - This warning is intended for human eyes (die(), stderr) so it's reasonable
   to give some info to make the human's life easier
Against:
 - It's chatty, especially given the absolute directory. This may be a
   pretty common mistake ('git add' with thumbfingers?) so it could be
   chatty, frequently - not great.
   (Sidebar: Just including the relative directory is really not very
   useful - since you're still left thinking, "relative to where?")

I also dug around a little to see whether I could consolidate the pathspec.c logic, which is nearly identical to setup.c, into another helper in setup.c (a la prefix_path_1()). But since the die() message is somewhat different, and init_pathspec_item() is the _only_ place which uses prefix_path_gently() in this way, it wasn't feasible. (The other caller of prefix_path_gently() is immediately below prefix_path(), and doesn't die at all, print errors, or capture out-params from prefix_path_gently().)

 - Emily
 pathspec.c | 3 ++-
 setup.c    | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/pathspec.c b/pathspec.c
index 128f27fcb7..5d661df5cf 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -439,7 +439,8 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
 		match = prefix_path_gently(prefix, prefixlen,
 					   &prefixlen, copyfrom);
 		if (!match)
-			die(_("%s: '%s' is outside repository"), elt, copyfrom);
+			die(_("%s: '%s' is outside repository at '%s'"), elt,
+			    copyfrom, absolute_path(get_git_dir()));
 	}
 
 	item->match = match;
diff --git a/setup.c b/setup.c
index 12228c0d9c..48cc2320cb 100644
--- a/setup.c
+++ b/setup.c
@@ -121,7 +121,8 @@ char *prefix_path(const char *prefix, int len, const char *path)
 {
 	char *r = prefix_path_gently(prefix, len, NULL, path);
 	if (!r)
-		die(_("'%s' is outside repository"), path);
+		die(_("'%s' is outside repository at '%s'"), path,
+		    absolute_path(get_git_dir()));
 	return r;
 }
 
-- 
2.25.0.265.gbab2e86ba0-goog
Next: brian m. carlson
Message 1 of 9 in “prefix_path: show gitdir when arg is outside repo”
  1. prefix_path: show gitdir when arg is outside repoemilyshaffer@google.com, Feb 14, 2020
  2. brian m. carlsonFeb 15, 2020
  3. Emily ShafferFeb 15, 2020
  4. prefix_path: show gitdir when arg is outside repoEmily Shaffer, Feb 15, 2020
  5. brian m. carlsonFeb 15, 2020
  6. Jonathan NiederFeb 28, 2020
  7. Emily ShafferMar 3, 2020
  8. prefix_path: show gitdir if worktree unavailableEmily Shaffer, Mar 3, 2020
  9. Junio C HamanoMar 3, 2020

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.