Thread (13 messages) flat view 13 messages, 5 authors, 2016-06-15

Re: Adding files to a git-archive when it is generated, and whats the best way to find out what branch a commit is on?

From: demerphq <hidden>
Date: 2016-06-15 22:47:08

2009/8/2 René Scharfe [off-list ref]:
demerphq schrieb:
quoted
2009/7/30 René Scharfe [off-list ref]:
quoted
demerphq schrieb:
quoted
So then git also would benefit from support in git-archive for adding
arbitrary files to the archive during generation?
Yes, and this has come up before.

How about the following?  It's missing documentation and a test case,
but you could try

       $ git archive --add-file extra HEAD >HEAD+extra.tar

or

       $ git archive --prefix=a/ --add-file extra --prefix=b/ HEAD >ba.tar

Only the file name part (after the last slash) of the extra file is used,
together with the prefix, to form the path of the archive entry.

Opening the extra files when parsing the command line arguments and closing
them after they have been written into the archive is a bit iffy, but it's
impractical to report open errors after parts of the archive have already
been created.
I havent managed to try it out yet but this is pretty much exactly
what I was looking for. Only thought I had was that it might be nice
to be able to specify what name the file should be added as so that
you can add files to subpaths deeper than the root/root prefix of the
tar. However for /my/ particular purposes that is unnecessary, it only
occurs to me as a nice to have. But if you were inclined to think
about extending it I was thinking an argument notation like --add-file
foo:bar/baz/bop might be useful.
With the patch as-is, you can make a file named bop appear as
bar/baz/bop in the archive (by using a prefix of bar/baz/), but not as
foo.  I wonder how often one needs to rename a file while adding it to
the archive -- or indeed if this is needed at all.  Being lazy, I'd wait
for such a case to appear before supporting it with a double-valued
command line argument.
Well I was kinda thinking the case of a snapshot generator on
something like gitweb.

In that case you could have multiple processes trying to create the
same snapshot.

One solution is to do the work in a process specific temporary
directory with the correct name and then add it that way.

A slightly nicer approach is create the file in a common working
directory with a temporary name and then have it added to the archive
with a different name. This is actually the approach I used by
exploiting the the --transform option to tar. So while it might appear
my request is a YAGNI it is actually a IADNI (I Already Did Need It).

Even nicer and cleaner of course would be support something like
"--add-file -=.patch"  with the "-" meaning "read from STDIN", which
then means temporary files can be avoided, assuming one only needs to
add a single file to the archive. This is particularly nice if the
content of  the file can be generated from the output of something
like git-describe or git rev-parse or any generic tool.

So IMO actually this functionality would be very useful, and isnt so
weird when you think of it in context of generating snapshots for a
"git aware" build process.

Of course this is all very easy for me to say as a back-seat driver. :-)

cheers,
Yves




-- 
perl -Mre=debug -e "/just|another|perl|hacker/"
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help