~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_too_much.py

Merge from integration.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
 
18
# Mr. Smoketoomuch: I'm sorry?
 
19
# Mr. Bounder: You'd better cut down a little then.
 
20
# Mr. Smoketoomuch: Oh, I see! Smoke too much so I'd better cut down a little
 
21
#                   then!
18
22
 
19
23
"""Black-box tests for bzr.
20
24
 
26
30
 
27
31
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
28
32
# Note: Please don't add new tests here, it's too big and bulky.  Instead add
29
 
# them into small suites for the particular function that's tested.
 
33
# them into small suites in bzrlib.tests.blackbox.test_FOO for the particular
 
34
# UI command/aspect that is being tested.
30
35
 
31
36
 
32
37
from cStringIO import StringIO
38
43
from bzrlib.branch import Branch
39
44
from bzrlib.clone import copy_branch
40
45
from bzrlib.errors import BzrCommandError
41
 
from bzrlib.osutils import has_symlinks
42
 
from bzrlib.selftest import TestCaseInTempDir, BzrTestBase
43
 
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
44
 
 
45
 
 
46
 
class ExternalBase(TestCaseInTempDir):
47
 
 
48
 
    def runbzr(self, args, retcode=0, backtick=False):
49
 
        if isinstance(args, basestring):
50
 
            args = args.split()
51
 
 
52
 
        if backtick:
53
 
            return self.run_bzr_captured(args, retcode=retcode)[0]
54
 
        else:
55
 
            return self.run_bzr_captured(args, retcode=retcode)
56
 
 
 
46
from bzrlib.osutils import has_symlinks, pathjoin
 
47
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
 
48
from bzrlib.tests.blackbox import ExternalBase
57
49
 
58
50
class TestCommands(ExternalBase):
59
51
 
223
215
        os.rmdir('revertdir')
224
216
        self.runbzr('revert')
225
217
 
226
 
        os.symlink('/unlikely/to/exist', 'symlink')
227
 
        self.runbzr('add symlink')
228
 
        self.runbzr('commit -m f')
229
 
        os.unlink('symlink')
230
 
        self.runbzr('revert')
231
 
        self.failUnlessExists('symlink')
232
 
        os.unlink('symlink')
233
 
        os.symlink('a-different-path', 'symlink')
234
 
        self.runbzr('revert')
235
 
        self.assertEqual('/unlikely/to/exist',
236
 
                         os.readlink('symlink'))
 
218
        if has_symlinks():
 
219
            os.symlink('/unlikely/to/exist', 'symlink')
 
220
            self.runbzr('add symlink')
 
221
            self.runbzr('commit -m f')
 
222
            os.unlink('symlink')
 
223
            self.runbzr('revert')
 
224
            self.failUnlessExists('symlink')
 
225
            os.unlink('symlink')
 
226
            os.symlink('a-different-path', 'symlink')
 
227
            self.runbzr('revert')
 
228
            self.assertEqual('/unlikely/to/exist',
 
229
                             os.readlink('symlink'))
 
230
        else:
 
231
            self.log("skipping revert symlink tests")
237
232
        
238
233
        file('hello', 'wt').write('xyz')
239
234
        self.runbzr('commit -m xyz hello')
310
305
        self.assertEqual(file('../first.gz/hello', 'rt').read(), 'foo')
311
306
        self.runbzr('export ../first.bz2 -r 1')
312
307
        self.assertEqual(file('../first.bz2/hello', 'rt').read(), 'foo')
 
308
 
 
309
        from tarfile import TarFile
313
310
        self.runbzr('export ../first.tar -r 1')
314
311
        self.assert_(os.path.isfile('../first.tar'))
315
 
        from tarfile import TarFile
316
312
        tf = TarFile('../first.tar')
317
313
        self.assert_('first/hello' in tf.getnames(), tf.getnames())
318
314
        self.assertEqual(tf.extractfile('first/hello').read(), 'foo')
324
320
        self.assert_(os.path.isfile('../first.tar.bz2'))
325
321
        self.runbzr('export ../first.tar.tbz2 -r 1')
326
322
        self.assert_(os.path.isfile('../first.tar.tbz2'))
 
323
 
327
324
        from bz2 import BZ2File
328
325
        tf = TarFile('../first.tar.tbz2', 
329
326
                     fileobj=BZ2File('../first.tar.tbz2', 'r'))
333
330
        tf = TarFile('../first2.tar')
334
331
        self.assert_('pizza/hello' in tf.getnames(), tf.getnames())
335
332
 
 
333
        from zipfile import ZipFile
 
334
        self.runbzr('export ../first.zip -r 1')
 
335
        self.failUnlessExists('../first.zip')
 
336
        zf = ZipFile('../first.zip')
 
337
        self.assert_('first/hello' in zf.namelist(), zf.namelist())
 
338
        self.assertEqual(zf.read('first/hello'), 'foo')
 
339
 
 
340
        self.runbzr('export ../first2.zip -r 1 --root pizza')
 
341
        zf = ZipFile('../first2.zip')
 
342
        self.assert_('pizza/hello' in zf.namelist(), zf.namelist())
 
343
        
 
344
        self.runbzr('export ../first-zip --format=zip -r 1')
 
345
        zf = ZipFile('../first-zip')
 
346
        self.assert_('first-zip/hello' in zf.namelist(), zf.namelist())
 
347
 
336
348
    def test_diff(self):
337
349
        self.example_branch()
338
350
        file('hello', 'wt').write('hello world!')
468
480
        self.assert_(os.path.exists('sub/a.txt.OTHER'))
469
481
        self.assert_(os.path.exists('sub/a.txt.BASE'))
470
482
 
471
 
    def test_pull(self):
472
 
        """Pull changes from one branch to another."""
473
 
        os.mkdir('a')
474
 
        os.chdir('a')
475
 
 
476
 
        self.example_branch()
477
 
        self.runbzr('pull', retcode=3)
478
 
        self.runbzr('missing', retcode=3)
479
 
        self.runbzr('missing .')
480
 
        self.runbzr('missing')
481
 
        self.runbzr('pull')
482
 
        self.runbzr('pull /', retcode=3)
483
 
        self.runbzr('pull')
484
 
 
485
 
        os.chdir('..')
486
 
        self.runbzr('branch a b')
487
 
        os.chdir('b')
488
 
        self.runbzr('pull')
489
 
        os.mkdir('subdir')
490
 
        self.runbzr('add subdir')
491
 
        self.runbzr('commit -m blah --unchanged')
492
 
        os.chdir('../a')
493
 
        a = Branch.open('.')
494
 
        b = Branch.open('../b')
495
 
        self.assertEquals(a.revision_history(), b.revision_history()[:-1])
496
 
        self.runbzr('pull ../b')
497
 
        self.assertEquals(a.revision_history(), b.revision_history())
498
 
        self.runbzr('commit -m blah2 --unchanged')
499
 
        os.chdir('../b')
500
 
        self.runbzr('commit -m blah3 --unchanged')
501
 
        # no overwrite
502
 
        self.runbzr('pull ../a', retcode=3)
503
 
        os.chdir('..')
504
 
        self.runbzr('branch b overwriteme')
505
 
        os.chdir('overwriteme')
506
 
        self.runbzr('pull --overwrite ../a')
507
 
        overwritten = Branch.open('.')
508
 
        self.assertEqual(overwritten.revision_history(),
509
 
                         a.revision_history())
510
 
        os.chdir('../a')
511
 
        self.runbzr('merge ../b')
512
 
        self.runbzr('commit -m blah4 --unchanged')
513
 
        os.chdir('../b/subdir')
514
 
        self.runbzr('pull ../../a')
515
 
        self.assertEquals(a.revision_history()[-1], b.revision_history()[-1])
516
 
        self.runbzr('commit -m blah5 --unchanged')
517
 
        self.runbzr('commit -m blah6 --unchanged')
518
 
        os.chdir('..')
519
 
        self.runbzr('pull ../a')
520
 
        os.chdir('../a')
521
 
        self.runbzr('commit -m blah7 --unchanged')
522
 
        self.runbzr('merge ../b')
523
 
        self.runbzr('commit -m blah8 --unchanged')
524
 
        self.runbzr('pull ../b')
525
 
        self.runbzr('pull ../b')
526
 
 
527
483
    def test_inventory(self):
528
484
        bzr = self.runbzr
529
485
        def output_equals(value, *args):
714
670
    def test_add_reports(self):
715
671
        """add command prints the names of added files."""
716
672
        b = Branch.initialize('.')
717
 
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
 
673
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt', 'CVS'])
718
674
        out = self.run_bzr_captured(['add'], retcode=0)[0]
719
675
        # the ordering is not defined at the moment
720
676
        results = sorted(out.rstrip('\n').split('\n'))
721
 
        self.assertEquals(['added dir',
722
 
                           'added dir'+os.sep+'sub.txt',
723
 
                           'added top.txt',],
 
677
        self.assertEquals(['If you wish to add some of these files, please'\
 
678
                           ' add them by name.',
 
679
                           'added dir',
 
680
                           'added dir/sub.txt',
 
681
                           'added top.txt',
 
682
                           'ignored 1 file(s) matching "CVS"'],
 
683
                          results)
 
684
        out = self.run_bzr_captured(['add', '-v'], retcode=0)[0]
 
685
        results = sorted(out.rstrip('\n').split('\n'))
 
686
        self.assertEquals(['If you wish to add some of these files, please'\
 
687
                           ' add them by name.',
 
688
                           'ignored CVS matching "CVS"'],
724
689
                          results)
725
690
 
726
691
    def test_add_quiet_is(self):
766
731
        self.build_tree(['inertiatic/', 'inertiatic/esp'])
767
732
        self.assertEquals(self.capture('unknowns'), 'inertiatic\n')
768
733
        self.run_bzr('add', '--no-recurse', 'inertiatic')
769
 
        self.assertEquals(self.capture('unknowns'), 'inertiatic'+os.sep+'esp\n')
 
734
        self.assertEquals(self.capture('unknowns'), 'inertiatic/esp\n')
770
735
        self.run_bzr('add', 'inertiatic/esp')
771
736
        self.assertEquals(self.capture('unknowns'), '')
772
737
 
944
909
        self.runbzr('commit --unchanged -m unchanged')
945
910
 
946
911
        os.chdir('../output-branch')
947
 
        # should be a diff as we have not pushed the tree
948
 
        self.runbzr('diff', retcode=1)
949
 
        self.runbzr('revert')
950
 
        # but not now.
 
912
        # There is no longer a difference as long as we have
 
913
        # access to the working tree
951
914
        self.runbzr('diff')
 
915
 
 
916
        # But we should be missing a revision
 
917
        self.runbzr('missing ../my-branch', retcode=1)
 
918
 
952
919
        # diverge the branches
953
920
        self.runbzr('commit --unchanged -m unchanged')
954
921
        os.chdir('../my-branch')
1043
1010
        runbzr('init')
1044
1011
 
1045
1012
        self.assertEquals(capture('root').rstrip(),
1046
 
                          os.path.join(self.test_dir, 'branch1'))
 
1013
                          pathjoin(self.test_dir, 'branch1'))
1047
1014
 
1048
1015
        progress("status of new file")
1049
1016
 
1119
1086
        runbzr("rename sub1 sub2")
1120
1087
        runbzr("move hello.txt sub2")
1121
1088
        self.assertEqual(capture("relpath sub2/hello.txt"),
1122
 
                         os.path.join("sub2", "hello.txt\n"))
 
1089
                         pathjoin("sub2", "hello.txt\n"))
1123
1090
 
1124
1091
        self.assert_(exists("sub2"))
1125
1092
        self.assert_(exists("sub2/hello.txt"))
1141
1108
 
1142
1109
        chdir('sub1/sub2')
1143
1110
        self.assertEquals(capture('root')[:-1],
1144
 
                          os.path.join(self.test_dir, 'branch1'))
 
1111
                          pathjoin(self.test_dir, 'branch1'))
1145
1112
        runbzr('move ../hello.txt .')
1146
1113
        self.assert_(exists('./hello.txt'))
1147
1114
        self.assertEquals(capture('relpath hello.txt'),
1148
 
                          os.path.join('sub1', 'sub2', 'hello.txt') + '\n')
1149
 
        self.assertEquals(capture('relpath ../../sub1/sub2/hello.txt'), os.path.join('sub1', 'sub2', 'hello.txt\n'))
 
1115
                          pathjoin('sub1', 'sub2', 'hello.txt') + '\n')
 
1116
        self.assertEquals(capture('relpath ../../sub1/sub2/hello.txt'), pathjoin('sub1', 'sub2', 'hello.txt\n'))
1150
1117
        runbzr(['commit', '-m', 'move to parent directory'])
1151
1118
        chdir('..')
1152
 
        self.assertEquals(capture('relpath sub2/hello.txt'), os.path.join('sub1', 'sub2', 'hello.txt\n'))
 
1119
        self.assertEquals(capture('relpath sub2/hello.txt'), pathjoin('sub1', 'sub2', 'hello.txt\n'))
1153
1120
 
1154
1121
        runbzr('move sub2/hello.txt .')
1155
1122
        self.assert_(exists('hello.txt'))
1319
1286
        url = self.get_remote_url('branch/file')
1320
1287
        output = self.capture('log %s' % url)
1321
1288
        self.assertEqual(8, len(output.split('\n')))
 
1289
        
 
1290
    def test_check(self):
 
1291
        self.build_tree(['branch/', 'branch/file'])
 
1292
        branch = Branch.initialize('branch')
 
1293
        branch.working_tree().add(['file'])
 
1294
        branch.working_tree().commit('add file', rev_id='A')
 
1295
        url = self.get_remote_url('branch/')
 
1296
        self.run_bzr('check', url)