[svk-devel] Lost changeset at merge phase of svk pull (was Re: [svk-users] Strange svk:merge 'corruption'...)

Brice Figureau brice+svk at daysofwonder.com
Thu Aug 9 05:02:49 EDT 2007


Hi,

Replying to myself to add more background information as I could find on
my colleague machine regarding what he did up to the incident.

I'm also CC:ing svk-devel since it seems more a -devel thing than an
-users thing...

Some background information:
On Thu, 2007-08-09 at 09:11 +0200, Brice Figureau wrote:
> On Wed, 2007-08-08 at 17:15 +0200, Brice Figureau wrote:
> > Hi,
> > 
> > Today one of my co-worker encountered a strange issue:
> > When issueing svk push -lC, svk wanted to push files he didn't touch
> or
> > commit.
> >
> > We tried to understand the issue and found that his local branch
> > (//local/www) was missing a changeset (4246) coming from a mirrored
> SVN
> > repository.
> >
> > I suspected a merge ticket issue, so I started to look to svk:merge
> > properties modification in this mirrored SVN repository and found that
> > one svk push I did yesterday modified the property in a strange way:
> > 
> > svk diff -c 4247  //remote/www/trunk/
> > ...change skipped...
> > ___________________________________________________________________
> > Name: svk:merge
> >   2ad53c07-96d1-4b4f-8c22-08f7cf95a899:/local/www:4449
> >   98d098b2-0987-40f7-bafc-e6b25d018214:/dow/local:3727
> >  -98d098b2-0987-40f7-bafc-e6b25d018214:/local/www/trunk:7855
> >  -c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www:4240
> >  -c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www-userpages:4243
> >  +98d098b2-0987-40f7-bafc-e6b25d018214:/local/www/trunk:7836
> >  +c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www:4196
> >  +c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www-userpages:4166
> >   da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/billisship:4015
> >   da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/m44-editor:4214
> >  -da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/www:4238
> >  +da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/www:4180
> >   da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/www-bleditor:3826
> >   da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/www-bnp:3947
> >   da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/www-quickbooks:3832
> >   fa954469-7010-4da2-b506-9a99099ebb4d:/branches/www-dow-umbrella:3981
> >  -fa954469-7010-4da2-b506-9a99099ebb4d:/local/www:4219
> >  +fa954469-7010-4da2-b506-9a99099ebb4d:/local/www:4226
> > 
> > Notice how many merge-ticket were pushed backward. 
> > My change should only have touched my merge-ticket (fa954469...).
> 
> After more test on a test repository I couldn't reproduce the missing
> change on pull my co-worker got yesterday.
>
> It seems that the merge-ticket moving backwards issue I'm referring
> above is harmless: it happens everytime someone pushes to the upstream
> SVN if he didn't pull, and still svk is able at next pull to remember
> where was the last merge point.

Abstract of the issue:
One of my co-worker working on a svk branch of a remote SVN repository
never get one changeset commited to the SVN repository by another svk
user.
The changeset in question was synced properly but never merged into his
own branch. The changeset has a local revision of 4246 and original
revision 4063 (in the SVN repository).

Here is the sequence of events:

On a checkout of //local/www which is a svk cp of //mirror/www/trunk:
$ svk pull
Syncing svn+ssh://domain.com/www
Auto-merging (4239, 4241) /remote/www/trunk to /local/www (base */remote/www/trunk:4239).
Empty merge.
Syncing //local/www(/local/www) in /home/franck/cvs/www to 4242.

Then on a checkout of //local/www-userpages which is also a svk cp
of //mirror/www/trunk:
$ svk pull
Syncing svn+ssh://domain.com/www
Auto-merging (4241, 4241) /remote/www/trunk to /local/www-userpages (base /remote/www/trunk:4241).
Empty merge.
Syncing //local/www-userpages(/local/www-userpages) in /home/franck/cvs/www-userpages to 4242.

...edited some files in the www-userpages checkout...

$ svk pull
Syncing svn+ssh://domain.com/www
Auto-merging (4241, 4241) /remote/www/trunk to /local/www-userpages (base /remote/www/trunk:4241).
Empty merge.
Syncing //local/www-userpages(/local/www-userpages) in /home/franck/cvs/www-userpages to 4242.

He then commited a few modifications:
$ svk commit --file logmsg_www
Committed revision 4243.

And pushed them upstream:
$ svk push -l --verbatim
Auto-merging (4166, 4243) /local/www-userpages to /remote/www/trunk (base /remote/www/trunk:4241).
Merging back to mirror source svn+ssh://domain.com/www.
U  modified files 
some other U...
...
New merge ticket:
c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www-userpages:4243
Merge back committed as revision 4062.
Syncing svn+ssh://domain.com/www
Retrieving log information from 4062 to 4062
Committed revision 4244 from revision 4062.

Then later back in the checkout of //local/www:
$ svk pull
Syncing svn+ssh://domain.com/www
Auto-merging (4239, 4244) /remote/www/trunk to /local/www
(base /local/www:4240).
U   ... tons of modified files which match perfectly the pushed files
above ...
New merge ticket: 3a2cc915-d117-0410-b7b0-c6a00d66b608:/trunk:4062
New merge ticket:
c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www-userpages:4243
Committed revision 4245.
Syncing //local/www(/local/www) in /home/franck/cvs/www to 4245.
U   ... same tons of U as in the above merge ...

Notice that the base for the merge seems suspect: /local/www:4240,
shouldn't it base the merge on the *last merge point* from
*//mirror/www/trunk* ??

Then later again, did a pull again (the failed one):
$ svk pull
Syncing svn+ssh://domain.com/www
Retrieving log information from 4063 to 4064
Committed revision 4246 from revision 4063.
Committed revision 4247 from revision 4064.
Auto-merging (4244, 4247) /remote/www/trunk to /local/www (base */remote/www/trunk:4246).
A   common/php/scripts/encodeMailHeader.php
New merge ticket: 3a2cc915-d117-0410-b7b0-c6a00d66b608:/trunk:4064
New merge ticket: fa954469-7010-4da2-b506-9a99099ebb4d:/local/www:4226
Committed revision 4248.
Syncing //local/www(/local/www) in /home/franck/cvs/www to 4248.
A   common/php/scripts/encodeMailHeader.php

At this stage, notice that he synced original revision 4063 to local
revision 4246, but the merge happened only on the changeset introduced
by revision 4064!

He then proceeds to modify some files in the //local/www checkout:
$ svk status
M   buy.php.t
M   buy.tmpl

Then a pull:
$ svk pull
Syncing svn+ssh://domain.com/www
Retrieving log information from 4065 to 4071
Committed revision 4249 from revision 4065.
Committed revision 4250 from revision 4066.
Committed revision 4251 from revision 4067.
Committed revision 4252 from revision 4068.
Committed revision 4253 from revision 4069.
Committed revision 4254 from revision 4070.
Committed revision 4255 from revision 4071.
Auto-merging (4247, 4255) /remote/www/trunk to /local/www (base /remote/www/trunk:4247).
... tons of U and A...
New merge ticket: 3a2cc915-d117-0410-b7b0-c6a00d66b608:/trunk:4071
New merge ticket: 98d098b2-0987-40f7-bafc-e6b25d018214:/local/www/trunk:7877
New merge ticket: da23ae6e-ab85-4ea2-80ec-cbadbd200116:/local/powerstore:4252
Committed revision 4256.
Syncing //local/www(/local/www) in /home/franck/cvs/www to 4256.
... same tons of U and A...

Then he commited his own changes to buy.php.t and buy.tmpl:
$ svk commit --file logmsg_www 
Committed revision 4257.

And tryied to push them (hence the -C):
$ svk push -lC --verbatim 
Auto-merging (4196, 4257) /local/www to /remote/www/trunk (base /remote/www/trunk:4255).
Checking locally against mirror source svn+ssh://domain.com/www.
U   order.tbl
U   buy.php.t
U   buywebcard.php.t
U   buy.tmpl
U   buywebcard.tmpl
New merge ticket: c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www:4257
New merge ticket: c6d29c4a-41b8-4564-80a7-95aacd0c8f7f:/local/www-userpages:4243

Notice that the push wanted to send modifications to files he didn't touch.
After a carefull analysis we found he was pushing 'reverts' of the
changeset 4246/4063 he never got in his local branch.

We fixed the problem by issueing a merge for this specific changeset,
but this still seems highly suspect.

Any idea of the issue ?
Should I file a bug report ?
-- 
Brice Figureau <brice+svk at daysofwonder.com>



More information about the svk-devel mailing list