/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1163 by Martin Pool
- split ExternalCommand class into its own file
1
# Copyright (C) 2004, 2005 by Canonical Ltd
2
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1164 by Martin Pool
- doc
17
# TODO: Perhaps rather than mapping options and arguments back and
18
# forth, we should just pass in the whole argv, and allow
19
# ExternalCommands to handle it differently to internal commands?
20
1163 by Martin Pool
- split ExternalCommand class into its own file
21
1170 by Martin Pool
- make external commands work again
22
import os
23
import sys
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
24
1163 by Martin Pool
- split ExternalCommand class into its own file
25
from bzrlib.commands import Command
1185.31.32 by John Arbash Meinel
Updated the bzr sourcecode to use bzrlib.osutils.pathjoin rather than os.path.join to enforce internal use of / instead of \
26
from bzrlib.osutils import pathjoin
1163 by Martin Pool
- split ExternalCommand class into its own file
27
28
29
class ExternalCommand(Command):
1170 by Martin Pool
- make external commands work again
30
    """Class to wrap external commands."""
1163 by Martin Pool
- split ExternalCommand class into its own file
31
1164 by Martin Pool
- doc
32
    @classmethod
1163 by Martin Pool
- split ExternalCommand class into its own file
33
    def find_command(cls, cmd):
34
        import os.path
35
        bzrpath = os.environ.get('BZRPATH', '')
36
37
        for dir in bzrpath.split(os.pathsep):
1185.31.3 by John Arbash Meinel
Fix ExternalCommand to not run random files in the current directory, unless it is truly in BZRPATH
38
            ## Empty directories are not real paths
39
            if not dir:
40
                continue
1185.31.32 by John Arbash Meinel
Updated the bzr sourcecode to use bzrlib.osutils.pathjoin rather than os.path.join to enforce internal use of / instead of \
41
            path = pathjoin(dir, cmd)
1163 by Martin Pool
- split ExternalCommand class into its own file
42
            if os.path.isfile(path):
43
                return ExternalCommand(path)
44
45
        return None
46
47
48
    def __init__(self, path):
49
        self.path = path
50
51
    def name(self):
1185.31.34 by John Arbash Meinel
Removing instances of os.sep
52
        return os.path.basename(self.path)
1170 by Martin Pool
- make external commands work again
53
54
    def run(self, *args, **kwargs):
55
        raise NotImplementedError('should not be called on %r' % self)
56
57
    def run_argv(self, argv):
58
        return os.spawnv(os.P_WAIT, self.path, [self.path] + argv)
59
60
    def help(self):
61
        m = 'external command from %s\n\n' % self.path
62
        pipe = os.popen('%s --help' % self.path)
63
        return m + pipe.read()
1185.31.34 by John Arbash Meinel
Removing instances of os.sep
64