The following Windows batch file will reproduce the condition I’m talking about 
(f = fossil):
------------------------
f new sample.fossil
f o sample.fossil
echo Hello > hello.txt
f add hello.txt
f com -m Initial
echo Hello, World > hello.txt
f com --branch other -m "Added World!"
echo Computer said: Hello, World > hello.txt
f com -m "Added 'Computer said'"
f up trunk
f me other --cherrypick
------------------------
From: Scott Robison 
Sent: Saturday, November 14, 2015 2:17 AM
To: Fossil SCM user's discussion 
Subject: Re: [fossil-users] Unexpected merge conflict

If it would be helpful, I'd be glad to take a look at your repo, or a 
fabricated repo that demonstrates the same issue. Without the actual current 
state of the repo, it's hard to know what the exact problem is. Hence my 
previous guesses. 

I didn't write the merge code, but I once upon a time thought I'd found a bug 
in it, and only several hours of running it under a debugger convinced me that 
my expectations were at fault, not fossil. I can't say for certain that your 
problem is the same, but that's what I'd guess.

On Fri, Nov 13, 2015 at 2:21 PM, <[email protected]> wrote:

  I have to agree with your first four sentences.

  Your prove-it-to-yourself example, however, is quite different from my case 
where all changes happened in the same branch, and trunk was unaltered (with 
respect to the lines in question).

  Obviously, if the same line of code changes on both sides of the merge, this 
is a clear conflict.

  But, in my case, only one side has changed.  (The conflict seems to arise 
from the changes occurring in the same branch and the inability to use all of 
them due to cherry picking.)

  Because the cherry pick option was used, only those changes introduced in 
that particular check-in should be merged (i.e., compared with the other side 
of the merge).  But, fossil apparently sees the end result of that line as 
affected by previous check-ins even though cherry pick was used.  I now see 
this is a limitation of the merging mechanism that, apparently, can only deal 
with full line merges.  I guess we have to live with that.

  However, I still feel there was a misleading (if not incorrect) report of the 
problem.  For one thing, the common ancestor content shown seems totally 
incorrect.  But then again, I have no clue which check-in fossil picked to be 
the common ancestor.  Maybe there could a report in that message of the 
check-in ID chosen as the common ancestor to help debug the issue.

  A clearer conflict report like “Cherry-picked content carries previous 
check-ins” or “Cannot cherry pick this particular line” would also be nice.

  From: Scott Robison 
  Sent: Friday, November 13, 2015 6:40 PM
  To: Fossil SCM user's discussion 
  Subject: Re: [fossil-users] Unexpected merge conflict

  On Nov 13, 2015 9:15 AM, "Tony Papadimitriou" <[email protected]> wrote:


  >
  > Sorry for the confusion.
  > By “merge from trunk” I mean I’m in branch ‘trunk’ and from there I’m doing 
the merge.
  > And, I’m merging the “check-in from the ... [other] branch”  I mean the 
check-in which is part of the other part.
  >  
  > I think I’m beginning to understand what’s going on.  If I do a full merge 
(no cherry pick) there are no conflicts.
  > So, it seems the fact that the SRF_OUT label was renamed in an earlier 
check-in that the one I’m cherry picking is confusing it.
  > What should have happened actually (what I expected with the cherry pick) 
is not exactly what I mentioned earlier.
  > The ‘puts’ change being part of the check-in I cherry picked should have 
merged in and the SRF_OUT rename (being from an older check-in) in the 
development branch should have stayed out.
  >  
  > This is a conflict if you look at this line of code as one piece (i.e., you 
either merge the whole line or none of it).
  I believe with 99% confidence that you've hit the nail on the head. Merge is 
line based. It either merges one or a block of lines as a single entity. It 
doesn't deal with line fragments. To prove this to yourself, you could create a 
repo with a single file and a single line of text. Branch it an add a character 
to the end. Go back to trunk and create a new commit with an new character at 
the beginning of the line. Try to merge. The same line was modified in both 
branches so it isn't sure what to do.

  I'm doing this from memory on my phone, so if I'm wrong, my apologies. And 
I'll be surprised! :)


------------------------------------------------------------------------------
  _______________________________________________
  fossil-users mailing list
  [email protected]
  http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users


  _______________________________________________
  fossil-users mailing list
  [email protected]
  http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users






-- 

Scott Robison 



--------------------------------------------------------------------------------
_______________________________________________
fossil-users mailing list
[email protected]
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
_______________________________________________
fossil-users mailing list
[email protected]
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to