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

Re: [PATCH v2 14/19] hex: introduce parse_oid_hex

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Feb 17, 2017, 09:26 UTC
Message-ID
<dc402492-8b69-cf43-22d0-e4ec3af04e8c@alum.mit.edu>
In-Reply-To
<20170214023141.842922-15-sandals@crustytoothpaste.net>
On 02/14/2017 03:31 AM, brian m. carlson wrote:
Show 27 quoted lines
> Introduce a function, parse_oid_hex, which parses a hexadecimal object
> ID and if successful, sets a pointer to just beyond the last character.
> This allows for simpler, more robust parsing without needing to
> hard-code integer values throughout the codebase.
> 
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
>  cache.h | 8 ++++++++
>  hex.c   | 8 ++++++++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/cache.h b/cache.h
> index 61fc86e6d7..5dc89a058c 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -1319,6 +1319,14 @@ extern char *oid_to_hex_r(char *out, const struct object_id *oid);
>  extern char *sha1_to_hex(const unsigned char *sha1);	/* static buffer result! */
>  extern char *oid_to_hex(const struct object_id *oid);	/* same static buffer as sha1_to_hex */
>  
> +/*
> + * Parse a hexadecimal object ID starting from hex, updating the pointer
> + * specified by p when parsing stops.  The resulting object ID is stored in oid.
> + * Returns 0 on success.  Parsing will stop on the first NUL or other invalid
> + * character.
> + */
> +extern int parse_oid_hex(const char *hex, struct object_id *oid, const char **p);
> +

I like this function. This is a convenient kind of interface to work with. A few minor comments:

If you rename the nondescript `p` parameter to, say, `end`, its purpose would be more transparent. Alternatively, `skip_prefix()` calls the corresponding parameter `out`.

It would be nice for the docstring to mention that the object ID must be a full, 40-character hex string. Otherwise "Parsing will stop on the first NUL or other invalid character" makes it sound like the function might be satisfied with fewer than 40 characters.

Finally, you might mention the useful fact that `p` is only updated if the function succeeds.

> [...]
Michael
Previous: brian m. carlsonNext: brian m. carlson
Message 15 of 26 in “object_id part 6”
  1. 00/19 object_id part 6brian m. carlson, Feb 14, 2017
  2. 03/19 builtin/describe: convert to struct object_idbrian m. carlson, Feb 14, 2017
  3. 16/19 sha1_file: introduce an nth_packed_object_oid functionbrian m. carlson, Feb 14, 2017
  4. 11/19 builtin/replace: convert to struct object_idbrian m. carlson, Feb 14, 2017
  5. Michael HaggertyFeb 17, 2017
  6. 10/19 Convert remaining callers of resolve_refdup to object_idbrian m. carlson, Feb 14, 2017
  7. 09/19 builtin/merge: convert to struct object_idbrian m. carlson, Feb 14, 2017
  8. 08/19 builtin/clone: convert to struct object_idbrian m. carlson, Feb 14, 2017
  9. 13/19 refs: convert each_reflog_ent_fn to struct object_idbrian m. carlson, Feb 14, 2017
  10. 06/19 builtin/grep: convert to struct object_idbrian m. carlson, Feb 14, 2017
  11. 15/19 refs: simplify parsing of reflog entriesbrian m. carlson, Feb 14, 2017
  12. Michael HaggertyFeb 17, 2017
  13. 12/19 reflog-walk: convert struct reflog_info to struct object_idbrian m. carlson, Feb 14, 2017
  14. 14/19 hex: introduce parse_oid_hexbrian m. carlson, Feb 14, 2017
  15. Michael HaggertyFeb 17, 2017
  16. 17/19 Convert object iteration callbacks to struct object_idbrian m. carlson, Feb 14, 2017
  17. 19/19 wt-status: convert to struct object_idbrian m. carlson, Feb 14, 2017
  18. 18/19 builtin/merge-base: convert to struct object_idbrian m. carlson, Feb 14, 2017
  19. 07/19 builtin/branch: convert to struct object_idbrian m. carlson, Feb 14, 2017
  20. 05/19 builtin/fmt-merge-message: convert to struct object_idbrian m. carlson, Feb 14, 2017
  21. 01/19 builtin/commit: convert to struct object_idbrian m. carlson, Feb 14, 2017
  22. 04/19 builtin/fast-export: convert to struct object_idbrian m. carlson, Feb 14, 2017
  23. 02/19 builtin/diff-tree: convert to struct object_idbrian m. carlson, Feb 14, 2017
  24. Junio C HamanoFeb 14, 2017
  25. Michael HaggertyFeb 17, 2017
  26. brian m. carlsonFeb 17, 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.