On Apr 30, 2016, at 5:01 AM, Richard Hipp <d...@sqlite.org> wrote:
> 
> Your current check-out and VERSION will have a common ancestor X.
> Fossil finds all the differences between X and the current check-out,
> then applies those differences to VERSION.


So in some ways this seems that when update is called in this “non-standard” 
way, its a bit more like a “merge”.  In my mind, “update” brings the checked 
out workspace up to date with the rest of the repo if anyone has added stuff on 
the same branch its on.  Its like a specific use case of merge, with an 
implicit pull added in.  yes?  what else would distinguish update from merge 
when its called that way?

Normally update is doing a merge where the common ancestor is the checked-out 
version itself, and it merges in the leaf from there, as long as there isn’t 
already more then one leaf.  That’s more likely to be an easy merge, and also 
the sensible one.  That’s the normal default behavior without a VERSION 
argument.  I guess what you’re saying is that in all other cases where its not 
a descendant, then fossil does the “merge” behavior of looking for the the 
nearest common ancestor and then merging from there, more like what the “merge” 
command does, but with an implicit pull also.   Do I have that right? 

I’d post a dot graph here, but I’m not sure if the mail list allows us to 
attach images or not?

Just trying to make sure I understand all of the commands before before I write 
some wrapper scripts, but the workflow I am hoping to promote here is this:

fossil checkout trunk
(work on code)
fossil commit —branch mybranch
(work on more code)
fossil commit
(code review)
fossil update trunk -n
(resolve merge conflicts when they rarely occur ;-)
fossil update trunk
(final feature test)
fossil commit


> 
> Fossil runs the 3-way merge automatically.  That is what "fossil
> update" does.  There is no extra work to do on your part.

I’m presuming what you mean is that during update, fossil attempts to 
automatically do a 3 way merge..and when there is a conflict it just bombs out 
and you can then undo it if you want.  I already presumed that to be the case, 
and I presume that update -n would tell us info about the merge conflict?  If 
not, then this is all a moot point I guess.

What I wish to do is catch that situation proactively and automatically guide 
the user through the process of resolving the conflict by automatically 
providing the common ancestor and two versions to compare and if possible go 
ahead and feed that to a graphical diff tool that supports 3 way merge.  Then 
they can merge it and save the result in their checkout workspace.  Then a 
subsequent call to update should not fail from merge conflict.  If update -n 
does not provide the information needed to do the 3 way manual merge, such as 
common ancestor and the two versions being compared…then this is a moot point 
unless there is some other way I would be able to script that information based 
on update -n or something?


>> 
> I so rarely use "checkout" that I don't remember :-)  Use the source, Luke!
> 
> — 


Can you elaborate a bit on what you mean here by use the source luke?





_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to