diff --git a/fdroidserver/common.py b/fdroidserver/common.py index f600d0d2..5f812206 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -4705,6 +4705,20 @@ def _install_ndk(ndk): ) +def calculate_archive_policy(app, default): + """Calculate the archive policy from the metadata and default config.""" + if app.get('ArchivePolicy') is not None: + archive_policy = app['ArchivePolicy'] + else: + archive_policy = default + if app.get('VercodeOperation'): + archive_policy *= len(app['VercodeOperation']) + builds = [build for build in app.Builds if not build.disable] + if app.Builds and archive_policy > len(builds): + archive_policy = len(builds) + return archive_policy + + FDROIDORG_MIRRORS = [ { 'isPrimary': True, diff --git a/fdroidserver/lint.py b/fdroidserver/lint.py index 8f1f8d71..69b0ca91 100644 --- a/fdroidserver/lint.py +++ b/fdroidserver/lint.py @@ -526,13 +526,23 @@ def check_extlib_dir(apps): used = set() for app in apps: - for build in app.get('Builds', []): + if app.Disabled: + continue + archive_policy = common.calculate_archive_policy( + app, common.config['archive_older'] + ) + builds = [build for build in app.Builds if not build.disable] + + for i in range(len(builds)): + build = builds[i] for path in build.extlibs: path = Path(path) if path not in extlib_files: - yield _( - "{appid}: Unknown extlib {path} in build '{versionName}'" - ).format(appid=app.id, path=path, versionName=build.versionName) + # Don't show error on archived versions + if i >= len(builds) - archive_policy: + yield _( + "{appid}: Unknown extlib {path} in build '{versionName}'" + ).format(appid=app.id, path=path, versionName=build.versionName) else: used.add(path) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 7d443747..e038e166 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -2276,15 +2276,9 @@ def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversi return sorted_list for appid, app in apps.items(): - - if app.get('ArchivePolicy') is not None: - keepversions = app['ArchivePolicy'] - else: - keepversions = defaultkeepversions - if app.get('VercodeOperation'): - keepversions *= len(app['VercodeOperation']) - if common.metadata_find_developer_signing_files(appid, app['CurrentVersionCode']): - keepversions *= 2 + keepversions = common.calculate_archive_policy(app, defaultkeepversions) + if common.metadata_find_developer_signing_files(appid, app['CurrentVersionCode']): + keepversions *= 2 logging.debug(_("Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}") .format(appid=appid, integer=len(apks), keep=keepversions, arch=len(archapks)))