[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#987718: unblock: fdroidserver/2.0.1-1



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


Reply to: