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

Re: Typesafer git hash patch

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Feb 28, 2017, 20:45 UTC
Message-ID
<20170228204528.glpmouvcx33zma65@genre.crustytoothpaste.net>
In-Reply-To
<CA+55aFzUhWinWqK30GBc1BKy-v6QtDdO2BLUODkiqg9XoKLrwA@mail.gmail.com>
On Tue, Feb 28, 2017 at 12:25:20PM -0800, Linus Torvalds wrote:
Show 19 quoted lines
> On Tue, Feb 28, 2017 at 11:53 AM, Junio C Hamano <gitster@pobox.com> wrote:
> > Sorry, but at this point in your description, you completely lost
> > me.  I thought "struct object_id" was what you call "hash_t" in the
> > above.
> 
> So what happened was that I started out just encapsulating
> 
>    unsigned char sha1[20];
> 
> as a
> 
>    hash_t hash;
> 
> and that made sense in a lot of situations. I always thought that code that used
> 
>     struct object_id oid;
> 
> is just too ugly to live, so I'm not actually all that big of a fan of
> the oid approach.

There was some discussion on the list about the best name to use, and object_id seemed like the most popular decision. I don't care if we add a typedef for it and prefer that typedef, but the existing code avoided typedefs in favor of explicit struct definitions.

I'm certainly not opposed to having less to type, because “object_id” is awkward to type, but I've generally tried to defer to existing uses in the codebase and what list regulars are comfortable with.

The only problem with using hash_t is that it's then not obvious as we transition (assuming we don't take an omnibus patch) what is converted and what isn't.

> But the two approaches really are pretty much equivalent logically,
> even if they don't look the same.
Yeah, I think they are.
Show 13 quoted lines
> So I wanted to unify things: "One type to bring them all and in the
> darkness bind them".
> 
> So I just basically made this:
> 
>     typedef struct object_id {
>             unsigned char hash[GIT_HASH_SIZE];
>     } hash_t;
> 
> to create one single data structure that doesn't make my eyes bleed.
> That "struct object_id" still exists, but I don't generally have to
> look at it when doing the conversion, and any current users "just
> work".

There is nothing that prevents us from doing a nice global search-and-replace in the future if we think the status quo is bad. That's something that could be automated with Coccinelle.

-- 
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | https://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: https://keybase.io/bk2204
Previous: Linus TorvaldsNext: brian m. carlson
Message 6 of 8 in “Typesafer git hash patch”
  1. Linus TorvaldsFeb 28, 2017
  2. Jeff KingFeb 28, 2017
  3. brian m. carlsonFeb 28, 2017
  4. Jeff KingFeb 28, 2017
  5. Linus TorvaldsFeb 28, 2017
  6. brian m. carlsonFeb 28, 2017
  7. brian m. carlsonFeb 28, 2017
  8. Linus TorvaldsFeb 28, 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.