Issue1994

Title eb243551cbd8 broke rebase copy handling
Priority urgent Status chatting
Superseder Nosy List abuehl, astratto, djc, mg, mpm, pmezard, tonfa
Assigned To Topics merge, regression

Created on 2010-01-24.11:39:59 by pmezard, last changed 2010-02-14.11:33:44 by tonfa.

Files
File name Uploaded Type Edit Remove
test-rebase-copies.diff pmezard, 2010-01-24.11:39:59 text/x-diff
Messages
msg11696 (view) Author: tonfa Date: 2010-02-14.11:33:44
So what's the status of this now?
msg11550 (view) Author: tonfa Date: 2010-01-31.16:41:00
changeset:   10294:d1cd09bb4d18
branch:      stable
parent:      10284:b08ffd27dfc8
user:        Matt Mackall <mpm@selenic.com>
date:        Thu Jan 28 22:45:46 2010 -0600
summary:     copies: fix issue1994

In main, but it breaks lots of tests.
msg11539 (view) Author: mpm Date: 2010-01-29.19:03:08
This is definitely specific to rebase and how it fiddles with ancestry. The
patch that fixes your rebase case breaks a bunch of tests in the test suite.

Also, in your test case, this should -not- appear:

  local changed dd/a which remote deleted
 use (c)hanged version or (d)elete? c

..because remote didn't delete the file, it renamed it. The new code detects
the rename(!), but detects it as being a divergent rename (both sides
renaming it from its original name) because it's not following the "virtual
history" that rebase tries to impose on the merge.
msg11509 (view) Author: pmezard Date: 2010-01-25.08:58:16
@mpm: it works with your patch. The test output is slightly modified into:
"""
ERROR: /Users/pmezard/dev/mercurial/hg/hg-pmezard/tests/test-rebase-copies
output changed
--- /Users/pmezard/dev/mercurial/hg/hg-pmezard/tests/test-rebase-copies.out 
+++ /Users/pmezard/dev/mercurial/hg/hg-pmezard/tests/test-rebase-copies.err 
@@ -4,6 +4,7 @@
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
 created new head
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+merging dd/a
  local changed dd/a which remote deleted
 use (c)hanged version or (d)elete? c
 adding branch
!
Failed test-rebase-copies: output changed
# Ran 1 tests, 0 skipped, 1 failed.
"""
but that's probably better anyway.
msg11507 (view) Author: mpm Date: 2010-01-25.07:15:24
Try this:

diff -r 08a0f04b56bd mercurial/copies.py
--- a/mercurial/copies.py	Mon Jan 25 00:05:27 2010 -0600
+++ b/mercurial/copies.py	Mon Jan 25 01:14:41 2010 -0600
@@ -154,7 +154,7 @@
                 break # no merge needed, quit early
             c2 = ctx(of, m2[of])
             cr = related(oc, c2, ca.rev())
-            if of == f or of == c2.path(): # non-divergent
+            if cr and (cr.path() == f or cr.path == c2.path()): # non-divergent
                 copy[f] = of
                 of = None
                 break
msg11504 (view) Author: mpm Date: 2010-01-25.06:11:12
tonfa: Yes, it takes an hg st for one user from 10min to 3sec, while your
optimization didn't help.
msg11502 (view) Author: tonfa Date: 2010-01-24.12:10:03
By the way, is the improvement from eb243551cbd8 justified on default (I 
pushed a speed up, just not on stable):

changeset:   9991:a7d11deb47dd
user:        Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date:        Thu Dec 03 01:01:49 2009 +0100
summary:     revlog: add fast path to ancestor
msg11501 (view) Author: pmezard Date: 2010-01-24.11:39:59
To reproduce, run the attached test script before and after:


changeset:   10262:eb243551cbd8
branch:      stable
user:        Matt Mackall <mpm@selenic.com>
date:        Tue Jan 19 22:20:05 2010 -0600
files:       mercurial/context.py mercurial/copies.py
description:
copies: speed up copy detection

On some large repos, copy detection could spend > 10min using
fctx.ancestor() to determine if file revisions were actually related.
Because ancestor must traverse history to the root to determine the
GCA, it was doing a lot more work than necessary. With this
replacement, same status -r a:b takes ~3 seconds.
History
Date User Action Args
2010-02-14 11:33:44tonfasetnosy: mpm, tonfa, pmezard, mg, djc, abuehl, astratto
messages: + msg11696
2010-01-31 16:41:00tonfasetnosy: mpm, tonfa, pmezard, mg, djc, abuehl, astratto
messages: + msg11550
2010-01-29 19:03:08mpmsetnosy: + astratto
messages: + msg11539
2010-01-26 23:40:36mpmsetnosy: mpm, tonfa, pmezard, mg, djc, abuehl
title: eb243551cbd8 broke merge copy handling -> eb243551cbd8 broke rebase copy handling
2010-01-25 08:58:16pmezardsetnosy: mpm, tonfa, pmezard, mg, djc, abuehl
messages: + msg11509
2010-01-25 07:15:24mpmsetnosy: mpm, tonfa, pmezard, mg, djc, abuehl
messages: + msg11507
2010-01-25 06:11:12mpmsetnosy: mpm, tonfa, pmezard, mg, djc, abuehl
messages: + msg11504
2010-01-24 12:13:04abuehlsetnosy: + abuehl
2010-01-24 12:11:29mgsetnosy: + mg
2010-01-24 12:10:03tonfasetstatus: unread -> chatting
nosy: + tonfa
messages: + msg11502
2010-01-24 11:46:29djcsetnosy: + djc
2010-01-24 11:39:59pmezardcreate