diff --git a/deploy_config.py b/deploy_config.py index b5b32dd..cfa195a 100644 --- a/deploy_config.py +++ b/deploy_config.py @@ -1,4 +1,5 @@ import os +import logging if __name__ == "__main__": raise SystemExit("Not meant to be run directly!") @@ -8,6 +9,9 @@ def _rsync_cmd(dest): "'{output}/' '{dest}'") return cmd.format(dest=dest, output="{output}") +# configure the logger +logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s') + # make sure git does not block giving pw prompts, git 2.3+ only os.environ["GIT_TERMINAL_PROMPT"] = "0" diff --git a/develop_main.py b/develop_main.py index ab1f3a7..8ce7199 100755 --- a/develop_main.py +++ b/develop_main.py @@ -1,11 +1,10 @@ #! /usr/bin/env python3 +import deploy_config from pelican_deploy import DeploymentRunner import pelican_deploy.webhookbottle -import deploy_config import logging -logging.basicConfig(level=logging.DEBUG) runners = {name: DeploymentRunner(name, conf) for name, conf in deploy_config.RUNNERS.items()} diff --git a/pelican_deploy/deploy.py b/pelican_deploy/deploy.py index 3f0fe6b..ec8f8cc 100644 --- a/pelican_deploy/deploy.py +++ b/pelican_deploy/deploy.py @@ -3,6 +3,7 @@ from collections import namedtuple from pelican_deploy.gittool import Repo, log_git_result from functools import partial from subprocess import Popen, PIPE +from pelican_deploy.util import exception_logged from concurrent.futures import ThreadPoolExecutor from threading import RLock import sys @@ -49,8 +50,13 @@ class DeploymentRunner: self._build_proc = None self._abort = False self._build_lock = RLock() + self._repo_update_lock = RLock() def update_build_repository(self): + with self._repo_update_lock: + self._update_build_repository() + + def _update_build_repository(self): repo = Repo(str(self.build_repo_path)) if not repo.is_repo(): if self.build_repo_path.is_dir() and \ @@ -110,7 +116,8 @@ class DeploymentRunner: if fut.done(): self._futures.remove(fut) - self._futures.add(self._executor.submit(self.build_blocking)) + build_func = exception_logged(self.build_blocking, log.error) + self._futures.add(self._executor.submit(build_func)) def try_abort_build(self): proc = self._build_proc diff --git a/pelican_deploy/util.py b/pelican_deploy/util.py new file mode 100644 index 0000000..16ad02f --- /dev/null +++ b/pelican_deploy/util.py @@ -0,0 +1,8 @@ + +def exception_logged(func, log): + def wrapped(*args, **kwargs): + try: + func(*args, **kwargs) + except: + log("Caught Exception!", exc_info=True) + raise # reraise