diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-05-08 08:34:29 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-05-08 08:34:29 -0400 |
commit | 8be522461c0a0050666790ee782a8a1b7bb2a3b8 (patch) | |
tree | 7f8e6dda1e9e67cea9789c45504db88790d89226 /delivery_merge/merge.py | |
parent | fed08087c787f7bb175ce97485d7f6b0ba8f7c27 (diff) | |
download | delivery_merge-8be522461c0a0050666790ee782a8a1b7bb2a3b8.tar.gz |
dmfile performs syntax checks
Diffstat (limited to 'delivery_merge/merge.py')
-rw-r--r-- | delivery_merge/merge.py | 24 |
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 |