Re: [PATCH] mailmap: only look for .mailmap in work tree

2 messages, 2 authors, 2021-02-10 · open the first message on its own page

Re: [PATCH] mailmap: only look for .mailmap in work tree

From: Junio C Hamano <hidden>
Date: 2021-02-09 22:25:09

Jeff King [off-list ref] writes:
  If the file `.mailmap` exists at the toplevel of the repository[...]

which likewise reinforces the notion that we are looking in the working
tree.
quoted hunk
diff --git a/mailmap.c b/mailmap.c
index eb77c6e77c..9bb9cf8b30 100644
--- a/mailmap.c
+++ b/mailmap.c
@@ -225,7 +225,8 @@ int read_mailmap(struct string_list *map)
 	if (!git_mailmap_blob && is_bare_repository())
 		git_mailmap_blob = "HEAD:.mailmap";
 
-	err |= read_mailmap_file(map, ".mailmap");
+	if (!startup_info->have_repository || !is_bare_repository())
+		err |= read_mailmap_file(map, ".mailmap");
OK.  Do we know at this point that cwd is always/already at the root
level of the working tree?

Thanks.

Re: [PATCH] mailmap: only look for .mailmap in work tree

From: Jeff King <hidden>
Date: 2021-02-10 16:16:39

On Tue, Feb 09, 2021 at 01:23:32PM -0800, Junio C Hamano wrote:
Jeff King [off-list ref] writes:
quoted
  If the file `.mailmap` exists at the toplevel of the repository[...]

which likewise reinforces the notion that we are looking in the working
tree.
quoted
diff --git a/mailmap.c b/mailmap.c
index eb77c6e77c..9bb9cf8b30 100644
--- a/mailmap.c
+++ b/mailmap.c
@@ -225,7 +225,8 @@ int read_mailmap(struct string_list *map)
 	if (!git_mailmap_blob && is_bare_repository())
 		git_mailmap_blob = "HEAD:.mailmap";
 
-	err |= read_mailmap_file(map, ".mailmap");
+	if (!startup_info->have_repository || !is_bare_repository())
+		err |= read_mailmap_file(map, ".mailmap");
OK.  Do we know at this point that cwd is always/already at the root
level of the working tree?
I think so. If we're in a non-bare repository, we'd have chdir'd during
the setup/discovery steps. At any rate, this patch could not possibly be
making such a situation _worse_, as we were previously reading it
unconditionally.

If you are proposing that this become:

  if (!startup_info->have_repository) {
	/* no repository (e.g., shortlog reading stdin); use map in cwd */
	err |= read_mailmap_file(map, ".mailmap");
  } else if (get_git_work_tree()) {
        /* we have a work tree; read from the top-level */
	char *map_file = xstrfmt("%s/.mailmap", get_git_work_tree());
	err |= read_mailmap_file(map, map_file);
	free(map_file);
  } else {
        /* bare; do not read filesystem .mailmap */
  }

I could buy that. I suspect it may even be necessary to use a mailmap in
an in-process submodule repository (in which case we should be taking a
"struct repository" argument and checking it in the first two branches
of the conditional). But this is orthogonal to what my patch is doing, I
think. And I'd rather punt on it until there is a known upside (probably
as part of a larger effort to allow mailmaps outside of the_repository).

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help