view tests/test-pull-update.t @ 35012:d80380ba8e7d

changegroup: use any node, not min(), in treemanifest's generatemanifests This is fixing quadratic behavior, which is probably not noticeable in the common case, but if a very large directory gets added here, it can get pretty bad. This was noticed because we had some pushes that spent >25s in changegroup generation calling min() here, according to profiling. The original reasoning for min() being used in 829d369fc5a8 was that, at that point in the series, we were adding almost everything to tmfnodes during the first iteration through the loop , so we needed to avoid sending child directories before parents. Later changes made it so that the child directories were added only when we visited the parent directory (not all of them on the first iteration), so this is no longer necessary - there won't be any child directories in tmfnodes before the parents have been sent. This does mean that the manifests are now exchanged unordered, whereas previously we would essentially do [a, b, b/c, b/c/d, e], we now can send a, b, and e in any order; b/c must still follow b, and b/c/d must still follow b/c. Differential Revision: https://phab.mercurial-scm.org/D1351
author Kyle Lippincott <spectral@google.com>
date Wed, 08 Nov 2017 18:24:43 -0800
parents 23ed47a895d5
children 4441705b7111
line wrap: on
line source

  $ hg init t
  $ cd t
  $ echo 1 > foo
  $ hg ci -Am m
  adding foo

  $ cd ..
  $ hg clone t tt
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd tt
  $ echo 1.1 > foo
  $ hg ci -Am m

  $ cd ../t
  $ echo 1.2 > foo
  $ hg ci -Am m

Should respect config to disable dirty update
  $ hg co -qC 0
  $ echo 2 > foo
  $ hg --config commands.update.check=abort pull -u ../tt
  pulling from ../tt
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  new changesets 107cefe13e42
  abort: uncommitted changes
  [255]
  $ hg --config extensions.strip= strip --no-backup tip
  $ hg co -qC tip

Should not update to the other topological branch:

  $ hg pull -u ../tt
  pulling from ../tt
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  new changesets 107cefe13e42
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  updated to "800c91d5bfc1: m"
  1 other heads for branch "default"

  $ cd ../tt

Should not update to the other branch:

  $ hg pull -u ../t
  pulling from ../t
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  new changesets 800c91d5bfc1
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  updated to "107cefe13e42: m"
  1 other heads for branch "default"

  $ HGMERGE=true hg merge
  merging foo
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -mm

  $ cd ../t

Should work:

  $ hg pull -u ../tt
  pulling from ../tt
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (-1 heads)
  new changesets 483b76ad4309
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Similarity between "hg update" and "hg pull -u" in handling bookmark
====================================================================

Test that updating activates the bookmark, which matches with the
explicit destination of the update.

  $ echo 4 >> foo
  $ hg commit -m "#4"
  $ hg bookmark active-after-pull
  $ cd ../tt

(1) activating by --rev BOOKMARK

  $ hg bookmark -f active-before-pull
  $ hg bookmarks
   * active-before-pull        3:483b76ad4309

  $ hg pull -u -r active-after-pull
  pulling from $TESTTMP/t (glob)
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  adding remote bookmark active-after-pull
  new changesets f815b3da6163
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark active-after-pull)

  $ hg parents -q
  4:f815b3da6163
  $ hg bookmarks
   * active-after-pull         4:f815b3da6163
     active-before-pull        3:483b76ad4309

(discard pulled changes)

  $ hg update -q 483b76ad4309
  $ hg rollback -q

(2) activating by URL#BOOKMARK

  $ hg bookmark -f active-before-pull
  $ hg bookmarks
   * active-before-pull        3:483b76ad4309

  $ hg pull -u $TESTTMP/t#active-after-pull
  pulling from $TESTTMP/t (glob)
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  adding remote bookmark active-after-pull
  new changesets f815b3da6163
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (activating bookmark active-after-pull)

  $ hg parents -q
  4:f815b3da6163
  $ hg bookmarks
   * active-after-pull         4:f815b3da6163
     active-before-pull        3:483b76ad4309

(discard pulled changes)

  $ hg update -q 483b76ad4309
  $ hg rollback -q

Test that updating deactivates current active bookmark, if the
destination of the update is explicitly specified, and it doesn't
match with the name of any existing bookmarks.

  $ cd ../t
  $ hg bookmark -d active-after-pull
  $ hg branch bar -q
  $ hg commit -m "#5 (bar #1)"
  $ cd ../tt

(1) deactivating by --rev REV

  $ hg bookmark -f active-before-pull
  $ hg bookmarks
   * active-before-pull        3:483b76ad4309

  $ hg pull -u -r b5e4babfaaa7
  pulling from $TESTTMP/t (glob)
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 2 changesets with 1 changes to 1 files
  new changesets f815b3da6163:b5e4babfaaa7
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (leaving bookmark active-before-pull)

  $ hg parents -q
  5:b5e4babfaaa7
  $ hg bookmarks
     active-before-pull        3:483b76ad4309

(discard pulled changes)

  $ hg update -q 483b76ad4309
  $ hg rollback -q

(2) deactivating by --branch BRANCH

  $ hg bookmark -f active-before-pull
  $ hg bookmarks
   * active-before-pull        3:483b76ad4309

  $ hg pull -u -b bar
  pulling from $TESTTMP/t (glob)
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 2 changesets with 1 changes to 1 files
  new changesets f815b3da6163:b5e4babfaaa7
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (leaving bookmark active-before-pull)

  $ hg parents -q
  5:b5e4babfaaa7
  $ hg bookmarks
     active-before-pull        3:483b76ad4309

(discard pulled changes)

  $ hg update -q 483b76ad4309
  $ hg rollback -q

(3) deactivating by URL#ANOTHER-BRANCH

  $ hg bookmark -f active-before-pull
  $ hg bookmarks
   * active-before-pull        3:483b76ad4309

  $ hg pull -u $TESTTMP/t#bar
  pulling from $TESTTMP/t (glob)
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 2 changesets with 1 changes to 1 files
  new changesets f815b3da6163:b5e4babfaaa7
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (leaving bookmark active-before-pull)

  $ hg parents -q
  5:b5e4babfaaa7
  $ hg bookmarks
     active-before-pull        3:483b76ad4309

  $ cd ..