aboutsummaryrefslogtreecommitdiffstats
path: root/libbe/storage/vcs/hg.py
diff options
context:
space:
mode:
authorW. Trevor King <wking@drexel.edu>2009-12-29 06:36:23 -0500
committerW. Trevor King <wking@drexel.edu>2009-12-29 06:36:23 -0500
commitaba3a8b27063a1765c49194cb7f9aba8b277d92f (patch)
treeb9885c79f1d352a536c82ecfc616cbc01065a20f /libbe/storage/vcs/hg.py
parent0aa80631bd2dc0a5f28f1dd7db2cbda7d14e67fe (diff)
downloadbugseverywhere-aba3a8b27063a1765c49194cb7f9aba8b277d92f.tar.gz
Updated Hg backend to support .children(revision).
Diffstat (limited to 'libbe/storage/vcs/hg.py')
-rw-r--r--libbe/storage/vcs/hg.py33
1 files changed, 32 insertions, 1 deletions
diff --git a/libbe/storage/vcs/hg.py b/libbe/storage/vcs/hg.py
index 373dfd2..6baf19c 100644
--- a/libbe/storage/vcs/hg.py
+++ b/libbe/storage/vcs/hg.py
@@ -43,7 +43,6 @@ import base
if libbe.TESTING == True:
import doctest
- import sys
import unittest
@@ -113,6 +112,38 @@ class Hg(base.VCS):
else:
return self._u_invoke_client('cat', '-r', revision, path)
+ def _vcs_path(self, id, revision):
+ output = self._u_invoke_client('manifest', '--rev', revision)
+ be_dir = self._cached_path_id._spacer_dirs[0]
+ be_dir_sep = self._cached_path_id._spacer_dirs[0] + os.path.sep
+ files = [f for f in output.splitlines() if f.startswith(be_dir_sep)]
+ for file in files:
+ if not file.startswith(be_dir+os.path.sep):
+ continue
+ parts = file.split(os.path.sep)
+ dir = parts.pop(0) # don't add the first spacer dir
+ for part in parts[:-1]:
+ dir = os.path.join(dir, part)
+ if not dir in files:
+ files.append(dir)
+ for file in files:
+ if self._u_path_to_id(file) == id:
+ return file
+ raise base.InvalidId(id, revision=revision)
+
+ def _vcs_isdir(self, path, revision):
+ output = self._u_invoke_client('manifest', '--rev', revision)
+ files = output.splitlines()
+ if path in files:
+ return False
+ return True
+
+ def _vcs_listdir(self, path, revision):
+ output = self._u_invoke_client('manifest', '--rev', revision)
+ files = output.splitlines()
+ path = path.rstrip(os.path.sep) + os.path.sep
+ return [self._u_rel_path(f, path) for f in files if f.startswith(path)]
+
def _vcs_commit(self, commitfile, allow_empty=False):
args = ['commit', '--logfile', commitfile]
output = self._u_invoke_client(*args)