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

Re: [PATCH v6 09/12] fixup: sha1_file: convert gotos to break/continue

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 5, 2017, 21:03 UTC
Message-ID
<xmqqfu8oj3a1.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20171205165854.64979-10-git@jeffhostetler.com>
Jeff Hostetler <git@jeffhostetler.com> writes:
Show 23 quoted lines
> +	while (1) {
> +		if (find_pack_entry(real, &e))
> +			break;
>  
> +		/* Most likely it's a loose object. */
> +		if (!sha1_loose_object_info(real, oi, flags))
> +			return 0;
>  
> +		/* Not a loose object; someone else may have just packed it. */
> +		reprepare_packed_git();
> +		if (find_pack_entry(real, &e))
> +			break;
>  
> +		/* Check if it is a missing object */
> +		if (fetch_if_missing && repository_format_partial_clone &&
> +		    !already_retried) {
> +			fetch_object(repository_format_partial_clone, real);
> +			already_retried = 1;
> +			continue;
> +		}
> +
> +		return -1;
> +	}

OK. This "infinite" loop actually never runs more than twice, thanks to "already-retried" thing. It probably makes sense to structure the code this way.

I suspect that this would also have worked better with the older incarnation of the jk/fewer-pack-rescan topic where an optimization used to be after that the initial queries to packs fail to find the object, but the topic has since been updated to do its optimization check much earlier in the function, so its interaction with this topic would not be much of an issue anymore with or without this rewrite.

In any case, I think this is a good change.
Previous: Jeff HostetlerNext: Brandon Williams
Message 15 of 21 in “Partial clone part 2: fsck and promisors”
  1. 00/12 Partial clone part 2: fsck and promisorsJeff Hostetler, Dec 5, 2017
  2. 01/12 extension.partialclone: introduce partial clone extensionJeff Hostetler, Dec 5, 2017
  3. 04/12 fsck: support referenced promisor objectsJeff Hostetler, Dec 5, 2017
  4. 02/12 fsck: introduce partialclone extensionJeff Hostetler, Dec 5, 2017
  5. 05/12 fsck: support promisor objects as CLI argumentJeff Hostetler, Dec 5, 2017
  6. 03/12 fsck: support refs pointing to promisor objectsJeff Hostetler, Dec 5, 2017
  7. Brandon WilliamsDec 7, 2017
  8. Jonathan TanDec 7, 2017
  9. Brandon WilliamsDec 7, 2017
  10. 12/12 gc: do not repack promisor packfilesJeff Hostetler, Dec 5, 2017
  11. 11/12 rev-list: support termination at promisor objectsJeff Hostetler, Dec 5, 2017
  12. 09/12 fixup: sha1_file: convert gotos to break/continueJeff Hostetler, Dec 5, 2017
  13. Junio C HamanoDec 5, 2017
  14. Jeff HostetlerDec 5, 2017
  15. Junio C HamanoDec 5, 2017
  16. Brandon WilliamsDec 7, 2017
  17. 08/12 sha1_file: support lazily fetching missing objectsJeff Hostetler, Dec 5, 2017
  18. 07/12 introduce fetch-object: fetch one promisor objectJeff Hostetler, Dec 5, 2017
  19. 06/12 index-pack: refactor writing of .keep filesJeff Hostetler, Dec 5, 2017
  20. 10/12 fixup: sha1_file: add TODOJeff Hostetler, Dec 5, 2017
  21. Jonathan TanDec 5, 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.