# HG changeset patch # User Ludovic Chabant # Date 1453489260 28800 # Node ID 3cec8634209a62b474d36a593aacceb36aee8bb8 # Parent 79a31a3c947b5c20923fdad1758cb70996ef4044 admin: Ability to configure SCM stuff per site. diff -r 79a31a3c947b -r 3cec8634209a foodtruck/scm/base.py --- a/foodtruck/scm/base.py Wed Jan 20 21:39:18 2016 -0800 +++ b/foodtruck/scm/base.py Fri Jan 22 11:01:00 2016 -0800 @@ -7,12 +7,17 @@ class SourceControl(object): - def __init__(self, root_dir): + def __init__(self, root_dir, cfg): self.root_dir = root_dir + self.config = cfg def getStatus(self): raise NotImplementedError() - def commit(self, paths, author, message): + def commit(self, paths, message, *, author=None): + author = author or self.config.get('author') + self._doCommit(paths, message, author) + + def _doCommit(self, paths, message, author): raise NotImplementedError() diff -r 79a31a3c947b -r 3cec8634209a foodtruck/scm/mercurial.py --- a/foodtruck/scm/mercurial.py Wed Jan 20 21:39:18 2016 -0800 +++ b/foodtruck/scm/mercurial.py Fri Jan 22 11:01:00 2016 -0800 @@ -33,7 +33,7 @@ res.edited_files.append(line[2:]) return res - def commit(self, paths, author, message): + def _doCommit(self, paths, message, author): if not message: raise ValueError("No commit message specified.") diff -r 79a31a3c947b -r 3cec8634209a foodtruck/sites.py --- a/foodtruck/sites.py Wed Jan 20 21:39:18 2016 -0800 +++ b/foodtruck/sites.py Fri Jan 22 11:01:00 2016 -0800 @@ -1,5 +1,6 @@ import os import os.path +import copy import shlex import logging import threading @@ -35,12 +36,27 @@ @property def scm(self): if self._scm is None: - scm_type = self.config.get('scm/type') - if scm_type == 'hg': + cfg = None + scm_cfg = self.config.get('sites/%s/scm' % self.name) + global_scm_cfg = self.config.get('scm') + if scm_cfg: + if global_scm_cfg: + cfg = copy.deepcopy(global_scm_cfg) + merge_dicts(cfg, scm_cfg) + else: + cfg = copy.deepcopy(scm_cfg) + elif global_scm_cfg: + cfg = copy.deepcopy(global_scm_cfg) + + if not cfg or not 'type' in cfg: + raise Exception("No SCM available for site: %s" % self.name) + + if cfg['type'] == 'hg': from .scm.mercurial import MercurialSourceControl - self._scm = MercurialSourceControl(self.root_dir) + self._scm = MercurialSourceControl(self.root_dir, cfg) else: raise NotImplementedError() + return self._scm @property diff -r 79a31a3c947b -r 3cec8634209a foodtruck/views/edit.py --- a/foodtruck/views/edit.py Wed Jan 20 21:39:18 2016 -0800 +++ b/foodtruck/views/edit.py Fri Jan 22 11:01:00 2016 -0800 @@ -39,10 +39,9 @@ page.path, site_app.root_dir)) if 'do_save_and_commit' in request.form: - author = g.config.get('scm/username') message = "Edit %s" % os.path.relpath( page.path, site_app.root_dir) - site.scm.commit([page.path], author, message) + site.scm.commit([page.path], message) if 'do_preview' in request.form: return _preview_page(page)