[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [BUG] Borked 1.5.x CHANGES merging

From: David Glasser <glasser_at_davidglasser.net>
Date: Fri, 11 Apr 2008 23:22:44 -0700

I say this because with a clean 1.5.x checkout at r30560 and a clean
trunk svn from the same revision, I just get:

glasser_at_filthy-assistant:~/Projects/Subversion/svn-1.5.x$ svn merge
--accept theirs-full http://svn.collab.net/repos/svn/trunk/CHANGES
CHANGES
--- Merging r1283 through r30560 into 'CHANGES':
 G CHANGES

... on the other hand, it appears to do nothing, not even change mergeinfo.

--dave

On Fri, Apr 11, 2008 at 11:15 PM, David Glasser
<glasser_at_davidglasser.net> wrote:
> Can you add svnversion of your wc before you run "svn merge", and the
> revision/tag of the svn you're running?
>
> --dave
>
>
>
> On Fri, Apr 11, 2008 at 8:55 PM, Eric Gillespie <epg_at_pretzelnet.org> wrote:
> > As I've merged changes to the 1.5.x branch I've noticed CHANGES's
> > mergeinfo is always changing. I never understood this, but
> > apparently it's from Hyrum (r30329) and I (r30003) (and maybe
> > others) merging just CHANGES. I tried again tonight, and this is
> > my story.
> >
> > Start with no tmp files, of course:
> >
> > 0 1.5.x% ls -lt .svn/tmp/*(.) | sed q
> > zsh: no matches found: .svn/tmp/*(.)
> >
> > Let's run my merge, interrupting during the last section:
> >
> > 0 1.5.x% strace -o svnmergelog.interrupt =svn merge --accept theirs-full http://svn.collab.net/repos/svn/trunk/CHANGES CHANGES
> > --- Merging r29081 through r29084 into 'CHANGES':
> > U CHANGES
> > --- Merging r29885 through r29894 into 'CHANGES':
> > G CHANGES
> > --- Merging r29901 through r29913 into 'CHANGES':
> > G CHANGES
> > --- Merging r29931 through r29938 into 'CHANGES':
> > G CHANGES
> > svn: Caught signal
> >
> > Mmmm, tmp files:
> >
> > 0 1.5.x% ls -lt .svn/tmp/*(.) | wc -l
> > 242
> > 0 1.5.x% ls -lt .svn/tmp/*(.) | sed q
> > -rw-r----- 1 epg epg 138451 Apr 11 20:10 .svn/tmp/tempfile.242.tmp
> >
> > What the heck's in them?
> >
> > 0 1.5.x% sed 10q .svn/tmp/tempfile.242.tmp
> > Version 1.5.0
> > (?? ??? 2008, from /branches/1.5.x)
> > http://svn.collab.net/repos/svn/tags/1.5.0
> >
> > User-visible changes:
> > - Major new features:
> > * Merge Tracking [foundational] (issue #820)
> > * Sparse checkouts (see new '--depth' option) (issue #695)
> > * Interactive conflict resolution (r25670 et al)
> > * svn:externals handles relative URLs (issue #1336) and peg URLs
> >
> > Uh-oh; are they all copies of CHANGES?
> >
> > 0 1.5.x% for i in .svn/tmp/*(.); do grep -qs '^Version 1\.4' $i || echo $i; done
> >
> > Uh-huh.
> >
> > 0 1.5.x% time strace -o svnmergelog =svn merge --accept theirs-full http://svn.collab.net/repos/svn/trunk/CHANGES CHANGES
> > --- Merging r29081 through r29084 into 'CHANGES':
> > U CHANGES
> > --- Merging r29885 through r29894 into 'CHANGES':
> > G CHANGES
> > --- Merging r29901 through r29913 into 'CHANGES':
> > G CHANGES
> > --- Merging r29931 through r29938 into 'CHANGES':
> > G CHANGES
> > strace -o svnmergelog =svn merge --accept theirs-full CHANGES 13.42s user 28.66s system 28% cpu 2:28.68 total
> >
> > I know this merge is much more complicated, but this does make
> > for an interesting comparison:
> >
> > 0 1.5.x% time svn diff -r 29080:29938 http://svn.collab.net/repos/svn/trunk/CHANGES > /dev/null
> > svn diff -r 29080:29938 http://svn.collab.net/repos/svn/trunk/CHANGES > 0.02s user 0.00s system 2% cpu 0.848 total
> >
> > Oh, and about those tmp files? Dig it:
> >
> > 0 1.5.x% nocorrect grep 'svn/tmp/tempfile.*EEXIST' svnmergelog | tail -2
> > open(".svn/tmp/tempfile.1022.tmp", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = -1 EEXIST (File exists)
> > open(".svn/tmp/tempfile.1023.tmp", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = -1 EEXIST (File exists)
> > 0 1.5.x% nocorrect grep -c 'svn/tmp/tempfile.*EEXIST' svnmergelog
> > 338031
> >
> > Yikes, eh? We're not done yet:
> >
> > 0 1.5.x% nocorrect grep 'unlink.*svn/tmp/tempfile' svnmergelog | tail -2
> > unlink(".svn/tmp/tempfile.1021.tmp.tmp") = -1 ENOENT (No such file or directory)
> > unlink(".svn/tmp/tempfile.1023.tmp.tmp") = -1 ENOENT (No such file or directory)
> >
> > Where'd that extra .tmp suffix come from?
> >
> > Last but not least, note that the result of my merge isn't even correct:
> >
> > 1 1.5.x% svn di | diffstat
> > CHANGES | 97 +++++++++++++++++++++++++++++++++-------------------------------
> > 1 file changed, 51 insertions(+), 46 deletions(-)
> > 0 1.5.x% svn diff http://svn.collab.net/repos/svn/{trunk,branches/1.5.x}/CHANGES
> >
> > Property changes on: CHANGES
> > ___________________________________________________________________
> > Added: svn:mergeinfo
> > Merged /branches/1.5.x-r30215/CHANGES:r30236,30238,30245,30288
> > Merged /branches/svn-mergeinfo-enhancements/CHANGES:r30122
> > Merged /trunk/CHANGES:r29085-29089,29091,29094-29107,29111,29114,29117,29126-29127,29129-29133,29135-29150,29153-29164,29166-29170,29174,29176-29186,29188-29189,29193-29194,29198-29206,29208-29251,29254-29256,29261,29267-29273,29277,29280-29281,29284,29287-29303,29305-29307,29309-29343,29345-29348,29358-29379,29381-29392,29397,29399,29401,29409,29412,29414-29415,29417-29423,29425-29426,29429,29433-29434,29436-29447,29449-29466,29468-29478,29482,29484,29486-29487,29489,29491,29493,29496,29498,29508,29527-29528,29531,29533,29539-29540,29542,29544,29546,29551,29553,29556,29559,29565,29567-29569,29571-29578,29581,29583,29591,29594,29600,29603,29607,29611,29613-29614,29619,29623,29625-29626,29630-29631,29633-29634,29642,29645,29648,29650,29656,29659-29660,29663-29666,29671-29672,29677-29680,29692,29738-29739,29741-29744,29746,29751,29763,29767,29769-29770,29784,29786-29787,29797,29801,29815,29821,29824,29828,29835,29852,29854-29855,29857-29859,29868-29869,29876,29878,29883-29884,29895,29898,29900,29914,29
920,29922,29925,29930,29939-29940,29942,29950,29958,29962,29965,29967-29968,29980,29986,29994-29997,30004,30009,30020,30030,30050,30053-30054,30059,30061-30062,30067,30070,30074,30086,30098,30101,30112,30117,30124,30129-30130,30137,30145,30151,30159,30161-30162,30180-30181,30185,30210,30233,30237,30239,30246,30249,30256,30278-30279,30281,30285,30297,30299,30304,30319-30321,30328,30335-30336,30340,30342,30347,30362,30368,30373,30375,30378,30380,30392,30402,30407-30409,30412,30426,30428,30431,30439-30444,30448-30449,30453,30455,30460,30462-30464,30466-30467,30469-30474,30480,30482,30487,30489,30510,30516-30518,30520-30521,30523,30546,30548,30551-30552
> >
> > The text of CHANGES on branch and trunk are identical before my
> > merge, yet not afterwards. WTF?
> >
> > So, bugs:
> >
> > - We have the world's dumbest tmpfile algorithm. Why the heck
> > are we not using mkstemp?
> > - Even though we catch SIGINT for cleanup, we don't clean these
> > tmp files when merge is interrupted.
> > - We sometimes append extra .tmp to a tmpfile before trying to
> > remove it, thus failing; this is probably the same as previous.
> > - The merge takes *FOREVER*.
> > - Probabably because it appears to be fetching at lesat dozens of
> > copies of the CHANGES file, I guess at various different revisions.
> > - The final merge result isn't even correct.
> >
> > As a final insult, Perforce handles this case (cherrypick all
> > kinds of revisions into your release branch and later sync one
> > file fully with the main line) beautifully. Well, OK, the UI is
> > awful, so maybe not "beautifully", but it works.
> >
> > Find the strace log at http://pretzelnet.org/tmp/svnmergelog.bz2
> > (6 MB, 78 MB uncompressed).
> >
> > --
> > Eric Gillespie <*> epg_at_pretzelnet.org
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
> > For additional commands, e-mail: dev-help_at_subversion.tigris.org
> >
> >
>
>
>
> --
> David Glasser | glasser@davidglasser.net | http://www.davidglasser.net/
>

-- 
David Glasser | glasser@davidglasser.net | http://www.davidglasser.net/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: dev-help_at_subversion.tigris.org
Received on 2008-04-12 08:22:55 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.