diff --git a/cmdeploy/src/cmdeploy/__init__.py b/cmdeploy/src/cmdeploy/__init__.py index 6815e356..c1f407d6 100644 --- a/cmdeploy/src/cmdeploy/__init__.py +++ b/cmdeploy/src/cmdeploy/__init__.py @@ -681,7 +681,7 @@ def deploy_chatmail(config_path: Path, disable_mail: bool) -> None: check_config(config) mail_domain = config.mail_domain - from .www import build_webpages, get_paths + from .www import build_webpages, find_merge_conflict, get_paths server.group(name="Create vmail group", group="vmail", system=True) server.user(name="Create vmail user", user="vmail", group="vmail", system=True) @@ -823,6 +823,8 @@ def deploy_chatmail(config_path: Path, disable_mail: bool) -> None: # if www_folder was set to a non-existing folder, skip upload if not www_path.is_dir(): logger.warning("Building web pages is disabled in chatmail.ini, skipping") + elif (path := find_merge_conflict(src_dir)) is not None: + logger.warning(f"Merge conflict found in {path}, skipping") else: # if www_folder is a hugo page, build it if build_dir: diff --git a/cmdeploy/src/cmdeploy/www.py b/cmdeploy/src/cmdeploy/www.py index c013d741..03b5af98 100644 --- a/cmdeploy/src/cmdeploy/www.py +++ b/cmdeploy/src/cmdeploy/www.py @@ -4,6 +4,7 @@ import time import traceback import webbrowser from pathlib import Path +import re import markdown from chatmaild.config import read_config @@ -12,6 +13,9 @@ from jinja2 import Template from .genqr import gen_qr_png_data +_MERGE_CONFLICT_RE = re.compile(r"^<<<<<<<.+^=======.+^>>>>>>>", re.DOTALL | re.MULTILINE) + + def snapshot_dir_stats(somedir): d = {} for path in somedir.iterdir(): @@ -116,6 +120,17 @@ def _build_webpages(src_dir, build_dir, config): return build_dir +def find_merge_conflict(src_dir) -> Path: + assert src_dir.exists(), src_dir + result = None + for path in src_dir.iterdir(): + if path.suffix in [".css", ".html", ".md"]: + if _MERGE_CONFLICT_RE.search(path.read_text()): + result = path + break + return result + + def main(): path = importlib.resources.files(__package__) reporoot = path.joinpath("../../../").resolve()