/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/selftest/__init__.py

[merge] bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
from bzrlib.selftest import TestUtil
36
36
from bzrlib.selftest.TestUtil import TestLoader, TestSuite
37
37
from bzrlib.selftest.treeshape import build_tree_contents
 
38
from bzrlib.errors import BzrError
38
39
 
39
40
MODULES_TO_TEST = []
40
41
MODULES_TO_DOCTEST = []
263
264
        self._cleanups.append(callable)
264
265
 
265
266
    def _cleanEnvironment(self):
266
 
        self.oldenv = os.environ.get('HOME', None)
267
 
        os.environ['HOME'] = os.getcwd()
268
 
        self.bzr_email = os.environ.get('BZREMAIL')
269
 
        if self.bzr_email is not None:
270
 
            del os.environ['BZREMAIL']
271
 
        self.email = os.environ.get('EMAIL')
272
 
        if self.email is not None:
273
 
            del os.environ['EMAIL']
 
267
        new_env = {
 
268
            'HOME': os.getcwd(),
 
269
            'APPDATA': os.getcwd(),
 
270
            'BZREMAIL': None,
 
271
            'EMAIL': None,
 
272
        }
 
273
        self.__old_env = {}
274
274
        self.addCleanup(self._restoreEnvironment)
 
275
        for name, value in new_env.iteritems():
 
276
            self._captureVar(name, value)
 
277
 
 
278
 
 
279
    def _captureVar(self, name, newvalue):
 
280
        """Set an environment variable, preparing it to be reset when finished."""
 
281
        self.__old_env[name] = os.environ.get(name, None)
 
282
        if newvalue is None:
 
283
            if name in os.environ:
 
284
                del os.environ[name]
 
285
        else:
 
286
            os.environ[name] = newvalue
 
287
 
 
288
    @staticmethod
 
289
    def _restoreVar(name, value):
 
290
        if value is None:
 
291
            if name in os.environ:
 
292
                del os.environ[name]
 
293
        else:
 
294
            os.environ[name] = value
275
295
 
276
296
    def _restoreEnvironment(self):
277
 
        os.environ['HOME'] = self.oldenv
278
 
        if os.environ.get('BZREMAIL') is not None:
279
 
            del os.environ['BZREMAIL']
280
 
        if self.bzr_email is not None:
281
 
            os.environ['BZREMAIL'] = self.bzr_email
282
 
        if os.environ.get('EMAIL') is not None:
283
 
            del os.environ['EMAIL']
284
 
        if self.email is not None:
285
 
            os.environ['EMAIL'] = self.email
 
297
        for name, value in self.__old_env.iteritems():
 
298
            self._restoreVar(name, value)
286
299
 
287
300
    def tearDown(self):
288
301
        self._runCleanups()
483
496
            os.chdir(_currentdir)
484
497
        self.addCleanup(_leaveDirectory)
485
498
        
486
 
    def build_tree(self, shape):
 
499
    def build_tree(self, shape, line_endings='native'):
487
500
        """Build a test tree according to a pattern.
488
501
 
489
502
        shape is a sequence of file specifications.  If the final
490
503
        character is '/', a directory is created.
491
504
 
492
505
        This doesn't add anything to a branch.
 
506
        :param line_endings: Either 'binary' or 'native'
 
507
                             in binary mode, exact contents are written
 
508
                             in native mode, the line endings match the
 
509
                             default platform endings.
493
510
        """
494
511
        # XXX: It's OK to just create them using forward slashes on windows?
495
512
        for name in shape:
497
514
            if name[-1] == '/':
498
515
                os.mkdir(name[:-1])
499
516
            else:
500
 
                f = file(name, 'wt')
 
517
                if line_endings == 'binary':
 
518
                    f = file(name, 'wb')
 
519
                elif line_endings == 'native':
 
520
                    f = file(name, 'wt')
 
521
                else:
 
522
                    raise BzrError('Invalid line ending request %r' % (line_endings,))
501
523
                print >>f, "contents of", name
502
524
                f.close()
503
525