Fossil Forum

Fossil doesn't want to merge most recent changes between branches

Fossil doesn't want to merge most recent changes between branches

(1) By Andy Bradford (andybradford) on 2021-02-04 14:47:18 [link] [source]


Apparently  Fossil doesn't  want to  merge some  of the  changes between
049f31fab5 and de524342e3 on

When I run:

fossil update de524342e3
fossil merge  049f31fab5

it  does  not show  any  modifications  were made  to  generic/schema.c,
however, the manifest in 049f31fab5 shows an artifact hash for that file
as  aa6cde837afcd  and the  manifest  in  de524342e3 shows  a  different
artifact hash for the file  as being 2aa1c1e8ce09e. Post-merge what ends
up being committed is 2aa1c1e8ce09e as can be seen here:

If I look at a diff between the two nodes it shows:

So Fossil knows there are differences in generic/schema.c between those,
yet when I try to merge it doesn't?

I  did some  investigation and  found  that when  I run  the merge  with
--verbose, it shows this:

$ fossil merge --verbose 049f31fab5
merge-from: [049f31fab5] by rolf on 2021-02-03 22:53:46
            Added a way to express "at least n times and then unbound" in tdom
            schemas. (trunk)
baseline:   [2b327d36f3] by rolf on 2020-12-31 01:18:08
            Correct cleanup in case of failing conversion of a dom tree into an
            xslt command. (trunk)

And generic/schema.c is not one of the files that has an UPDATE.

If instead I override the baseline:

$ fossil merge --verbose --baseline 57df626882 049f31fab5
merge-from: [049f31fab5] by rolf on 2021-02-03 22:53:46
            Added a way to express "at least n times and then unbound" in tdom
            schemas. (trunk)
baseline:   [57df626882] by rolf on 2021-01-03 01:37:12
            Merged from trunk. (toschema)
UPDATE generic/schema.c

As can be seen, it does want to UPDATE generic/schema.c. I'm not sure if
my selection of baseline is appropriate, however, the merge does want to
change generic/schema.c and  the diff seems to show that  it is bringing
in the  correct code. Here's  a little more  info that seems  to confirm
Fossil's choice of baseline:

$ fossil test-ancestor-path de524342e3 049f31fab5
   1:  7722 049f31fab5a6 2021-02-03 22:53:46 VERSION2
   2:  7707 afd73d0e7f72 2021-02-01 23:58:28
   3:  7708 014e6256e705 2021-01-28 00:30:56
   4:  7696 7f9ca994ecd3 2021-01-22 17:31:08
   5:  7695 575f0e9e63c8 2021-01-22 01:07:31
   6:  7692 77f3b8498bc1 2021-01-22 01:05:32
   7:  7672 2b327d36f3d7 2020-12-31 01:18:08 PIVOT
   8:  7651 57df62688228 2021-01-03 01:37:12
   9:  7674 de524342e322 2021-01-29 20:12:01 VERSION1

Any  thoughts  as  to  why  Fossil   seems  to  prefer  the  version  of
generic/schema.c that  is in the toschema  branch instead of the  one on



(2) By anonymous on 2021-02-05 01:01:12 in reply to 1 [link] [source]

To move on, I finally cleaned up the apparently mess in the repository
by hand.

