summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2012-04-21 12:38:55 +0100
committerLars Wirzenius <liw@liw.fi>2012-04-21 12:38:55 +0100
commitc12b5cbebc084dc475b7c7690bc0831110323811 (patch)
tree2805c43ec14b2c6684f99dcf3ff80e758554c0cb
parent77c4c6fabef940ec017f03725a6e584565e9c5e8 (diff)
downloadlarch-c12b5cbebc084dc475b7c7690bc0831110323811.tar.gz
Disallow changes when in read-only mode
Tests do not yet pass.
-rw-r--r--larch/journal.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/larch/journal.py b/larch/journal.py
index 1c18056..eef0a43 100644
--- a/larch/journal.py
+++ b/larch/journal.py
@@ -83,6 +83,11 @@ class Journal(object):
logging.debug('Automatically rolling back remaining changes')
self.rollback()
+ def _require_rw(self):
+ '''Raise error if modifications are not allowed.'''
+ if not self.allow_writes:
+ raise ReadOnlyMode()
+
def _relative(self, filename):
'''Return the part of filename that is relative to storedir.'''
assert filename.startswith(self.storedir)
@@ -102,11 +107,13 @@ class Journal(object):
def makedirs(self, dirname):
tracing.trace(dirname)
+ self._require_rw()
x = self._new(dirname)
self.fs.makedirs(x)
def overwrite_file(self, filename, contents):
tracing.trace(filename)
+ self._require_rw()
self.fs.overwrite_file(self._new(filename), contents)
def cat(self, filename):
@@ -118,6 +125,7 @@ class Journal(object):
def remove(self, filename):
tracing.trace(filename)
+ self._require_rw()
new = self._new(filename)
deleted = self._deleted(filename)
@@ -176,6 +184,7 @@ class Journal(object):
def rollback(self):
tracing.trace('%s start' % self.storedir)
+ self._require_rw()
if self.fs.exists(self.newdir):
self._clear_directory(self.newdir)
@@ -187,6 +196,7 @@ class Journal(object):
def commit(self, skip=[]):
tracing.trace('%s start' % self.storedir)
+ self._require_rw()
if self.fs.exists(self.deletedir):
self._clear_directory(self.deletedir)