/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 bzrlib/tests/blackbox/test_diff.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-12 18:05:15 UTC
  • mto: (4371.4.5 vila-better-heads)
  • mto: This revision was merged to the branch mainline in revision 4449.
  • Revision ID: john@arbash-meinel.com-20090612180515-t0cwbjsnve094oik
Add a failing test for handling nodes that are in the same linear chain.

It fails because the ancestry skipping causes us to miss the fact that the two nodes
are actually directly related. We could check at the beginning, as the 
code used to do, but I think that will be incomplete for the more-than-two
heads cases.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
21
21
import os
22
22
import re
23
23
 
24
 
from bzrlib import (
25
 
    tests,
26
 
    workingtree,
27
 
    )
28
 
from bzrlib.diff import (
29
 
    DiffTree,
30
 
    format_registry as diff_format_registry,
31
 
    )
 
24
import bzrlib
 
25
from bzrlib import workingtree
 
26
from bzrlib.branch import Branch
 
27
from bzrlib.tests import TestSkipped
 
28
from bzrlib.tests.blackbox import ExternalBase
32
29
 
33
30
 
34
31
def subst_dates(string):
37
34
                  'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
38
35
 
39
36
 
40
 
class DiffBase(tests.TestCaseWithTransport):
 
37
class DiffBase(ExternalBase):
41
38
    """Base class with common setup method"""
42
39
 
43
40
    def make_example_branch(self):
136
133
        out, err = self.run_bzr('diff -r 1..23..123', retcode=3,
137
134
            error_regexes=('one or two revision specifiers',))
138
135
 
139
 
    def test_diff_using_and_format(self):
140
 
        out, err = self.run_bzr('diff --format=default --using=mydi', retcode=3,
141
 
            error_regexes=('are mutually exclusive',))
142
 
 
143
136
    def test_diff_nonexistent_revision(self):
144
137
        out, err = self.run_bzr('diff -r 123', retcode=3,
145
138
            error_regexes=("Requested revision: '123' does not "
305
298
        output = self.run_bzr('diff -r 1.. branch1', retcode=1)
306
299
        self.assertContainsRe(output[0], '\n\\-original line\n\\+repo line\n')
307
300
 
308
 
    def test_custom_format(self):
309
 
        class BooDiffTree(DiffTree):
310
 
 
311
 
            def show_diff(self, specific_files, extra_trees=None):
312
 
                self.to_file.write("BOO!\n")
313
 
                return super(BooDiffTree, self).show_diff(specific_files,
314
 
                    extra_trees)
315
 
 
316
 
        diff_format_registry.register("boo", BooDiffTree, 
317
 
            "Scary diff format")
318
 
        self.addCleanup(diff_format_registry.remove, "boo")
319
 
        self.make_example_branch()
320
 
        self.build_tree_contents([('hello', 'hello world!\n')])
321
 
        output = self.run_bzr('diff --format=boo', retcode=1)
322
 
        self.assertTrue("BOO!" in output[0])
323
 
 
324
301
 
325
302
class TestCheckoutDiff(TestDiff):
326
303
 
378
355
 
379
356
    def test_external_diff(self):
380
357
        """Test that we can spawn an external diff process"""
381
 
        self.disable_missing_extensions_warning()
382
358
        # We have to use run_bzr_subprocess, because we need to
383
359
        # test writing directly to stdout, (there was a bug in
384
360
        # subprocess.py that we had to workaround).
385
361
        # However, if 'diff' may not be available
386
362
        self.make_example_branch()
387
 
        # this will be automatically restored by the base bzr test class
388
 
        os.environ['BZR_PROGRESS_BAR'] = 'none'
389
 
        out, err = self.run_bzr_subprocess('diff -r 1 --diff-options -ub',
390
 
                                           universal_newlines=True,
391
 
                                           retcode=None)
 
363
        orig_progress = os.environ.get('BZR_PROGRESS_BAR')
 
364
        try:
 
365
            os.environ['BZR_PROGRESS_BAR'] = 'none'
 
366
            out, err = self.run_bzr_subprocess('diff -r 1 --diff-options -ub',
 
367
                                               universal_newlines=True,
 
368
                                               retcode=None)
 
369
        finally:
 
370
            if orig_progress is None:
 
371
                del os.environ['BZR_PROGRESS_BAR']
 
372
            else:
 
373
                os.environ['BZR_PROGRESS_BAR'] = orig_progress
 
374
 
392
375
        if 'Diff is not installed on this machine' in err:
393
 
            raise tests.TestSkipped("No external 'diff' is available")
 
376
            raise TestSkipped("No external 'diff' is available")
394
377
        self.assertEqual('', err)
395
378
        # We have to skip the stuff in the middle, because it depends
396
379
        # on time.time()