Re: How do I get the contents of a directory in fast-import

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> 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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]