diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -226,6 +226,8 @@ def manifestmerge(repo, p1, p2, pa, over act("prompt keep", "a", f) else: act("other deleted", "r", f) + elif overwrite and n[20:] == "a": # do not erase the working copy + act("remote deleted", "f", f) else: # file is created on branch or in working directory if (overwrite and n[20:] != "u") or (backwards and not n[20:]): diff --git a/tests/test-keyword.out b/tests/test-keyword.out --- a/tests/test-keyword.out +++ b/tests/test-keyword.out @@ -253,7 +253,7 @@ rolling back last transaction % status A c % update -C -0 files updated, 0 files merged, 1 files removed, 0 files unresolved +0 files updated, 0 files merged, 0 files removed, 0 files unresolved % custom keyword expansion % try with kwdemo [extensions] @@ -280,12 +280,14 @@ a abort: empty commit message % status M a +? c ? log % commit a overwriting a expanding keywords committed changeset 2:bb948857c743469b22bbf51f7ec8112279ca5d83 % status +? c % verify checking changesets checking manifests @@ -313,10 +315,12 @@ 2: $Xinfo$ % remove committed changeset 3:d14c712653769de926994cf7fbb06c8fbd68f012 % status +? c % rollback rolling back last transaction % status R a +? c % revert a % cat a expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ diff --git a/tests/test-mq.out b/tests/test-mq.out --- a/tests/test-mq.out +++ b/tests/test-mq.out @@ -242,7 +242,7 @@ added 1 changesets with 1 changes to 1 f 1 files updated, 0 files merged, 0 files removed, 0 files unresolved abort: local changes found % --force strip with local changes -0 files updated, 0 files merged, 2 files removed, 0 files unresolved +0 files updated, 0 files merged, 1 files removed, 0 files unresolved saving bundle to % cd b; hg qrefresh adding a diff --git a/tests/test-mv-cp-st-diff b/tests/test-mv-cp-st-diff --- a/tests/test-mv-cp-st-diff +++ b/tests/test-mv-cp-st-diff @@ -23,6 +23,7 @@ add a m2 add x/y y1 hg add x/y hg ci -m2 +cd .. show() { @@ -41,6 +42,7 @@ count=0 # $4 - test description tb() { + hg clone t t2 ; cd t2 hg co -q -C 0 add a $count @@ -62,6 +64,8 @@ tb() show "--rev 2 --rev ." "branch to parent" show "--rev . --rev 2" "parent to branch" echo + cd .. + rm -rf t2 } diff --git a/tests/test-mv-cp-st-diff.out b/tests/test-mv-cp-st-diff.out --- a/tests/test-mv-cp-st-diff.out +++ b/tests/test-mv-cp-st-diff.out @@ -1,3 +1,5 @@ +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** rename in working dir ** ** add a a1 / add a a2 / hg mv a b @@ -118,6 +120,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** copy in working dir ** ** add a a1 / add a a2 / hg cp a b @@ -255,6 +259,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** single rename ** ** hg mv a b / add b b1 / add b w @@ -390,6 +396,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** single copy ** ** hg cp a b / add b b1 / add a w @@ -560,6 +568,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** rename chain ** ** hg mv a b / hg mv b c / hg mv c d @@ -684,6 +694,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** copy chain ** ** hg cp a b / hg cp b c / hg cp c d @@ -925,6 +937,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head ** circular rename ** ** add a a1 / hg mv a b / hg mv b a @@ -1047,6 +1061,8 @@ new file mode 100644 +y1 +updating working directory +3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head moving x/x to y/x ** directory move ** diff --git a/tests/test-remove.out b/tests/test-remove.out --- a/tests/test-remove.out +++ b/tests/test-remove.out @@ -7,17 +7,23 @@ not removing bar: file has been marked f A bar ./bar ./foo -0 files updated, 0 files merged, 1 files removed, 0 files unresolved +0 files updated, 0 files merged, 0 files removed, 0 files unresolved % 01 state clean, options none R foo +? bar +./bar 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % 02 state modified, options none not removing foo: file is modified (use -f to force removal) M foo +? bar +./bar ./foo 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % 03 state missing, options none R foo +? bar +./bar 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % 10 state added, options -f ? bar @@ -38,18 +44,24 @@ not removing bar: file still exists (use A bar ./bar ./foo -0 files updated, 0 files merged, 1 files removed, 0 files unresolved +0 files updated, 0 files merged, 0 files removed, 0 files unresolved % 21 state clean, options -A not removing foo: file still exists (use -f to force removal) +? bar +./bar ./foo 0 files updated, 0 files merged, 0 files removed, 0 files unresolved % 22 state modified, options -A not removing foo: file still exists (use -f to force removal) M foo +? bar +./bar ./foo 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % 23 state missing, options -A R foo +? bar +./bar 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % 30 state added, options -Af ? bar diff --git a/tests/test-rename b/tests/test-rename --- a/tests/test-rename +++ b/tests/test-rename @@ -14,65 +14,77 @@ echo "# rename a single file" hg rename d1/d11/a1 d2/c hg status -C hg update -C +rm d2/c echo "# rename --after a single file" mv d1/d11/a1 d2/c hg rename --after d1/d11/a1 d2/c hg status -C hg update -C +rm d2/c echo "# move a single file to an existing directory" hg rename d1/d11/a1 d2 hg status -C hg update -C +rm d2/a1 echo "# move --after a single file to an existing directory" mv d1/d11/a1 d2 hg rename --after d1/d11/a1 d2 hg status -C hg update -C +rm d2/a1 echo "# rename a file using a relative path" (cd d1/d11; hg rename ../../d2/b e) hg status -C hg update -C +rm d1/d11/e echo "# rename --after a file using a relative path" (cd d1/d11; mv ../../d2/b e; hg rename --after ../../d2/b e) hg status -C hg update -C +rm d1/d11/e echo "# rename directory d1 as d3" hg rename d1/ d3 hg status -C hg update -C +rm -rf d3 echo "# rename --after directory d1 as d3" mv d1 d3 hg rename --after d1 d3 hg status -C hg update -C +rm -rf d3 echo "# move a directory using a relative path" (cd d2; mkdir d3; hg rename ../d1/d11 d3) hg status -C hg update -C +rm -rf d2/d3 echo "# move --after a directory using a relative path" (cd d2; mkdir d3; mv ../d1/d11 d3; hg rename --after ../d1/d11 d3) hg status -C hg update -C +rm -rf d2/d3 echo "# move directory d1/d11 to an existing directory d2 (removes empty d1)" hg rename d1/d11/ d2 hg status -C hg update -C +rm -rf d2/d11 echo "# move directories d1 and d2 to a new directory d3" mkdir d3 hg rename d1 d2 d3 hg status -C hg update -C +rm -rf d3 echo "# move --after directories d1 and d2 to a new directory d3" mkdir d3 @@ -80,6 +92,7 @@ mv d1 d2 d3 hg rename --after d1 d2 d3 hg status -C hg update -C +rm -rf d3 echo "# move everything under directory d1 to existing directory d2, do not" echo "# overwrite existing files (d2/b)" @@ -87,6 +100,7 @@ hg rename d1/* d2 hg status -C diff d1/b d2/b hg update -C +rm d2/a d2/ba d2/d11/a1 echo "# attempt to move one file into a non-existent directory" hg rename d1/a dx/ @@ -102,6 +116,7 @@ mkdir d2/d21 hg rename 'glob:d1/**' d2/d21 hg status -C hg update -C +rm -rf d2/d21 echo "# move --after some files under d1 to d2/d21 (glob)" mkdir d2/d21 @@ -109,12 +124,14 @@ mv d1/a d1/d11/a1 d2/d21 hg rename --after 'glob:d1/**' d2/d21 hg status -C hg update -C +rm -rf d2/d21 echo "# move every file under d1 starting with an 'a' to d2/d21 (regexp)" mkdir d2/d21 hg rename 're:d1/([^a][^/]*/)*a.*' d2/d21 hg status -C hg update -C +rm -rf d2/d21 echo "# attempt to overwrite an existing file" echo "ca" > d1/ca @@ -127,24 +144,28 @@ echo "ca" > d1/ca hg rename --force d1/ba d1/ca hg status -C hg update -C +rm d1/ca echo "# replace a symlink with a file" ln -s ba d1/ca hg rename --force d1/ba d1/ca hg status -C hg update -C +rm d1/ca echo "# do not copy more than one source file to the same destination file" mkdir d3 hg rename d1/* d2/* d3 hg status -C hg update -C +rm -rf d3 echo "# move a whole subtree with \"hg rename .\"" mkdir d3 (cd d1; hg rename . ../d3) hg status -C hg update -C +rm -rf d3 echo "# move a whole subtree with \"hg rename --after .\"" mkdir d3 @@ -152,23 +173,27 @@ mv d1/* d3 (cd d1; hg rename --after . ../d3) hg status -C hg update -C +rm -rf d3 echo "# move the parent tree with \"hg rename ..\"" (cd d1/d11; hg rename .. ../../d3) hg status -C hg update -C +rm -rf d3 echo "# skip removed files" hg remove d1/b hg rename d1 d3 hg status -C hg update -C +rm -rf d3 echo "# transitive rename" hg rename d1/b d1/bb hg rename d1/bb d1/bc hg status -C hg update -C +rm d1/bc echo "# transitive rename --after" hg rename d1/b d1/bb @@ -176,6 +201,7 @@ mv d1/bb d1/bc hg rename --after d1/bb d1/bc hg status -C hg update -C +rm d1/bc echo "# idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)" hg rename d1/b d1/bb diff --git a/tests/test-rename.out b/tests/test-rename.out --- a/tests/test-rename.out +++ b/tests/test-rename.out @@ -2,32 +2,32 @@ A d2/c d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # rename --after a single file A d2/c d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # move a single file to an existing directory A d2/a1 d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # move --after a single file to an existing directory A d2/a1 d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # rename a file using a relative path A d1/d11/e d2/b R d2/b -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # rename --after a file using a relative path A d1/d11/e d2/b R d2/b -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # rename directory d1 as d3 moving d1/a to d3/a moving d1/b to d3/b @@ -45,7 +45,7 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # rename --after directory d1 as d3 moving d1/a to d3/a moving d1/b to d3/b @@ -63,25 +63,25 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # move a directory using a relative path moving ../d1/d11/a1 to d3/d11/a1 A d2/d3/d11/a1 d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # move --after a directory using a relative path moving ../d1/d11/a1 to d3/d11/a1 A d2/d3/d11/a1 d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # move directory d1/d11 to an existing directory d2 (removes empty d1) moving d1/d11/a1 to d2/d11/a1 A d2/d11/a1 d1/d11/a1 R d1/d11/a1 -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # move directories d1 and d2 to a new directory d3 moving d1/a to d3/d1/a moving d1/b to d3/d1/b @@ -103,7 +103,7 @@ R d1/b R d1/ba R d1/d11/a1 R d2/b -5 files updated, 0 files merged, 5 files removed, 0 files unresolved +5 files updated, 0 files merged, 0 files removed, 0 files unresolved # move --after directories d1 and d2 to a new directory d3 moving d1/a to d3/d1/a moving d1/b to d3/d1/b @@ -125,7 +125,7 @@ R d1/b R d1/ba R d1/d11/a1 R d2/b -5 files updated, 0 files merged, 5 files removed, 0 files unresolved +5 files updated, 0 files merged, 0 files removed, 0 files unresolved # move everything under directory d1 to existing directory d2, do not # overwrite existing files (d2/b) d2/b: not overwriting - file exists @@ -143,7 +143,7 @@ 1c1 < d1/b --- > d2/b -3 files updated, 0 files merged, 3 files removed, 0 files unresolved +3 files updated, 0 files merged, 0 files removed, 0 files unresolved # attempt to move one file into a non-existent directory abort: destination dx/ is not a directory 0 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -167,7 +167,7 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # move --after some files under d1 to d2/d21 (glob) moving d1/a to d2/d21/a moving d1/d11/a1 to d2/d21/a1 @@ -177,7 +177,7 @@ A d2/d21/a1 d1/d11/a1 R d1/a R d1/d11/a1 -2 files updated, 0 files merged, 2 files removed, 0 files unresolved +2 files updated, 0 files merged, 0 files removed, 0 files unresolved # move every file under d1 starting with an 'a' to d2/d21 (regexp) moving d1/a to d2/d21/a moving d1/d11/a1 to d2/d21/a1 @@ -187,7 +187,7 @@ A d2/d21/a1 d1/d11/a1 R d1/a R d1/d11/a1 -2 files updated, 0 files merged, 2 files removed, 0 files unresolved +2 files updated, 0 files merged, 0 files removed, 0 files unresolved # attempt to overwrite an existing file d1/ca: not overwriting - file exists ? d1/ca @@ -196,12 +196,12 @@ 0 files updated, 0 files merged, 0 files A d1/ca d1/ba R d1/ba -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # replace a symlink with a file A d1/ca d1/ba R d1/ba -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # do not copy more than one source file to the same destination file moving d1/d11/a1 to d3/d11/a1 d3/b: not overwriting - d2/b collides with d1/b @@ -217,7 +217,7 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # move a whole subtree with "hg rename ." moving a to ../d3/d1/a moving b to ../d3/d1/b @@ -235,7 +235,7 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # move a whole subtree with "hg rename --after ." moving a to ../d3/a moving b to ../d3/b @@ -253,7 +253,7 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # move the parent tree with "hg rename .." moving ../a to ../../d3/a moving ../b to ../../d3/b @@ -271,7 +271,7 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 4 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # skip removed files moving d1/a to d3/a moving d1/ba to d3/ba @@ -286,17 +286,17 @@ R d1/a R d1/b R d1/ba R d1/d11/a1 -4 files updated, 0 files merged, 3 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved # transitive rename A d1/bc d1/b R d1/b -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # transitive rename --after A d1/bc d1/b R d1/b -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b) M d1/b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved diff --git a/tests/test-revert.out b/tests/test-revert.out --- a/tests/test-revert.out +++ b/tests/test-revert.out @@ -52,7 +52,7 @@ A a R d %% should silently keep d removed R d -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved reverting c %% should print non-executable non-executable diff --git a/tests/test-symlink-basic.out b/tests/test-symlink-basic.out --- a/tests/test-symlink-basic.out +++ b/tests/test-symlink-basic.out @@ -28,4 +28,4 @@ A dangling2 dangling -> void dangling2 -> void % issue995 -0 files updated, 0 files merged, 1 files removed, 0 files unresolved +0 files updated, 0 files merged, 0 files removed, 0 files unresolved diff --git a/tests/test-transplant b/tests/test-transplant --- a/tests/test-transplant +++ b/tests/test-transplant @@ -92,6 +92,7 @@ hg ci -mfoobar hg transplant 1:3 # transplant -c shouldn't use an old changeset hg up -C +rm added hg transplant 1 hg transplant --continue hg transplant 1:3 diff --git a/tests/test-transplant.out b/tests/test-transplant.out --- a/tests/test-transplant.out +++ b/tests/test-transplant.out @@ -113,7 +113,7 @@ Hunk #1 FAILED at 0 1 out of 1 hunks FAILED -- saving rejects to file foo.rej patch failed to apply abort: Fix up the merge and run hg transplant --continue -1 files updated, 0 files merged, 1 files removed, 0 files unresolved +1 files updated, 0 files merged, 0 files removed, 0 files unresolved applying a1e30dd1b8e7 patching file foo Hunk #1 FAILED at 0