aboutsummaryrefslogtreecommitdiffstats
path: root/libbe/storage
diff options
context:
space:
mode:
authorW. Trevor King <wking@drexel.edu>2010-01-28 11:47:59 -0500
committerW. Trevor King <wking@drexel.edu>2010-01-28 11:47:59 -0500
commit76d983ec670ec7f09dace232e8553a80b2a08878 (patch)
treeb348ca3407231eac69fbf535891a66e8d924ae4d /libbe/storage
parent811117714a99252782a3eb064ff9e6346b77403a (diff)
downloadbugseverywhere-76d983ec670ec7f09dace232e8553a80b2a08878.tar.gz
Fix bzrlib.builtins.cmd_ls() recursion argument for pre 2.0 bzrlibs.
$ python test.py libbe.storage.vcs.bzr ... ====================================================================== ERROR: Children list should be revision dependent. ---------------------------------------------------------------------- Traceback (most recent call last): File ".../libbe/storage/base.py", line 997, in test_ get_previous_children ret = sorted(self.s.children('parent', revision=revs[i])) File ".../libbe/storage/base.py", line 314, in child ren return self._children(*args, **kwargs) File ".../libbe/storage/vcs/base.py", line 811, in _ children path = self.path(id, revision, relpath=False) File ".../libbe/storage/vcs/base.py", line 716, in p ath path = self._vcs_path(id, revision) File ".../libbe/storage/vcs/bzr.py", line 145, in _v cs_path self.repo, revision=revision, recursive=True) File ".../libbe/storage/vcs/bzr.py", line 163, in _v cs_listdir cmd.run(revision=revision, path=path, recursive=recursive) File "/usr/lib/python2.5/site-packages/bzrlib/commands.py", line 800, in ignor e_pipe result = func(*args, **kwargs) TypeError: run() got an unexpected keyword argument 'recursive' ... The change is due to (in bzr.dev): revno: 4206.2.1 revision-id: ian.clatworthy@canonical.com-20090326133831-orvicmmc6w29mpfp parent: pqm@pqm.ubuntu.com-20090326063330-evutyvml3067dpsz committer: Ian Clatworthy <ian.clatworthy@canonical.com> branch nick: bzr.ls-recursive-off timestamp: Thu 2009-03-26 23:38:31 +1000 message: ls should be non-recursive by default Which occured between bzr-1.9rc1 and 2.0rc1.: bzr.dev$ bzr tags 2.0rc1 4634.9.1 ... bzr-1.9rc1 3815.3.1 bzr-2.0.1 4634.73.2 ...
Diffstat (limited to 'libbe/storage')
-rw-r--r--libbe/storage/vcs/bzr.py46
1 files changed, 45 insertions, 1 deletions
diff --git a/libbe/storage/vcs/bzr.py b/libbe/storage/vcs/bzr.py
index 1db50f8..b617d68 100644
--- a/libbe/storage/vcs/bzr.py
+++ b/libbe/storage/vcs/bzr.py
@@ -62,6 +62,46 @@ class Bzr(base.VCS):
return None
return bzrlib.__version__
+ def version_cmp(self, *args):
+ """
+ Compare the installed Bazaar version V_i with another version
+ V_o (given in *args). Returns
+ 1 if V_i > V_o,
+ 0 if V_i == V_o, and
+ -1 if V_i < V_o
+ >>> b = Bzr(repo='.')
+ >>> b._vcs_version = lambda : "2.3.1 (release)"
+ >>> b.version_cmp(2,3,1)
+ 0
+ >>> b.version_cmp(2,3,2)
+ -1
+ >>> b.version_cmp(2,3,0)
+ 1
+ >>> b.version_cmp(3)
+ -1
+ >>> b._vcs_version = lambda : "2.0.0pre2"
+ >>> b._parsed_version = None
+ >>> b.version_cmp(3)
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: Cannot parse "2.0.0pre2" portion of Bazaar version "2.0.0pre2"
+ invalid literal for int() with base 10: '0pre2'
+ """
+ if not hasattr(self, '_parsed_version') \
+ or self._parsed_version == None:
+ num_part = self._vcs_version().split(' ')[0]
+ try:
+ self._parsed_version = [int(i) for i in num_part.split('.')]
+ except ValueError, e:
+ raise NotImplementedError(
+ 'Cannot parse "%s" portion of Bazaar version "%s"\n %s'
+ % (num_part, self._vcs_version(), str(e)))
+ cmps = [cmp(a,b) for a,b in zip(self._parsed_version, args)]
+ for c in cmps:
+ if c != 0:
+ return c
+ return 0
+
def _vcs_get_user_id(self):
# excerpted from bzrlib.builtins.cmd_whoami.run()
try:
@@ -160,7 +200,11 @@ class Bzr(base.VCS):
cmd = bzrlib.builtins.cmd_ls()
cmd.outf = StringIO.StringIO()
try:
- cmd.run(revision=revision, path=path, recursive=recursive)
+ if self.version_cmp(2,0,0) == 1:
+ cmd.run(revision=revision, path=path, recursive=recursive)
+ else: # Pre-2.0 Bazaar
+ cmd.run(revision=revision, path=path,
+ non_recursive=not recursive)
except bzrlib.errors.BzrCommandError, e:
if 'not present in revision' in str(e):
raise base.InvalidPath(path, root=self.repo, revision=revision)