/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/test_cmdline.py

  • Committer: Vincent Ladeuil
  • Date: 2012-01-05 14:26:58 UTC
  • mto: This revision was merged to the branch mainline in revision 6468.
  • Revision ID: v.ladeuil+lp@free.fr-20120105142658-vek3v6pzlxb751s2
Tests passing for a first rough version of a cached branch config store. The changes here are too invasive and several parallel proposals have been made. 

@only_raises is evil and gave a hard time since any exception during
save_changes() was swallowed.

Possible improvements: 

- add some needs_write_lock decorators to crucial
  methods (_set_config_location ?) but keep locking the branch at higher levels

- decorate branch.unlock to call stack.save if last_lock() it True
  outside of @only_raises scope (evil decorator)

- add @needs_write_lock to stack.set and stack.remove (will probably get
  rid of most testing issues) we probably need a specialized decorator
  that can relay to the store and from there to the branch or whatever is
  needed. This will also helps bzr config to get it right. The
  get_mutable_section trick should not be needed anymore either.

- decorate branch.unlock to call stack.save if last_lock() it True outside
  of @only_raises scope (evil decorator)

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
from bzrlib import (
19
19
    cmdline,
20
 
    tests)
 
20
    tests,
 
21
    )
 
22
from bzrlib.tests.features import backslashdir_feature
21
23
 
22
24
class TestSplitter(tests.TestCase):
23
25
 
91
93
            u'"x x" "y y"')
92
94
        self.assertAsTokens([(True, u'x x'), (True, u'y y')],
93
95
            u'"x x" \'y y\'', single_quotes_allowed=True)
 
96
 
 
97
    def test_n_backslashes_handling(self):
 
98
        # https://bugs.launchpad.net/bzr/+bug/528944
 
99
        # actually we care about the doubled backslashes when they're
 
100
        # represents UNC paths.
 
101
        # But in fact there is too much weird corner cases
 
102
        # (see https://bugs.launchpad.net/tortoisebzr/+bug/569050)
 
103
        # so to reproduce every bit of windows command-line handling
 
104
        # could be not worth of efforts?
 
105
        self.requireFeature(backslashdir_feature)
 
106
        self.assertAsTokens([(True, r'\\host\path')], r'"\\host\path"')
 
107
        self.assertAsTokens([(False, r'\\host\path')], r'\\host\path')
 
108
        # handling of " after the 2n and 2n+1 backslashes
 
109
        # inside and outside the quoted string
 
110
        self.assertAsTokens([(True, r'\\'), (False, r'*.py')], r'"\\\\" *.py')
 
111
        self.assertAsTokens([(True, r'\\" *.py')], r'"\\\\\" *.py"')
 
112
        self.assertAsTokens([(True, r'\\ *.py')], r'\\\\" *.py"')
 
113
        self.assertAsTokens([(False, r'\\"'), (False, r'*.py')],
 
114
                            r'\\\\\" *.py')
 
115
        self.assertAsTokens([(True, u'\\\\')], u'"\\\\')