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

Re: [PATCH v3 16/19] sha1_file: introduce an nth_packed_object_oid function

From
Ramsay Jones <ramsay@ramsayjones.plus.com>
Date
Feb 18, 2017, 01:24 UTC
Message-ID
<fc5aff14-a047-1a51-c40c-8918098f1f59@ramsayjones.plus.com>
In-Reply-To
<20170218000652.375129-17-sandals@crustytoothpaste.net>
On 18/02/17 00:06, brian m. carlson wrote:
Show 25 quoted lines
> There are places in the code where we would like to provide a struct
> object_id *, yet read the hash directly from the pack.  Provide an
> nth_packed_object_oid function that is similar to the
> nth_packed_object_sha1 function.
> 
> In order to avoid a potentially invalid cast, nth_packed_object_oid
> provides a variable into which to store the value, which it returns on
> success; on error, it returns NULL, as nth_packed_object_sha1 does.
> 
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
>  cache.h     |  6 ++++++
>  sha1_file.c | 17 ++++++++++++++---
>  2 files changed, 20 insertions(+), 3 deletions(-)
> 
> diff --git a/cache.h b/cache.h
> index e03a672d15..4f3bfc5ee7 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -1608,6 +1608,12 @@ extern void check_pack_index_ptr(const struct packed_git *p, const void *ptr);
>   * error.
>   */
>  extern const unsigned char *nth_packed_object_sha1(struct packed_git *, uint32_t n);
> +/*
> + * Like nth_packed_object_oid, but write the data into the object specified by
                             ^^^
... Like nth_packed_object_sha1, but ...

Having said that, if the intent is to eventually replace that function with the new nth_packed_object_oid(), then it is probably not a good idea to describe this function in terms of the function it will obsolete. ;-)

ATB, Ramsay Jones

Show 47 quoted lines
> + * the the first argument.  Returns the first argument on success, and NULL on
> + * error.
> + */
> +extern const struct object_id *nth_packed_object_oid(struct object_id *, struct packed_git *, uint32_t n);
>  
>  /*
>   * Return the offset of the nth object within the specified packfile.
> diff --git a/sha1_file.c b/sha1_file.c
> index ec957db5e1..777b8e8eae 100644
> --- a/sha1_file.c
> +++ b/sha1_file.c
> @@ -2628,6 +2628,17 @@ const unsigned char *nth_packed_object_sha1(struct packed_git *p,
>  	}
>  }
>  
> +const struct object_id *nth_packed_object_oid(struct object_id *oid,
> +					      struct packed_git *p,
> +					      uint32_t n)
> +{
> +	const unsigned char *hash = nth_packed_object_sha1(p, n);
> +	if (!hash)
> +		return NULL;
> +	hashcpy(oid->hash, hash);
> +	return oid;
> +}
> +
>  void check_pack_index_ptr(const struct packed_git *p, const void *vptr)
>  {
>  	const unsigned char *ptr = vptr;
> @@ -3788,13 +3799,13 @@ static int for_each_object_in_pack(struct packed_git *p, each_packed_object_fn c
>  	int r = 0;
>  
>  	for (i = 0; i < p->num_objects; i++) {
> -		const unsigned char *sha1 = nth_packed_object_sha1(p, i);
> +		struct object_id oid;
>  
> -		if (!sha1)
> +		if (!nth_packed_object_oid(&oid, p, i))
>  			return error("unable to get sha1 of object %u in %s",
>  				     i, p->pack_name);
>  
> -		r = cb(sha1, p, i, data);
> +		r = cb(oid.hash, p, i, data);
>  		if (r)
>  			break;
>  	}
> 
Previous: brian m. carlsonNext: brian m. carlson
Message 22 of 28 in “object_id part 6”
  1. 00/19 object_id part 6brian m. carlson, Feb 18, 2017
  2. 02/19 builtin/diff-tree: convert to struct object_idbrian m. carlson, Feb 18, 2017
  3. Ramsay JonesFeb 18, 2017
  4. brian m. carlsonFeb 18, 2017
  5. Jeff KingFeb 18, 2017
  6. Jeff KingFeb 18, 2017
  7. brian m. carlsonFeb 18, 2017
  8. Jeff KingFeb 18, 2017
  9. 08/19 builtin/clone: convert to struct object_idbrian m. carlson, Feb 18, 2017
  10. 05/19 builtin/fmt-merge-message: convert to struct object_idbrian m. carlson, Feb 18, 2017
  11. 07/19 builtin/branch: convert to struct object_idbrian m. carlson, Feb 18, 2017
  12. 06/19 builtin/grep: convert to struct object_idbrian m. carlson, Feb 18, 2017
  13. 18/19 builtin/merge-base: convert to struct object_idbrian m. carlson, Feb 18, 2017
  14. 15/19 refs: simplify parsing of reflog entriesbrian m. carlson, Feb 18, 2017
  15. 17/19 Convert object iteration callbacks to struct object_idbrian m. carlson, Feb 18, 2017
  16. 19/19 wt-status: convert to struct object_idbrian m. carlson, Feb 18, 2017
  17. 13/19 refs: convert each_reflog_ent_fn to struct object_idbrian m. carlson, Feb 18, 2017
  18. 11/19 builtin/replace: convert to struct object_idbrian m. carlson, Feb 18, 2017
  19. 14/19 hex: introduce parse_oid_hexbrian m. carlson, Feb 18, 2017
  20. 12/19 reflog-walk: convert struct reflog_info to struct object_idbrian m. carlson, Feb 18, 2017
  21. 16/19 sha1_file: introduce an nth_packed_object_oid functionbrian m. carlson, Feb 18, 2017
  22. Ramsay JonesFeb 18, 2017
  23. brian m. carlsonFeb 18, 2017
  24. 01/19 builtin/commit: convert to struct object_idbrian m. carlson, Feb 18, 2017
  25. 04/19 builtin/fast-export: convert to struct object_idbrian m. carlson, Feb 18, 2017
  26. 03/19 builtin/describe: convert to struct object_idbrian m. carlson, Feb 18, 2017
  27. 10/19 Convert remaining callers of resolve_refdup to object_idbrian m. carlson, Feb 18, 2017
  28. 09/19 builtin/merge: convert to struct object_idbrian m. carlson, Feb 18, 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.