Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_shutil.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | e12efebc3ba6 |
| children | 2d330f7908e7 |
| rev | line source |
|---|---|
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
1 # Copyright (C) 2003 Python Software Foundation |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
2 |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
3 import unittest |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
4 import shutil |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
5 import tempfile |
|
34019
bdd14ab6c5cf
Bug #1071513: don't test on Cygwin, as chmod doesn't work reliably there
Johannes Gijsbers <jlg@dds.nl>
parents:
33870
diff
changeset
|
6 import sys |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
7 import stat |
|
32386
686e5d38be42
shutil.move() will raise an exception when trying to move a directory into
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
8 import os |
|
686e5d38be42
shutil.move() will raise an exception when trying to move a directory into
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
9 import os.path |
|
76869
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
10 import errno |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
11 from os.path import splitdrive |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
12 from distutils.spawn import find_executable, spawn |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
13 from shutil import (_make_tarball, _make_zipfile, make_archive, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
14 register_archive_format, unregister_archive_format, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
15 get_archive_formats) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
16 import tarfile |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
17 import warnings |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
18 |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
19 from test import test_support |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
20 from test.test_support import TESTFN, check_warnings, captured_stdout |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
21 |
|
53652
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
22 TESTFN2 = TESTFN + "2" |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
23 |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
24 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
25 import grp |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
26 import pwd |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
27 UID_GID_SUPPORT = True |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
28 except ImportError: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
29 UID_GID_SUPPORT = False |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
30 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
31 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
32 import zlib |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
33 except ImportError: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
34 zlib = None |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
35 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
36 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
37 import zipfile |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
38 ZIP_SUPPORT = True |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
39 except ImportError: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
40 ZIP_SUPPORT = find_executable('zip') |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
41 |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
42 class TestShutil(unittest.TestCase): |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
43 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
44 def setUp(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
45 super(TestShutil, self).setUp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
46 self.tempdirs = [] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
47 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
48 def tearDown(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
49 super(TestShutil, self).tearDown() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
50 while self.tempdirs: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
51 d = self.tempdirs.pop() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
52 shutil.rmtree(d, os.name in ('nt', 'cygwin')) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
53 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
54 def write_file(self, path, content='xxx'): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
55 """Writes a file in the given path. |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
56 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
57 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
58 path can be a string or a sequence. |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
59 """ |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
60 if isinstance(path, (list, tuple)): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
61 path = os.path.join(*path) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
62 f = open(path, 'w') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
63 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
64 f.write(content) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
65 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
66 f.close() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
67 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
68 def mkdtemp(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
69 """Create a temporary directory that will be cleaned up. |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
70 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
71 Returns the path of the directory. |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
72 """ |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
73 d = tempfile.mkdtemp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
74 self.tempdirs.append(d) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
75 return d |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
76 def test_rmtree_errors(self): |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
77 # filename is guaranteed not to exist |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
78 filename = tempfile.mktemp() |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
79 self.assertRaises(OSError, shutil.rmtree, filename) |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
80 |
|
34119
60d482e8f845
SF bug #1076467: don't run test_on_error as root, as the permission
Johannes Gijsbers <jlg@dds.nl>
parents:
34019
diff
changeset
|
81 # See bug #1071513 for why we don't run this on cygwin |
|
60d482e8f845
SF bug #1076467: don't run test_on_error as root, as the permission
Johannes Gijsbers <jlg@dds.nl>
parents:
34019
diff
changeset
|
82 # and bug #1076467 for why we don't run this as root. |
|
60d482e8f845
SF bug #1076467: don't run test_on_error as root, as the permission
Johannes Gijsbers <jlg@dds.nl>
parents:
34019
diff
changeset
|
83 if (hasattr(os, 'chmod') and sys.platform[:6] != 'cygwin' |
|
34149
a659b0cecb92
Use os.geteuid() for checking whether we are root, as suggested by
Johannes Gijsbers <jlg@dds.nl>
parents:
34119
diff
changeset
|
84 and not (hasattr(os, 'geteuid') and os.geteuid() == 0)): |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
85 def test_on_error(self): |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
86 self.errorState = 0 |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
87 os.mkdir(TESTFN) |
|
33870
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
88 self.childpath = os.path.join(TESTFN, 'a') |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
89 f = open(self.childpath, 'w') |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
90 f.close() |
|
33870
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
91 old_dir_mode = os.stat(TESTFN).st_mode |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
92 old_child_mode = os.stat(self.childpath).st_mode |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
93 # Make unwritable. |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
94 os.chmod(self.childpath, stat.S_IREAD) |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
95 os.chmod(TESTFN, stat.S_IREAD) |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
96 |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
97 shutil.rmtree(TESTFN, onerror=self.check_args_to_onerror) |
|
34019
bdd14ab6c5cf
Bug #1071513: don't test on Cygwin, as chmod doesn't work reliably there
Johannes Gijsbers <jlg@dds.nl>
parents:
33870
diff
changeset
|
98 # Test whether onerror has actually been called. |
|
34119
60d482e8f845
SF bug #1076467: don't run test_on_error as root, as the permission
Johannes Gijsbers <jlg@dds.nl>
parents:
34019
diff
changeset
|
99 self.assertEqual(self.errorState, 2, |
|
60d482e8f845
SF bug #1076467: don't run test_on_error as root, as the permission
Johannes Gijsbers <jlg@dds.nl>
parents:
34019
diff
changeset
|
100 "Expected call to onerror function did not happen.") |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
101 |
|
33870
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
102 # Make writable again. |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
103 os.chmod(TESTFN, old_dir_mode) |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
104 os.chmod(self.childpath, old_child_mode) |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
105 |
|
80ca1a8b2321
test_on_error(): Rewrite so it works on WinXP too. Unsure about 95/98/ME.
Tim Peters <tim.peters@gmail.com>
parents:
33865
diff
changeset
|
106 # Clean up. |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
107 shutil.rmtree(TESTFN) |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
108 |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
109 def check_args_to_onerror(self, func, arg, exc): |
|
53623
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
110 # test_rmtree_errors deliberately runs rmtree |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
111 # on a directory that is chmod 400, which will fail. |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
112 # This function is run when shutil.rmtree fails. |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
113 # 99.9% of the time it initially fails to remove |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
114 # a file in the directory, so the first time through |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
115 # func is os.remove. |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
116 # However, some Linux machines running ZFS on |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
117 # FUSE experienced a failure earlier in the process |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
118 # at os.listdir. The first failure may legally |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
119 # be either. |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
120 if self.errorState == 0: |
|
53623
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
121 if func is os.remove: |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
122 self.assertEqual(arg, self.childpath) |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
123 else: |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
124 self.assertIs(func, os.listdir, |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
125 "func must be either os.remove or os.listdir") |
|
27c6b63d1db3
fix test_shutil on ZFS #5676
Benjamin Peterson <benjamin@python.org>
parents:
51446
diff
changeset
|
126 self.assertEqual(arg, TESTFN) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
53652
diff
changeset
|
127 self.assertTrue(issubclass(exc[0], OSError)) |
|
33865
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
128 self.errorState = 1 |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
129 else: |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
130 self.assertEqual(func, os.rmdir) |
|
f196716ea0db
Bug #1048941: shutil.rmtree error handling was always broken
Johannes Gijsbers <jlg@dds.nl>
parents:
33461
diff
changeset
|
131 self.assertEqual(arg, TESTFN) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
53652
diff
changeset
|
132 self.assertTrue(issubclass(exc[0], OSError)) |
|
34019
bdd14ab6c5cf
Bug #1071513: don't test on Cygwin, as chmod doesn't work reliably there
Johannes Gijsbers <jlg@dds.nl>
parents:
33870
diff
changeset
|
133 self.errorState = 2 |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
134 |
|
33461
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
135 def test_rmtree_dont_delete_file(self): |
|
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
136 # When called on a file instead of a directory, don't delete it. |
|
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
137 handle, path = tempfile.mkstemp() |
|
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
138 os.fdopen(handle).close() |
|
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
139 self.assertRaises(OSError, shutil.rmtree, path) |
|
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
140 os.remove(path) |
|
c8825a74e421
Document not-completely-obvious behavior in a test.
Johannes Gijsbers <jlg@dds.nl>
parents:
33125
diff
changeset
|
141 |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
142 def test_copytree_simple(self): |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
143 def write_data(path, data): |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
144 f = open(path, "w") |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
145 f.write(data) |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
146 f.close() |
|
39322
cf046e22d7dd
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
39307
diff
changeset
|
147 |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
148 def read_data(path): |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
149 f = open(path) |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
150 data = f.read() |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
151 f.close() |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
152 return data |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
153 |
|
39307
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
154 src_dir = tempfile.mkdtemp() |
|
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
155 dst_dir = os.path.join(tempfile.mkdtemp(), 'destination') |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
156 |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
157 write_data(os.path.join(src_dir, 'test.txt'), '123') |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
158 |
|
39307
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
159 os.mkdir(os.path.join(src_dir, 'test_dir')) |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
160 write_data(os.path.join(src_dir, 'test_dir', 'test.txt'), '456') |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
161 |
|
39307
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
162 try: |
|
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
163 shutil.copytree(src_dir, dst_dir) |
|
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
164 self.assertTrue(os.path.isfile(os.path.join(dst_dir, 'test.txt'))) |
|
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
165 self.assertTrue(os.path.isdir(os.path.join(dst_dir, 'test_dir'))) |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
166 self.assertTrue(os.path.isfile(os.path.join(dst_dir, 'test_dir', |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
167 'test.txt'))) |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
168 actual = read_data(os.path.join(dst_dir, 'test.txt')) |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
169 self.assertEqual(actual, '123') |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
170 actual = read_data(os.path.join(dst_dir, 'test_dir', 'test.txt')) |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
171 self.assertEqual(actual, '456') |
|
39307
9377c6604542
Don't copy directory stat times in shutil.copytree on Windows
Martin v. Löwis <martin@v.loewis.de>
parents:
38112
diff
changeset
|
172 finally: |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
173 for path in ( |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
174 os.path.join(src_dir, 'test.txt'), |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
175 os.path.join(dst_dir, 'test.txt'), |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
176 os.path.join(src_dir, 'test_dir', 'test.txt'), |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
177 os.path.join(dst_dir, 'test_dir', 'test.txt'), |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
178 ): |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
179 if os.path.exists(path): |
|
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
180 os.remove(path) |
|
43924
74f22954f189
Another fix for test_shutil. Martin pointed out that it breaks some build bots
Christian Heimes <christian@cheimes.de>
parents:
43920
diff
changeset
|
181 for path in (src_dir, |
|
57108
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
182 os.path.dirname(dst_dir) |
|
43924
74f22954f189
Another fix for test_shutil. Martin pointed out that it breaks some build bots
Christian Heimes <christian@cheimes.de>
parents:
43920
diff
changeset
|
183 ): |
|
39425
3c2bf79526be
test_copytree_simple(): This was leaving behind two new temp
Tim Peters <tim.peters@gmail.com>
parents:
39322
diff
changeset
|
184 if os.path.exists(path): |
| 43920 | 185 shutil.rmtree(path) |
|
39322
cf046e22d7dd
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
39307
diff
changeset
|
186 |
|
47888
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
187 def test_copytree_with_exclude(self): |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
188 |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
189 def write_data(path, data): |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
190 f = open(path, "w") |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
191 f.write(data) |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
192 f.close() |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
193 |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
194 def read_data(path): |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
195 f = open(path) |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
196 data = f.read() |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
197 f.close() |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
198 return data |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
199 |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
200 # creating data |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
201 join = os.path.join |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
202 exists = os.path.exists |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
203 src_dir = tempfile.mkdtemp() |
|
57108
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
204 try: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
205 dst_dir = join(tempfile.mkdtemp(), 'destination') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
206 write_data(join(src_dir, 'test.txt'), '123') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
207 write_data(join(src_dir, 'test.tmp'), '123') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
208 os.mkdir(join(src_dir, 'test_dir')) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
209 write_data(join(src_dir, 'test_dir', 'test.txt'), '456') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
210 os.mkdir(join(src_dir, 'test_dir2')) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
211 write_data(join(src_dir, 'test_dir2', 'test.txt'), '456') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
212 os.mkdir(join(src_dir, 'test_dir2', 'subdir')) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
213 os.mkdir(join(src_dir, 'test_dir2', 'subdir2')) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
214 write_data(join(src_dir, 'test_dir2', 'subdir', 'test.txt'), '456') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
215 write_data(join(src_dir, 'test_dir2', 'subdir2', 'test.py'), '456') |
|
47888
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
216 |
|
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
217 |
|
57108
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
218 # testing glob-like patterns |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
219 try: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
220 patterns = shutil.ignore_patterns('*.tmp', 'test_dir2') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
221 shutil.copytree(src_dir, dst_dir, ignore=patterns) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
222 # checking the result: some elements should not be copied |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
223 self.assertTrue(exists(join(dst_dir, 'test.txt'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
224 self.assertTrue(not exists(join(dst_dir, 'test.tmp'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
225 self.assertTrue(not exists(join(dst_dir, 'test_dir2'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
226 finally: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
227 if os.path.exists(dst_dir): |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
228 shutil.rmtree(dst_dir) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
229 try: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
230 patterns = shutil.ignore_patterns('*.tmp', 'subdir*') |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
231 shutil.copytree(src_dir, dst_dir, ignore=patterns) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
232 # checking the result: some elements should not be copied |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
233 self.assertTrue(not exists(join(dst_dir, 'test.tmp'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
234 self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir2'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
235 self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
236 finally: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
237 if os.path.exists(dst_dir): |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
238 shutil.rmtree(dst_dir) |
|
47888
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
239 |
|
57108
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
240 # testing callable-style |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
241 try: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
242 def _filter(src, names): |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
243 res = [] |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
244 for name in names: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
245 path = os.path.join(src, name) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
246 |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
247 if (os.path.isdir(path) and |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
248 path.split()[-1] == 'subdir'): |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
249 res.append(name) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
250 elif os.path.splitext(path)[-1] in ('.py'): |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
251 res.append(name) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
252 return res |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
253 |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
254 shutil.copytree(src_dir, dst_dir, ignore=_filter) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
255 |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
256 # checking the result: some elements should not be copied |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
257 self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir2', |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
258 'test.py'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
259 self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir'))) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
260 |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
261 finally: |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
262 if os.path.exists(dst_dir): |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
263 shutil.rmtree(dst_dir) |
|
47888
d7526670ff0a
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
Georg Brandl <georg@python.org>
parents:
45858
diff
changeset
|
264 finally: |
|
57108
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
265 shutil.rmtree(src_dir) |
|
ea738ff18016
Merged revisions 76101 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51179
diff
changeset
|
266 shutil.rmtree(os.path.dirname(dst_dir)) |
|
39322
cf046e22d7dd
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
39307
diff
changeset
|
267 |
|
33124
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
268 if hasattr(os, "symlink"): |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
269 def test_dont_copy_file_onto_link_to_itself(self): |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
270 # bug 851123. |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
271 os.mkdir(TESTFN) |
|
33125
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
272 src = os.path.join(TESTFN, 'cheese') |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
273 dst = os.path.join(TESTFN, 'shop') |
|
33124
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
274 try: |
|
33125
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
275 f = open(src, 'w') |
|
33124
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
276 f.write('cheddar') |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
277 f.close() |
|
33125
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
278 |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
279 os.link(src, dst) |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
280 self.assertRaises(shutil.Error, shutil.copyfile, src, dst) |
|
65339
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
281 with open(src, 'r') as f: |
|
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
282 self.assertEqual(f.read(), 'cheddar') |
|
33125
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
283 os.remove(dst) |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
284 |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
285 # Using `src` here would mean we end up with a symlink pointing |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
286 # to TESTFN/TESTFN/cheese, while it should point at |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
287 # TESTFN/cheese. |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
288 os.symlink('cheese', dst) |
|
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
289 self.assertRaises(shutil.Error, shutil.copyfile, src, dst) |
|
65339
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
290 with open(src, 'r') as f: |
|
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
291 self.assertEqual(f.read(), 'cheddar') |
|
33125
3a7f82e60cb2
Unwrap too-smart loop: we can't use `src` for both hard and symbolic links.
Johannes Gijsbers <jlg@dds.nl>
parents:
33124
diff
changeset
|
292 os.remove(dst) |
|
33124
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
293 finally: |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
294 try: |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
295 shutil.rmtree(TESTFN) |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
296 except OSError: |
|
dc647df53921
Raise an exception when src and dst refer to the same file via a hard link or a
Johannes Gijsbers <jlg@dds.nl>
parents:
32654
diff
changeset
|
297 pass |
|
32386
686e5d38be42
shutil.move() will raise an exception when trying to move a directory into
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
298 |
|
44823
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
299 def test_rmtree_on_symlink(self): |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
300 # bug 1669. |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
301 os.mkdir(TESTFN) |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
302 try: |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
303 src = os.path.join(TESTFN, 'cheese') |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
304 dst = os.path.join(TESTFN, 'shop') |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
305 os.mkdir(src) |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
306 os.symlink(src, dst) |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
307 self.assertRaises(OSError, shutil.rmtree, dst) |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
308 finally: |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
309 shutil.rmtree(TESTFN, ignore_errors=True) |
|
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
310 |
|
53652
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
311 if hasattr(os, "mkfifo"): |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
312 # Issue #3002: copyfile and copytree block indefinitely on named pipes |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
313 def test_copyfile_named_pipe(self): |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
314 os.mkfifo(TESTFN) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
315 try: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
316 self.assertRaises(shutil.SpecialFileError, |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
317 shutil.copyfile, TESTFN, TESTFN2) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
318 self.assertRaises(shutil.SpecialFileError, |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
319 shutil.copyfile, __file__, TESTFN) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
320 finally: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
321 os.remove(TESTFN) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
322 |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
323 def test_copytree_named_pipe(self): |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
324 os.mkdir(TESTFN) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
325 try: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
326 subdir = os.path.join(TESTFN, "subdir") |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
327 os.mkdir(subdir) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
328 pipe = os.path.join(subdir, "mypipe") |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
329 os.mkfifo(pipe) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
330 try: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
331 shutil.copytree(TESTFN, TESTFN2) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
332 except shutil.Error as e: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
333 errors = e.args[0] |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
334 self.assertEqual(len(errors), 1) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
335 src, dst, error_msg = errors[0] |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
336 self.assertEqual("`%s` is a named pipe" % pipe, error_msg) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
337 else: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
338 self.fail("shutil.Error should have been raised") |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
339 finally: |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
340 shutil.rmtree(TESTFN, ignore_errors=True) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
341 shutil.rmtree(TESTFN2, ignore_errors=True) |
|
409448d455e3
Issue #3002: `shutil.copyfile()` and `shutil.copytree()` now raise an
Antoine Pitrou <solipsis@pitrou.net>
parents:
53623
diff
changeset
|
342 |
|
76869
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
343 @unittest.skipUnless(hasattr(os, 'chflags') and |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
344 hasattr(errno, 'EOPNOTSUPP') and |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
345 hasattr(errno, 'ENOTSUP'), |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
346 "requires os.chflags, EOPNOTSUPP & ENOTSUP") |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
347 def test_copystat_handles_harmless_chflags_errors(self): |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
348 tmpdir = self.mkdtemp() |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
349 file1 = os.path.join(tmpdir, 'file1') |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
350 file2 = os.path.join(tmpdir, 'file2') |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
351 self.write_file(file1, 'xxx') |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
352 self.write_file(file2, 'xxx') |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
353 |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
354 def make_chflags_raiser(err): |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
355 ex = OSError() |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
356 |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
357 def _chflags_raiser(path, flags): |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
358 ex.errno = err |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
359 raise ex |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
360 return _chflags_raiser |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
361 old_chflags = os.chflags |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
362 try: |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
363 for err in errno.EOPNOTSUPP, errno.ENOTSUP: |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
364 os.chflags = make_chflags_raiser(err) |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
365 shutil.copystat(file1, file2) |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
366 # assert others errors break it |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
367 os.chflags = make_chflags_raiser(errno.EOPNOTSUPP + errno.ENOTSUP) |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
368 self.assertRaises(OSError, shutil.copystat, file1, file2) |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
369 finally: |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
370 os.chflags = old_chflags |
|
e12efebc3ba6
Issue #14662: Prevent shutil failures on OS X when destination does not
Ned Deily <nad@acm.org>
parents:
71956
diff
changeset
|
371 |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
372 @unittest.skipUnless(zlib, "requires zlib") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
373 def test_make_tarball(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
374 # creating something to tar |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
375 tmpdir = self.mkdtemp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
376 self.write_file([tmpdir, 'file1'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
377 self.write_file([tmpdir, 'file2'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
378 os.mkdir(os.path.join(tmpdir, 'sub')) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
379 self.write_file([tmpdir, 'sub', 'file3'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
380 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
381 tmpdir2 = self.mkdtemp() |
|
71956
615a29295d5f
Guard shutil._make_archive against a logger=None argument.
Éric Araujo <merwok@netwok.org>
parents:
69872
diff
changeset
|
382 # force shutil to create the directory |
|
615a29295d5f
Guard shutil._make_archive against a logger=None argument.
Éric Araujo <merwok@netwok.org>
parents:
69872
diff
changeset
|
383 os.rmdir(tmpdir2) |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
384 unittest.skipUnless(splitdrive(tmpdir)[0] == splitdrive(tmpdir2)[0], |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
385 "source and target should be on same drive") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
386 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
387 base_name = os.path.join(tmpdir2, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
388 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
389 # working with relative paths to avoid tar warnings |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
390 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
391 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
392 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
393 _make_tarball(splitdrive(base_name)[1], '.') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
394 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
395 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
396 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
397 # check if the compressed tarball was created |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
398 tarball = base_name + '.tar.gz' |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
399 self.assertTrue(os.path.exists(tarball)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
400 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
401 # trying an uncompressed one |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
402 base_name = os.path.join(tmpdir2, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
403 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
404 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
405 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
406 _make_tarball(splitdrive(base_name)[1], '.', compress=None) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
407 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
408 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
409 tarball = base_name + '.tar' |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
410 self.assertTrue(os.path.exists(tarball)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
411 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
412 def _tarinfo(self, path): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
413 tar = tarfile.open(path) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
414 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
415 names = tar.getnames() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
416 names.sort() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
417 return tuple(names) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
418 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
419 tar.close() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
420 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
421 def _create_files(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
422 # creating something to tar |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
423 tmpdir = self.mkdtemp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
424 dist = os.path.join(tmpdir, 'dist') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
425 os.mkdir(dist) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
426 self.write_file([dist, 'file1'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
427 self.write_file([dist, 'file2'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
428 os.mkdir(os.path.join(dist, 'sub')) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
429 self.write_file([dist, 'sub', 'file3'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
430 os.mkdir(os.path.join(dist, 'sub2')) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
431 tmpdir2 = self.mkdtemp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
432 base_name = os.path.join(tmpdir2, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
433 return tmpdir, tmpdir2, base_name |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
434 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
435 @unittest.skipUnless(zlib, "Requires zlib") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
436 @unittest.skipUnless(find_executable('tar') and find_executable('gzip'), |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
437 'Need the tar command to run') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
438 def test_tarfile_vs_tar(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
439 tmpdir, tmpdir2, base_name = self._create_files() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
440 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
441 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
442 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
443 _make_tarball(base_name, 'dist') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
444 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
445 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
446 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
447 # check if the compressed tarball was created |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
448 tarball = base_name + '.tar.gz' |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
449 self.assertTrue(os.path.exists(tarball)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
450 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
451 # now create another tarball using `tar` |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
452 tarball2 = os.path.join(tmpdir, 'archive2.tar.gz') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
453 tar_cmd = ['tar', '-cf', 'archive2.tar', 'dist'] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
454 gzip_cmd = ['gzip', '-f9', 'archive2.tar'] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
455 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
456 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
457 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
458 with captured_stdout() as s: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
459 spawn(tar_cmd) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
460 spawn(gzip_cmd) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
461 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
462 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
463 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
464 self.assertTrue(os.path.exists(tarball2)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
465 # let's compare both tarballs |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66222
diff
changeset
|
466 self.assertEqual(self._tarinfo(tarball), self._tarinfo(tarball2)) |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
467 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
468 # trying an uncompressed one |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
469 base_name = os.path.join(tmpdir2, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
470 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
471 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
472 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
473 _make_tarball(base_name, 'dist', compress=None) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
474 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
475 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
476 tarball = base_name + '.tar' |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
477 self.assertTrue(os.path.exists(tarball)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
478 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
479 # now for a dry_run |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
480 base_name = os.path.join(tmpdir2, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
481 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
482 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
483 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
484 _make_tarball(base_name, 'dist', compress=None, dry_run=True) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
485 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
486 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
487 tarball = base_name + '.tar' |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
488 self.assertTrue(os.path.exists(tarball)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
489 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
490 @unittest.skipUnless(zlib, "Requires zlib") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
491 @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
492 def test_make_zipfile(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
493 # creating something to tar |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
494 tmpdir = self.mkdtemp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
495 self.write_file([tmpdir, 'file1'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
496 self.write_file([tmpdir, 'file2'], 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
497 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
498 tmpdir2 = self.mkdtemp() |
|
71956
615a29295d5f
Guard shutil._make_archive against a logger=None argument.
Éric Araujo <merwok@netwok.org>
parents:
69872
diff
changeset
|
499 # force shutil to create the directory |
|
615a29295d5f
Guard shutil._make_archive against a logger=None argument.
Éric Araujo <merwok@netwok.org>
parents:
69872
diff
changeset
|
500 os.rmdir(tmpdir2) |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
501 base_name = os.path.join(tmpdir2, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
502 _make_zipfile(base_name, tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
503 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
504 # check if the compressed tarball was created |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
505 tarball = base_name + '.zip' |
|
66222
52e5199b6513
Merged revisions 86235 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65339
diff
changeset
|
506 self.assertTrue(os.path.exists(tarball)) |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
507 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
508 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
509 def test_make_archive(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
510 tmpdir = self.mkdtemp() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
511 base_name = os.path.join(tmpdir, 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
512 self.assertRaises(ValueError, make_archive, base_name, 'xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
513 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
514 @unittest.skipUnless(zlib, "Requires zlib") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
515 def test_make_archive_owner_group(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
516 # testing make_archive with owner and group, with various combinations |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
517 # this works even if there's not gid/uid support |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
518 if UID_GID_SUPPORT: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
519 group = grp.getgrgid(0)[0] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
520 owner = pwd.getpwuid(0)[0] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
521 else: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
522 group = owner = 'root' |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
523 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
524 base_dir, root_dir, base_name = self._create_files() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
525 base_name = os.path.join(self.mkdtemp() , 'archive') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
526 res = make_archive(base_name, 'zip', root_dir, base_dir, owner=owner, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
527 group=group) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
528 self.assertTrue(os.path.exists(res)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
529 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
530 res = make_archive(base_name, 'zip', root_dir, base_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
531 self.assertTrue(os.path.exists(res)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
532 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
533 res = make_archive(base_name, 'tar', root_dir, base_dir, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
534 owner=owner, group=group) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
535 self.assertTrue(os.path.exists(res)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
536 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
537 res = make_archive(base_name, 'tar', root_dir, base_dir, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
538 owner='kjhkjhkjg', group='oihohoh') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
539 self.assertTrue(os.path.exists(res)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
540 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
541 @unittest.skipUnless(zlib, "Requires zlib") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
542 @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support") |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
543 def test_tarfile_root_owner(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
544 tmpdir, tmpdir2, base_name = self._create_files() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
545 old_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
546 os.chdir(tmpdir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
547 group = grp.getgrgid(0)[0] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
548 owner = pwd.getpwuid(0)[0] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
549 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
550 archive_name = _make_tarball(base_name, 'dist', compress=None, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
551 owner=owner, group=group) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
552 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
553 os.chdir(old_dir) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
554 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
555 # check if the compressed tarball was created |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
556 self.assertTrue(os.path.exists(archive_name)) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
557 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
558 # now checks the rights |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
559 archive = tarfile.open(archive_name) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
560 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
561 for member in archive.getmembers(): |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66222
diff
changeset
|
562 self.assertEqual(member.uid, 0) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66222
diff
changeset
|
563 self.assertEqual(member.gid, 0) |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
564 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
565 archive.close() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
566 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
567 def test_make_archive_cwd(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
568 current_dir = os.getcwd() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
569 def _breaks(*args, **kw): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
570 raise RuntimeError() |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
571 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
572 register_archive_format('xxx', _breaks, [], 'xxx file') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
573 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
574 try: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
575 make_archive('xxx', 'xxx', root_dir=self.mkdtemp()) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
576 except Exception: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
577 pass |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66222
diff
changeset
|
578 self.assertEqual(os.getcwd(), current_dir) |
|
59053
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
579 finally: |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
580 unregister_archive_format('xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
581 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
582 def test_register_archive_format(self): |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
583 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
584 self.assertRaises(TypeError, register_archive_format, 'xxx', 1) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
585 self.assertRaises(TypeError, register_archive_format, 'xxx', lambda: x, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
586 1) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
587 self.assertRaises(TypeError, register_archive_format, 'xxx', lambda: x, |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
588 [(1, 2), (1, 2, 3)]) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
589 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
590 register_archive_format('xxx', lambda: x, [(1, 2)], 'xxx file') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
591 formats = [name for name, params in get_archive_formats()] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
592 self.assertIn('xxx', formats) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
593 |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
594 unregister_archive_format('xxx') |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
595 formats = [name for name, params in get_archive_formats()] |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
596 self.assertNotIn('xxx', formats) |
|
ac36ec8bae6c
added make_archive (and secondary APIs) to shutil
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57107
diff
changeset
|
597 |
|
44823
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
598 |
|
45858
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
599 class TestMove(unittest.TestCase): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
600 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
601 def setUp(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
602 filename = "foo" |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
603 self.src_dir = tempfile.mkdtemp() |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
604 self.dst_dir = tempfile.mkdtemp() |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
605 self.src_file = os.path.join(self.src_dir, filename) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
606 self.dst_file = os.path.join(self.dst_dir, filename) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
607 # Try to create a dir in the current directory, hoping that it is |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
608 # not located on the same filesystem as the system tmp dir. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
609 try: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
610 self.dir_other_fs = tempfile.mkdtemp( |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
611 dir=os.path.dirname(__file__)) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
612 self.file_other_fs = os.path.join(self.dir_other_fs, |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
613 filename) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
614 except OSError: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
615 self.dir_other_fs = None |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
616 with open(self.src_file, "wb") as f: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
617 f.write("spam") |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
618 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
619 def tearDown(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
620 for d in (self.src_dir, self.dst_dir, self.dir_other_fs): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
621 try: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
622 if d: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
623 shutil.rmtree(d) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
624 except: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
625 pass |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
626 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
627 def _check_move_file(self, src, dst, real_dst): |
|
65339
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
628 with open(src, "rb") as f: |
|
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
629 contents = f.read() |
|
45858
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
630 shutil.move(src, dst) |
|
65339
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
631 with open(real_dst, "rb") as f: |
|
fea8f21b199d
Merged revisions 85503 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62130
diff
changeset
|
632 self.assertEqual(contents, f.read()) |
|
45858
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
633 self.assertFalse(os.path.exists(src)) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
634 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
635 def _check_move_dir(self, src, dst, real_dst): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
636 contents = sorted(os.listdir(src)) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
637 shutil.move(src, dst) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
638 self.assertEqual(contents, sorted(os.listdir(real_dst))) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
639 self.assertFalse(os.path.exists(src)) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
640 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
641 def test_move_file(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
642 # Move a file to another location on the same filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
643 self._check_move_file(self.src_file, self.dst_file, self.dst_file) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
644 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
645 def test_move_file_to_dir(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
646 # Move a file inside an existing dir on the same filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
647 self._check_move_file(self.src_file, self.dst_dir, self.dst_file) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
648 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
649 def test_move_file_other_fs(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
650 # Move a file to an existing dir on another filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
651 if not self.dir_other_fs: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
652 # skip |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
653 return |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
654 self._check_move_file(self.src_file, self.file_other_fs, |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
655 self.file_other_fs) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
656 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
657 def test_move_file_to_dir_other_fs(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
658 # Move a file to another location on another filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
659 if not self.dir_other_fs: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
660 # skip |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
661 return |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
662 self._check_move_file(self.src_file, self.dir_other_fs, |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
663 self.file_other_fs) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
664 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
665 def test_move_dir(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
666 # Move a dir to another location on the same filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
667 dst_dir = tempfile.mktemp() |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
668 try: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
669 self._check_move_dir(self.src_dir, dst_dir, dst_dir) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
670 finally: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
671 try: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
672 shutil.rmtree(dst_dir) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
673 except: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
674 pass |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
675 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
676 def test_move_dir_other_fs(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
677 # Move a dir to another location on another filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
678 if not self.dir_other_fs: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
679 # skip |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
680 return |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
681 dst_dir = tempfile.mktemp(dir=self.dir_other_fs) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
682 try: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
683 self._check_move_dir(self.src_dir, dst_dir, dst_dir) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
684 finally: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
685 try: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
686 shutil.rmtree(dst_dir) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
687 except: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
688 pass |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
689 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
690 def test_move_dir_to_dir(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
691 # Move a dir inside an existing dir on the same filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
692 self._check_move_dir(self.src_dir, self.dst_dir, |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
693 os.path.join(self.dst_dir, os.path.basename(self.src_dir))) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
694 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
695 def test_move_dir_to_dir_other_fs(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
696 # Move a dir inside an existing dir on another filesystem. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
697 if not self.dir_other_fs: |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
698 # skip |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
699 return |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
700 self._check_move_dir(self.src_dir, self.dir_other_fs, |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
701 os.path.join(self.dir_other_fs, os.path.basename(self.src_dir))) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
702 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
703 def test_existing_file_inside_dest_dir(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
704 # A file with the same name inside the destination dir already exists. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
705 with open(self.dst_file, "wb"): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
706 pass |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
707 self.assertRaises(shutil.Error, shutil.move, self.src_file, self.dst_dir) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
708 |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
709 def test_dont_move_dir_in_itself(self): |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
710 # Moving a dir inside itself raises an Error. |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
711 dst = os.path.join(self.src_dir, "bar") |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
712 self.assertRaises(shutil.Error, shutil.move, self.src_dir, dst) |
|
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
713 |
|
51179
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
714 def test_destinsrc_false_negative(self): |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
715 os.mkdir(TESTFN) |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
716 try: |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
717 for src, dst in [('srcdir', 'srcdir/dest')]: |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
718 src = os.path.join(TESTFN, src) |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
719 dst = os.path.join(TESTFN, dst) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
53652
diff
changeset
|
720 self.assertTrue(shutil._destinsrc(src, dst), |
|
51446
0ab36796dd79
make destinsrc private
Benjamin Peterson <benjamin@python.org>
parents:
51179
diff
changeset
|
721 msg='_destinsrc() wrongly concluded that ' |
|
51179
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
722 'dst (%s) is not in src (%s)' % (dst, src)) |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
723 finally: |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
724 shutil.rmtree(TESTFN, ignore_errors=True) |
|
45858
923380acd1cd
Issue 1577: shutil.move() where destination is a directory was doing a
Sean Reifscheider <jafo@tummy.com>
parents:
44823
diff
changeset
|
725 |
|
51179
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
726 def test_destinsrc_false_positive(self): |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
727 os.mkdir(TESTFN) |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
728 try: |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
729 for src, dst in [('srcdir', 'src/dest'), ('srcdir', 'srcdir.new')]: |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
730 src = os.path.join(TESTFN, src) |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
731 dst = os.path.join(TESTFN, dst) |
|
55002
6768b2350c57
convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents:
53652
diff
changeset
|
732 self.assertFalse(shutil._destinsrc(src, dst), |
|
51446
0ab36796dd79
make destinsrc private
Benjamin Peterson <benjamin@python.org>
parents:
51179
diff
changeset
|
733 msg='_destinsrc() wrongly concluded that ' |
|
51179
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
734 'dst (%s) is in src (%s)' % (dst, src)) |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
735 finally: |
|
e2dcad56e40e
Merged revisions 69100 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47888
diff
changeset
|
736 shutil.rmtree(TESTFN, ignore_errors=True) |
|
44823
eaca2367ecc9
#1669: don't allow shutil.rmtree() to be called on a symlink.
Georg Brandl <georg@python.org>
parents:
43924
diff
changeset
|
737 |
|
61285
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
738 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
739 class TestCopyFile(unittest.TestCase): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
740 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
741 _delete = False |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
742 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
743 class Faux(object): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
744 _entered = False |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
745 _exited_with = None |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
746 _raised = False |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
747 def __init__(self, raise_in_exit=False, suppress_at_exit=True): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
748 self._raise_in_exit = raise_in_exit |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
749 self._suppress_at_exit = suppress_at_exit |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
750 def read(self, *args): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
751 return '' |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
752 def __enter__(self): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
753 self._entered = True |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
754 def __exit__(self, exc_type, exc_val, exc_tb): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
755 self._exited_with = exc_type, exc_val, exc_tb |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
756 if self._raise_in_exit: |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
757 self._raised = True |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
758 raise IOError("Cannot close") |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
759 return self._suppress_at_exit |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
760 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
761 def tearDown(self): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
762 if self._delete: |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
763 del shutil.open |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
764 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
765 def _set_shutil_open(self, func): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
766 shutil.open = func |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
767 self._delete = True |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
768 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
769 def test_w_source_open_fails(self): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
770 def _open(filename, mode='r'): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
771 if filename == 'srcfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
772 raise IOError('Cannot open "srcfile"') |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
773 assert 0 # shouldn't reach here. |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
774 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
775 self._set_shutil_open(_open) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
776 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
777 self.assertRaises(IOError, shutil.copyfile, 'srcfile', 'destfile') |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
778 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
779 def test_w_dest_open_fails(self): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
780 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
781 srcfile = self.Faux() |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
782 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
783 def _open(filename, mode='r'): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
784 if filename == 'srcfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
785 return srcfile |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
786 if filename == 'destfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
787 raise IOError('Cannot open "destfile"') |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
788 assert 0 # shouldn't reach here. |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
789 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
790 self._set_shutil_open(_open) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
791 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
792 shutil.copyfile('srcfile', 'destfile') |
|
62163
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
793 self.assertTrue(srcfile._entered) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
794 self.assertTrue(srcfile._exited_with[0] is IOError) |
|
61285
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
795 self.assertEqual(srcfile._exited_with[1].args, |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
796 ('Cannot open "destfile"',)) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
797 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
798 def test_w_dest_close_fails(self): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
799 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
800 srcfile = self.Faux() |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
801 destfile = self.Faux(True) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
802 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
803 def _open(filename, mode='r'): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
804 if filename == 'srcfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
805 return srcfile |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
806 if filename == 'destfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
807 return destfile |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
808 assert 0 # shouldn't reach here. |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
809 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
810 self._set_shutil_open(_open) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
811 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
812 shutil.copyfile('srcfile', 'destfile') |
|
62163
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
813 self.assertTrue(srcfile._entered) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
814 self.assertTrue(destfile._entered) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
815 self.assertTrue(destfile._raised) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
816 self.assertTrue(srcfile._exited_with[0] is IOError) |
|
61285
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
817 self.assertEqual(srcfile._exited_with[1].args, |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
818 ('Cannot close',)) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
819 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
820 def test_w_source_close_fails(self): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
821 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
822 srcfile = self.Faux(True) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
823 destfile = self.Faux() |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
824 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
825 def _open(filename, mode='r'): |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
826 if filename == 'srcfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
827 return srcfile |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
828 if filename == 'destfile': |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
829 return destfile |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
830 assert 0 # shouldn't reach here. |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
831 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
832 self._set_shutil_open(_open) |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
833 |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
834 self.assertRaises(IOError, |
|
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
835 shutil.copyfile, 'srcfile', 'destfile') |
|
62163
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
836 self.assertTrue(srcfile._entered) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
837 self.assertTrue(destfile._entered) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
838 self.assertFalse(destfile._raised) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
839 self.assertTrue(srcfile._exited_with[0] is None) |
|
538196cf91ff
Merged revisions 81769 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61285
diff
changeset
|
840 self.assertTrue(srcfile._raised) |
|
61285
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
841 |
|
69872
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
842 def test_move_dir_caseinsensitive(self): |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
843 # Renames a folder to the same name |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
844 # but a different case. |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
845 |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
846 self.src_dir = tempfile.mkdtemp() |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
847 dst_dir = os.path.join( |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
848 os.path.dirname(self.src_dir), |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
849 os.path.basename(self.src_dir).upper()) |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
850 self.assertNotEqual(self.src_dir, dst_dir) |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
851 |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
852 try: |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
853 shutil.move(self.src_dir, dst_dir) |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
854 self.assertTrue(os.path.isdir(dst_dir)) |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
855 finally: |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
856 if os.path.exists(dst_dir): |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
857 os.rmdir(dst_dir) |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
858 |
|
051190230254
Backport fix for issue #10684 from 3.x
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
68256
diff
changeset
|
859 |
|
61285
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
860 |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
861 def test_main(): |
|
61285
f0fa944b15c0
Merged revisions 80830 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
57108
diff
changeset
|
862 test_support.run_unittest(TestShutil, TestMove, TestCopyFile) |
|
27360
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
863 |
|
273b2b49bfd8
A very minimal start to a test of the shutil module.
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
864 if __name__ == '__main__': |
|
28917
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
27360
diff
changeset
|
865 test_main() |
