Skip to content
Commits on Source (2)
......@@ -460,26 +460,37 @@ class BinaryCheck(Check):
# check dependency field syntax
for field in ('Breaks', 'Conflicts', 'Depends', 'Enhances', 'Pre-Depends',
'Provides', 'Recommends', 'Replaces', 'Suggests'):
def check_dependency_field(
field, control,
dependency_parser=apt_pkg.parse_depends,
allow_alternatives=True,
require_strict_dependency=False):
value = control.get(field)
if value is not None:
if value.strip() == '':
raise Reject('{0}: empty {1} field'.format(fn, field))
try:
apt_pkg.parse_depends(value)
depends = dependency_parser(value)
except:
raise Reject('{0}: APT could not parse {1} field'.format(fn, field))
for group in depends:
if not allow_alternatives and len(group) != 1:
raise Reject('{0}: {1}: alternatives are not allowed'.format(fn))
if require_strict_dependency \
and any(dependency[2] != '=' for dependency in group):
raise Reject('{0}: {1}: only strict dependencies ("=") are allowed'.format(fn, field))
for field in ('Built-Using',):
value = control.get(field)
if value is not None:
if value.strip() == '':
raise Reject('{0}: empty {1} field'.format(fn, field))
try:
apt_pkg.parse_src_depends(value)
except:
raise Reject('{0}: APT could not parse {1} field'.format(fn, field))
for field in ('Breaks', 'Conflicts', 'Depends', 'Enhances', 'Pre-Depends',
'Recommends', 'Replaces', 'Suggests'):
check_dependency_field(field, control)
check_dependency_field("Provides", control,
allow_alternatives=False,
require_strict_dependency=True)
check_dependency_field("Built-Using", control,
dependency_parser=apt_pkg.parse_src_depends,
allow_alternatives=False,
require_strict_dependency=True)
class BinaryTimestampCheck(Check):
......