diff options
author | Sascha Silbe <sascha-pgp@silbe.org> | 2010-03-08 12:31:47 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha-pgp@silbe.org> | 2010-03-08 12:31:47 (GMT) |
commit | 57539b6069dd3a74f72ffe374feed9e42e06b9cc (patch) | |
tree | 6b0a3f19364dd03f53adf98a27a470ba7b227c15 | |
parent | cc0892ad71362c190229ef393fedbe8d8e30012a (diff) |
factor out migration logic
-rw-r--r-- | src/carquinyol/datastore.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py index 306ce09..6824d90 100644 --- a/src/carquinyol/datastore.py +++ b/src/carquinyol/datastore.py @@ -56,23 +56,17 @@ class DataStore(dbus.service.Object): allow_replacement=False) dbus.service.Object.__init__(self, bus_name, DS_OBJECT_PATH) - layout_manager = layoutmanager.get_instance() - migrated = False - old_version = layout_manager.get_version() - if old_version == 0: - migration.migrate_from_0() - migrated = True - elif old_version < 4: - migrated = True - - if migrated: - layout_manager.set_version(layoutmanager.CURRENT_LAYOUT_VERSION) + migrated = self._migrate() self._metadata_store = MetadataStore() self._file_store = FileStore() self._optimizer = Optimizer(self._file_store, self._metadata_store) self._index_store = IndexStore() + if migrated: + self._rebuild_index() + return + try: self._index_store.open_index() except Exception: @@ -80,12 +74,27 @@ class DataStore(dbus.service.Object): self._rebuild_index() return - if migrated: - self._rebuild_index() - elif not layout_manager.index_updated: + if not layout_manager.index_updated: logging.debug('Index is not up-to-date, will update') self._update_index() + def _migrate(self): + """Check version of data store on disk and migrate if necessary. + + Returns True if migration was done and an index rebuild is required, + False otherwise. + """ + layout_manager = layoutmanager.get_instance() + old_version = layout_manager.get_version() + if old_version == layoutmanager.CURRENT_LAYOUT_VERSION: + return False + + if old_version == 0: + migration.migrate_from_0() + + layout_manager.set_version(layoutmanager.CURRENT_LAYOUT_VERSION) + return True + def _rebuild_index(self): """Remove and recreate index.""" layoutmanager.get_instance().index_updated = False |