diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py index aca8b10bca6e39344a26271e3d3958feab9d5db5_bWVyY3VyaWFsL2NtZHV0aWwucHk=..70236d6fd84480422d01316b3ba44dac64bdf11b_bWVyY3VyaWFsL2NtZHV0aWwucHk= 100644 --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -378,7 +378,7 @@ return # check for overwrites - exists = os.path.exists(target) + exists = os.path.lexists(target) if not after and exists or after and state in 'mn': if not opts['force']: ui.warn(_('%s: not overwriting - file exists\n') % diff --git a/tests/test-rename b/tests/test-rename index aca8b10bca6e39344a26271e3d3958feab9d5db5_dGVzdHMvdGVzdC1yZW5hbWU=..70236d6fd84480422d01316b3ba44dac64bdf11b_dGVzdHMvdGVzdC1yZW5hbWU= 100755 --- a/tests/test-rename +++ b/tests/test-rename @@ -158,6 +158,13 @@ hg update -C rm d1/ca +echo "# attempt to overwrite an existing broken symlink" +ln -s ba d1/ca +hg rename --traceback 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 diff --git a/tests/test-rename.out b/tests/test-rename.out index aca8b10bca6e39344a26271e3d3958feab9d5db5_dGVzdHMvdGVzdC1yZW5hbWUub3V0..70236d6fd84480422d01316b3ba44dac64bdf11b_dGVzdHMvdGVzdC1yZW5hbWUub3V0 100644 --- a/tests/test-rename.out +++ b/tests/test-rename.out @@ -213,6 +213,10 @@ d1/ba R d1/ba 1 files updated, 0 files merged, 0 files removed, 0 files unresolved +# attempt to overwrite an existing broken symlink +d1/ca: not overwriting - file exists +? d1/ca +0 files updated, 0 files merged, 0 files removed, 0 files unresolved # replace a symlink with a file A d1/ca d1/ba