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

Re: [PATCH] Make git log work for git CWD outside of work tree

From
DSDanny Sauer <danny@dannysauer.com>
Date
Apr 9, 2017, 14:15 UTC
Message-ID
<413a1456-cac6-56c8-ea45-38f14cf958ae@dannysauer.com>
In-Reply-To
<alpine.DEB.2.20.1704091238560.4268@virtualbox>
On 4/9/2017 5:54 AM, Johannes Schindelin wrote:
Show 19 quoted lines
> Hi Danny,
>
> On Sat, 8 Apr 2017, Danny Sauer wrote:
>> diff --git a/git.c b/git.c
>> index 8ff44f0..e147f01 100644
>> --- a/git.c
>> +++ b/git.c
>> @@ -440,7 +440,7 @@ static struct cmd_struct commands[] = {
>>  	{ "init", cmd_init_db },
>>  	{ "init-db", cmd_init_db },
>>  	{ "interpret-trailers", cmd_interpret_trailers, RUN_SETUP_GENTLY },
>> -	{ "log", cmd_log, RUN_SETUP },
>> +	{ "log", cmd_log, RUN_SETUP | NEED_WORK_TREE },
>>  	{ "ls-files", cmd_ls_files, RUN_SETUP | SUPPORT_SUPER_PREFIX },
>>  	{ "ls-remote", cmd_ls_remote, RUN_SETUP_GENTLY },
>>  	{ "ls-tree", cmd_ls_tree, RUN_SETUP },
> This may work for you, but it does not work for me, as I often call `git
> log` in a bare repository. And that call works, and it should keep
> working.

I was wondering about that situation, but honestly I wasn't positive how to test it and sort of just went on the hope that the read_mailmap_blob mechanism would continue handling it. So, I guess there's another test case which would be useful, as passing the test cases is what gave me that undeserved confidence. :) And I'm going to need to read a bit more to figure out what a bare repository actually is...

Show 18 quoted lines
> Instead, I think, you need to figure out why the .mailmap file is not read
> correctly when you use the GIT_DIR & GIT_WORK_TREE approach. My vague
> hunch is that you need to replace the ".mailmap" in read_mailmap()
> (defined in mailmap.c):
>
>         err |= read_mailmap_file(map, ".mailmap", repo_abbrev);
>
> by something like mkpath("%s/%s", get_git_work_tree(), ".mailmap"), but
> probably only after testing that we're not in a bare repository (which
> would also fix a bug, I suspect, as `git log` in a bare repository
> probably heeds a .mailmap file in the current directory, which is
> incorrect). I.e. something like:
>
> 	if (!is_bare_repository()) {
> 		const char *path = mkpath("%s/%s",
> 					  get_git_work_tree(), ".mailmap")
> 		err |= read_mailmap_file(map, path, repo_abbrev);
> 	}

That's feedback I was looking for - what's the "right" way to get the path to the file. The call as-is works in any subdirectory of a repository, because there's some logic buried along the way which puts you in the top level of the repo if you started underneath. But if you're outside, it does the same chdir to verify that the top level is a real repo and then returns you to where you started (which is perfectly reasonable).

In comparing how shortlog works v/s log, the main difference I could see is the use of RUN_SETUP_GENTLY instead of RUN_SETUP as the flag, which itself seems to only differ by passing in a true value for nongit_ok in run_setup, ultimately leading to "some different directory checks" - which I somewhat got lost in due partially to not fully knowing what a bare repository is. :) But changing that didn't make it work in my (poorly-formalized) testing.

I'm on-board with a proper test case being the first situation which needs rectifying. It's off to learn stuff for me, then. Thanks!

--Danny
Previous: Johannes SchindelinNext: Junio C Hamano
Message 3 of 15 in “Make git log work for git CWD outside of work tree”
  1. Make git log work for git CWD outside of work treeDanny Sauer, Apr 9, 2017
  2. Johannes SchindelinApr 9, 2017
  3. Danny SauerApr 9, 2017
  4. Junio C HamanoApr 10, 2017
  5. Duy NguyenApr 10, 2017
  6. Jeff KingApr 10, 2017
  7. Duy NguyenApr 12, 2017
  8. Junio C HamanoApr 12, 2017
  9. Duy NguyenApr 12, 2017
  10. Jeff KingApr 12, 2017
  11. Duy NguyenApr 12, 2017
  12. Jeff KingApr 13, 2017
  13. Junio C HamanoApr 17, 2017
  14. Duy NguyenApr 17, 2017
  15. Jeff KingApr 12, 2017

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.