aboutsummaryrefslogtreecommitdiffstats
path: root/libbe/rcs.py
diff options
context:
space:
mode:
Diffstat (limited to 'libbe/rcs.py')
-rw-r--r--libbe/rcs.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/libbe/rcs.py b/libbe/rcs.py
index ac96734..64503db 100644
--- a/libbe/rcs.py
+++ b/libbe/rcs.py
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from subprocess import Popen, PIPE
+import sys
+
def rcs_by_name(rcs_name):
"""Return the module for the RCS with the given name"""
if rcs_name == "Arch":
@@ -23,6 +25,9 @@ def rcs_by_name(rcs_name):
elif rcs_name == "bzr":
import bzr
return bzr
+ elif rcs_name == "hg":
+ import hg
+ return hg
elif rcs_name == "None":
import no_rcs
return no_rcs
@@ -31,10 +36,13 @@ def detect(dir):
"""Return the module for the rcs being used in this directory"""
import arch
import bzr
+ import hg
if arch.detect(dir):
return arch
elif bzr.detect(dir):
return bzr
+ elif hg.detect(dir):
+ return hg
import no_rcs
return no_rcs
@@ -44,10 +52,14 @@ class CommandError(Exception):
self.err_str = err_str
self.status = status
-def invoke(args, expect=(0,)):
- q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
- output = q.stdout.read()
- error = q.stderr.read()
+def invoke(args, expect=(0,), cwd=None):
+ if sys.platform != "win32":
+ q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=cwd)
+ else:
+ # win32 don't have os.execvp() so have to run command in a shell
+ q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True,
+ cwd=cwd)
+ output, error = q.communicate()
status = q.wait()
if status not in expect:
raise CommandError(error, status)