aboutsummaryrefslogtreecommitdiff
path: root/delivery_merge
diff options
context:
space:
mode:
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