copy: if destination ends with "/", make sure it's a directory
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Mon, 24 Sep 2007 19:00:11 -0300
changeset 5329 7e6138cb8d38
parent 5318 c6682cdada2f
child 5330 4528858e7202
copy: if destination ends with "/", make sure it's a directory Fixes issue724.
mercurial/commands.py
tests/test-rename
tests/test-rename.out
--- a/mercurial/commands.py	Sun Sep 23 14:40:44 2007 +0200
+++ b/mercurial/commands.py	Mon Sep 24 19:00:11 2007 -0300
@@ -623,9 +623,12 @@
         raise util.Abort(_('no destination specified'))
     dest = pats.pop()
     destdirexists = os.path.isdir(dest)
-    if (len(pats) > 1 or util.patkind(pats[0], None)[0]) and not destdirexists:
-        raise util.Abort(_('with multiple sources, destination must be an '
-                         'existing directory'))
+    if not destdirexists:
+        if len(pats) > 1 or util.patkind(pats[0], None)[0]:
+            raise util.Abort(_('with multiple sources, destination must be an '
+                               'existing directory'))
+        if dest.endswith(os.sep) or os.altsep and dest.endswith(os.altsep):
+            raise util.Abort(_('destination %s is not a directory') % dest)
     if opts['after']:
         tfn = targetpathafterfn
     else:
--- a/tests/test-rename	Sun Sep 23 14:40:44 2007 +0200
+++ b/tests/test-rename	Mon Sep 24 19:00:11 2007 -0300
@@ -88,6 +88,11 @@
 diff d1/b d2/b
 hg update -C
 
+echo "# attempt to move one file into a non-existent directory"
+hg rename d1/a dx/
+hg status -C
+hg update -C
+
 echo "# attempt to move potentially more than one file into a non-existent"
 echo "# directory"
 hg rename 'glob:d1/**' dx
--- a/tests/test-rename.out	Sun Sep 23 14:40:44 2007 +0200
+++ b/tests/test-rename.out	Mon Sep 24 19:00:11 2007 -0300
@@ -166,6 +166,9 @@
 ---
 > d2/b
 3 files updated, 0 files merged, 3 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
 # attempt to move potentially more than one file into a non-existent
 # directory
 abort: with multiple sources, destination must be an existing directory