From 8be522461c0a0050666790ee782a8a1b7bb2a3b8 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 May 2019 08:34:29 -0400 Subject: dmfile performs syntax checks --- delivery_merge/merge.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'delivery_merge/merge.py') diff --git a/delivery_merge/merge.py b/delivery_merge/merge.py index 792c90f..b3bf319 100644 --- a/delivery_merge/merge.py +++ b/delivery_merge/merge.py @@ -7,7 +7,15 @@ from glob import glob from subprocess import run -DMFILE_RE = re.compile(r'^(?P.*)[=<>~\!](?P.*).*$') +DMFILE_RE = re.compile(r'^(?P[A-z\-_l]+)(?:[=<>\!]+)?(?P[A-z0-9. ]+)?') +DMFILE_INVALID_VERSION_RE = re.compile(r'[\ \!\@\#\$\%\^\&\*\(\)\-_]+') + + +class EmptyPackageSpec(Exception): + pass + +class InvalidPackageSpec(Exception): + pass def comment_find(s, delims=[';', '#']): @@ -44,7 +52,21 @@ def dmfile(filename): if not line: continue + match = DMFILE_RE.match(line) + if match is None: + raise InvalidPackageSpec(f"'{line}'") + + pkg = match.groupdict() + if pkg['version']: + version_invalid = DMFILE_INVALID_VERSION_RE.match(pkg['version']) + if version_invalid: + raise InvalidPackageSpec(f"'{line}'") + result.append(line) + + if not result: + raise EmptyPackageSpec("Nothing to do") + return result -- cgit