# HG changeset patch # User Gábor Stefanik # Date 1472155346 -7200 # Node ID a2804ddcf9ae5fbbc111f9c2654cfaa4faa042a9 # Parent ba22059602e337596929d9d8b505fb678b60c8a7 update: enable copy tracing for backwards and non-linear updates As a followup to the issue4028 series, this fixes a variant of the issue that can occur when updating with uncommited local changes. The duplicated .hgsub warning is coming from wc.dirty(). We would previously skip this call because it's only relevant when we're going to perform copy tracing, which we didn't do before. The change to the update summary line is because we now treat the rename as a proper rename (which counts as a change), rather than an add+delete pair (which counts as a change and a delete). diff -r ba22059602e3 -r a2804ddcf9ae mercurial/merge.py --- a/mercurial/merge.py Mon Sep 26 10:47:37 2016 +0200 +++ b/mercurial/merge.py Thu Aug 25 22:02:26 2016 +0200 @@ -1555,15 +1555,16 @@ pas = [p1] # deprecated config: merge.followcopies - followcopies = False + followcopies = repo.ui.configbool('merge', 'followcopies', True) if overwrite: pas = [wc] + followcopies = False elif pas == [p2]: # backwards - pas = [wc.p1()] - elif not branchmerge and not wc.dirty(missing=True): - pass - elif pas[0] and repo.ui.configbool('merge', 'followcopies', True): - followcopies = True + pas = [p1] + elif not pas[0]: + followcopies = False + if not branchmerge and not wc.dirty(missing=True): + followcopies = False ### calculate phase actionbyfile, diverge, renamedelete = calculateupdates( diff -r ba22059602e3 -r a2804ddcf9ae tests/test-merge-local.t --- a/tests/test-merge-local.t Mon Sep 26 10:47:37 2016 +0200 +++ b/tests/test-merge-local.t Thu Aug 25 22:02:26 2016 +0200 @@ -66,7 +66,7 @@ merging zzz1_merge_ok merging zzz2_merge_bad warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark') - 2 files updated, 1 files merged, 3 files removed, 1 files unresolved + 2 files updated, 1 files merged, 2 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] @@ -104,7 +104,7 @@ merging zzz1_merge_ok merging zzz2_merge_bad warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark') - 2 files updated, 1 files merged, 3 files removed, 1 files unresolved + 2 files updated, 1 files merged, 2 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] diff -r ba22059602e3 -r a2804ddcf9ae tests/test-mq-subrepo.t --- a/tests/test-mq-subrepo.t Mon Sep 26 10:47:37 2016 +0200 +++ b/tests/test-mq-subrepo.t Thu Aug 25 22:02:26 2016 +0200 @@ -304,6 +304,7 @@ record this change to '.hgsub'? [Ynesfdaq?] y warning: subrepo spec file '.hgsub' not found + warning: subrepo spec file '.hgsub' not found abort: uncommitted changes in subrepository 'sub' [255] % update substate when adding .hgsub w/clean updated subrepo @@ -319,6 +320,7 @@ record this change to '.hgsub'? [Ynesfdaq?] y warning: subrepo spec file '.hgsub' not found + warning: subrepo spec file '.hgsub' not found path sub source sub revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31 diff -r ba22059602e3 -r a2804ddcf9ae tests/test-up-local-change.t --- a/tests/test-up-local-change.t Mon Sep 26 10:47:37 2016 +0200 +++ b/tests/test-up-local-change.t Thu Aug 25 22:02:26 2016 +0200 @@ -67,6 +67,10 @@ summary: 2 $ hg --debug up 0 + starting 4 threads for background file closing (?) + searching for copies back to rev 0 + unmatched files in local (from topological common ancestor): + b resolving manifests branchmerge: False, force: False, partial: False ancestor: 1e71731e6fbb, local: 1e71731e6fbb+, remote: c19d34741b0a @@ -222,4 +226,20 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg st +test updating backwards through a rename + + $ hg mv a b + $ hg ci -m b + $ echo b > b + $ hg up -q 0 + $ hg st + M a + $ hg diff --nodates + diff -r cb9a9f314b8b a + --- a/a + +++ b/a + @@ -1,1 +1,1 @@ + -a + +b + $ cd ..