From: Stefan Monnier <monnier@iro•umontreal.ca>
To: git@vger•kernel.org
Subject: Re: How do I get the contents of a directory in fast-import
Date: Fri, 15 Jan 2016 20:59:59 -0500 [thread overview]
Message-ID: <jwvd1t270zv.fsf-monnier+gmane.comp.version-control.git@gnu.org> (raw)
In-Reply-To: 20160115223922.GB32081@sigill.intra.peff.net
>> So how do I get a directory listing from fast-import, i.e.
>> like I can get with "git cat-file -p", but without having to fork
>> a separate git process?
> I'm not sure I understand your use case exactly, but is the directory
> listing you want part of the newly-added objects from fast-import, or
> does it already exist in the branches you are collecting from?
For the most important cases, the relevant revision already exists
before fast-import, yes.
> If the latter, I wonder if a separate "cat-file --batch" process could
> give you what you need (it's a separate process, but you can start a
I'm not sure exactly how "git cat-file --batch" works internally
(whether it tries to keep active revisions, like fast-import does), but
I've indeed used it successfully (tho for files).
> single process and make many queries of it; I assume your desire not to
> add an extra process is to avoid the overhead).
The overhead of starting a new process is one part, but another is the
overhead of re-reading the refs (I can have tens of thousands of
branches in my repository), etc..
> But I think it won't pretty-print trees for you; it will give you the
> raw tree data
Indeed.
> (which I imagine is what you are getting from cat-blob, too).
Actually no, "cat-blob" gives an error instead:
fatal: Object 2ca1672d50c9dbfe582dc53af3c7ce9891a7a664 is a tree but a blob was expected.
> I'm not sure that's actually documented anywhere (it was part of
> the original revisions of git, and hasn't changed since). But it is
> basically:
> tree = tree_entry*
> tree_entry = mode SP path NUL sha1
> mode = ascii mode, in octal (e.g., "100644")
> path = <any byte except NUL>*
> sha1 = <any byte>{20}
> SP = ascii space (0x20)
> NUL = 0-byte
Ah, thanks. It'd be great if cat-blob could return this instead of
signalling an error.
> So it is pretty simple to parse.
My program is written in /bin/sh so parsing the above is actually rather
inconvenient, but it's much better than just getting an error.
Stefan
prev parent reply other threads:[~2016-01-16 2:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-01 15:54 How do I get the contents of a directory in fast-import Stefan Monnier
2016-01-09 23:56 ` Stefan Monnier
2016-01-15 22:39 ` Jeff King
2016-01-16 1:59 ` Stefan Monnier [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvd1t270zv.fsf-monnier+gmane.comp.version-control.git@gnu.org \
--to=monnier@iro$(echo .)umontreal.ca \
--cc=git@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox