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

Re: [[PATCH v2] 4/4] rebase: avoid computing unnecessary patch IDs

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 29, 2016, 21:46 UTC
Message-ID
<xmqqa8h0m82f.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20160729161920.3792-5-kcwillford@gmail.com>
Kevin Willford <kcwillford@gmail.com> writes:
Show 15 quoted lines
>  static int patch_id_cmp(struct patch_id *a,
>  			struct patch_id *b,
> -			void *keydata)
> +			struct diff_options *opt)
>  {
> +	if (is_null_sha1(a->patch_id) &&
> +	    commit_patch_id(a->commit, opt, a->patch_id, 0))
> +		return error("Could not get patch ID for %s",
> +			oid_to_hex(&a->commit->object.oid));
> +	if (is_null_sha1(b->patch_id) &&
> +	    commit_patch_id(b->commit, opt, b->patch_id, 0))
> +		return error("Could not get patch ID for %s",
> +			oid_to_hex(&b->commit->object.oid));
>  	return hashcmp(a->patch_id, b->patch_id);
>  }

These error returns initially looks slightly iffy in that in general the caller of any_cmp_fn() wants to know how a/b compares, but by returning error(), it always says "a is smaller than b". This however may be OK because the callers in hashmap_get* implementation only wants to know "are they equal?", and we are saying "no they cannot possibly be equal" here. The original that ran a full commit_patch_id() in now-removed add_commit() helper function didn't even diagnose this error and silently omitted the commit from the candidate list, so this may be even seen as an improvement.

The idea of using the two level hash, computing the more expensive one only when the hashmap hashes of the result of the cheaper hash function collide, is excellent. Thanks.

Previous: Kevin WillfordNext: Johannes Schindelin
Message 14 of 25 in “0/4] Use header data patch ids for rebase to avoid loading file content”
  1. 0/4] Use header data patch ids for rebase to avoid loading file contentKevin Willford, Jul 29, 2016
  2. 1/4] patch-ids: stop using a hand-rolled hashmap implementationKevin Willford, Jul 29, 2016
  3. Junio C HamanoJul 29, 2016
  4. Johannes SchindelinAug 1, 2016
  5. Junio C HamanoAug 1, 2016
  6. Eric WongAug 1, 2016
  7. Johannes SchindelinAug 2, 2016
  8. Junio C HamanoAug 2, 2016
  9. Junio C HamanoAug 2, 2016
  10. Junio C HamanoJul 29, 2016
  11. 2/4] patch-ids: replace the seen indicator with a commit pointerKevin Willford, Jul 29, 2016
  12. Junio C HamanoJul 29, 2016
  13. 4/4] rebase: avoid computing unnecessary patch IDsKevin Willford, Jul 29, 2016
  14. Junio C HamanoJul 29, 2016
  15. Johannes SchindelinAug 1, 2016
  16. Junio C HamanoAug 1, 2016
  17. Jakub NarębskiAug 2, 2016
  18. Junio C HamanoAug 2, 2016
  19. Johannes SchindelinAug 2, 2016
  20. Junio C HamanoAug 2, 2016
  21. Junio C HamanoAug 4, 2016
  22. Johannes SchindelinAug 4, 2016
  23. 3/4] patch-ids: add flag to create the diff patch id using header only dataKevin Willford, Jul 29, 2016
  24. Junio C HamanoJul 29, 2016
  25. Johannes SchindelinAug 1, 2016

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.