Mercurial > hg
view tests/test-clone-update-order.t @ 39473:b6db2e80a9ce
ancestors: actually iterate over ancestors in topological order (issue5979)
This code previously used a dequeue logic, the first ancestors seen were the
first ancestors to be emitted. In branching/merging situations, it can result
in ancestors being yielded before their descendants, breaking the object
contract.
We got affected by this issue while working on the copy tracing code. At about
the same time, Axel Hecht <axel@mozilla.com> reported the issue and provided
the test case used in this changeset. Thanks Axel.
Running `hg perfancestors` does not show a significant difference between the
old and the new version.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 06 Sep 2018 17:00:28 -0400 |
parents | eb586ed5d8ce |
children | 8d72e29ad1e0 |
line wrap: on
line source
$ hg init $ echo foo > bar $ hg commit -Am default adding bar $ hg up -r null 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg branch mine marked working directory as branch mine (branches are permanent and global, did you want a bookmark?) $ echo hello > world $ hg commit -Am hello adding world $ hg up -r null 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg branch other marked working directory as branch other $ echo good > bye $ hg commit -Am other adding bye $ hg up -r mine 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg clone -U -u . .#other ../b -r 0 -r 1 -r 2 -b other abort: cannot specify both --noupdate and --updaterev [255] $ hg clone -U .#other ../b -r 0 -r 1 -r 2 -b other adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 $ rm -rf ../b $ hg clone -u . .#other ../b -r 0 -r 1 -r 2 -b other adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 updating to branch mine 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b $ hg clone -u 0 .#other ../b -r 0 -r 1 -r 2 -b other adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b $ hg clone -u 1 .#other ../b -r 0 -r 1 -r 2 -b other adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 updating to branch mine 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b $ hg clone -u 2 .#other ../b -r 0 -r 1 -r 2 -b other adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 updating to branch other 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b Test -r mine ... mine is ignored: $ hg clone -u 2 .#other ../b -r mine -r 0 -r 1 -r 2 -b other adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 updating to branch other 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b $ hg clone .#other ../b -b default -b mine adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files (+2 heads) new changesets 8c68ee086fd0:fcc393352796 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b $ hg clone .#other ../b adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets fcc393352796 updating to branch other 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b $ hg clone -U . ../c -r 1 -r 2 > /dev/null $ hg clone ../c ../b updating to branch other 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf ../b ../c