/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2005, 2006 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
18
"""Black-box tests for bzr export.
19
"""
20
21
import os
2024.2.7 by John Arbash Meinel
Set the external_attr bits so Windows respects our directories
22
import stat
2024.2.6 by John Arbash Meinel
In zip files, directories must have trailing slashes
23
import sys
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
24
import tarfile
25
import zipfile
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
26
2024.2.7 by John Arbash Meinel
Set the external_attr bits so Windows respects our directories
27
from bzrlib.export import (
28
    zip_exporter,
29
    )
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
30
from bzrlib.tests import TestSkipped
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
31
from bzrlib.tests.blackbox import ExternalBase
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
32
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
33
34
class TestExport(ExternalBase):
35
36
    def test_tar_export(self):
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
37
        tree = self.make_branch_and_tree('tar')
38
        self.build_tree(['tar/a'])
39
        tree.add('a')
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
40
41
        os.chdir('tar')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
42
        self.run_bzr('ignore something')
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
43
        tree.commit('1')
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
44
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
45
        self.failUnless(tree.has_filename('.bzrignore'))
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
46
        self.run_bzr('export test.tar.gz')
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
47
        ball = tarfile.open('test.tar.gz')
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
48
        # Make sure the tarball contains 'a', but does not contain
49
        # '.bzrignore'.
50
        self.assertEqual(['test/a'], sorted(ball.getnames()))
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
51
52
    def test_tar_export_unicode(self):
53
        tree = self.make_branch_and_tree('tar')
54
        fname = u'\xe5.txt'
55
        try:
56
            self.build_tree(['tar/' + fname])
57
        except UnicodeError:
58
            raise TestSkipped('Unable to represent path %r' % (fname,))
59
        tree.add([fname])
60
        tree.commit('first')
61
62
        os.chdir('tar')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
63
        self.run_bzr('export test.tar')
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
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()))
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
68
69
    def test_zip_export(self):
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
70
        tree = self.make_branch_and_tree('zip')
71
        self.build_tree(['zip/a'])
72
        tree.add('a')
1185.61.1 by Jamie Wilkinson
add blackbox tests for ensuring .bzrignore is not exported
73
74
        os.chdir('zip')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
75
        self.run_bzr('ignore something')
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
76
        tree.commit('1')
77
78
        self.failUnless(tree.has_filename('.bzrignore'))
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
79
        self.run_bzr('export test.zip')
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
80
81
        zfile = zipfile.ZipFile('test.zip')
82
        # Make sure the zipfile contains 'a', but does not contain
83
        # '.bzrignore'.
84
        self.assertEqual(['test/a'], sorted(zfile.namelist()))
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
85
86
    def test_zip_export_unicode(self):
87
        tree = self.make_branch_and_tree('zip')
88
        fname = u'\xe5.txt'
89
        try:
90
            self.build_tree(['zip/' + fname])
91
        except UnicodeError:
92
            raise TestSkipped('Unable to represent path %r' % (fname,))
93
        tree.add([fname])
94
        tree.commit('first')
95
96
        os.chdir('zip')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
97
        self.run_bzr('export test.zip')
2024.2.1 by John Arbash Meinel
Fix bug #56815 by exporting paths in utf8 to tarfile and zipfile
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()))
1185.61.5 by Jamie Wilkinson
add test for directory export
102
2024.2.6 by John Arbash Meinel
In zip files, directories must have trailing slashes
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'])
107
        tree.commit('init')
108
109
        os.chdir('zip')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
110
        self.run_bzr('export test.zip')
2024.2.6 by John Arbash Meinel
In zip files, directories must have trailing slashes
111
        zfile = zipfile.ZipFile('test.zip')
112
        names = sorted(zfile.namelist())
2024.2.7 by John Arbash Meinel
Set the external_attr bits so Windows respects our directories
113
2024.2.8 by John Arbash Meinel
paths are always forward slashed for python zipfiles
114
        # even on win32, zipfile.ZipFile changes all names to use
115
        # forward slashes
116
        self.assertEqual(['test/a', 'test/b/', 'test/b/c', 'test/d/'], names)
2024.2.7 by John Arbash Meinel
Set the external_attr bits so Windows respects our directories
117
2024.2.8 by John Arbash Meinel
paths are always forward slashed for python zipfiles
118
        file_attr = stat.S_IFREG
119
        dir_attr = stat.S_IFDIR | zip_exporter.ZIP_DIRECTORY_BIT
2024.2.7 by John Arbash Meinel
Set the external_attr bits so Windows respects our directories
120
121
        a_info = zfile.getinfo(names[0])
122
        self.assertEqual(file_attr, a_info.external_attr)
123
124
        b_info = zfile.getinfo(names[1])
125
        self.assertEqual(dir_attr, b_info.external_attr)
126
127
        c_info = zfile.getinfo(names[2])
128
        self.assertEqual(file_attr, c_info.external_attr)
129
130
        d_info = zfile.getinfo(names[3])
131
        self.assertEqual(dir_attr, d_info.external_attr)
2024.2.6 by John Arbash Meinel
In zip files, directories must have trailing slashes
132
1185.61.5 by Jamie Wilkinson
add test for directory export
133
    def test_dir_export(self):
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
134
        tree = self.make_branch_and_tree('dir')
135
        self.build_tree(['dir/a'])
136
        tree.add('a')
1185.61.5 by Jamie Wilkinson
add test for directory export
137
138
        os.chdir('dir')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
139
        self.run_bzr('ignore something')
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
140
        tree.commit('1')
1185.61.5 by Jamie Wilkinson
add test for directory export
141
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
142
        self.failUnless(tree.has_filename('.bzrignore'))
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
143
        self.run_bzr('export direxport')
