/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: Canonical.com Patch Queue Manager
  • Date: 2006-09-07 20:47:20 UTC
  • mfrom: (1963.1.12 run-subprocess)
  • Revision ID: pqm@pqm.ubuntu.com-20060907204720-3a4f5b7276ad0948
(jam) Update how we cleanup the environment, and run_bzr_subprocess can take universal_newlines=True

Show diffs side-by-side

added added

removed removed

Lines of Context:
684
684
            'BZR_EMAIL': None,
685
685
            'BZREMAIL': None, # may still be present in the environment
686
686
            'EMAIL': None,
 
687
            'BZR_PROGRESS_BAR': None,
687
688
        }
688
689
        self.__old_env = {}
689
690
        self.addCleanup(self._restoreEnvironment)
690
691
        for name, value in new_env.iteritems():
691
692
            self._captureVar(name, value)
692
693
 
693
 
 
694
694
    def _captureVar(self, name, newvalue):
695
 
        """Set an environment variable, preparing it to be reset when finished."""
696
 
        self.__old_env[name] = os.environ.get(name, None)
697
 
        if newvalue is None:
698
 
            if name in os.environ:
699
 
                del os.environ[name]
700
 
        else:
701
 
            os.environ[name] = newvalue
702
 
 
703
 
    @staticmethod
704
 
    def _restoreVar(name, value):
705
 
        if value is None:
706
 
            if name in os.environ:
707
 
                del os.environ[name]
708
 
        else:
709
 
            os.environ[name] = value
 
695
        """Set an environment variable, and reset it when finished."""
 
696
        self.__old_env[name] = osutils.set_or_unset_env(name, newvalue)
710
697
 
711
698
    def _restoreEnvironment(self):
712
699
        for name, value in self.__old_env.iteritems():
713
 
            self._restoreVar(name, value)
 
700
            osutils.set_or_unset_env(name, value)
714
701
 
715
702
    def tearDown(self):
716
703
        self._runCleanups()
891
878
            variables. A value of None will unset the env variable.
892
879
            The values must be strings. The change will only occur in the
893
880
            child, so you don't need to fix the environment after running.
 
881
        :param universal_newlines: Convert CRLF => LF
894
882
        """
895
883
        env_changes = kwargs.get('env_changes', {})
 
884
 
 
885
        old_env = {}
 
886
 
896
887
        def cleanup_environment():
897
888
            for env_var, value in env_changes.iteritems():
898
 
                if value is None:
899
 
                    if env_var in os.environ:
900
 
                        del os.environ[env_var]
901
 
                else:
902
 
                    os.environ[env_var] = value
 
889
                old_env[env_var] = osutils.set_or_unset_env(env_var, value)
 
890
 
 
891
        def restore_environment():
 
892
            for env_var, value in old_env.iteritems():
 
893
                osutils.set_or_unset_env(env_var, value)
903
894
 
904
895
        bzr_path = os.path.dirname(os.path.dirname(bzrlib.__file__))+'/bzr'
905
896
        args = list(args)
906
 
        process = Popen([sys.executable, bzr_path]+args,
907
 
                         stdout=PIPE, stderr=PIPE,
908
 
                         preexec_fn=cleanup_environment)
 
897
 
 
898
        try:
 
899
            # win32 subprocess doesn't support preexec_fn
 
900
            # so we will avoid using it on all platforms, just to
 
901
            # make sure the code path is used, and we don't break on win32
 
902
            cleanup_environment()
 
903
            process = Popen([sys.executable, bzr_path]+args,
 
904
                             stdout=PIPE, stderr=PIPE)
 
905
        finally:
 
906
            restore_environment()
 
907
            
909
908
        out = process.stdout.read()
910
909
        err = process.stderr.read()
 
910
 
 
911
        if kwargs.get('universal_newlines', False):
 
912
            out = out.replace('\r\n', '\n')
 
913
            err = err.replace('\r\n', '\n')
 
914
 
911
915
        retcode = process.wait()
912
916
        supplied_retcode = kwargs.get('retcode', 0)
913
917
        if supplied_retcode is not None: