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

Re: [PATCH] clone --dissociate: avoid locking pack files

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 30, 2015, 19:42 UTC
Message-ID
<xmqqlhbn7ky1.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20150930192814.GA26154@wheezy.local>
Max Kirillov <max@max630.net> writes:
Show 14 quoted lines
>> +	if (option_dissociate) {
>> +		struct packed_git *p;
>> +
>> +		for (p = packed_git; p; p = p->next) {
>> +			close_pack_windows(p);
>> +			close_pack_index(p);
>> +		}
>>  		dissociate_from_references();
>> +	}
>
> This does not seem to close handles to the pack files
> themseves, does Windows still allow removing the files? I
> probably did not tried that, because I started from handles,
> and discovered mapped files only later.

This is trying to (incompletely) mimic what free_pack_by_name() in sha1_file.c is doing but for all packs, I think. I wonder why we do not have to do other things here that are done over there, like clearing delta-base-cache, closing pack_fd and decrementing pack_open_fds, etc.

The right approach may to have a helper in sha1_file.c that closes and cleans up _all_ packs, and call it from here, instead of having builtin/clone.c even know about implementation details such as packed_git is a linked list, etc.

Show 47 quoted lines
>
>>  	junk_mode = JUNK_LEAVE_REPO;
>>  	err = checkout();
>> diff --git a/t/t5700-clone-reference.sh b/t/t5700-clone-reference.sh
>> index ef1779f..2250ef4 100755
>> --- a/t/t5700-clone-reference.sh
>> +++ b/t/t5700-clone-reference.sh
>> @@ -188,5 +188,26 @@ test_expect_success 'clone and dissociate from reference' '
>>  	test_must_fail git -C R fsck &&
>>  	git -C S fsck
>>  '
>> +test_expect_success 'clone, dissociate from partial reference and repack' '
>> +	rm -fr P Q R &&
>> +	git init P &&
>> +	(
>> +		cd P &&
>> +		test_commit one &&
>> +		git repack &&
>> +		test_commit two &&
>> +		git repack
>> +	) &&
>> +	git clone --bare P Q &&
>> +	(
>> +		cd P &&
>> +		git checkout -b second &&
>> +		test_commit three &&
>> +		git repack
>> +	) &&
>> +	git clone --bare --dissociate --reference=P Q R &&
>> +	ls R/objects/pack/*.pack >packs.txt &&
>> +	test_line_count = 1 packs.txt
>> +'
>
> Unless it goes very lowlevel like running lsof of readin
> proc testing this should always pass on Linux, even if the
> issue is not fixed, maybe should be a conditional for
> Windows only?
>
>>  test_done
>> -- 
>> 2.5.3.windows.1.3.gc322723
>> 
>> 
>> --
>> To unsubscribe from this list: send the line "unsubscribe git" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous: Max KirillovNext: Max Kirillov
Message 3 of 23 in “clone --dissociate: avoid locking pack files”
  1. clone --dissociate: avoid locking pack filesJohannes Schindelin, Sep 28, 2015
  2. Max KirillovSep 30, 2015
  3. Junio C HamanoSep 30, 2015
  4. Max KirillovOct 1, 2015
  5. Johannes SchindelinOct 5, 2015
  6. 0/4 Fix locking issues on Windows with `git clone --dissociate`Johannes Schindelin, Oct 5, 2015
  7. 1/4 Demonstrate a Windows file locking issue with `git clone --dissociate`Johannes Schindelin, Oct 5, 2015
  8. 2/4 Consolidate code to close a pack's file descriptorJohannes Schindelin, Oct 5, 2015
  9. Junio C HamanoOct 5, 2015
  10. Johannes SchindelinOct 5, 2015
  11. Junio C HamanoOct 5, 2015
  12. Johannes SchindelinOct 6, 2015
  13. 3/4 Add a function to release all packsJohannes Schindelin, Oct 5, 2015
  14. 4/4 clone --dissociate: avoid locking pack filesJohannes Schindelin, Oct 5, 2015
  15. Junio C HamanoOct 5, 2015
  16. 0/4 Fix locking issues on Windows with `git clone --dissociate`Johannes Schindelin, Oct 6, 2015
  17. 1/4 Demonstrate a Windows file locking issue with `git clone --dissociate`Johannes Schindelin, Oct 6, 2015
  18. 2/4 Consolidate code to close a pack's file descriptorJohannes Schindelin, Oct 6, 2015
  19. 3/4 Add a function to release all packsJohannes Schindelin, Oct 6, 2015
  20. Junio C HamanoOct 7, 2015
  21. Johannes SchindelinOct 8, 2015
  22. 4/4 clone --dissociate: avoid locking pack filesJohannes Schindelin, Oct 6, 2015
  23. Max KirillovOct 11, 2015

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.