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

  • Committer: Robert Collins
  • Date: 2006-09-08 00:19:48 UTC
  • mfrom: (1992 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1993.
  • Revision ID: robertc@robertcollins.net-20060908001948-87b1b268cec30ede
Merge bzr.dev and undeprecated WorkingTree.last_revision as per review feedback.

Show diffs side-by-side

added added

removed removed

Lines of Context:
689
689
            'BZR_EMAIL': None,
690
690
            'BZREMAIL': None, # may still be present in the environment
691
691
            'EMAIL': None,
 
692
            'BZR_PROGRESS_BAR': None,
692
693
        }
693
694
        self.__old_env = {}
694
695
        self.addCleanup(self._restoreEnvironment)
695
696
        for name, value in new_env.iteritems():
696
697
            self._captureVar(name, value)
697
698
 
698
 
 
699
699
    def _captureVar(self, name, newvalue):
700
 
        """Set an environment variable, preparing it to be reset when finished."""
701
 
        self.__old_env[name] = os.environ.get(name, None)
702
 
        if newvalue is None:
703
 
            if name in os.environ:
704
 
                del os.environ[name]
705
 
        else:
706
 
            os.environ[name] = newvalue
707
 
 
708
 
    @staticmethod
709
 
    def _restoreVar(name, value):
710
 
        if value is None:
711
 
            if name in os.environ:
712
 
                del os.environ[name]
713
 
        else:
714
 
            os.environ[name] = value
 
700
        """Set an environment variable, and reset it when finished."""
 
701
        self.__old_env[name] = osutils.set_or_unset_env(name, newvalue)
715
702
 
716
703
    def _restoreEnvironment(self):
717
704
        for name, value in self.__old_env.iteritems():
718
 
            self._restoreVar(name, value)
 
705
            osutils.set_or_unset_env(name, value)
719
706
 
720
707
    def tearDown(self):
721
708
        self._runCleanups()
896
883
            variables. A value of None will unset the env variable.
897
884
            The values must be strings. The change will only occur in the
898
885
            child, so you don't need to fix the environment after running.
 
886
        :param universal_newlines: Convert CRLF => LF
899
887
        """
900
888
        env_changes = kwargs.get('env_changes', {})
 
889
 
 
890
        old_env = {}
 
891
 
901
892
        def cleanup_environment():
902
893
            for env_var, value in env_changes.iteritems():
903
 
                if value is None:
904
 
                    del os.environ[env_var]
905
 
                else:
906
 
                    os.environ[env_var] = value
 
894
                old_env[env_var] = osutils.set_or_unset_env(env_var, value)
 
895
 
 
896
        def restore_environment():
 
897
            for env_var, value in old_env.iteritems():
 
898
                osutils.set_or_unset_env(env_var, value)
907
899
 
908
900
        bzr_path = os.path.dirname(os.path.dirname(bzrlib.__file__))+'/bzr'
909
901
        args = list(args)
910
 
        process = Popen([sys.executable, bzr_path]+args,
911
 
                         stdout=PIPE, stderr=PIPE,
912
 
                         preexec_fn=cleanup_environment)
 
902
 
 
903
        try:
 
904
            # win32 subprocess doesn't support preexec_fn
 
905
            # so we will avoid using it on all platforms, just to
 
906
            # make sure the code path is used, and we don't break on win32
 
907
            cleanup_environment()
 
908
            process = Popen([sys.executable, bzr_path]+args,
 
909
                             stdout=PIPE, stderr=PIPE)
 
910
        finally:
 
911
            restore_environment()
 
912
            
913
913
        out = process.stdout.read()
914
914
        err = process.stderr.read()
 
915
 
 
916
        if kwargs.get('universal_newlines', False):
 
917
            out = out.replace('\r\n', '\n')
 
918
            err = err.replace('\r\n', '\n')
 
919
 
915
920
        retcode = process.wait()
916
921
        supplied_retcode = kwargs.get('retcode', 0)
917
922
        if supplied_retcode is not None:
1056
1061
                i = i + 1
1057
1062
                continue
1058
1063
            else:
1059
 
                self.test_dir = candidate_dir
 
1064
                os.mkdir(candidate_dir)
 
1065
                self.test_home_dir = candidate_dir + '/home'
 
1066
                os.mkdir(self.test_home_dir)
 
1067
                self.test_dir = candidate_dir + '/work'
1060
1068
                os.mkdir(self.test_dir)
1061
1069
                os.chdir(self.test_dir)
1062
1070
                break
1063
 
        os.environ['HOME'] = self.test_dir
1064
 
        os.environ['APPDATA'] = self.test_dir
 
1071
        os.environ['HOME'] = self.test_home_dir
 
1072
        os.environ['APPDATA'] = self.test_home_dir
1065
1073
        def _leaveDirectory():
1066
1074
            os.chdir(_currentdir)
1067
1075
        self.addCleanup(_leaveDirectory)
1106
1114
                # On jam's machine, make_kernel_like_tree is:
1107
1115
                #   put:    4.5-7.5s (averaging 6s)
1108
1116
                #   append: 2.9-4.5s
1109
 
                transport.append(urlutils.escape(name), StringIO(content))
 
1117
                #   put_non_atomic: 2.9-4.5s
 
1118
                transport.put_bytes_non_atomic(urlutils.escape(name), content)
1110
1119
 
1111
1120
    def build_tree_contents(self, shape):
1112
1121
        build_tree_contents(shape)