diff options
author | W. Trevor King <wking@drexel.edu> | 2010-01-28 11:47:59 -0500 |
---|---|---|
committer | W. Trevor King <wking@drexel.edu> | 2010-01-28 11:47:59 -0500 |
commit | 76d983ec670ec7f09dace232e8553a80b2a08878 (patch) | |
tree | b348ca3407231eac69fbf535891a66e8d924ae4d /libbe/storage/vcs | |
parent | 811117714a99252782a3eb064ff9e6346b77403a (diff) | |
download | bugseverywhere-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/vcs')
-rw-r--r-- | libbe/storage/vcs/bzr.py | 46 |
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) |