Hi Elijah,

thanks for explaining the motivation behind the current solution!

I still believe the situation could be improved without breaking compatibility:
* in the documentation the paragraph about "Omitting the from command" should 
change "existing branches" into something like "existing branches within the 
cache of the current fast-import stream". The current phrasing is simply wrong.
* the documentation of the "from branch^0" variant currently looks like a 
solution for a rare situation that is easily overlooked. Maybe it could be 
integrated with the paragraph about "Omitting" since it is very closely related.
* in update_branch the warning could hint at the possible solution (explicitly 
supply a from parent_branch^0 argument)
* I'm still not sure why it would hurt to change fatal error in parse_from 
about creating a branch from itself to simply fall back to the ^0 behavior?

A much better solution in my view would be to aim for real statelessness and 
make the caching of branch pointers completely transparent. For all I can see, 
fast-import nearly follows this paradigm but violates it in this subtle point. 
Once way to achieve this would be to offer an explicit way to state that a 
commit should have no parent and deprecate the variant without "from" argument, 
issuing a warning. The great practical advantage of that would be that 
interrupting and continuing the fast-import stream would be guaranteed to 
deliver the same result. Far more important is the conceptual simplicity: A 
developer could completely forget about caching when it comes to correctness 
and only think of it when it comes to performance optimization.

Anyway: these are all improvements for future developers. Personally, I am 
satisfied with everything I have.

Greetings,
Norbert


-----Original Message-----
From: Elijah Newren <new...@gmail.com> 
Sent: Monday, March 11, 2019 8:46 PM
To: Norbert Nemec <norbert.ne...@microsoft.com>
Cc: git@vger.kernel.org
Subject: Re: fast-import on existing branches

Hi Norbert,

On Fri, Mar 8, 2019 at 9:38 AM Norbert Nemec <norbert.ne...@microsoft.com> 
wrote:
>
> Thanks, Elijah, I had indeed missed that block about the ^0 handling.
>
> I still don't get why this awkward workaround is required. Why isn't that 
> lookup done by default? Performance can't be the reason, since the same 
> lookup is done lateron anyway, just as correctness check. The way I read the 
> documentation, providing no "from" should continue committing to a branch in 
> any case. I would never have seen the continuation of an incremental import a 
> "special case". There is a number of tools around that sync a git repo from 
> some other source and would regularly need to continue an existing branch.
>
> Greetings,
> Norbert

If this "awkward workaround", as you put it, were removed it would make it 
impossible to create a commit with no parent without using a different branch 
name.  I really like being able to export, modify, and re-import history, using 
something of the form:

   git fast-export --all | <edit the stream somehow> | git fast-import --force

which would no longer work if fast-import automatically assumed a parent for 
every from-less commit in the input based on the reference name.  Personally, 
I'm more on the side of not understanding why "from" isn't required whenever 
you want your commit to have a parent; users can specify either a sha or a 
mark-id easily enough; I don't see what it saves to allow omitting it, and it 
inevitably leads to other confusion like yours.  But I'm well over a decade too 
late to advocate for that.


Hope that helps,
Elijah

Reply via email to