diff options
Diffstat (limited to 'libbe/storage')
-rw-r--r-- | libbe/storage/__init__.py | 5 | ||||
-rw-r--r-- | libbe/storage/base.py | 13 | ||||
-rw-r--r-- | libbe/storage/vcs/base.py | 13 |
3 files changed, 24 insertions, 7 deletions
diff --git a/libbe/storage/__init__.py b/libbe/storage/__init__.py index 104b1e1..e99f799 100644 --- a/libbe/storage/__init__.py +++ b/libbe/storage/__init__.py @@ -3,6 +3,7 @@ import base ConnectionError = base.ConnectionError +InvalidStorageVersion = base.InvalidStorageVersion InvalidID = base.InvalidID InvalidRevision = base.InvalidRevision InvalidDirectory = base.InvalidDirectory @@ -30,7 +31,7 @@ def get_storage(location): s.repo = location return s -__all__ = [ConnectionError, InvalidID, InvalidRevision, - InvalidDirectory, NotWriteable, NotReadable, +__all__ = [ConnectionError, InvalidStorageVersion, InvalidID, + InvalidRevision, InvalidDirectory, NotWriteable, NotReadable, EmptyCommit, STORAGE_VERSIONS, STORAGE_VERSION, get_storage] diff --git a/libbe/storage/base.py b/libbe/storage/base.py index f32353f..b43f765 100644 --- a/libbe/storage/base.py +++ b/libbe/storage/base.py @@ -26,6 +26,16 @@ if TESTING == True: class ConnectionError (Exception): pass +class InvalidStorageVersion(ConnectionError): + def __init__(self, active_version, expected_version=None): + if expected_version == None: + expected_version = libbe.storage.STORAGE_VERSION + msg = 'Storage in "%s" not the expected "%s"' \ + % (active_version, expected_version) + Exception.__init__(self, msg) + self.active_version = active_version + self.expected_version = expected_version + class InvalidID (KeyError): pass @@ -50,6 +60,7 @@ class EmptyCommit(Exception): def __init__(self): Exception.__init__(self, 'No changes to commit') + class Entry (Tree): def __init__(self, id, value=None, parent=None, directory=False, children=None): @@ -134,7 +145,7 @@ class Storage (object): """Return a version string for this backend.""" return '0' - def storage_version(self): + def storage_version(self, revision=None): """Return the storage format for this backend.""" return libbe.storage.STORAGE_VERSION diff --git a/libbe/storage/vcs/base.py b/libbe/storage/vcs/base.py index 1df08cf..e96b466 100644 --- a/libbe/storage/vcs/base.py +++ b/libbe/storage/vcs/base.py @@ -32,6 +32,7 @@ import re import shutil import sys import tempfile +import types import libbe import libbe.storage @@ -885,15 +886,19 @@ os.listdir(self.get_path("bugs")): if version != libbe.storage.STORAGE_VERSION: upgrade.upgrade(self.repo, version) - def storage_version(self, path=None): + def storage_version(self, revision=None, path=None): """ Requires disk access. """ if path == None: path = os.path.join(self.repo, '.be', 'version') - return libbe.util.encoding.get_file_contents( - path, decode=True).rstrip('\n') - + if revision == None: # don't require connection + return libbe.util.encoding.get_file_contents( + path, decode=True).rstrip('\n') + contents = self._vcs_get_file_contents(path, revision=revision) + if type(contents) != types.UnicodeType: + contents = unicode(contents, self.encoding) + return contents.strip() if libbe.TESTING == True: |