Subject: Re: [wishlist] git-archive -L

From: René Scharfe <[email-masked]>
Date: Tue, 03 Feb 2009 09:10:43 +0100

Pierre Habouzit schrieb:
> Hi Rene,
> 
> I wanted to do that myself, but I sadly miss the time right now, so I
> wonder if you'd know how to do the following.
> 
> We have in our repository a kind of modular system (for a family of web
> sites) where each web-site uses a (versionned) symlink farm. IOW it
> works basically that way:
> 
>     www/module1
>     www/module2
>     product_A/www/module1 -> ../../www/module1
>     product_A/www/module_A
>     product_B/www/module1 -> ../../www/module1
>     product_B/www/module2 -> ../../www/module2
>     product_B/www/module_B
> 
> Though product_A and _B even if they share a fair amount of code, are
> separate products and when we release, we'd like to be able to perform
> from inside:
> 
>     git archive --format=tar -L product_$A
> 
> where -L basically does what it does in cp: dereference symlinks.  To
> make the thing hairier, we also have symlinks _inside_ www/ (pointing
> into the same subtree) that we'd like to keep if possible (even if it's
> not a big deal).
> 
> So I'd suggest something where -L only dereferences the symlink if it
> goes outside of the list of paths passed to git-archive, and -LL (or -L
> -L) dereferences anything. Of course this would only make sense if the
> symlinks resolve to something that is tracked :)

Last April, I was working on making archive follow all symlinks pointing
to internal files.  The goal was a bit different, namely to create
archives for platforms without symlink support (i.e. it would resolve
all symlinks pointing to tracked objects).

IIRC the code had some limitations, e.g. it couldn't follow a symlink to
a path containing symlinked directories.  I'll need to rebase it to
master first, though, as the surrounding code has changed a bit in the
meantime.

To follow only symlinks that point outside of the specified paths sounds
like a sensible mode of operation, but I'm not sure that it's worth a
one letter option.

Given your setup you also might want to take a look at submodules and
the recent submodule archival support patches by Lars Hjelmi.

Anyway, I'll try to resurrect my old, incomplete symlink following code,
but I don't have much time, either. :-/

René