Picked, what's new in branches toschema and wip, closed both branches
and created a new branch toschema from trunk with my copies ("merged
by hand").

Which was all, what I wanted to do: to bring up my feature branch to
what happend on trunk in the meantime.

Almost all new code in the feature branch was in new files, so
hand-merging wasn't really hard. And the hindered code archaeology
is only a general consideration, not worth to call a problem in this

The biggest thing is that I realize how much I bank on that fossil
just works. As I expect.

It always did. And in the rare cases not, my mistake quickly turned

But this time ... I still would love to hear an explanation what
happens here.

To heal my basic sense of trust into fossil, a bit.

(3) By jamsek on 2021-02-05 02:53:41 in reply to 2 [link] [source]

I don't have any explanation for this problem, but have tested your
report and can confirm the same findings. It's certainly worrying,
though, so I hope it can be resolved. I am glad that you were able to
sort through the mess by hand easily enough.

(5) By anonymous on 2021-04-06 08:33:59 in reply to 2 [link] [source]

I finally cleaned up the apparently mess in the repository by hand.

Was there a 'mess'? Looked like a normal development history.

It is puzzling why merge would skip the files which diff does show as different. Especially when the two branches have a recent merge point ( ).

Clearly, the 'generic/schema.c' artifacts are differing between the merging revisions:

Could this be due to the amend change ( ) that intertwined after the 2aa1c1e8 artifact's commit?

(6) By anonymous on 2021-04-07 17:55:13 in reply to 5 [source]

Indeed, there's very odd Fossil merge behavior taking place in this repo. This calls for someone more familiar with the internal mechanics of the Fossil's merge to debug to the real cause. I agree, we've all accustomed to trusting Fossil operations to do what should be done, yet clearly in this case it fools us somehow.

I managed to track this down to a specific point at which the merge from trunk results in a common artifact (9a192e77c1f88) of 'generic/schema.c' in both trunk and toschema branches checkin:1be8c0f9cb49e3b3. Note, this merge did pick up the correct artifact from trunk to update the 'generic/schema.c'.

The 'generic/schema.c' is then changed on trunk to artifact 67dd664465. Yet the subsequent merge checkin:c3bbc18ae95c152c from trunk into toschema fails to pick up this updated artifact.

I see no valid reason why this artifact should not be picked up for merge. Yet this issue is still reproduceable from this repo,as shown below:

fossil info c3bbc18ae95c152c  ## the "incomplete" merge
hash:         c3bbc18ae95c152c99e8da5198a0519a7625418c 2020-11-13 00:27:02 UTC
parent:       1be8c0f9cb49e3b3618708b700778ae975d42cde 2020-09-24 16:42:23 UTC
merged-from:  a8fac2ca99903be74f42f7c9c6ad10fbf4172564 2020-09-26 13:45:23 UTC
child:        8a31ad8fc5f5c39db2014c9a918c2b76fa005050 2020-11-13 01:05:56 UTC
tags:         toschema
comment:      Merged from trunk. (user: rolf)

fossil finfo generic/schema.c | grep "\[1be8c0f9cb\]"
2020-09-24 [1be8c0f9cb] Merged from trunk. (user: rolf, artifact: [9a192e77c1], branch: toschema)

fossil finfo generic/schema.c | grep "\[a8fac2ca99\]"
2020-09-26 [a8fac2ca99] Applied spell fixes provided by Gustaf Neumann (slightly modified and enhanced). (user: rolf, artifact: [67dd664465], branch: trunk)

fossil checkout 1be8c0f9cb

fossil merge a8fac2ca99     ## expected to update 'generic/schema.c' to the artifact: [67dd664465]
UPDATE extensions/tnc/tnc.c
UPDATE generic/dom.c
UPDATE generic/dom.h
UPDATE generic/domalloc.c
UPDATE generic/domalloc.h
UPDATE generic/domhtml.c
UPDATE generic/domhtml5.c
UPDATE generic/domxpath.c
UPDATE generic/domxslt.c
UPDATE generic/tcldom.c
UPDATE generic/tclexpat.c
UPDATE generic/tclexpat.h
UPDATE generic/tclpull.c
UPDATE generic/tdom.h
UPDATE generic/xmlsimple.c

Looks like a legit case of a failing/incomplete merge (the artifact 67dd664465 to update the 'generic/schema.c' is not picked up as it should).

(4) By anonymous on 2021-04-03 08:52:38 in reply to 1 [link] [source]

I think I just encountered the same problem. 
In my case, I have a develop branch and a deploy branch where all
the code, when it's considered stable, is merged to be deployed
elsewhere. When I try to merge from develop to deploy, not every
change is merged (some files are merged and some aren't). 
I had to cherrypick the checkins to bring
the changes to the deploy branch. Probably if I had overridden
the baseline, Fossil would have done the merge correctly, but I
just saw this thread.
Any thoughts?