aboutsummaryrefslogtreecommitdiffstats
path: root/libbe/storage
diff options
context:
space:
mode:
Diffstat (limited to 'libbe/storage')
-rw-r--r--libbe/storage/__init__.py5
-rw-r--r--libbe/storage/base.py13
-rw-r--r--libbe/storage/vcs/base.py13
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: