~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_export.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-04-05 14:47:26 UTC
  • mfrom: (5752.2.11 2.4-windows-lfstat)
  • Revision ID: pqm@pqm.ubuntu.com-20110405144726-zi3lj2kwvjml4kx5
(jameinel) Add osutils.lstat/fstat so that even on Windows lstat(fname) ==
 fstat(open(fname).fileno()) (John A Meinel)

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
    tests,
29
29
    )
30
30
from bzrlib.export import get_root_name
31
 
from bzrlib.export.tar_exporter import export_tarball_generator
 
31
from bzrlib.export.tar_exporter import export_tarball
32
32
from bzrlib.tests import features
33
33
 
34
34
 
40
40
        wt.add(['a', 'a/b', 'a/c'])
41
41
        os.unlink('a/c')
42
42
        export.export(wt, 'target', format="dir")
43
 
        self.assertPathExists('target/a/b')
44
 
        self.assertPathDoesNotExist('target/a/c')
 
43
        self.failUnlessExists('target/a/b')
 
44
        self.failIfExists('target/a/c')
45
45
 
46
46
    def test_empty(self):
47
47
        wt = self.make_branch_and_tree('.')
49
49
        self.assertEquals([], os.listdir("target"))
50
50
 
51
51
    def test_symlink(self):
52
 
        self.requireFeature(features.SymlinkFeature)
 
52
        self.requireFeature(tests.SymlinkFeature)
53
53
        wt = self.make_branch_and_tree('.')
54
54
        os.symlink('source', 'link')
55
55
        wt.add(['link'])
56
56
        export.export(wt, 'target', format="dir")
57
 
        self.assertPathExists('target/link')
 
57
        self.failUnlessExists('target/link')
58
58
 
59
59
    def test_to_existing_empty_dir_success(self):
60
60
        self.build_tree(['source/', 'source/a', 'source/b/', 'source/b/c'])
63
63
        wt.commit('1')
64
64
        self.build_tree(['target/'])
65
65
        export.export(wt, 'target', format="dir")
66
 
        self.assertPathExists('target/a')
67
 
        self.assertPathExists('target/b')
68
 
        self.assertPathExists('target/b/c')
69
 
 
70
 
    def test_empty_subdir(self):
71
 
        self.build_tree(['source/', 'source/a', 'source/b/', 'source/b/c'])
72
 
        wt = self.make_branch_and_tree('source')
73
 
        wt.add(['a', 'b', 'b/c'])
74
 
        wt.commit('1')
75
 
        self.build_tree(['target/'])
76
 
        export.export(wt, 'target', format="dir", subdir='')
77
 
        self.assertPathExists('target/a')
78
 
        self.assertPathExists('target/b')
79
 
        self.assertPathExists('target/b/c')
 
66
        self.failUnlessExists('target/a')
 
67
        self.failUnlessExists('target/b')
 
68
        self.failUnlessExists('target/b/c')
80
69
 
81
70
    def test_to_existing_nonempty_dir_fail(self):
82
71
        self.build_tree(['source/', 'source/a', 'source/b/', 'source/b/c'])
84
73
        wt.add(['a', 'b', 'b/c'])
85
74
        wt.commit('1')
86
75
        self.build_tree(['target/', 'target/foo'])
87
 
        self.assertRaises(errors.BzrError,
88
 
            export.export, wt, 'target', format="dir")
 
76
        self.assertRaises(errors.BzrError, export.export, wt, 'target', format="dir")
89
77
 
90
78
    def test_existing_single_file(self):
91
 
        self.build_tree([
92
 
            'dir1/', 'dir1/dir2/', 'dir1/first', 'dir1/dir2/second'])
 
79
        self.build_tree(['dir1/', 'dir1/dir2/', 'dir1/first', 'dir1/dir2/second'])
93
80
        wtree = self.make_branch_and_tree('dir1')
94
81
        wtree.add(['dir2', 'first', 'dir2/second'])
95
82
        wtree.commit('1')
96
83
        export.export(wtree, 'target1', format='dir', subdir='first')
97
 
        self.assertPathExists('target1/first')
 
84
        self.failUnlessExists('target1/first')
98
85
        export.export(wtree, 'target2', format='dir', subdir='dir2/second')
99
 
        self.assertPathExists('target2/second')
 
86
        self.failUnlessExists('target2/second')
100
87
 
101
88
    def test_files_same_timestamp(self):
102
89
        builder = self.make_branch_builder('source')
112
99
        self.addCleanup(b.unlock)
113
100
        tree = b.basis_tree()
114
101
        orig_iter_files_bytes = tree.iter_files_bytes
115
 
 
116
102
        # Make iter_files_bytes slower, so we provoke mtime skew
117
103
        def iter_files_bytes(to_fetch):
118
104
            for thing in orig_iter_files_bytes(to_fetch):
149
135
        self.assertEqual(a_time, t.stat('a').st_mtime)
150
136
        self.assertEqual(b_time, t.stat('b').st_mtime)
151
137
 
152
 
    def test_subdir_files_per_timestamps(self):
153
 
        builder = self.make_branch_builder('source')
154
 
        builder.start_series()
155
 
        foo_time = time.mktime((1999, 12, 12, 0, 0, 0, 0, 0, 0))
156
 
        builder.build_snapshot(None, None, [
157
 
            ('add', ('', 'root-id', 'directory', '')),
158
 
            ('add', ('subdir', 'subdir-id', 'directory', '')),
159
 
            ('add', ('subdir/foo.txt', 'foo-id', 'file', 'content\n'))],
160
 
            timestamp=foo_time)
161
 
        builder.finish_series()
162
 
        b = builder.get_branch()
163
 
        b.lock_read()
164
 
        self.addCleanup(b.unlock)
165
 
        tree = b.basis_tree()
166
 
        export.export(tree, 'target', format='dir', subdir='subdir',
167
 
            per_file_timestamps=True)
168
 
        t = self.get_transport('target')
169
 
        self.assertEquals(foo_time, t.stat('foo.txt').st_mtime)
170
 
 
171
138
 
172
139
class TarExporterTests(tests.TestCaseWithTransport):
173
140
 
242
209
        self.assertRaises(errors.BzrError, export.export, wt, '-',
243
210
            format="txz")
244
211
 
245
 
    def test_export_tarball_generator(self):
 
212
    def test_export_tarball(self):
246
213
        wt = self.make_branch_and_tree('.')
247
214
        self.build_tree(['a'])
248
215
        wt.add(["a"])
251
218
        ball = tarfile.open(None, "w|", target)
252
219
        wt.lock_read()
253
220
        try:
254
 
            for _ in export_tarball_generator(wt, ball, "bar"):
255
 
                pass
 
221
            export_tarball(wt, ball, "bar")
256
222
        finally:
257
223
            wt.unlock()
258
 
        # Ball should now be closed.
259
 
        target.seek(0)
260
 
        ball2 = tarfile.open(None, "r", target)
261
 
        self.addCleanup(ball2.close)
262
 
        self.assertEquals(["bar/a"], ball2.getnames())
 
224
        self.assertEquals(["bar/a"], ball.getnames())
 
225
        ball.close()
263
226
 
264
227
 
265
228
class ZipExporterTests(tests.TestCaseWithTransport):