Mercurial > hg
view tests/test-pathconflicts-merge.t @ 47678:065e61628980
dirstate-v2: Support appending to the same data file
For now we’re still writing the entire data every time, so appending is not
useful yet. Later we’ll have new nodes pointing to some existing data for
nodes and paths that haven’t changed.
The decision whether to append is pseudo-random in order to make tests exercise
both code paths. This will be replaced by a heuristic based on the amount
of unused existing data.
Differential Revision: https://phab.mercurial-scm.org/D11094
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Tue, 13 Jul 2021 17:18:23 +0200 |
parents | acbfa31cfaf2 |
children |
line wrap: on
line source
Path conflict checking is currently disabled by default because of issue5716. Turn it on for this test. $ cat >> $HGRCPATH << EOF > [experimental] > merge.checkpathconflicts=True > EOF $ hg init repo $ cd repo $ echo base > base $ hg add base $ hg commit -m "base" $ hg bookmark -i base $ mkdir a $ echo 1 > a/b $ hg add a/b $ hg commit -m "file" $ hg bookmark -i file $ echo 2 > a/b $ hg commit -m "file2" $ hg bookmark -i file2 $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved #if symlink $ mkdir a $ ln -s c a/b $ hg add a/b $ hg commit -m "link" created new head #else $ hg import -q --bypass - <<EOF > # HG changeset patch > link > > diff --git a/a/b b/a/b > new file mode 120000 > --- /dev/null > +++ b/a/b > @@ -0,0 +1,1 @@ > +c > \ No newline at end of file > EOF $ hg up -q #endif $ hg bookmark -i link $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkdir -p a/b/c $ echo 2 > a/b/c/d $ hg add a/b/c/d $ hg commit -m "dir" created new head $ hg bookmark -i dir Merge - local file conflicts with remote directory $ hg up file 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (activating bookmark file) $ hg bookmark -i $ hg merge --verbose dir resolving manifests a/b: path conflict - a file or link has the same name as a directory the local file has been renamed to a/b~0ed027b96f31 resolve manually then use 'hg resolve --mark a/b' moving a/b to a/b~0ed027b96f31 getting a/b/c/d 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon [1] $ hg status M a/b/c/d A a/b~0ed027b96f31 R a/b $ hg debugmergestate local (working copy): 0ed027b96f31a2560c8abe689ba59876409a2b8e other (merge rev): 9049d9534d5c5d16264aab02b4b9e20d03faabef file: a/b (state "pu") rename side: l renamed path: a/b~0ed027b96f31 $ hg resolve --all a/b: path conflict must be resolved manually $ hg forget a/b~0ed027b96f31 && rm a/b~0ed027b96f31 $ hg resolve --mark a/b (no more unresolved files) $ hg commit -m "merge file and dir (deleted file)" Merge - local symlink conflicts with remote directory $ hg up link 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (activating bookmark link) $ hg bookmark -i $ hg merge dir a/b: path conflict - a file or link has the same name as a directory the local file has been renamed to a/b~2ea68033e3be resolve manually then use 'hg resolve --mark a/b' 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon [1] $ hg status M a/b/c/d A a/b~2ea68033e3be R a/b $ hg resolve --list P a/b $ hg resolve --all a/b: path conflict must be resolved manually $ hg mv a/b~2ea68033e3be a/b.old $ hg resolve --mark a/b (no more unresolved files) $ hg debugmergestate local (working copy): 2ea68033e3be03a560471c1fc9e5704fbedb9b4b other (merge rev): 9049d9534d5c5d16264aab02b4b9e20d03faabef file: a/b (state "pr") rename side: l renamed path: a/b~2ea68033e3be $ hg resolve --list R a/b $ hg commit -m "merge link and dir (renamed link)" Merge - local directory conflicts with remote file or link $ hg up dir 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (activating bookmark dir) $ hg bookmark -i $ hg merge file a/b: path conflict - a file or link has the same name as a directory the remote file has been renamed to a/b~0ed027b96f31 resolve manually then use 'hg resolve --mark a/b' 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon [1] $ hg status A a/b~0ed027b96f31 $ hg resolve --all a/b: path conflict must be resolved manually $ hg mv a/b~0ed027b96f31 a/b/old-b $ hg resolve --mark a/b (no more unresolved files) $ hg commit -m "merge dir and file (move file into dir)" created new head $ hg merge file2 merging a/b/old-b and a/b to a/b/old-b 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ cat a/b/old-b 2 $ hg commit -m "merge file2 (copytrace tracked rename)" $ hg merge link a/b: path conflict - a file or link has the same name as a directory the remote file has been renamed to a/b~2ea68033e3be resolve manually then use 'hg resolve --mark a/b' 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon [1] $ hg mv a/b~2ea68033e3be a/b.old #if symlink $ readlink.py a/b.old a/b.old -> c #else $ cat a/b.old c (no-eol) #endif $ hg resolve --mark a/b (no more unresolved files) $ hg commit -m "merge link (rename link)"