39
40
from bzrlib.clone import copy_branch
40
41
from bzrlib.errors import BzrCommandError
41
42
from bzrlib.osutils import has_symlinks
42
from bzrlib.selftest import TestCaseInTempDir, BzrTestBase
43
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
46
class ExternalBase(TestCaseInTempDir):
48
def runbzr(self, args, retcode=0, backtick=False):
49
if isinstance(args, basestring):
53
return self.run_bzr_captured(args, retcode=retcode)[0]
55
return self.run_bzr_captured(args, retcode=retcode)
43
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
44
from bzrlib.tests.blackbox import ExternalBase
58
46
class TestCommands(ExternalBase):
170
158
self.runbzr('commit -m newstuff branch')
171
159
self.runbzr('commit -m newstuff branch', retcode=3)
174
161
def test_ignore_patterns(self):
175
162
from bzrlib.branch import Branch
177
b = Branch.initialize('.')
178
self.assertEquals(list(b.unknowns()), [])
163
Branch.initialize('.')
164
self.assertEquals(self.capture('unknowns'), '')
180
166
file('foo.tmp', 'wt').write('tmp files are ignored')
181
self.assertEquals(list(b.unknowns()), [])
182
167
self.assertEquals(self.capture('unknowns'), '')
184
169
file('foo.c', 'wt').write('int main() {}')
185
self.assertEquals(list(b.unknowns()), ['foo.c'])
186
170
self.assertEquals(self.capture('unknowns'), 'foo.c\n')
188
172
self.runbzr(['add', 'foo.c'])
191
175
# 'ignore' works when creating the .bzignore file
192
176
file('foo.blah', 'wt').write('blah')
193
self.assertEquals(list(b.unknowns()), ['foo.blah'])
177
self.assertEquals(self.capture('unknowns'), 'foo.blah\n')
194
178
self.runbzr('ignore *.blah')
195
self.assertEquals(list(b.unknowns()), [])
179
self.assertEquals(self.capture('unknowns'), '')
196
180
self.assertEquals(file('.bzrignore', 'rU').read(), '*.blah\n')
198
182
# 'ignore' works when then .bzrignore file already exists
199
183
file('garh', 'wt').write('garh')
200
self.assertEquals(list(b.unknowns()), ['garh'])
201
184
self.assertEquals(self.capture('unknowns'), 'garh\n')
202
185
self.runbzr('ignore garh')
203
self.assertEquals(list(b.unknowns()), [])
186
self.assertEquals(self.capture('unknowns'), '')
204
187
self.assertEquals(file('.bzrignore', 'rU').read(), '*.blah\ngarh\n')
206
189
def test_revert(self):
315
298
self.assertEqual(file('../first.gz/hello', 'rt').read(), 'foo')
316
299
self.runbzr('export ../first.bz2 -r 1')
317
300
self.assertEqual(file('../first.bz2/hello', 'rt').read(), 'foo')
302
from tarfile import TarFile
318
303
self.runbzr('export ../first.tar -r 1')
319
304
self.assert_(os.path.isfile('../first.tar'))
320
from tarfile import TarFile
321
305
tf = TarFile('../first.tar')
322
306
self.assert_('first/hello' in tf.getnames(), tf.getnames())
323
307
self.assertEqual(tf.extractfile('first/hello').read(), 'foo')
338
323
tf = TarFile('../first2.tar')
339
324
self.assert_('pizza/hello' in tf.getnames(), tf.getnames())
326
from zipfile import ZipFile
327
self.runbzr('export ../first.zip -r 1')
328
self.failUnlessExists('../first.zip')
329
zf = ZipFile('../first.zip')
330
self.assert_('first/hello' in zf.namelist(), zf.namelist())
331
self.assertEqual(zf.read('first/hello'), 'foo')
333
self.runbzr('export ../first2.zip -r 1 --root pizza')
334
zf = ZipFile('../first2.zip')
335
self.assert_('pizza/hello' in zf.namelist(), zf.namelist())
337
self.runbzr('export ../first-zip --format=zip -r 1')
338
zf = ZipFile('../first-zip')
339
self.assert_('first-zip/hello' in zf.namelist(), zf.namelist())
341
341
def test_diff(self):
342
342
self.example_branch()
343
343
file('hello', 'wt').write('hello world!')
352
352
self.runbzr('diff')
354
354
def test_diff_branches(self):
355
self.build_tree(['branch1/', 'branch1/file', 'branch2/'])
355
self.build_tree(['branch1/', 'branch1/file', 'branch2/'], line_endings='binary')
356
356
branch = Branch.initialize('branch1')
357
branch.working_tree().add(['file'])
358
358
branch.working_tree().commit('add file')
359
359
copy_branch(branch, 'branch2')
360
print >> open('branch2/file', 'w'), 'new content'
360
print >> open('branch2/file', 'wb'), 'new content'
361
361
branch2 = Branch.open('branch2')
362
362
branch2.working_tree().commit('update file')
363
363
# should open branch1 and diff against branch2,
529
529
self.runbzr('pull ../b')
530
530
self.runbzr('pull ../b')
532
def test_inventory(self):
534
def output_equals(value, *args):
535
out = self.runbzr(['inventory'] + list(args), backtick=True)
536
self.assertEquals(out, value)
539
open('a', 'wb').write('hello\n')
545
output_equals('a\n', '--kind', 'file')
546
output_equals('b\n', '--kind', 'directory')
532
548
def test_ls(self):
533
549
"""Test the abilities of 'bzr ls'"""
534
550
bzr = self.runbzr
721
737
results = sorted(out.rstrip('\n').split('\n'))
722
738
self.assertEquals([''], results)
740
def test_add_in_unversioned(self):
741
"""Try to add a file in an unversioned directory.
743
"bzr add" should add the parent(s) as necessary.
745
from bzrlib.branch import Branch
746
Branch.initialize('.')
747
self.build_tree(['inertiatic/', 'inertiatic/esp'])
748
self.assertEquals(self.capture('unknowns'), 'inertiatic\n')
749
self.run_bzr('add', 'inertiatic/esp')
750
self.assertEquals(self.capture('unknowns'), '')
752
# Multiple unversioned parents
753
self.build_tree(['veil/', 'veil/cerpin/', 'veil/cerpin/taxt'])
754
self.assertEquals(self.capture('unknowns'), 'veil\n')
755
self.run_bzr('add', 'veil/cerpin/taxt')
756
self.assertEquals(self.capture('unknowns'), '')
758
# Check whacky paths work
759
self.build_tree(['cicatriz/', 'cicatriz/esp'])
760
self.assertEquals(self.capture('unknowns'), 'cicatriz\n')
761
self.run_bzr('add', 'inertiatic/../cicatriz/esp')
762
self.assertEquals(self.capture('unknowns'), '')
764
def test_add_in_versioned(self):
765
"""Try to add a file in a versioned directory.
767
"bzr add" should do this happily.
769
from bzrlib.branch import Branch
770
Branch.initialize('.')
771
self.build_tree(['inertiatic/', 'inertiatic/esp'])
772
self.assertEquals(self.capture('unknowns'), 'inertiatic\n')
773
self.run_bzr('add', '--no-recurse', 'inertiatic')
774
self.assertEquals(self.capture('unknowns'), 'inertiatic'+os.sep+'esp\n')
775
self.run_bzr('add', 'inertiatic/esp')
776
self.assertEquals(self.capture('unknowns'), '')
778
def test_subdir_add(self):
779
"""Add in subdirectory should add only things from there down"""
780
from bzrlib.branch import Branch
782
eq = self.assertEqual
786
b = Branch.initialize('.')
788
self.build_tree(['src/', 'README'])
790
eq(sorted(t.unknowns()),
793
self.run_bzr('add', 'src')
795
self.build_tree(['src/foo.c'])
800
self.assertEquals(self.capture('unknowns'), 'README\n')
801
eq(len(t.read_working_inventory()), 3)
805
self.assertEquals(self.capture('unknowns'), '')
806
self.run_bzr('check')
724
808
def test_unknown_command(self):
725
809
"""Handling of unknown command."""
726
810
out, err = self.run_bzr_captured(['fluffy-badger'],
1235
1319
def test_log(self):
1236
1320
self.build_tree(['branch/', 'branch/file'])
1237
1321
branch = Branch.initialize('branch')
1238
branch.add(['file'])
1322
branch.working_tree().add(['file'])
1239
1323
branch.working_tree().commit('add file', rev_id='A')
1240
1324
url = self.get_remote_url('branch/file')
1241
1325
output = self.capture('log %s' % url)
1242
1326
self.assertEqual(8, len(output.split('\n')))
1328
def test_check(self):
1329
self.build_tree(['branch/', 'branch/file'])
1330
branch = Branch.initialize('branch')
1331
branch.working_tree().add(['file'])
1332
branch.working_tree().commit('add file', rev_id='A')
1333
url = self.get_remote_url('branch/')
1334
self.run_bzr('check', url)