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

Re: [PATCH v2 1/1] config: work around bug with includeif:onbranch and early config

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Aug 1, 2019, 17:24 UTC
Message-ID
<7f4257d3-5ae0-3a83-84f1-bee83682fa36@jeffhostetler.com>
In-Reply-To
<20190801004928.GA6351@sigill.intra.peff.net>
On 7/31/2019 8:49 PM, Jeff King wrote:
Show 37 quoted lines
> On Wed, Jul 31, 2019 at 07:12:57PM -0400, Jeff King wrote:
> 
>> Hrm. But common-main calls initialize_the_repository(), which points it
>> at &the_repo. And I can't find any other assignments. So how does it
>> become NULL? And is every caller of have_git_dir() at risk of
>> segfaulting?
>>
>> Ah, I see. I think it is that trace2 reads the configuration very early.
>> I think we ought to do this:
>>
>> diff --git a/common-main.c b/common-main.c
>> index 582a7b1886..89fd415e55 100644
>> --- a/common-main.c
>> +++ b/common-main.c
>> @@ -39,14 +39,14 @@ int main(int argc, const char **argv)
>>   
>>   	git_resolve_executable_dir(argv[0]);
>>   
>> +	initialize_the_repository();
>> +
>>   	trace2_initialize();
>>   	trace2_cmd_start(argv);
>>   	trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
>>   
>>   	git_setup_gettext();
>>   
>> -	initialize_the_repository();
>> -
>>   	attr_start();
>>   
>>   	result = cmd_main(argc, argv);
> 
> By the way, I wondered why trace2's existing config reading did not
> cause us to segfault because of this. It is because it invented the
> "very early config" function which always ignores some config sources
> (working around this problem, but also making it weirdly unlike most
> other config).

Yes, I added the "very early config" to try to work around some of the chicken-n-egg problems. I can't say that I was completely happy with having to do that. I haven't had time to play with your patch suggestion here, but I think it would be fine to do if it will help with the original problem.

In [1] I added code to just start the clock in isolation (rather than being part of the trace2_initialize() -- which does all the config loading and subsystem initialization). So it is OK to let the trace2_initialize() run a little later. (Part of the reason for that split was to allow git_resolve_executable_dir() to run first, since that data was needed to find the location of the system config relative to the exe path (sigh).)

[1] a089724958a trace2: refactor setting process starting time

So, as you suggested in your previous response, something like this would/should be fine.

$ git diff
diff --git a/common-main.c b/common-main.c
index 582a7b1886..71e21dd20a 100644
--- a/common-main.c
+++ b/common-main.c
@@ -39,16 +39,16 @@ int main(int argc, const char **argv)

         git_resolve_executable_dir(argv[0]);

-       trace2_initialize();
-       trace2_cmd_start(argv);
-       trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
-
         git_setup_gettext();

         initialize_the_repository();

         attr_start();

+       trace2_initialize();
+       trace2_cmd_start(argv);
+       trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
+
         result = cmd_main(argc, argv);

         trace2_cmd_exit(result);
Previous: Jeff KingNext: Jeff King
Message 10 of 17 in “Make the includeif:onbranch feature more robust”
  1. 0/1 Make the includeif:onbranch feature more robustJohannes Schindelin via GitGitGadget, Jul 31, 2019
  2. 1/1 config: work around bug with includeif:onbranch and early configJohannes Schindelin via GitGitGadget, Jul 31, 2019
  3. Junio C HamanoJul 31, 2019
  4. 0/1 Make the includeif:onbranch feature more robustJohannes Schindelin via GitGitGadget, Jul 31, 2019
  5. 1/1 config: work around bug with includeif:onbranch and early configJohannes Schindelin via GitGitGadget, Jul 31, 2019
  6. Jeff KingJul 31, 2019
  7. Johannes SchindelinJul 31, 2019
  8. Jeff KingJul 31, 2019
  9. Jeff KingAug 1, 2019
  10. Jeff HostetlerAug 1, 2019
  11. 0/3 the_repository initialization cleanupJeff King, Aug 6, 2019
  12. 1/3 t1309: use short branch name in includeIf.onbranch testJeff King, Aug 6, 2019
  13. 2/3 common-main: delay trace2 initializationJeff King, Aug 6, 2019
  14. 3/3 config: stop checking whether the_repository is NULLJeff King, Aug 6, 2019
  15. Jeff KingAug 6, 2019
  16. Johannes SchindelinAug 8, 2019
  17. Jeff KingAug 6, 2019

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.