aboutsummaryrefslogtreecommitdiff
path: root/delivery_merge
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2019-05-08 08:34:29 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2019-05-08 08:34:29 -0400
commit8be522461c0a0050666790ee782a8a1b7bb2a3b8 (patch)
tree7f8e6dda1e9e67cea9789c45504db88790d89226 /delivery_merge
parentfed08087c787f7bb175ce97485d7f6b0ba8f7c27 (diff)
downloaddelivery_merge-8be522461c0a0050666790ee782a8a1b7bb2a3b8.tar.gz
dmfile performs syntax checks
Diffstat (limited to 'delivery_merge')
-rw-r--r--delivery_merge/merge.py24
1 files changed, 23 insertions, 1 deletions
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<name>.*)[=<>~\!](?P<version>.*).*$')
+DMFILE_RE = re.compile(r'^(?P<name>[A-z\-_l]+)(?:[=<>\!]+)?(?P<version>[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