metadata: Make ArchivePolicy an interger internally

This commit is contained in:
Gregor Düster 2023-05-25 19:05:57 +02:00
parent cf887583c0
commit 337974cbed
No known key found for this signature in database
GPG key ID: 1B4181FC97673B9D
12 changed files with 34 additions and 21 deletions

View file

@ -635,6 +635,17 @@ def check_app_field_types(app):
fieldtype=v.__class__.__name__,
)
)
elif t == metadata.TYPE_INT and not isinstance(v, int):
yield (
_(
"{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!"
).format(
appid=app.id,
field=field,
type='int',
fieldtype=v.__class__.__name__,
)
)
def check_antiFeatures(app):
@ -693,8 +704,7 @@ def check_for_unsupported_metadata_files(basedir=""):
def check_current_version_code(app):
"""Check that the CurrentVersionCode is currently available."""
archive_policy = app.get('ArchivePolicy')
if archive_policy and archive_policy.split()[0] == "0":
if app.get('ArchivePolicy') == 0:
return
cv = app.get('CurrentVersionCode')
if cv is not None and cv == 0:
@ -724,13 +734,11 @@ def check_current_version_code(app):
def check_updates_expected(app):
"""Check if update checking makes sense."""
if (
app.get('NoSourceSince') or app.get('ArchivePolicy') == '0 versions'
) and not all(
if (app.get('NoSourceSince') or app.get('ArchivePolicy') == 0) and not all(
app.get(key, 'None') == 'None' for key in ('AutoUpdateMode', 'UpdateCheckMode')
):
yield _(
'App has NoSourceSince or ArchivePolicy "0 versions" but AutoUpdateMode or UpdateCheckMode are not None'
'App has NoSourceSince or ArchivePolicy "0 versions" or 0 but AutoUpdateMode or UpdateCheckMode are not None'
)

View file

@ -195,6 +195,7 @@ fieldtypes = {
'Builds': TYPE_BUILD,
'VercodeOperation': TYPE_LIST,
'CurrentVersionCode': TYPE_INT,
'ArchivePolicy': TYPE_INT,
}
@ -447,10 +448,6 @@ valuetypes = {
r'^[a-fA-F0-9]{64}$',
["AllowedAPKSigningKeys"]),
FieldValidator("Archive Policy",
r'^[0-9]+ versions$',
["ArchivePolicy"]),
FieldValidator("Auto Update Mode",
r"^(Version.*|None)$",
["AutoUpdateMode"]),
@ -1017,6 +1014,9 @@ def post_parse_yaml_metadata(yamldata):
if v or v == 0:
yamldata[k] = _normalize_type_list(k, v)
elif _fieldtype == TYPE_INT:
# ArchivePolicy used to require " versions" in the value.
if k == 'ArchivePolicy' and isinstance(v, str):
v = v.split(' ', maxsplit=1)[0]
v = _normalize_type_int(k, v)
if v or v == 0:
yamldata[k] = v
@ -1210,7 +1210,7 @@ def _app_to_yaml(app):
insert_newline = True
else:
value = app.get(field)
if value or field == 'Builds':
if value or field in ('Builds', 'ArchivePolicy'):
_fieldtype = fieldtype(field)
if field == 'Builds':
if app.get('Builds'):
@ -1226,6 +1226,10 @@ def _app_to_yaml(app):
if len(value) == 1:
cm[field] = value[0]
else:
elif field == 'ArchivePolicy':
if value is None:
continue
cm[field] = _field_to_yaml(fieldtype(field), value)
cm[field] = value
elif _fieldtype == TYPE_MULTILINE:
v = _format_multiline(value)

View file

@ -176,7 +176,7 @@ def status_update_json(apps, apks):
validapks = 0
if app.get('Disabled'):
output['disabled'].append(appid)
elif app.get("ArchivePolicy") and int(app["ArchivePolicy"][:-9]) == 0:
elif app["ArchivePolicy"] == 0:
output['archivePolicy0'].append(appid)
else:
for build in app.get('Builds', []):
@ -1877,7 +1877,7 @@ def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversi
for appid, app in apps.items():
if app.get('ArchivePolicy'):
keepversions = int(app['ArchivePolicy'][:-9])
keepversions = app['ArchivePolicy']
else:
keepversions = defaultkeepversions
if app.get('VercodeOperation'):