git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: emilyshaffer@google.com
To: git@vger.kernel.org
Cc: Emily Shaffer <emilyshaffer@google.com>
Subject: [RFC PATCH] prefix_path: show gitdir when arg is outside repo
Date: Fri, 14 Feb 2020 15:29:33 -0800	[thread overview]
Message-ID: <20200214232933.243520-1-emilyshaffer@google.com> (raw)

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


             reply	other threads:[~2020-02-14 23:29 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-14 23:29 emilyshaffer [this message]
2020-02-15  0:02 ` [RFC PATCH] prefix_path: show gitdir when arg is outside repo brian m. carlson
2020-02-15  0:46   ` Emily Shaffer
2020-02-15  1:00 ` [RFC PATCH v2] " Emily Shaffer
2020-02-15  2:56   ` brian m. carlson
2020-02-28 19:58   ` Jonathan Nieder
2020-03-03  2:19     ` Emily Shaffer
2020-03-03  4:05     ` [PATCH] prefix_path: show gitdir if worktree unavailable Emily Shaffer
2020-03-03 17:06       ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200214232933.243520-1-emilyshaffer@google.com \
    --to=emilyshaffer@google.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).