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

Re: [RFC PATCH 02/22] hex: add functions to parse hex object IDs in any algorithm

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jan 16, 2020, 00:22 UTC
Message-ID
<20200116002252.GX6570@camp.crustytoothpaste.net>
In-Reply-To
<xmqqv9pciejd.fsf@gitster-ct.c.googlers.com>
On 2020-01-15 at 21:40:54, Junio C Hamano wrote:
Show 20 quoted lines
> "brian m. carlson" <sandals@crustytoothpaste.net> writes:
> 
> > +/*
> > + * NOTE: This function relies on hash algorithms being in order from shortest
> > + * length to longest length.
> > + */
> > +int get_oid_hex_any(const char *hex, struct object_id *oid)
> > +{
> > +	int i;
> > +	for (i = GIT_HASH_NALGOS - 1; i > 0; i--) {
> > +		if (!get_hash_hex_algop(hex, oid->hash, &hash_algos[i]))
> > +			return i;
> > +	}
> > +	return GIT_HASH_UNKNOWN;
> > +}
> 
> Two rather obvious questions are
> 
>  - what if we have more than one algos that produce hashes of the
>    same length?

Than we have a problem that we'll have to deal with then. There are a handful of functions that essentially document all these locations and we'll have to decide how we fix them.

Notably, the dumb HTTP protocol doesn't provide any capability advertisement, so it's not possible to ask the remote server which algorithm it's using or negotiate a different one. Bundles and get-tar-commit-id are the other problem cases.

Granted, I did very much try to limit these cases as much as possible, and most of our more modern code doesn't have this problem, but in some cases it's just unavoidable. I feel like with only three uses, doing this won't be mortgaging our future too much.

>  - it feels that GIT_HASH_UNKNOWN being 0 wastes the first/zeroth
>    element in the hash_algos[] array.

I actually think it's really useful to have it this way, because then it's easy to check for a valid hash algorithm by a comparison against 0.

Show 6 quoted lines
> In the future, I would imagine that we would want to be able to say
> "here I have a dozen hexdigits that is an abbreviated SHA2 hash",
> and we would use some syntax (e.g. "sha2:123456123456") for that.
> Would this function be at the layer that would be extended later to
> support such a syntax, or would we have a layer higher than this to
> do so?

That's going to be at a different layer. We'll have the ^{sha1} and ^{sha256} disambiguators that can be used with the normal revision parsing syntax, and we'll handle the ambiguity there if one isn't provided. As for output, we'll only produce output in one algorithm at a time so ambiguity isn't a problem there.

-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204
Previous: Junio C HamanoNext: brian m. carlson
Message 4 of 25 in “SHA-256 stage 4 implementation, part 1/3”
  1. 00/22 SHA-256 stage 4 implementation, part 1/3brian m. carlson, Jan 13, 2020
  2. 02/22 hex: add functions to parse hex object IDs in any algorithmbrian m. carlson, Jan 13, 2020
  3. Junio C HamanoJan 15, 2020
  4. brian m. carlsonJan 16, 2020
  5. 04/22 t: use hash-specific lookup tables to define test constantsbrian m. carlson, Jan 13, 2020
  6. 05/22 t6300: abstract away SHA-1-specific constantsbrian m. carlson, Jan 13, 2020
  7. 10/22 setup: allow check_repository_format to read repository formatbrian m. carlson, Jan 13, 2020
  8. 11/22 builtin/init-db: allow specifying hash algorithm on command linebrian m. carlson, Jan 13, 2020
  9. 17/22 tag: store SHA-256 signatures in a headerbrian m. carlson, Jan 13, 2020
  10. 19/22 fast-import: add helper function for inserting mark object entriesbrian m. carlson, Jan 13, 2020
  11. 16/22 gpg-interface: improve interface for parsing tagsbrian m. carlson, Jan 13, 2020
  12. 22/22 fast-import: add options for rewriting submodulesbrian m. carlson, Jan 13, 2020
  13. 18/22 fast-import: permit reading multiple marks filesbrian m. carlson, Jan 13, 2020
  14. 15/22 commit: use expected signature header for SHA-256brian m. carlson, Jan 13, 2020
  15. 20/22 fast-import: make find_marks work on any mark setbrian m. carlson, Jan 13, 2020
  16. 21/22 fast-import: add a generic function to iterate over marksbrian m. carlson, Jan 13, 2020
  17. 14/22 worktree: allow repository version 1brian m. carlson, Jan 13, 2020
  18. 12/22 builtin/init-db: add environment variable for new repo hashbrian m. carlson, Jan 13, 2020
  19. 13/22 init-db: move writing repo version into a functionbrian m. carlson, Jan 13, 2020
  20. 09/22 t/helper: make repository tests hash independentbrian m. carlson, Jan 13, 2020
  21. 03/22 repository: require a build flag to use SHA-256brian m. carlson, Jan 13, 2020
  22. 08/22 t/helper: initialize repository if necessarybrian m. carlson, Jan 13, 2020
  23. 07/22 t/helper/test-dump-split-index: initialize git repositorybrian m. carlson, Jan 13, 2020
  24. 01/22 hex: introduce parsing variants taking hash algorithmsbrian m. carlson, Jan 13, 2020
  25. 06/22 t6300: make hash algorithm independentbrian m. carlson, Jan 13, 2020

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.