Mercurial > wikked
changeset 38:60691eefbf67
Moved initialization logic out of the constructors.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 06 Jan 2013 23:01:46 -0800 |
parents | f710528f24b0 |
children | 7ec7cf21840a |
files | wikked/__init__.py wikked/indexer.py wikked/scm.py wikked/wiki.py |
diffstat | 4 files changed, 54 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/__init__.py Sun Jan 06 22:11:38 2013 -0800 +++ b/wikked/__init__.py Sun Jan 06 23:01:46 2013 -0800 @@ -15,6 +15,7 @@ # The main Wiki instance. from wiki import Wiki wiki = Wiki(root=app.config.get('WIKI_ROOT'), logger=app.logger) +wiki.start() # Import views and user loader. import wikked.views
--- a/wikked/indexer.py Sun Jan 06 22:11:38 2013 -0800 +++ b/wikked/indexer.py Sun Jan 06 23:01:46 2013 -0800 @@ -14,6 +14,9 @@ if logger is None: self.logger = logging.getLogger('wikked.index') + def open(self): + raise NotImplementedError() + def update(self, pages): raise NotImplementedError() @@ -24,11 +27,13 @@ class WhooshWikiIndex(WikiIndex): def __init__(self, store_dir, logger=None): WikiIndex.__init__(self, store_dir, logger) - if not os.path.isdir(store_dir): - os.makedirs(store_dir) - self.ix = create_in(store_dir, self._getSchema()) + + def open(self): + if not os.path.isdir(self.store_dir): + os.makedirs(self.store_dir) + self.ix = create_in(self.store_dir, self._getSchema()) else: - self.ix = open_dir(store_dir) + self.ix = open_dir(self.store_dir) def _getSchema(self): schema = Schema(
--- a/wikked/scm.py Sun Jan 06 22:11:38 2013 -0800 +++ b/wikked/scm.py Sun Jan 06 23:01:46 2013 -0800 @@ -24,6 +24,9 @@ if logger is None: self.logger = logging.getLogger('wikked.scm') + def initRepo(self): + raise NotImplementedError() + def getSpecialDirs(self): raise NotImplementedError() @@ -66,17 +69,8 @@ class MercurialSourceControl(SourceControl): def __init__(self, root, logger=None): SourceControl.__init__(self, root, logger) + self.hg = 'hg' - if not os.path.isdir(os.path.join(root, '.hg')): - self._run('init', root, norepo=True) - - ignore_path = os.path.join(root, '.hgignore') - if not os.path.isfile(ignore_path): - with open(ignore_path, 'w') as f: - f.write('.cache') - self._run('add', ignore_path) - self._run('commit', ignore_path, '-m', 'Created .hgignore.') - self.log_style = os.path.join(os.path.dirname(__file__), 'resources', 'hg_log.style') self.actions = { 'A': ACTION_ADD, @@ -84,6 +78,21 @@ 'M': ACTION_EDIT } + def initRepo(self): + # Make a Mercurial repo if there's none. + if not os.path.isdir(os.path.join(self.root, '.hg')): + self.logger.info("Creating Mercurial repository at: " + self.root) + self._run('init', self.root, norepo=True) + + # Create a `.hgignore` file is there's none. + ignore_path = os.path.join(self.root, '.hgignore') + if not os.path.isfile(ignore_path): + self.logger.info("Creating `.hgignore` file.") + with open(ignore_path, 'w') as f: + f.write('.cache') + self._run('add', ignore_path) + self._run('commit', ignore_path, '-m', 'Created .hgignore.') + def getSpecialDirs(self): specials = [ '.hg', '.hgignore', '.hgtags' ] return [ os.path.join(self.root, d) for d in specials ]
--- a/wikked/wiki.py Sun Jan 06 22:11:38 2013 -0800 +++ b/wikked/wiki.py Sun Jan 06 23:01:46 2013 -0800 @@ -14,6 +14,10 @@ from auth import UserManager +class InitializationError(Exception): + pass + + class FormatterNotFound(Exception): pass @@ -247,16 +251,26 @@ self.config.read(config_path) self.fs = FileSystem(root, slugify=Page.title_to_url) - self.scm = MercurialSourceControl(root, self.logger) - self.cache = None #Cache(os.path.join(root, '.cache')) + self.auth = UserManager(self.config, logger=self.logger) self.index = WhooshWikiIndex(os.path.join(root, '.index'), logger=self.logger) - self.auth = UserManager(self.config, logger=self.logger) + + scm_type = 'hg' + if self.config.has_option('wiki', 'scm'): + scm_type = self.config.get('wiki', 'scm') + if scm_type == 'hg': + self.scm = MercurialSourceControl(root, self.logger) + else: + raise InitializationError("No such source control: " + scm_type) + + if (not self.config.has_option('wiki', 'cache') or + self.config.get('wiki', 'cache')): + self.cache = Cache(os.path.join(root, '.cache')) self.fs.excluded.append(config_path) + if self.scm is not None: + self.fs.excluded += self.scm.getSpecialDirs() if self.cache is not None: self.fs.excluded.append(self.cache.cache_dir) - if self.scm is not None: - self.fs.excluded += self.scm.getSpecialDirs() if self.index is not None: self.fs.excluded.append(self.index.store_dir) @@ -266,6 +280,12 @@ } self.fs.page_extensions = list(set(itertools.chain(*self.formatters.itervalues()))) + def start(self): + if self.scm is not None: + self.scm.initRepo() + if self.index is not None: + self.index.open() + @property def root(self): return self.fs.root