aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libbe/arch.py4
-rw-r--r--libbe/bzr.py4
-rw-r--r--libbe/darcs.py26
-rw-r--r--libbe/git.py4
-rw-r--r--libbe/hg.py4
-rw-r--r--libbe/vcs.py25
6 files changed, 37 insertions, 30 deletions
diff --git a/libbe/arch.py b/libbe/arch.py
index c2d7cde..daa8ac6 100644
--- a/libbe/arch.py
+++ b/libbe/arch.py
@@ -53,8 +53,8 @@ class Arch(vcs.VCS):
_project_name = None
_tmp_project = False
_arch_paramdir = os.path.expanduser("~/.arch-params")
- def _vcs_help(self):
- status,output,error = self._u_invoke_client("--help")
+ def _vcs_version(self):
+ status,output,error = self._u_invoke_client("--version")
return output
def _vcs_detect(self, path):
"""Detect whether a directory is revision-controlled using Arch"""
diff --git a/libbe/bzr.py b/libbe/bzr.py
index e9e0649..ed9e032 100644
--- a/libbe/bzr.py
+++ b/libbe/bzr.py
@@ -37,8 +37,8 @@ class Bzr(vcs.VCS):
name = "bzr"
client = "bzr"
versioned = True
- def _vcs_help(self):
- status,output,error = self._u_invoke_client("--help")
+ def _vcs_version(self):
+ status,output,error = self._u_invoke_client("--version")
return output
def _vcs_detect(self, path):
if self._u_search_parent_directories(path, ".bzr") != None :
diff --git a/libbe/darcs.py b/libbe/darcs.py
index 16005f2..9115886 100644
--- a/libbe/darcs.py
+++ b/libbe/darcs.py
@@ -40,8 +40,10 @@ class Darcs(vcs.VCS):
name="darcs"
client="darcs"
versioned=True
- def _vcs_help(self):
- status,output,error = self._u_invoke_client("--help")
+ def _vcs_version(self):
+ status,output,error = self._u_invoke_client("--version")
+ num_part = output.split(" ")[0]
+ self.parsed_version = [int(i) for i in num_part.split(".")]
return output
def _vcs_detect(self, path):
if self._u_search_parent_directories(path, "_darcs") != None :
@@ -95,20 +97,20 @@ class Darcs(vcs.VCS):
def _vcs_get_file_contents(self, path, revision=None, binary=False):
if revision == None:
return vcs.VCS._vcs_get_file_contents(self, path, revision,
- binary=binary)
+ binary=binary)
else:
- try:
- return self._u_invoke_client("show", "contents", "--patch", revision, path)
- except vcs.CommandError:
+ if self.parsed_version[0] >= 2:
+ status,output,error = self._u_invoke_client( \
+ "show", "contents", "--patch", revision, path)
+ return output
+ else:
# Darcs versions < 2.0.0pre2 lack the "show contents" command
- status,output,error = self._u_invoke_client("diff", "--unified",
- "--from-patch",
- revision, path)
+ status,output,error = self._u_invoke_client( \
+ "diff", "--unified", "--from-patch", revision, path)
major_patch = output
- status,output,error = self._u_invoke_client("diff", "--unified",
- "--patch",
- revision, path)
+ status,output,error = self._u_invoke_client( \
+ "diff", "--unified", "--patch", revision, path)
target_patch = output
# "--output -" to be supported in GNU patch > 2.5.9
diff --git a/libbe/git.py b/libbe/git.py
index 3abe3b8..628f9b9 100644
--- a/libbe/git.py
+++ b/libbe/git.py
@@ -36,8 +36,8 @@ class Git(vcs.VCS):
name="git"
client="git"
versioned=True
- def _vcs_help(self):
- status,output,error = self._u_invoke_client("--help")
+ def _vcs_version(self):
+ status,output,error = self._u_invoke_client("--version")
return output
def _vcs_detect(self, path):
if self._u_search_parent_directories(path, ".git") != None :
diff --git a/libbe/hg.py b/libbe/hg.py
index f8f8121..7cd4c2f 100644
--- a/libbe/hg.py
+++ b/libbe/hg.py
@@ -36,8 +36,8 @@ class Hg(vcs.VCS):
name="hg"
client="hg"
versioned=True
- def _vcs_help(self):
- status,output,error = self._u_invoke_client("--help")
+ def _vcs_version(self):
+ status,output,error = self._u_invoke_client("--version")
return output
def _vcs_detect(self, path):
"""Detect whether a directory is revision-controlled using Mercurial"""
diff --git a/libbe/vcs.py b/libbe/vcs.py
index da1f800..7b506e8 100644
--- a/libbe/vcs.py
+++ b/libbe/vcs.py
@@ -124,13 +124,12 @@ class VCS(object):
self._duplicateBasedir = None
self._duplicateDirname = None
self.encoding = encoding
-
- def _vcs_help(self):
+ self.version = self._get_version()
+ def _vcs_version(self):
"""
- Return the command help string.
- (Allows a simple test to see if the client is installed.)
+ Return the VCS version string.
"""
- pass
+ return "0.0"
def _vcs_detect(self, path=None):
"""
Detect whether a directory is revision controlled with this VCS.
@@ -229,15 +228,21 @@ class VCS(object):
specified revision does not exist.
"""
return None
- def installed(self):
+ def _get_version(self):
try:
- self._vcs_help()
- return True
+ ret = self._vcs_version()
+ return ret
except OSError, e:
if e.errno == errno.ENOENT:
- return False
+ return None
+ else:
+ raise OSError, e
except CommandError:
- return False
+ return None
+ def installed(self):
+ if self.version != None:
+ return True
+ return False
def detect(self, path="."):
"""
Detect whether a directory is revision controlled with this VCS.