git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Problem: `fatal: too-short tree object` when executing hash-object on tree
@ 2023-08-31 10:58 Gareth Hayes
  2023-08-31 17:10 ` Johannes Sixt
  2023-08-31 17:25 ` Junio C Hamano
  0 siblings, 2 replies; 3+ messages in thread
From: Gareth Hayes @ 2023-08-31 10:58 UTC (permalink / raw)
  To: git

Problem: I'm trying to reproduce the identifier of a tree object using `git cat-file -p <tree object identifier> | git hash-object -t tree --stdin`

This results in an error:
`fatal: too-short tree object`

To replicate: 
`git cat-file -p HEAD`
`git cat-file -p <tree object identifier from output of above> | git hash-object -t tree --stdin`

This works for other object types but not trees. What am I doing wrong?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Problem: `fatal: too-short tree object` when executing hash-object on tree
  2023-08-31 10:58 Problem: `fatal: too-short tree object` when executing hash-object on tree Gareth Hayes
@ 2023-08-31 17:10 ` Johannes Sixt
  2023-08-31 17:25 ` Junio C Hamano
  1 sibling, 0 replies; 3+ messages in thread
From: Johannes Sixt @ 2023-08-31 17:10 UTC (permalink / raw)
  To: Gareth Hayes; +Cc: git

Am 31.08.23 um 12:58 schrieb Gareth Hayes:
> Problem: I'm trying to reproduce the identifier of a tree object using `git cat-file -p <tree object identifier> | git hash-object -t tree --stdin`

XY-problem alert!?

> This results in an error:
> `fatal: too-short tree object`
> 
> To replicate: 
> `git cat-file -p HEAD`
> `git cat-file -p <tree object identifier from output of above> | git hash-object -t tree --stdin`
> 
> This works for other object types but not trees. What am I doing wrong?

Recall that the -p in cat-file means "pretty" (-print). The data that
makes up a tree object is far from pretty, hence, you can't feed it into
git hash-object directly.

You can either turn the pretty-printed input into a tree object

   git cat-file -p $treeoid | git mktree

or hash the raw data

   git cat-file tree $treeoid | git hash-object -t tree --stdin


-- Hannes


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Problem: `fatal: too-short tree object` when executing hash-object on tree
  2023-08-31 10:58 Problem: `fatal: too-short tree object` when executing hash-object on tree Gareth Hayes
  2023-08-31 17:10 ` Johannes Sixt
@ 2023-08-31 17:25 ` Junio C Hamano
  1 sibling, 0 replies; 3+ messages in thread
From: Junio C Hamano @ 2023-08-31 17:25 UTC (permalink / raw)
  To: Gareth Hayes; +Cc: git

"Gareth Hayes" <gareth.hayes@bitcoin.org.hk> writes:

> Problem: I'm trying to reproduce the identifier of a tree object using `git cat-file -p <tree object identifier> | git hash-object -t tree --stdin`
>
> This results in an error:
> `fatal: too-short tree object`
>
> To replicate: 
> `git cat-file -p HEAD`
> `git cat-file -p <tree object identifier from output of above> | git hash-object -t tree --stdin`
>
> This works for other object types but not trees. What am I doing wrong?

It would work *ONLY* for blob, and not commit or tag object types,
no?

The "-p" option is to present the object in a human-friendly format,
as opposed to giving the raw stream of bytes that is suitable for
machine consumption and required by hash-object.  It so happens that
for "blob", the raw stream of bytes is just as human-friendly as the
tool can make, without having a deep knowledge of the content type
(e.g. it may be possible to make "cat-file -p <blob>" to somehow
apply an appropriate textconv filter if the path to <blob> is known
as a future enhancement, but such a code does not exist yet, and
when it happens, even "cat-file -p <blob> | hash-object --stdin"
would not round-trip).

So, that is what you are doing wrong, I think.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-08-31 17:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-31 10:58 Problem: `fatal: too-short tree object` when executing hash-object on tree Gareth Hayes
2023-08-31 17:10 ` Johannes Sixt
2023-08-31 17:25 ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).