/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/test_export.py

  • Committer: Jelmer Vernooij
  • Date: 2018-05-06 11:48:54 UTC
  • mto: This revision was merged to the branch mainline in revision 6960.
  • Revision ID: jelmer@jelmer.uk-20180506114854-h4qd9ojaqy8wxjsd
Move .mailmap to root.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Tests for breezy.export."""
18
18
 
19
 
import gzip
20
19
import os
21
20
import tarfile
22
21
import time
28
27
    tests,
29
28
    )
30
29
from ..export import get_root_name
31
 
from ..archive.tar import tarball_generator
 
30
from ..export.tar_exporter import export_tarball_generator
32
31
from ..sixish import (
33
32
    BytesIO,
34
33
    )
59
58
        export.export(wt, 'target', format="dir")
60
59
        self.assertPathExists('target/link')
61
60
 
62
 
    def test_nested_tree(self):
63
 
        wt = self.make_branch_and_tree('.', format='development-subtree')
64
 
        subtree = self.make_branch_and_tree('subtree')
65
 
        self.build_tree(['subtree/file'])
66
 
        subtree.add(['file'])
67
 
        wt.add(['subtree'])
68
 
        export.export(wt, 'target', format="dir")
69
 
        self.assertPathExists('target/subtree')
70
 
        # TODO(jelmer): Once iter_entries_by_dir supports nested tree iteration:
71
 
        # self.assertPathExists('target/subtree/file')
72
 
 
73
61
    def test_to_existing_empty_dir_success(self):
74
62
        self.build_tree(['source/', 'source/a', 'source/b/', 'source/b/c'])
75
63
        wt = self.make_branch_and_tree('source')
99
87
        wt.commit('1')
100
88
        self.build_tree(['target/', 'target/foo'])
101
89
        self.assertRaises(errors.BzrError,
102
 
                          export.export, wt, 'target', format="dir")
 
90
            export.export, wt, 'target', format="dir")
103
91
 
104
92
    def test_existing_single_file(self):
105
93
        self.build_tree([
116
104
        builder = self.make_branch_builder('source')
117
105
        builder.start_series()
118
106
        builder.build_snapshot(None, [
119
 
            ('add', ('', b'root-id', 'directory', '')),
120
 
            ('add', ('a', b'a-id', 'file', b'content\n'))])
 
107
            ('add', ('', 'root-id', 'directory', '')),
 
108
            ('add', ('a', 'a-id', 'file', 'content\n'))])
121
109
        builder.build_snapshot(None, [
122
 
            ('add', ('b', b'b-id', 'file', b'content\n'))])
 
110
            ('add', ('b', 'b-id', 'file', 'content\n'))])
123
111
        builder.finish_series()
124
112
        b = builder.get_branch()
125
113
        b.lock_read()
147
135
        a_time = time.mktime((1999, 12, 12, 0, 0, 0, 0, 0, 0))
148
136
        b_time = time.mktime((1980, 0o1, 0o1, 0, 0, 0, 0, 0, 0))
149
137
        builder.build_snapshot(None, [
150
 
            ('add', ('', b'root-id', 'directory', '')),
151
 
            ('add', ('a', b'a-id', 'file', b'content\n'))],
 
138
            ('add', ('', 'root-id', 'directory', '')),
 
139
            ('add', ('a', 'a-id', 'file', 'content\n'))],
152
140
            timestamp=a_time)
153
141
        builder.build_snapshot(None, [
154
 
            ('add', ('b', b'b-id', 'file', b'content\n'))],
 
142
            ('add', ('b', 'b-id', 'file', 'content\n'))],
155
143
            timestamp=b_time)
156
144
        builder.finish_series()
157
145
        b = builder.get_branch()
168
156
        builder.start_series()
169
157
        foo_time = time.mktime((1999, 12, 12, 0, 0, 0, 0, 0, 0))
170
158
        builder.build_snapshot(None, [
171
 
            ('add', ('', b'root-id', 'directory', '')),
172
 
            ('add', ('subdir', b'subdir-id', 'directory', '')),
173
 
            ('add', ('subdir/foo.txt', b'foo-id', 'file', b'content\n'))],
 
159
            ('add', ('', 'root-id', 'directory', '')),
 
160
            ('add', ('subdir', 'subdir-id', 'directory', '')),
 
161
            ('add', ('subdir/foo.txt', 'foo-id', 'file', 'content\n'))],
174
162
            timestamp=foo_time)
175
163
        builder.finish_series()
176
164
        b = builder.get_branch()
178
166
        self.addCleanup(b.unlock)
179
167
        tree = b.basis_tree()
180
168
        export.export(tree, 'target', format='dir', subdir='subdir',
181
 
                      per_file_timestamps=True)
 
169
            per_file_timestamps=True)
182
170
        t = self.get_transport('target')
183
171
        self.assertEqual(foo_time, t.stat('foo.txt').st_mtime)
184
172
 
216
204
        tf = tarfile.open('target.tar.gz')
217
205
        self.assertEqual(["target/a"], tf.getnames())
218
206
 
219
 
    def test_tgz_consistent_mtime(self):
220
 
        wt = self.make_branch_and_tree('.')
221
 
        self.build_tree(['a'])
222
 
        wt.add(["a"])
223
 
        timestamp = 1547400500
224
 
        revid = wt.commit("1", timestamp=timestamp)
225
 
        revtree = wt.branch.repository.revision_tree(revid)
226
 
        export.export(revtree, 'target.tar.gz', format="tgz")
227
 
        with gzip.GzipFile('target.tar.gz', 'r') as f:
228
 
            f.read()
229
 
            self.assertEqual(int(f.mtime), timestamp)
230
 
 
231
207
    def test_tgz_ignores_dest_path(self):
232
208
        # The target path should not be a part of the target file.
233
209
        # (bug #102234)
238
214
        os.mkdir("testdir1")
239
215
        os.mkdir("testdir2")
240
216
        export.export(wt, 'testdir1/target.tar.gz', format="tgz",
241
 
                      per_file_timestamps=True)
 
217
            per_file_timestamps=True)
242
218
        export.export(wt, 'testdir2/target.tar.gz', format="tgz",
243
 
                      per_file_timestamps=True)
244
 
        file1 = open('testdir1/target.tar.gz', 'rb')
 
219
            per_file_timestamps=True)
 
220
        file1 = open('testdir1/target.tar.gz', 'r')
245
221
        self.addCleanup(file1.close)
246
 
        file2 = open('testdir1/target.tar.gz', 'rb')
 
222
        file2 = open('testdir1/target.tar.gz', 'r')
247
223
        self.addCleanup(file2.close)
248
224
        content1 = file1.read()
249
225
        content2 = file2.read()
250
226
        self.assertEqualDiff(content1, content2)
251
227
        # the gzip module doesn't have a way to read back to the original
252
228
        # filename, but it's stored as-is in the tarfile.
253
 
        self.assertFalse(b"testdir1" in content1)
254
 
        self.assertFalse(b"target.tar.gz" in content1)
255
 
        self.assertTrue(b"target.tar" in content1)
 
229
        self.assertFalse("testdir1" in content1)
 
230
        self.assertFalse("target.tar.gz" in content1)
 
231
        self.assertTrue("target.tar" in content1)
256
232
 
257
233
    def test_tbz2(self):
258
234
        wt = self.make_branch_and_tree('.')
263
239
        tf = tarfile.open('target.tar.bz2')
264
240
        self.assertEqual(["target/a"], tf.getnames())
265
241
 
 
242
    def test_xz_stdout(self):
 
243
        wt = self.make_branch_and_tree('.')
 
244
        self.assertRaises(errors.BzrError, export.export, wt, '-',
 
245
            format="txz")
 
246
 
266
247
    def test_export_tarball_generator(self):
267
248
        wt = self.make_branch_and_tree('.')
268
249
        self.build_tree(['a'])
269
250
        wt.add(["a"])
270
251
        wt.commit("1", timestamp=42)
271
252
        target = BytesIO()
272
 
        with wt.lock_read():
273
 
            target.writelines(tarball_generator(wt, "bar"))
 
253
        ball = tarfile.open(None, "w|", target)
 
254
        wt.lock_read()
 
255
        try:
 
256
            for _ in export_tarball_generator(wt, ball, "bar"):
 
257
                pass
 
258
        finally:
 
259
            wt.unlock()
274
260
        # Ball should now be closed.
275
261
        target.seek(0)
276
262
        ball2 = tarfile.open(None, "r", target)
288
274
        timestamp = 347151600
289
275
        tree.commit('setup', timestamp=timestamp)
290
276
        export.export(tree.basis_tree(), 'test.zip', format='zip',
291
 
                      per_file_timestamps=True)
 
277
            per_file_timestamps=True)
292
278
        zfile = zipfile.ZipFile('test.zip')
293
279
        info = zfile.getinfo("test/har")
294
280
        self.assertEqual(time.localtime(timestamp)[:6], info.date_time)
306
292
        self.assertEqual('bzr-0.0.5', get_root_name('bzr-0.0.5'))
307
293
        self.assertEqual('mytar', get_root_name('a/long/path/mytar.tgz'))
308
294
        self.assertEqual('other',
309
 
                         get_root_name('../parent/../dir/other.tbz2'))
 
295
            get_root_name('../parent/../dir/other.tbz2'))
310
296
        self.assertEqual('', get_root_name('-'))