diff options
Diffstat (limited to 'libbe')
-rw-r--r-- | libbe/arch.py | 19 | ||||
-rw-r--r-- | libbe/bugdir.py | 28 | ||||
-rw-r--r-- | libbe/bzr.py | 17 | ||||
-rw-r--r-- | libbe/no_rcs.py | 1 | ||||
-rw-r--r-- | libbe/plugin.py | 2 | ||||
-rw-r--r-- | libbe/utility.py | 3 |
6 files changed, 43 insertions, 27 deletions
diff --git a/libbe/arch.py b/libbe/arch.py index 3152073..28d64d4 100644 --- a/libbe/arch.py +++ b/libbe/arch.py @@ -14,21 +14,22 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -from popen2 import Popen3 +from subprocess import Popen, PIPE import os import config +import errno client = config.get_val("arch_client") if client is None: client = "tla" config.set_val("arch_client", client) def invoke(args): - q=Popen3(args, True) - output = q.fromchild.read() - error = q.childerr.read() + q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) + output = q.stdout.read() + error = q.stderr.read() status = q.wait() - if os.WIFEXITED(status): - return os.WEXITSTATUS(status), output, error + if status >= 0: + return status, output, error raise Exception("Command failed: %s" % error) def invoke_client(*args, **kwargs): @@ -161,12 +162,14 @@ def unlink(path): def detect(path): """Detect whether a directory is revision-controlled using Arch""" path = os.path.realpath(path) + old_path = None while True: if os.path.exists(os.path.join(path, "{arch}")): return True - if path == "/": + if path == old_path: return False - path = os.path.dirname(path) + old_path = path + path = os.path.join('..', path) name = "Arch" diff --git a/libbe/bugdir.py b/libbe/bugdir.py index 0af4706..9fee680 100644 --- a/libbe/bugdir.py +++ b/libbe/bugdir.py @@ -29,22 +29,32 @@ class NoBugDir(Exception): msg = "The directory \"%s\" has no bug directory." % path Exception.__init__(self, msg) self.path = path - + + +def iter_parent_dirs(cur_dir): + cur_dir = os.path.realpath(cur_dir) + old_dir = None + while True: + yield cur_dir + old_dir = cur_dir + cur_dir = os.path.normpath(os.path.join(cur_dir, '..')) + if old_dir == cur_dir: + break; + def tree_root(dir, old_version=False): - rootdir = os.path.realpath(dir) - while (True): - versionfile=os.path.join(rootdir, ".be/version") + for rootdir in iter_parent_dirs(dir): + versionfile=os.path.join(rootdir, ".be", "version") if os.path.exists(versionfile): if not old_version: test_version(versionfile) - break; - elif rootdir == "/": - raise NoBugDir(dir) + return BugDir(os.path.join(rootdir, ".be")) elif not os.path.exists(rootdir): raise NoRootEntry(rootdir) - rootdir=os.path.dirname(rootdir) - return BugDir(os.path.join(rootdir, ".be")) + old_rootdir = rootdir + rootdir=os.path.join('..', rootdir) + + raise NoBugDir(dir) class BadTreeVersion(Exception): def __init__(self, version): diff --git a/libbe/bzr.py b/libbe/bzr.py index fd6d4a6..bc4d98d 100644 --- a/libbe/bzr.py +++ b/libbe/bzr.py @@ -14,19 +14,20 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -from popen2 import Popen3 +from subprocess import Popen import os import config def invoke(args): - q=Popen3(args, True) - output = q.fromchild.read() - error = q.childerr.read() + q=Popen(args) + output = q.stdout.read() + error = q.stderr.read() status = q.wait() - if os.WIFEXITED(status): - return os.WEXITSTATUS(status), output, error + if status >= 0: + return status, output, error raise Exception("Command failed: %s" % error) + def invoke_client(*args, **kwargs): cl_args = ["bzr"] cl_args.extend(args) @@ -91,11 +92,13 @@ def unlink(path): def detect(path): """Detect whether a directory is revision-controlled using bzr""" path = os.path.realpath(path) + old_path = None while True: if os.path.exists(os.path.join(path, ".bzr")): return True - if path == "/": + if path == old_path: return False + old_path = path path = os.path.dirname(path) diff --git a/libbe/no_rcs.py b/libbe/no_rcs.py index 1c02725..7e070b3 100644 --- a/libbe/no_rcs.py +++ b/libbe/no_rcs.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -from popen2 import Popen4 import os import config from os import unlink diff --git a/libbe/plugin.py b/libbe/plugin.py index 234d221..b175733 100644 --- a/libbe/plugin.py +++ b/libbe/plugin.py @@ -46,7 +46,7 @@ def get_plugin(prefix, name): >>> q.startswith("<module 'becommands.list' from ") True """ - dirprefix = '/'.join(prefix.split('.')) + dirprefix = os.path.join(*prefix.split('.')) command_path = os.path.join(plugin_path, dirprefix, name+".py") if os.path.isfile(command_path): return my_import(prefix + "." + name) diff --git a/libbe/utility.py b/libbe/utility.py index 3d805cd..e62f2cd 100644 --- a/libbe/utility.py +++ b/libbe/utility.py @@ -102,7 +102,8 @@ def editor_string(): """Invokes the editor, and returns the user_produced text as a string - >>> del os.environ["EDITOR"] + >>> if "EDITOR" in os.environ: + ... del os.environ["EDITOR"] >>> editor_string() Traceback (most recent call last): CantFindEditor: Can't find editor to get string from |