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

Re: [PATCH 2/4] builtin/rev-parse: learn --null-oid

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Sep 18, 2020, 21:26 UTC
Message-ID
<20200918212609.GC67496@camp.crustytoothpaste.net>
In-Reply-To
<20200918141125.GB1602321@nand.local>
On 2020-09-18 at 14:11:25, Taylor Blau wrote:
Show 25 quoted lines
> Hi Denton,
> 
> On Fri, Sep 18, 2020 at 04:19:03AM -0700, Denton Liu wrote:
> > When a user needed the null OID for scripting purposes, it used to be
> > very easy: hardcode 40 zeros. However, since Git started supporting
> > SHA-256, this assumption became false which may break some scripts.
> > Allow users to fix their broken scripts by providing users with a
> > hash-agnostic method of obtaining the null OID.
> 
> I have not been very involved in the hash transition, so please take my
> comments with a grain of salt (and if they are misplaced, feel free to
> ignore them).
> 
> This '--null-oid' thing makes me wonder exactly what it does. Yours
> gives a type-less object back, but what about scripts that want the OID
> of the empty blob or tree?
> 
> Would having something like '--null-oid[=<type>]' be useful for them? On
> the one hand, it seems like a thing that would be useful, but on the
> other, those aren't *the* null OID when 'type' is 'blob' or 'tree'. A
> more appropriate name in that case might be '--empty-oid=tree'.
> 
> So, that's an argument that '--null-oid' and '--empty-oid[=<type>]'
> should be two distinct things. I think I like that best. Do you have any
> thoughts about it?

So I definitely want to distinguish between the null (all-zeros) OID and the OID of an empty object, and I think using "null" and "empty" are fine.

What I typically do when I write shell scripts, and which may obviate the need for this patch is turn this:

  [ "$oid" = 0000000000000000000000000000000000000000 ]
into this:
  echo "$oid" | grep -qsE '^0+$'

This is slightly less efficient, but it's also backwards compatible with older Git version assuming you have a POSIX grep.

If you still want this option, then that's fine, but please make --null-oid take the same arguments as --show-object-format (and default to the same value). Git will soon learn about writing SHA-1 while storing in SHA-256, and it makes everyone's life better if we can plan for the future by making it understand these options now.

I'm not sure we need an empty tree and empty blob object, because it's pretty easy to write these:

  git hash-object -t tree /dev/null
  git hash-object -t blob /dev/null
That's what I've done in some of the transition code at least.
-- 
brian m. carlson: Houston, Texas, US
Previous: Taylor BlauNext: Chris Torek
Message 7 of 23 in “sample hooks: become hash agnostic”
  1. 0/4 sample hooks: become hash agnosticDenton Liu, Sep 18, 2020
  2. 2/4 builtin/rev-parse: learn --null-oidDenton Liu, Sep 18, 2020
  3. Taylor BlauSep 18, 2020
  4. Taylor BlauSep 18, 2020
  5. Junio C HamanoSep 18, 2020
  6. Taylor BlauSep 18, 2020
  7. brian m. carlsonSep 18, 2020
  8. Chris TorekSep 20, 2020
  9. brian m. carlsonSep 20, 2020
  10. Taylor BlauSep 20, 2020
  11. Andreas SchwabSep 20, 2020
  12. 1/4 hooks--pre-push.sample: prefer $() for command substitutionDenton Liu, Sep 18, 2020
  13. Eric SunshineSep 18, 2020
  14. 3/4 hooks--pre-push.sample: use hash-agnostic null OIDDenton Liu, Sep 18, 2020
  15. Eric SunshineSep 18, 2020
  16. 4/4 hooks--update.sample: use hash-agnostic null OIDDenton Liu, Sep 18, 2020
  17. Eric SunshineSep 18, 2020
  18. brian m. carlsonSep 18, 2020
  19. 0/3 sample hooks: become hash agnosticDenton Liu, Sep 23, 2020
  20. 1/3 hooks--pre-push.sample: modernize scriptDenton Liu, Sep 23, 2020
  21. 3/3 hooks--update.sample: use hash-agnostic zero OIDDenton Liu, Sep 23, 2020
  22. 2/3 hooks--pre-push.sample: use hash-agnostic zero OIDDenton Liu, Sep 23, 2020
  23. Junio C HamanoSep 23, 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.