1185.61.5 by Jamie Wilkinson
add test for directory export
144
145
        files = sorted(os.listdir('direxport'))
2024.2.2 by John Arbash Meinel
Cleanup the export tests to act more like the current api.
146
        # Make sure the exported directory contains 'a', but does not contain
147
        # '.bzrignore'.
148
        self.assertEqual(['a'], files)
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
149
150
    def example_branch(self):
151
        tree = self.make_branch_and_tree('branch')
2024.2.4 by John Arbash Meinel
Use build_tree_contents instead of manually opening the file
152
        self.build_tree_contents([('branch/hello', 'foo')])
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
153
        tree.add('hello')
154
        tree.commit('setup')
155
2024.2.4 by John Arbash Meinel
Use build_tree_contents instead of manually opening the file
156
        self.build_tree_contents([('branch/goodbye', 'baz')])
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
157
        tree.add('goodbye')
158
        tree.commit('setup')
159
        return tree
160
        
161
    def test_basic_directory_export(self):
162
        self.example_branch()
163
        os.chdir('branch')
164
165
        # Directory exports
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
166
        self.run_bzr('export ../latest')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
167
        self.assertEqual(['goodbye', 'hello'], sorted(os.listdir('../latest')))
168
        self.check_file_contents('../latest/goodbye', 'baz')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
169
        self.run_bzr('export ../first -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
170
        self.assertEqual(['hello'], sorted(os.listdir('../first')))
171
        self.check_file_contents('../first/hello', 'foo')
172
173
        # Even with .gz and .bz2 it is still a directory
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
174
        self.run_bzr('export ../first.gz -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
175
        self.check_file_contents('../first.gz/hello', 'foo')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
176
        self.run_bzr('export ../first.bz2 -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
177
        self.check_file_contents('../first.bz2/hello', 'foo')
178
179
    def test_basic_tarfile_export(self):
180
        self.example_branch()
181
        os.chdir('branch')
182
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
183
        self.run_bzr('export ../first.tar -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
184
        self.failUnless(os.path.isfile('../first.tar'))
185
        tf = tarfile.open('../first.tar')
186
        try:
187
            self.assertEqual(['first/hello'], sorted(tf.getnames()))
188
            self.assertEqual('foo', tf.extractfile('first/hello').read())
189
        finally:
190
            tf.close()
191
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
192
        self.run_bzr('export ../first.tar.gz -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
193
        self.failUnless(os.path.isfile('../first.tar.gz'))
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
194
        self.run_bzr('export ../first.tbz2 -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
195
        self.failUnless(os.path.isfile('../first.tbz2'))
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
196
        self.run_bzr('export ../first.tar.bz2 -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
197
        self.failUnless(os.path.isfile('../first.tar.bz2'))
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
198
        self.run_bzr('export ../first.tar.tbz2 -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
199
        self.failUnless(os.path.isfile('../first.tar.tbz2'))
200
201
        tf = tarfile.open('../first.tar.tbz2', 'r:bz2')
202
        try:
203
            self.assertEqual(['first.tar/hello'], sorted(tf.getnames()))
204
            self.assertEqual('foo', tf.extractfile('first.tar/hello').read())
205
        finally:
206
            tf.close()
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
207
        self.run_bzr('export ../first2.tar -r 1 --root pizza')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
208
        tf = tarfile.open('../first2.tar')
209
        try:
210
            self.assertEqual(['pizza/hello'], sorted(tf.getnames()))
211
            self.assertEqual('foo', tf.extractfile('pizza/hello').read())
212
        finally:
213
            tf.close()
214
215
    def test_basic_zipfile_export(self):
216
        self.example_branch()
217
        os.chdir('branch')
218
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
219
        self.run_bzr('export ../first.zip -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
220
        self.failUnlessExists('../first.zip')
221
        zf = zipfile.ZipFile('../first.zip')
222
        try:
223
            self.assertEqual(['first/hello'], sorted(zf.namelist()))
224
            self.assertEqual('foo', zf.read('first/hello'))
225
        finally:
226
            zf.close()
227
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
228
        self.run_bzr('export ../first2.zip -r 1 --root pizza')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
229
        zf = zipfile.ZipFile('../first2.zip')
230
        try:
231
            self.assertEqual(['pizza/hello'], sorted(zf.namelist()))
232
            self.assertEqual('foo', zf.read('pizza/hello'))
233
        finally:
234
            zf.close()
235
        
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
236
        self.run_bzr('export ../first-zip --format=zip -r 1')
2024.2.3 by John Arbash Meinel
Move out export tests from test_too_much, refactor
237
        zf = zipfile.ZipFile('../first-zip')
238
        try:
239
            self.assertEqual(['first-zip/hello'], sorted(zf.namelist()))
240
            self.assertEqual('foo', zf.read('first-zip/hello'))
241
        finally:
242
            zf.close()
243
2099.1.1 by Daniel Silverstone
Add source branch support to export command
244
    def test_export_from_outside_branch(self):
245
        self.example_branch()
246
247
        # Use directory exports to test stating the branch location
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
248
        self.run_bzr('export latest branch')
2099.1.1 by Daniel Silverstone
Add source branch support to export command
249
        self.assertEqual(['goodbye', 'hello'], sorted(os.listdir('latest')))
250
        self.check_file_contents('latest/goodbye', 'baz')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
251
        self.run_bzr('export first -r 1 branch')
2099.1.1 by Daniel Silverstone
Add source branch support to export command
252
        self.assertEqual(['hello'], sorted(os.listdir('first')))
253
        self.check_file_contents('first/hello', 'foo')