On 2021-04-28 13:20:54 +0200, Hans-Christoph Steiner wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
>
> Please unblock package fdroidserver
>
> F-Droid is built on Debian and is a community with the same goals as
> Debian, modeled after Debian. The F-Droid community maintains stable
> release branches for fdroidserver that are devoted to each Debian
> release. buster has 1.1.x and bullseye has 2.0.x. I am both package
> maintainer and upstream on this package, and a Debian Developer. The
> 2.0.1 release includes only narrow bug and compatibility fixes. This
> package has an extensive autopkgtest suite.
The autopkgtests currently fail on ppc64el. If they were fixed, the
package would migrate without an action from our side.
Best
Sebastian
>
> These are specific issues that are fixed:
>
> * corrupt app icons are published, instead of valid PNGs #987717
> * stop setting up source repo when running lint/rewritemeta
> https://gitlab.com/fdroid/fdroidserver/commit/92438bbf78532b89fb7619601cf75c95e7d7f0a0
> * use latest SPDX license info
> https://gitlab.com/fdroid/fdroidserver/commit/eca7b23fc9f742d9420ec068cf0d60e5bdcf497e
> * crash on bad fastlane/triple-t files
> https://gitlab.com/fdroid/fdroidserver/commit/cfbee12ad2a1385aaf0aa7d9076924373639d189
> * crash on bad repo file:
> https://gitlab.com/fdroid/fdroidserver/commit/240139baf9778536251b9deee4c0e071a2333ebb
>
>
> Previous stable updates to fdroidserver are here:
>
> * #960885
> * #935809
> * #856358
> * #773166
>
> --------------------------------------------------------------------
>
> Here's the debdiff, note that the majority of the changes are to test
> files, which are also part of the autopkgtest run:
>
>
> diff -Nru fdroidserver-2.0/CHANGELOG.md fdroidserver-2.0.1/CHANGELOG.md
> --- fdroidserver-2.0/CHANGELOG.md 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/CHANGELOG.md 2021-03-09 18:21:30.000000000 +0100
> @@ -4,6 +4,20 @@
>
> The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
>
> +## [2.0.1] - 2020-03-09
> +
> +### Fixed
> +
> +* metadata: stop setting up source repo when running lint/rewritemeta
> +* scanner: show error if scan_binary fails to run apkanalyzer
> +* common: properly parse version from NDK's source.properties
> +* update: stop extracting and storing XML icons, they're useless
> +* index: raise error rather than crash on bad repo file
> +* update: handle large, corrupt, or inaccessible fastlane/triple-t files
> +* Update SPDX License List
> +* checkupdates: set User-Agent to make gitlab.com happy
> +* Run push_binary_transparency only once
> +
> ## [2.0] - 2020-01-31
>
> For a more complete overview, see the [2.0
> diff -Nru fdroidserver-2.0/debian/changelog fdroidserver-2.0.1/debian/changelog
> --- fdroidserver-2.0/debian/changelog 2021-02-02 13:28:22.000000000 +0100
> +++ fdroidserver-2.0.1/debian/changelog 2021-03-09 18:26:20.000000000 +0100
> @@ -1,3 +1,9 @@
> +fdroidserver (2.0.1-1) unstable; urgency=medium
> +
> + * New upstream version 2.0.1
> +
> + -- Hans-Christoph Steiner <hans@eds.org> Tue, 09 Mar 2021 18:26:20 +0100
> +
> fdroidserver (2.0-1) unstable; urgency=medium
>
> * New upstream version 2.0
> diff -Nru fdroidserver-2.0/examples/fdroid_fetchsrclibs.py fdroidserver-2.0.1/examples/fdroid_fetchsrclibs.py
> --- fdroidserver-2.0/examples/fdroid_fetchsrclibs.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/examples/fdroid_fetchsrclibs.py 2021-03-09 18:21:30.000000000 +0100
> @@ -21,7 +21,7 @@
> options = parser.parse_args()
> common.options = options
> pkgs = common.read_pkg_args(options.appid, True)
> - allapps = metadata.read_metadata(pkgs)
> + allapps = metadata.read_metadata(pkgs, check_vcs=True)
> apps = common.read_app_args(options.appid, allapps, True)
> srclib_dir = os.path.join('build', 'srclib')
> os.makedirs(srclib_dir, exist_ok=True)
> diff -Nru fdroidserver-2.0/fdroidserver/build.py fdroidserver-2.0.1/fdroidserver/build.py
> --- fdroidserver-2.0/fdroidserver/build.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/build.py 2021-03-09 18:21:30.000000000 +0100
> @@ -1013,7 +1013,7 @@
>
> # Read all app and srclib metadata
> pkgs = common.read_pkg_args(options.appid, True)
> - allapps = metadata.read_metadata(pkgs, options.refresh, sort_by_time=True)
> + allapps = metadata.read_metadata(pkgs, options.refresh, sort_by_time=True, check_vcs=True)
> apps = common.read_app_args(options.appid, allapps, True)
>
> for appid, app in list(apps.items()):
> diff -Nru fdroidserver-2.0/fdroidserver/checkupdates.py fdroidserver-2.0.1/fdroidserver/checkupdates.py
> --- fdroidserver-2.0/fdroidserver/checkupdates.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/checkupdates.py 2021-03-09 18:21:30.000000000 +0100
> @@ -35,6 +35,7 @@
> from . import _
> from . import common
> from . import metadata
> +from . import net
> from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException
>
>
> @@ -63,7 +64,7 @@
> vercode = None
> if len(urlcode) > 0:
> logging.debug("...requesting {0}".format(urlcode))
> - req = urllib.request.Request(urlcode, None)
> + req = urllib.request.Request(urlcode, None, headers=net.HEADERS)
> resp = urllib.request.urlopen(req, None, 20) # nosec B310 scheme is filtered above
> page = resp.read().decode('utf-8')
>
> diff -Nru fdroidserver-2.0/fdroidserver/common.py fdroidserver-2.0.1/fdroidserver/common.py
> --- fdroidserver-2.0/fdroidserver/common.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/common.py 2021-03-09 18:21:30.000000000 +0100
> @@ -3819,7 +3819,7 @@
> with open(ndk_release_txt, 'r') as fp:
> components.append((os.path.basename(ndk_path), fp.read()[:-1]))
>
> - pattern = re.compile('^Pkg.Revision=(.+)', re.MULTILINE)
> + pattern = re.compile(r'^Pkg.Revision *= *(.+)', re.MULTILINE)
> for root, dirs, files in os.walk(sdk_path):
> if 'source.properties' in files:
> source_properties = os.path.join(root, 'source.properties')
> diff -Nru fdroidserver-2.0/fdroidserver/deploy.py fdroidserver-2.0.1/fdroidserver/deploy.py
> --- fdroidserver-2.0/fdroidserver/deploy.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/deploy.py 2021-03-09 18:21:30.000000000 +0100
> @@ -802,10 +802,10 @@
> if config.get('virustotal_apikey'):
> upload_to_virustotal(repo_section, config.get('virustotal_apikey'))
>
> - binary_transparency_remote = config.get('binary_transparency_remote')
> - if binary_transparency_remote:
> - push_binary_transparency(BINARY_TRANSPARENCY_DIR,
> - binary_transparency_remote)
> + binary_transparency_remote = config.get('binary_transparency_remote')
> + if binary_transparency_remote:
> + push_binary_transparency(BINARY_TRANSPARENCY_DIR,
> + binary_transparency_remote)
>
> if config.get('wiki_server') and config.get('wiki_path'):
> update_wiki()
> diff -Nru fdroidserver-2.0/fdroidserver/lint.py fdroidserver-2.0.1/fdroidserver/lint.py
> --- fdroidserver-2.0/fdroidserver/lint.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/lint.py 2021-03-09 18:21:30.000000000 +0100
> @@ -683,6 +683,7 @@
> 'Artistic-1.0-cl8',
> 'Artistic-2.0',
> 'Beerware',
> + 'BSD-1-Clause',
> 'BSD-2-Clause',
> 'BSD-2-Clause-FreeBSD',
> 'BSD-2-Clause-Patent',
> @@ -692,6 +693,8 @@
> 'BSD-4-Clause',
> 'BSL-1.0',
> 'BitTorrent-1.1',
> + 'CAL-1.0',
> + 'CAL-1.0-Combined-Work-Exception',
> 'CATOSL-1.1',
> 'CC-BY-4.0',
> 'CC-BY-SA-4.0',
> @@ -763,6 +766,7 @@
> 'MS-RL',
> 'MirOS',
> 'Motosoto',
> + 'MulanPSL-2.0',
> 'Multics',
> 'NASA-1.3',
> 'NCSA',
> @@ -778,9 +782,12 @@
> 'ODbL-1.0',
> 'OFL-1.0',
> 'OFL-1.1',
> + 'OFL-1.1-RFN',
> + 'OFL-1.1-no-RFN',
> 'OGTSL',
> 'OLDAP-2.3',
> 'OLDAP-2.7',
> + 'OLDAP-2.8',
> 'OSET-PL-2.1',
> 'OSL-1.0',
> 'OSL-1.1',
> @@ -804,7 +811,9 @@
> 'SPL-1.0',
> 'SimPL-2.0',
> 'Sleepycat',
> + 'UCL-1.0',
> 'UPL-1.0',
> + 'Unicode-DFS-2016',
> 'Unlicense',
> 'VSL-1.0',
> 'Vim',
> diff -Nru fdroidserver-2.0/fdroidserver/metadata.py fdroidserver-2.0.1/fdroidserver/metadata.py
> --- fdroidserver-2.0/fdroidserver/metadata.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/metadata.py 2021-03-09 18:21:30.000000000 +0100
> @@ -541,7 +541,7 @@
> srclibs[srclibname] = parse_yaml_srclib(metadatapath)
>
>
> -def read_metadata(appids={}, refresh=True, sort_by_time=False):
> +def read_metadata(appids={}, refresh=True, sort_by_time=False, check_vcs=False):
> """Return a list of App instances sorted newest first
>
> This reads all of the metadata files in a 'data' repository, then
> @@ -597,7 +597,7 @@
> if appid in apps:
> _warn_or_exception(_("Found multiple metadata files for {appid}")
> .format(appid=appid))
> - app = parse_metadata(metadatapath, appid in appids, refresh)
> + app = parse_metadata(metadatapath, check_vcs, refresh)
> check_metadata(app)
> apps[app.id] = app
>
> diff -Nru fdroidserver-2.0/fdroidserver/scanner.py fdroidserver-2.0.1/fdroidserver/scanner.py
> --- fdroidserver-2.0/fdroidserver/scanner.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/scanner.py 2021-03-09 18:21:30.000000000 +0100
> @@ -106,6 +106,9 @@
> logging.info("Scanning APK for known non-free classes.")
> result = common.SdkToolsPopen(["apkanalyzer", "dex", "packages", "--defined-only", apkfile], output=False)
> problems = 0
> + if result.returncode != 0:
> + problems += 1
> + logging.error(result.output)
> for suspect, regexp in CODE_SIGNATURES.items():
> matches = regexp.findall(result.output)
> if matches:
> diff -Nru fdroidserver-2.0/fdroidserver/update.py fdroidserver-2.0.1/fdroidserver/update.py
> --- fdroidserver-2.0/fdroidserver/update.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver/update.py 2021-03-09 18:21:30.000000000 +0100
> @@ -768,23 +768,41 @@
>
>
> def _set_localized_text_entry(app, locale, key, f):
> - limit = config['char_limits'][key]
> - localized = _get_localized_dict(app, locale)
> - with open(f, errors='replace') as fp:
> - text = fp.read()[:limit]
> - if len(text) > 0:
> - if key in ('name', 'summary', 'video'): # hardcoded as a single line
> - localized[key] = text.strip('\n')
> - else:
> - localized[key] = text
> + """Read a fastlane/triple-t metadata file and add an entry to the app
> +
> + This reads more than the limit, in case there is leading or
> + trailing whitespace to be stripped
> +
> + """
> + try:
> + limit = config['char_limits'][key]
> + localized = _get_localized_dict(app, locale)
> + with open(f, errors='replace') as fp:
> + text = fp.read(limit * 2)
> + if len(text) > 0:
> + if key in ('name', 'summary', 'video'): # hardcoded as a single line
> + localized[key] = text.strip('\n')[:limit]
> + else:
> + localized[key] = text[:limit]
> + except Exception as e:
> + logging.error(_('{path}: {error}').format(path=f, error=str(e)))
>
>
> def _set_author_entry(app, key, f):
> - limit = config['char_limits']['author']
> - with open(f, errors='replace') as fp:
> - text = fp.read()[:limit]
> - if len(text) > 0:
> - app[key] = text.strip()
> + """read a fastlane/triple-t author file and add the entry to the app
> +
> + This reads more than the limit, in case there is leading or
> + trailing whitespace to be stripped
> +
> + """
> + try:
> + limit = config['char_limits']['author']
> + with open(f, errors='replace') as fp:
> + text = fp.read(limit * 2)
> + if len(text) > 0:
> + app[key] = text.strip()[:limit]
> + except Exception as e:
> + logging.error(_('{path}: {error}').format(path=f, error=str(e)))
>
>
> def _strip_and_copy_image(in_file, outpath):
> @@ -1396,7 +1414,7 @@
>
> """
> icons_src = dict()
> - density_re = re.compile(r'^res/(.*)/{}\.(png|xml)$'.format(icon_name))
> + density_re = re.compile(r'^res/(.*)/{}\.png$'.format(icon_name))
> with zipfile.ZipFile(apkfile) as zf:
> for filename in zf.namelist():
> m = density_re.match(filename)
> @@ -1659,7 +1677,7 @@
> .format(apkfilename=apkfile) + str(e))
>
> # extract icons from APK zip file
> - iconfilename = "%s.%s" % (apk['packageName'], apk['versionCode'])
> + iconfilename = "%s.%s.png" % (apk['packageName'], apk['versionCode'])
> try:
> empty_densities = extract_apk_icons(iconfilename, apk, apkzip, repodir)
> finally:
> @@ -1746,8 +1764,6 @@
> if m and m.group(4) == 'png':
> density = screen_resolutions[m.group(2)]
> pngs[m.group(3) + '/' + density] = m.group(0)
> -
> - icon_type = None
> empty_densities = []
> for density in screen_densities:
> if density not in apk['icons_src']:
> @@ -1755,7 +1771,7 @@
> continue
> icon_src = apk['icons_src'][density]
> icon_dir = get_icon_dir(repo_dir, density)
> - icon_type = '.png'
> + icon_dest = os.path.join(icon_dir, icon_filename)
>
> # Extract the icon files per density
> if icon_src.endswith('.xml'):
> @@ -1766,48 +1782,44 @@
> icon_src = name
> if icon_src.endswith('.xml'):
> empty_densities.append(density)
> - icon_type = '.xml'
> - icon_dest = os.path.join(icon_dir, icon_filename + icon_type)
> -
> + continue
> try:
> with open(icon_dest, 'wb') as f:
> f.write(get_icon_bytes(apkzip, icon_src))
> - apk['icons'][density] = icon_filename + icon_type
> + apk['icons'][density] = icon_filename
> except (zipfile.BadZipFile, ValueError, KeyError) as e:
> logging.warning("Error retrieving icon file: %s %s", icon_dest, e)
> del apk['icons_src'][density]
> empty_densities.append(density)
>
> # '-1' here is a remnant of the parsing of aapt output, meaning "no DPI specified"
> - if '-1' in apk['icons_src']:
> + if '-1' in apk['icons_src'] and not apk['icons_src']['-1'].endswith('.xml'):
> icon_src = apk['icons_src']['-1']
> - icon_type = icon_src[-4:]
> - icon_path = os.path.join(get_icon_dir(repo_dir, '0'), icon_filename + icon_type)
> + icon_path = os.path.join(get_icon_dir(repo_dir, '0'), icon_filename)
> with open(icon_path, 'wb') as f:
> f.write(get_icon_bytes(apkzip, icon_src))
> - if icon_type == '.png':
> - im = None
> - try:
> - im = Image.open(icon_path)
> - dpi = px_to_dpi(im.size[0])
> - for density in screen_densities:
> - if density in apk['icons']:
> - break
> - if density == screen_densities[-1] or dpi >= int(density):
> - apk['icons'][density] = icon_filename + icon_type
> - shutil.move(icon_path,
> - os.path.join(get_icon_dir(repo_dir, density), icon_filename + icon_type))
> - empty_densities.remove(density)
> - break
> - except Exception as e:
> - logging.warning(_("Failed reading {path}: {error}")
> - .format(path=icon_path, error=e))
> - finally:
> - if im and hasattr(im, 'close'):
> - im.close()
> + im = None
> + try:
> + im = Image.open(icon_path)
> + dpi = px_to_dpi(im.size[0])
> + for density in screen_densities:
> + if density in apk['icons']:
> + break
> + if density == screen_densities[-1] or dpi >= int(density):
> + apk['icons'][density] = icon_filename
> + shutil.move(icon_path,
> + os.path.join(get_icon_dir(repo_dir, density), icon_filename))
> + empty_densities.remove(density)
> + break
> + except Exception as e:
> + logging.warning(_("Failed reading {path}: {error}")
> + .format(path=icon_path, error=e))
> + finally:
> + if im and hasattr(im, 'close'):
> + im.close()
>
> if apk['icons']:
> - apk['icon'] = icon_filename + icon_type
> + apk['icon'] = icon_filename
>
> return empty_densities
>
> @@ -1822,7 +1834,6 @@
> :param repo_dir: The directory of the APK's repository
>
> """
> - icon_filename += '.png'
> # First try resizing down to not lose quality
> last_density = None
> for density in screen_densities:
> @@ -2297,7 +2308,13 @@
> options.use_date_from_apk)
> cachechanged = cachechanged or fcachechanged
> apks += files
> + appid_has_apks = set()
> + appid_has_repo_files = set()
> for apk in apks:
> + if apk['apkName'].endswith('.apk'):
> + appid_has_apks.add(apk['packageName'])
> + else:
> + appid_has_repo_files.add(apk['packageName'])
> if apk['packageName'] not in apps:
> if options.create_metadata:
> create_metadata_from_template(apk)
> @@ -2316,6 +2333,15 @@
> else:
> logging.warning(msg + '\n\t' + _('Use `fdroid update -c` to create it.'))
>
> + mismatch_errors = ''
> + for appid in appid_has_apks:
> + if appid in appid_has_repo_files:
> + appid_files = ', '.join(glob.glob(os.path.join('repo', appid + '_[0-9]*.*')))
> + mismatch_errors += (_('{appid} has both APKs and files: {files}')
> + .format(appid=appid, files=appid_files)) + '\n'
> + if mismatch_errors:
> + raise FDroidException(mismatch_errors)
> +
> # Scan the archive repo for apks as well
> if len(repodirs) > 1:
> archapks, cc = process_apks(apkcache, repodirs[1], knownapks, options.use_date_from_apk)
> diff -Nru fdroidserver-2.0/fdroidserver.egg-info/PKG-INFO fdroidserver-2.0.1/fdroidserver.egg-info/PKG-INFO
> --- fdroidserver-2.0/fdroidserver.egg-info/PKG-INFO 2021-02-02 13:20:01.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver.egg-info/PKG-INFO 2021-03-09 18:22:29.000000000 +0100
> @@ -1,6 +1,6 @@
> Metadata-Version: 2.1
> Name: fdroidserver
> -Version: 2.0
> +Version: 2.0.1
> Summary: F-Droid Server Tools
> Home-page: https://f-droid.org
> Author: The F-Droid Project
> diff -Nru fdroidserver-2.0/fdroidserver.egg-info/SOURCES.txt fdroidserver-2.0.1/fdroidserver.egg-info/SOURCES.txt
> --- fdroidserver-2.0/fdroidserver.egg-info/SOURCES.txt 2021-02-02 13:20:01.000000000 +0100
> +++ fdroidserver-2.0.1/fdroidserver.egg-info/SOURCES.txt 2021-03-09 18:22:29.000000000 +0100
> @@ -629,6 +629,13 @@
> tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt
> tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt
> tests/extra/manual-vmtools-test.py
> +tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties
> +tests/get_android_tools_versions/android-ndk/r11c/source.properties
> +tests/get_android_tools_versions/android-ndk/r17c/source.properties
> +tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties
> +tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties
> +tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties
> +tests/get_android_tools_versions/android-sdk/tools/source.properties
> tests/getsig/getsig.java
> tests/getsig/make.sh
> tests/getsig/run.sh
> diff -Nru fdroidserver-2.0/MANIFEST.in fdroidserver-2.0.1/MANIFEST.in
> --- fdroidserver-2.0/MANIFEST.in 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/MANIFEST.in 2021-03-09 18:21:30.000000000 +0100
> @@ -551,6 +551,13 @@
> include tests/exception.TestCase
> include tests/extra/manual-vmtools-test.py
> include tests/funding-usernames.yaml
> +include tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties
> +include tests/get_android_tools_versions/android-ndk/r11c/source.properties
> +include tests/get_android_tools_versions/android-ndk/r17c/source.properties
> +include tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties
> +include tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties
> +include tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties
> +include tests/get_android_tools_versions/android-sdk/tools/source.properties
> include tests/getsig/getsig.java
> include tests/getsig/make.sh
> include tests/getsig/run.sh
> diff -Nru fdroidserver-2.0/PKG-INFO fdroidserver-2.0.1/PKG-INFO
> --- fdroidserver-2.0/PKG-INFO 2021-02-02 13:20:01.000000000 +0100
> +++ fdroidserver-2.0.1/PKG-INFO 2021-03-09 18:22:30.000000000 +0100
> @@ -1,6 +1,6 @@
> Metadata-Version: 2.1
> Name: fdroidserver
> -Version: 2.0
> +Version: 2.0.1
> Summary: F-Droid Server Tools
> Home-page: https://f-droid.org
> Author: The F-Droid Project
> diff -Nru fdroidserver-2.0/setup.py fdroidserver-2.0.1/setup.py
> --- fdroidserver-2.0/setup.py 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/setup.py 2021-03-09 18:21:30.000000000 +0100
> @@ -53,7 +53,7 @@
> long_description = fh.read()
>
> setup(name='fdroidserver',
> - version='2.0',
> + version='2.0.1',
> description='F-Droid Server Tools',
> long_description=long_description,
> long_description_content_type='text/markdown',
> diff -Nru fdroidserver-2.0/tests/common.TestCase fdroidserver-2.0.1/tests/common.TestCase
> --- fdroidserver-2.0/tests/common.TestCase 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/tests/common.TestCase 2021-03-09 18:21:30.000000000 +0100
> @@ -1627,6 +1627,21 @@
> {'AutoName': testvalue, 'id': 'nope'}]:
> self.assertEqual(testvalue, fdroidserver.common.get_app_display_name(app))
>
> + def test_get_android_tools_versions(self):
> + sdk_path = os.path.join(self.basedir, 'get_android_tools_versions')
> + fdroidserver.common.config = {'sdk_path': sdk_path}
> + components = fdroidserver.common.get_android_tools_versions()
> + expected = (
> + ('android-ndk/android-ndk-r21d', '21.3.6528147'),
> + ('android-ndk/r11c', '11.2.2725575'),
> + ('android-ndk/r17c', '17.2.4988734'),
> + ('android-sdk/patcher/v4', '1'),
> + ('android-sdk/platforms/android-30', '3'),
> + ('android-sdk/skiaparser/1', '6'),
> + ('android-sdk/tools', '26.1.1'),
> + )
> + self.assertSequenceEqual(expected, sorted(components))
> +
>
> if __name__ == "__main__":
> os.chdir(os.path.dirname(__file__))
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,2 @@
> +Pkg.Desc = Android NDK
> +Pkg.Revision = 21.3.6528147
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-ndk/r11c/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-ndk/r11c/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-ndk/r11c/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-ndk/r11c/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,2 @@
> +Pkg.Desc = Android NDK
> +Pkg.Revision = 11.2.2725575
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-ndk/r17c/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-ndk/r17c/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-ndk/r17c/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-ndk/r17c/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,2 @@
> +Pkg.Desc = Android NDK
> +Pkg.Revision = 17.2.4988734
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,18 @@
> +#
> +# Copyright (C) 2016 The Android Open Source Project
> +#
> +# Licensed under the Apache License, Version 2.0 (the "License");
> +# you may not use this file except in compliance with the License.
> +# You may obtain a copy of the License at
> +#
> +# http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +#
> +Pkg.Revision=1
> +Pkg.Path=patcher;v4
> +Pkg.Desc=SDK Patch Applier v4
> \ No newline at end of file
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,9 @@
> +Pkg.Desc=Android SDK Platform 11
> +Pkg.UserSrc=false
> +Platform.Version=11
> +Platform.CodeName=
> +Pkg.Revision=3
> +AndroidVersion.ApiLevel=30
> +Layoutlib.Api=15
> +Layoutlib.Revision=1
> +Platform.MinToolsRev=22
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,3 @@
> +Pkg.Revision=6
> +Pkg.Path=skiaparser;1
> +Pkg.Desc=Layout Inspector image server for API 29-30
> diff -Nru fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/tools/source.properties fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/tools/source.properties
> --- fdroidserver-2.0/tests/get_android_tools_versions/android-sdk/tools/source.properties 1970-01-01 01:00:00.000000000 +0100
> +++ fdroidserver-2.0.1/tests/get_android_tools_versions/android-sdk/tools/source.properties 2021-03-09 18:21:30.000000000 +0100
> @@ -0,0 +1,6 @@
> +Pkg.UserSrc=false
> +Pkg.Revision=26.1.1
> +Platform.MinPlatformToolsRev=20
> +Pkg.Dependencies=emulator
> +Pkg.Path=tools
> +Pkg.Desc=Android SDK Tools
> diff -Nru fdroidserver-2.0/tests/index.TestCase fdroidserver-2.0.1/tests/index.TestCase
> --- fdroidserver-2.0/tests/index.TestCase 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/tests/index.TestCase 2021-03-09 18:21:30.000000000 +0100
> @@ -354,6 +354,15 @@
> 'https://gitlab.com/group/project/-/raw/master/fdroid'],
> fdroidserver.index.get_mirror_service_urls(url))
>
> + def test_v1_sort_packages_with_invalid(self):
> + i = [{'packageName': 'org.smssecure.smssecure',
> + 'apkName': 'smssecure-custom.fake',
> + 'signer': None,
> + 'versionCode': 11111}]
> +
> + fdroidserver.index.v1_sort_packages(
> + i, fdroidserver.common.load_stats_fdroid_signing_key_fingerprints())
> +
>
> if __name__ == "__main__":
> os.chdir(os.path.dirname(__file__))
> diff -Nru fdroidserver-2.0/tests/repo/index-v1.json fdroidserver-2.0.1/tests/repo/index-v1.json
> --- fdroidserver-2.0/tests/repo/index-v1.json 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/tests/repo/index-v1.json 2021-03-09 18:21:30.000000000 +0100
> @@ -54,7 +54,6 @@
> "name": "Caffeine Tile",
> "summary": "Test app for extracting icons when an XML one is default",
> "added": 1539129600000,
> - "icon": "info.zwanenburg.caffeinetile.4.xml",
> "packageName": "info.zwanenburg.caffeinetile",
> "lastUpdated": 1539129600000
> },
> diff -Nru fdroidserver-2.0/tests/repo/index.xml fdroidserver-2.0.1/tests/repo/index.xml
> --- fdroidserver-2.0/tests/repo/index.xml 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/tests/repo/index.xml 2021-03-09 18:21:30.000000000 +0100
> @@ -53,7 +53,6 @@
> <lastupdated>2018-10-10</lastupdated>
> <name>Caffeine Tile</name>
> <summary>Test app for extracting icons when an XML one is default</summary>
> - <icon>info.zwanenburg.caffeinetile.4.xml</icon>
> <desc>No description available</desc>
> <license>Unknown</license>
> <categories>Development</categories>
> diff -Nru fdroidserver-2.0/tests/run-tests fdroidserver-2.0.1/tests/run-tests
> --- fdroidserver-2.0/tests/run-tests 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/tests/run-tests 2021-03-09 18:21:30.000000000 +0100
> @@ -735,8 +735,9 @@
> $fdroid init
> $fdroid update --create-metadata --verbose
> $fdroid readmeta
> -$fdroid deploy --local-copy-dir=/tmp/fdroid
> -$fdroid deploy --local-copy-dir=/tmp/fdroid --verbose
> +LOCAL_COPY_DIR=`create_test_dir`/fdroid
> +$fdroid deploy --local-copy-dir=$LOCAL_COPY_DIR
> +$fdroid deploy --local-copy-dir=$LOCAL_COPY_DIR --verbose
>
> # now test the errors work
> set +e
> diff -Nru fdroidserver-2.0/tests/update.TestCase fdroidserver-2.0.1/tests/update.TestCase
> --- fdroidserver-2.0/tests/update.TestCase 2021-02-01 22:53:44.000000000 +0100
> +++ fdroidserver-2.0.1/tests/update.TestCase 2021-03-09 18:21:30.000000000 +0100
> @@ -11,6 +11,7 @@
> import os
> import random
> import shutil
> +import string
> import subprocess
> import sys
> import tempfile
> @@ -706,8 +707,7 @@
>
> apk_info = fdroidserver.update.scan_apk('repo/info.zwanenburg.caffeinetile_4.apk')
> self.assertEqual(apk_info.get('versionName'), '1.3')
> - self.assertEqual(apk_info['icons_src'], {'160': 'res/drawable/ic_coffee_on.xml',
> - '-1': 'res/drawable/ic_coffee_on.xml'})
> + self.assertEqual(apk_info['icons_src'], {})
>
> apk_info = fdroidserver.update.scan_apk('repo/com.politedroid_6.apk')
> self.assertEqual(apk_info.get('versionName'), '1.5')
> @@ -1309,6 +1309,73 @@
> self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(' WhyIncludeWhitespace '))
> self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(['first', 'second']))
>
> + def test_set_localized_text_entry(self):
> + tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
> + dir=self.tmpdir)
> + os.chdir(tmptestsdir)
> + config = dict()
> + fdroidserver.common.fill_config_defaults(config)
> + fdroidserver.update.config = config
> + fdroidserver.update.options = fdroidserver.common.options
> +
> + files = {
> + 'full-description.txt': 'description',
> + 'short-description.txt': 'summary',
> + 'title.txt': 'name',
> + 'video-url.txt': 'video',
> + }
> +
> + for f, key in files.items():
> + limit = config['char_limits'][key]
> + with open(f, 'w') as fp:
> + fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100)))
> + locale = 'ru_US'
> + app = dict()
> + fdroidserver.update._set_localized_text_entry(app, locale, key, f)
> + self.assertEqual(limit, len(app['localized'][locale][key]))
> +
> + f = 'badlink-' + f
> + os.symlink('/path/to/nowhere', f)
> + app = dict()
> + fdroidserver.update._set_localized_text_entry(app, locale, key, f)
> + self.assertIsNone(app['localized'].get(locale, {}).get(key))
> +
> + def test_set_author_entry(self):
> + tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
> + dir=self.tmpdir)
> + os.chdir(tmptestsdir)
> + config = dict()
> + fdroidserver.common.fill_config_defaults(config)
> + fdroidserver.update.config = config
> + fdroidserver.update.options = fdroidserver.common.options
> +
> + f = 'contact-website.txt'
> + key = 'author'
> + url = 'https://f-droid.org/'
> + limit = config['char_limits']['author']
> + with open(f, 'w') as fp:
> + fp.write(url)
> + fp.write('\n')
> + app = dict()
> + fdroidserver.update._set_author_entry(app, key, f)
> + self.assertEqual(url, app[key])
> +
> + f = 'limits.txt'
> + key = 'author'
> + limit = config['char_limits']['author']
> + for key in ('authorEmail', 'authorPhone', 'authorWebSite'):
> + with open(f, 'w') as fp:
> + fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100)))
> + app = dict()
> + fdroidserver.update._set_author_entry(app, key, f)
> + self.assertEqual(limit, len(app[key]))
> +
> + f = 'badlink.txt'
> + os.symlink('/path/to/nowhere', f)
> + app = dict()
> + fdroidserver.update._set_author_entry(app, key, f)
> + self.assertIsNone(app.get(key))
> +
>
> if __name__ == "__main__":
> os.chdir(os.path.dirname(__file__))
>
>
>
>
>
> unblock fdroidserver/2.0.1-1
>
> -- System Information:
> Debian Release: 10.9
> APT prefers stable-updates
> APT policy: (500, 'stable-updates'), (500, 'stable'), (100, 'proposed-updates')
> Architecture: amd64 (x86_64)
>
> Kernel: Linux 4.19.0-16-amd64 (SMP w/8 CPU cores)
> Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
> Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
> Shell: /bin/sh linked to /usr/bin/dash
> Init: systemd (via /run/systemd/system)
> LSM: AppArmor: enabled
>
--
Sebastian Ramacher
Attachment:
signature.asc
Description: PGP signature