changeset 598:3cec8634209a

admin: Ability to configure SCM stuff per site.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 22 Jan 2016 11:01:00 -0800
parents 79a31a3c947b
children d7baac1d01e6
files foodtruck/scm/base.py foodtruck/scm/mercurial.py foodtruck/sites.py foodtruck/views/edit.py
diffstat 4 files changed, 28 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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()
 
--- 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.")
 
--- 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
--- 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)