23
from bzrlib.branch import Branch
27
from bzrlib.export import (
30
from bzrlib.tests import TestSkipped
24
31
from bzrlib.tests.blackbox import ExternalBase
25
import tarfile, zipfile
27
34
class TestExport(ExternalBase):
29
36
def test_tar_export(self):
37
tree = self.make_branch_and_tree('tar')
38
self.build_tree(['tar/a'])
42
self.run_bzr('ignore', 'something')
35
open('a', 'wb').write('foo\n')
37
self.runbzr('ignore something')
38
self.runbzr('commit -m 1')
39
self.runbzr('export test.tar.gz')
45
self.failUnless(tree.has_filename('.bzrignore'))
46
self.run_bzr('export', 'test.tar.gz')
40
47
ball = tarfile.open('test.tar.gz')
41
for m in ball.getnames():
43
self.failIf(os.path.basename(m) == '.bzrignore', 'tar export contains .bzrignore')
48
# Make sure the tarball contains 'a', but does not contain
50
self.assertEqual(['test/a'], sorted(ball.getnames()))
52
def test_tar_export_unicode(self):
53
tree = self.make_branch_and_tree('tar')
56
self.build_tree(['tar/' + fname])
58
raise TestSkipped('Unable to represent path %r' % (fname,))
63
self.run_bzr('export', 'test.tar')
64
ball = tarfile.open('test.tar')
65
# all paths are prefixed with the base name of the tarball
66
self.assertEqual(['test/' + fname.encode('utf8')],
67
sorted(ball.getnames()))
45
69
def test_zip_export(self):
51
open('a', 'wb').write('foo\n')
53
self.runbzr('ignore something')
54
self.runbzr('commit -m 1')
55
self.runbzr('export test.zip')
56
ball = zipfile.ZipFile('test.zip')
57
for m in ball.namelist():
59
self.failIf(os.path.basename(m) == '.bzrignore', 'zip export contains .bzrignore')
70
tree = self.make_branch_and_tree('zip')
71
self.build_tree(['zip/a'])
75
self.run_bzr('ignore', 'something')
78
self.failUnless(tree.has_filename('.bzrignore'))
79
self.run_bzr('export', 'test.zip')
81
zfile = zipfile.ZipFile('test.zip')
82
# Make sure the zipfile contains 'a', but does not contain
84
self.assertEqual(['test/a'], sorted(zfile.namelist()))
86
def test_zip_export_unicode(self):
87
tree = self.make_branch_and_tree('zip')
90
self.build_tree(['zip/' + fname])
92
raise TestSkipped('Unable to represent path %r' % (fname,))
97
self.run_bzr('export', 'test.zip')
98
zfile = zipfile.ZipFile('test.zip')
99
# all paths are prefixed with the base name of the zipfile
100
self.assertEqual(['test/' + fname.encode('utf8')],
101
sorted(zfile.namelist()))
103
def test_zip_export_directories(self):
104
tree = self.make_branch_and_tree('zip')
105
self.build_tree(['zip/a', 'zip/b/', 'zip/b/c', 'zip/d/'])
106
tree.add(['a', 'b', 'b/c', 'd'])
110
self.run_bzr('export', 'test.zip')
111
zfile = zipfile.ZipFile('test.zip')
112
names = sorted(zfile.namelist())
114
# even on win32, zipfile.ZipFile changes all names to use
116
self.assertEqual(['test/a', 'test/b/', 'test/b/c', 'test/d/'], names)
118
file_attr = stat.S_IFREG
119
dir_attr = stat.S_IFDIR | zip_exporter.ZIP_DIRECTORY_BIT
121
a_info = zfile.getinfo(names[0])
122
self.assertEqual(file_attr, a_info.external_attr)
124
b_info = zfile.getinfo(names[1])
125
self.assertEqual(dir_attr, b_info.external_attr)
127
c_info = zfile.getinfo(names[2])
128
self.assertEqual(file_attr, c_info.external_attr)
130
d_info = zfile.getinfo(names[3])
131
self.assertEqual(dir_attr, d_info.external_attr)
61
133
def test_dir_export(self):
134
tree = self.make_branch_and_tree('dir')
135
self.build_tree(['dir/a'])
139
self.run_bzr('ignore', 'something')
67
open('a', 'wb').write('foo\n')
69
self.runbzr('ignore something')
70
self.runbzr('commit -m 1')
71
self.runbzr('export direxport')
142
self.failUnless(tree.has_filename('.bzrignore'))
143
self.run_bzr('export', 'direxport')
73
145
files = sorted(os.listdir('direxport'))
74
self.assertEqual(['a'], files, 'dir contains .bzrignore')
146
# Make sure the exported directory contains 'a', but does not contain
148
self.assertEqual(['a'], files)
150
def example_branch(self):
151
tree = self.make_branch_and_tree('branch')
152
self.build_tree_contents([('branch/hello', 'foo')])
156
self.build_tree_contents([('branch/goodbye', 'baz')])
161
def test_basic_directory_export(self):
162
self.example_branch()
166
self.run_bzr('export', '../latest')
167
self.assertEqual(['goodbye', 'hello'], sorted(os.listdir('../latest')))
168
self.check_file_contents('../latest/goodbye', 'baz')
169
self.run_bzr('export', '../first', '-r', '1')
170
self.assertEqual(['hello'], sorted(os.listdir('../first')))
171
self.check_file_contents('../first/hello', 'foo')
173
# Even with .gz and .bz2 it is still a directory
174
self.run_bzr('export', '../first.gz', '-r', '1')
175
self.check_file_contents('../first.gz/hello', 'foo')
176
self.run_bzr('export', '../first.bz2', '-r', '1')
177
self.check_file_contents('../first.bz2/hello', 'foo')
179
def test_basic_tarfile_export(self):
180
self.example_branch()
183
self.run_bzr('export', '../first.tar', '-r', '1')
184
self.failUnless(os.path.isfile('../first.tar'))
185
tf = tarfile.open('../first.tar')
187
self.assertEqual(['first/hello'], sorted(tf.getnames()))
188
self.assertEqual('foo', tf.extractfile('first/hello').read())
192
self.run_bzr('export', '../first.tar.gz', '-r', '1')
193
self.failUnless(os.path.isfile('../first.tar.gz'))
194
self.run_bzr('export', '../first.tbz2', '-r', '1')
195
self.failUnless(os.path.isfile('../first.tbz2'))
196
self.run_bzr('export', '../first.tar.bz2', '-r', '1')
197
self.failUnless(os.path.isfile('../first.tar.bz2'))
198
self.run_bzr('export', '../first.tar.tbz2', '-r', '1')
199
self.failUnless(os.path.isfile('../first.tar.tbz2'))
201
tf = tarfile.open('../first.tar.tbz2', 'r:bz2')
203
self.assertEqual(['first.tar/hello'], sorted(tf.getnames()))
204
self.assertEqual('foo', tf.extractfile('first.tar/hello').read())
207
self.run_bzr('export', '../first2.tar', '-r', '1', '--root', 'pizza')
208
tf = tarfile.open('../first2.tar')
210
self.assertEqual(['pizza/hello'], sorted(tf.getnames()))
211
self.assertEqual('foo', tf.extractfile('pizza/hello').read())
215
def test_basic_zipfile_export(self):
216
self.example_branch()
219
self.run_bzr('export', '../first.zip', '-r', '1')
220
self.failUnlessExists('../first.zip')
221
zf = zipfile.ZipFile('../first.zip')
223
self.assertEqual(['first/hello'], sorted(zf.namelist()))
224
self.assertEqual('foo', zf.read('first/hello'))
228
self.run_bzr('export', '../first2.zip', '-r', '1', '--root', 'pizza')
229
zf = zipfile.ZipFile('../first2.zip')
231
self.assertEqual(['pizza/hello'], sorted(zf.namelist()))
232
self.assertEqual('foo', zf.read('pizza/hello'))
236
self.run_bzr('export', '../first-zip', '--format=zip', '-r', '1')
237
zf = zipfile.ZipFile('../first-zip')
239
self.assertEqual(['first-zip/hello'], sorted(zf.namelist()))
240
self.assertEqual('foo', zf.read('first-zip/hello'))