match longest archivetype extension first
This commit is contained in:
parent
18fa1c3fea
commit
6afde19a8a
2 changed files with 7 additions and 4 deletions
|
|
@ -7807,13 +7807,15 @@ def get_archive_type(filename=None, type_name=None, type_id=None, strict=False):
|
||||||
else:
|
else:
|
||||||
raise koji.GenericError('one of filename, type_name, or type_id must be specified')
|
raise koji.GenericError('one of filename, type_name, or type_id must be specified')
|
||||||
|
|
||||||
parts = filename.split('.')
|
# otherwise match the filename
|
||||||
query = QueryProcessor(
|
query = QueryProcessor(
|
||||||
tables=['archivetypes'],
|
tables=['archivetypes'],
|
||||||
columns=['id', 'name', 'description', 'extensions', 'compression_type'],
|
columns=['id', 'name', 'description', 'extensions', 'compression_type'],
|
||||||
clauses=['extensions ~* %(pattern)s'],
|
clauses=['extensions ~* %(pattern)s'],
|
||||||
)
|
)
|
||||||
for start in range(len(parts) - 1, -1, -1):
|
# match longest extension first. e.g. .tar.gz before .gz
|
||||||
|
parts = filename.split('.')
|
||||||
|
for start in range(len(parts)):
|
||||||
ext = '.'.join(parts[start:])
|
ext = '.'.join(parts[start:])
|
||||||
query.values['pattern'] = r'(\s|^)%s(\s|$)' % ext
|
query.values['pattern'] = r'(\s|^)%s(\s|$)' % ext
|
||||||
results = query.execute()
|
results = query.execute()
|
||||||
|
|
@ -7825,7 +7827,7 @@ def get_archive_type(filename=None, type_name=None, type_id=None, strict=False):
|
||||||
raise koji.GenericError('multiple matches for file extension: %s' % ext)
|
raise koji.GenericError('multiple matches for file extension: %s' % ext)
|
||||||
# otherwise
|
# otherwise
|
||||||
if strict:
|
if strict:
|
||||||
raise koji.GenericError('unsupported file extension: %s' % ext)
|
raise koji.GenericError('unsupported file extension: %s' % filename)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,8 @@ class TestGetArchiveType(DBQueryTestCase):
|
||||||
archive_info = [{'id': 1, 'name': 'archive-type-1', 'extensions': 'ext'},
|
archive_info = [{'id': 1, 'name': 'archive-type-1', 'extensions': 'ext'},
|
||||||
{'id': 2, 'name': 'archive-type-2', 'extensions': 'ext'}]
|
{'id': 2, 'name': 'archive-type-2', 'extensions': 'ext'}]
|
||||||
filename = 'test-filename.ext'
|
filename = 'test-filename.ext'
|
||||||
self.qp_execute_return_value = archive_info
|
self.qp_execute_side_effect = [[], archive_info]
|
||||||
|
# no matches for full name, multiple matches for .ext
|
||||||
with self.assertRaises(koji.GenericError) as ex:
|
with self.assertRaises(koji.GenericError) as ex:
|
||||||
kojihub.get_archive_type(filename=filename)
|
kojihub.get_archive_type(filename=filename)
|
||||||
self.assertEqual("multiple matches for file extension: ext", str(ex.exception))
|
self.assertEqual("multiple matches for file extension: ext", str(ex.exception))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue