view tests/test-rename-after-merge.t @ 40501:30a7d3b6b281

narrow: rework logic to check whether we need to widen and narrow This patch reworks logic which calculates whether we need to extend or narrow our working copy or not. We filter the addincludes, removeincludes, addexcludes and removeexcludes passed from user to the actual added and removed includes and excludes. What that means is a user can pass an already included path as addincludes, a path which is not included as removeincludes etc. In such situations the old logic use to think we need to do some work, whereas we don't need to do that work. In old logic, even if we don't have anything new to include but it believes we need to call widen, this adds some good amount of work on large repository. A widen calls involves computing incomming csets, calling the narrow_widen() which in non-ellipses cases goes through all the set of csets which are available which can take ~2-3 mins on large repos. Those 2-3 minutes are spend on doing nothing which a client can prevent by checking is there really anything which needs to be included. The tests changes shows that we don't go to the server anymore in such cases which is nice. Differential Revision: https://phab.mercurial-scm.org/D5183
author Pulkit Goyal <pulkit@yandex-team.ru>
date Tue, 23 Oct 2018 16:24:04 +0300
parents d0abd7949ea3
children 7c4b98a4e536
line wrap: on
line source

Issue746: renaming files brought by the second parent of a merge was
broken.

Create source repository:

  $ hg init t
  $ cd t
  $ echo a > a
  $ hg ci -Am a
  adding a
  $ cd ..

Fork source repository:

  $ hg clone t t2
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd t2
  $ echo b > b
  $ hg ci -Am b
  adding b

Update source repository:

  $ cd ../t
  $ echo a >> a
  $ hg ci -m a2

Merge repositories:

  $ hg pull ../t2
  pulling from ../t2
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  new changesets d2ae7f538514
  1 local changesets published
  (run 'hg heads' to see heads, 'hg merge' to merge)

  $ hg merge
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)

  $ hg st
  M b

Rename b as c:

  $ hg mv b c
  $ hg st
  A c
  R b

Rename back c as b:

  $ hg mv c b
  $ hg st
  M b

  $ cd ..

Issue 1476: renaming a first parent file into another first parent
file while none of them belong to the second parent was broken

  $ hg init repo1476
  $ cd repo1476
  $ echo a > a
  $ hg ci -Am adda
  adding a
  $ echo b1 > b1
  $ echo b2 > b2
  $ hg ci -Am changea
  adding b1
  adding b2
  $ hg up -C 0
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ echo c1 > c1
  $ echo c2 > c2
  $ hg ci -Am addcandd
  adding c1
  adding c2
  created new head

Merge heads:

  $ hg merge
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)

  $ hg mv -Af c1 c2

Commit issue 1476:

  $ hg ci -m merge

  $ hg log -r tip -C -v | grep copies
  copies:      c2 (c1)

  $ hg rollback
  repository tip rolled back to revision 2 (undo commit)
  working directory now based on revisions 2 and 1

  $ hg up -C .
  2 files updated, 0 files merged, 2 files removed, 0 files unresolved

Merge heads again:

  $ hg merge
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)

  $ hg mv -Af b1 b2

Commit issue 1476 with a rename on the other side:

  $ hg ci -m merge

  $ hg log -r tip -C -v | grep copies
  copies:      b2 (b1)

  $ cd ..