On Sun, Nov 6, 2016 at 9:33 AM, Josh Triplett <[email protected]> wrote:
> On Sun, Nov 06, 2016 at 09:14:56AM -0800, Junio C Hamano wrote:
>> Josh Triplett <[email protected]> writes:
>> > We could, but if we (or one of the many third-party git implementations)
>> > miss a case, gitlinks+reachability may appear to work in many cases with
>> > dataloss afterward, while gitrefs will fail early and not appear
>> > functional.
>>
>> I wonder what happens if we do not introduce the "gitref" but
>> instead change the behaviour of "gitlink" to imply an optional
>> reachability.  That is, when enumerating what is reachable in your
>> repository, if you see a gitlink and if you notice that you locally
>> have the target of that gitlink, you follow, but if you know you
>> lack it, you do not error out.  This may be making things too
>> complex to feasibily implement by simplify them ;-) and I see a few
>> immediate fallout that needs to be thought through (i.e. downsides)
>> and a few upsides, too.  I am feeling feverish and not thinking
>> straight, so I won't try to weigh pros-and-cons.
>>
>> This would definitely need protocol extension when transferring
>> objects across repositories.
>
> It'd also need a repository format extension locally.  Otherwise, if you
> ever touched that repository with an older git (or a tool built on an
> older libgit2 or JGit or other library), you could lose data.
>
> It does seem conceptually appealing, though.  In an ideal world, the
> original version of gitlink would have had opt-out reachability (and
> .gitmodules with an external repository reference could count as opting
> out).
>
> But I can't think of any case where it's OK for a git implementation to
> not know about this reachability extension and still operate on the
> gitlink.  And given that, it might as well use a new object type that
> the old version definitely won't think it understands.
>
> - Josh Triplett

That's still only true if the receiving end runs fsck, isn't it? I
suppose that's a large number of receivers, and at least there are
ways post-push to determine that objects don't make sense to that
version of git.

I think using a new mode is the safest way, and it allows easily
implementing RefTrees as well as other projects. Additionally, if we
*wanted* additional "opt-in / opt-out" support we could add this by
default to gitrefs,and they could (possibly) replace gitlinks in the
future?

Thanks,
Jake

Reply via email to