Improvements to the SQlite-based local status folder

* Do not inherit LocalStatusSQLiteFolder class from the plaintext
    one.

  * Use some functions already in BaseFolder in both, plaintext and
    sqlite classes.

  * Add a saveall method. The idea is that saveall dumps the entire
    messagelist to disk, while save only commits the uncommited
    changes. Right now, save is noop for sqlite, and equivalent to
    saveall for plaintext, but it enables to be more clever on when we
    commit to disk in the future.

Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
This commit is contained in:
Abdo Roig-Maranges
2013-07-28 13:58:30 +02:00
committed by Eygene Ryabinkin
parent 09556d645e
commit 214137eb7b
3 changed files with 63 additions and 24 deletions

View File

@ -29,6 +29,7 @@ class LocalStatusFolder(BaseFolder):
def __init__(self, name, repository):
self.sep = '.' #needs to be set before super.__init__()
super(LocalStatusFolder, self).__init__(name, repository)
self.root = repository.root
self.filename = os.path.join(self.getroot(), self.getfolderbasename())
self.messagelist = {}
self.savelock = threading.Lock()
@ -47,14 +48,6 @@ class LocalStatusFolder(BaseFolder):
def getname(self):
return self.name
# Interface from BaseFolder
def getroot(self):
return self.repository.root
# Interface from BaseFolder
def getsep(self):
return self.sep
# Interface from BaseFolder
def getfullname(self):
return self.filename
@ -178,6 +171,11 @@ class LocalStatusFolder(BaseFolder):
def save(self):
"""Save changed data to disk. For this backend it is the same as saveall"""
self.saveall()
def saveall(self):
"""Saves the entire messagelist to disk"""
with self.savelock:
file = open(self.filename + ".tmp", "wt")
file.write((self.magicline % self.cur_version) + "\n")