diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-11 08:30:59 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-11 08:30:59 (GMT) |
commit | 3a308b9f374da7f11df888f104dae6464e81d73d (patch) | |
tree | 2c2c4c76ca9945fd642051dacb2d2dc235a11b76 /Lib | |
parent | c2f665e721e4e4629cc4a2c5eb6464c3dc7325e3 (diff) | |
download | cpython-3a308b9f374da7f11df888f104dae6464e81d73d.zip cpython-3a308b9f374da7f11df888f104dae6464e81d73d.tar.gz cpython-3a308b9f374da7f11df888f104dae6464e81d73d.tar.bz2 |
Issue #19856: shutil.move() failed to move a directory to other directory
on Windows if source name ends with os.altsep.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/shutil.py | 3 | ||||
-rw-r--r-- | Lib/test/test_shutil.py | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py index 5320f23..5a4d4f6 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -484,7 +484,8 @@ rmtree.avoids_symlink_attacks = _use_fd_functions def _basename(path): # A basename() variant which first strips the trailing slash, if present. # Thus we always get the last component of the path, even for directories. - return os.path.basename(path.rstrip(os.path.sep)) + sep = os.path.sep + (os.path.altsep or '') + return os.path.basename(path.rstrip(sep)) def move(src, dst): """Recursively move a file or directory to another location. This is diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index ac00cc4..c3fb8a7 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -1481,6 +1481,15 @@ class TestMove(unittest.TestCase): # Move a dir inside an existing dir on another filesystem. self.test_move_dir_to_dir() + def test_move_dir_sep_to_dir(self): + self._check_move_dir(self.src_dir + os.path.sep, self.dst_dir, + os.path.join(self.dst_dir, os.path.basename(self.src_dir))) + + @unittest.skipUnless(os.path.altsep, 'requires os.path.altsep') + def test_move_dir_altsep_to_dir(self): + self._check_move_dir(self.src_dir + os.path.altsep, self.dst_dir, + os.path.join(self.dst_dir, os.path.basename(self.src_dir))) + def test_existing_file_inside_dest_dir(self): # A file with the same name inside the destination dir already exists. with open(self.dst_file, "wb"): |