diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8f8b5271..f66e1ce6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -98,6 +98,14 @@ metadata_v0: # Ubuntu and other distros often lack https:// support - grep Debian /etc/issue.net && { find /etc/apt/sources.list* -type f | xargs sed -i s,http:,https:, ; } + # The official Debian docker images ship without ca-certificates, + # TLS certificates cannot be verified until that is installed. The + # following code turns off TLS verification, and enables HTTPS, so + # at least unverified TLS is used for apt-get instead of plain + # HTTP. Once ca-certificates is installed, the CA verification is + # enabled by removing this config. This set up makes the initial + # `apt-get update` and `apt-get install` look the same as verified + # TLS to the network observer and hides the metadata. - echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates - apt-get update - apt-get install ca-certificates @@ -212,21 +220,6 @@ ubuntu_jammy_pip: - LANGUAGE='de' fdroid --help | grep 'Gültige Befehle sind' -# The gradlew-fdroid tests are isolated from the rest of the test -# suite, so they run as their own job. -gradlew-fdroid: - image: debian:bookworm-slim - <<: *apt-template - rules: - - changes: - - .gitlab-ci.yml - - gradlew-fdroid - - tests/test_gradlew-fdroid - script: - - apt-get install ca-certificates curl default-jdk-headless unzip - - ./tests/test_gradlew-fdroid - - # Run all the various linters and static analysis tools. hooks/pre-commit: stage: lint @@ -286,11 +279,9 @@ shellcheck: rules: - changes: - .gitlab-ci.yml - - gradlew-fdroid - hooks/install-hooks.sh - hooks/pre-commit - tests/run-tests - - tests/test_gradlew-fdroid <<: *apt-template script: - apt-get install shellcheck @@ -299,10 +290,6 @@ shellcheck: hooks/install-hooks.sh hooks/pre-commit tests/run-tests - # TODO make the gradlew things pass the standard above - - shellcheck --severity=error --color - gradlew-fdroid - tests/test_gradlew-fdroid # Check all the dependencies in Debian to mirror production. CVEs are # generally fixed in the latest versions in pip/pypi.org, so it isn't @@ -443,7 +430,7 @@ macOS: - brew install --cask android-commandlinetools temurin # temurin is a JDK # test suite dependencies - - brew install dash bash coreutils gnu-sed + - brew install bash coreutils gnu-sed # TODO port tests/run-tests to POSIX and gsed, it has a couple GNU-isms like du --bytes - export PATH="$(brew --prefix fdroidserver)/libexec/bin:$(brew --prefix coreutils)/libexec/gnubin:$PATH" @@ -460,42 +447,26 @@ macOS: - echo "macOS sticks with bash 3.x because of licenses, so avoid new bash syntax" - /bin/bash --version - - /bin/bash -n gradlew-fdroid tests/run-tests + - /bin/bash -n tests/run-tests # test fdroidserver from git with current package's dependencies - fdroid="$(brew --prefix fdroidserver)/libexec/bin/python3 $PWD/fdroid" ./tests/run-tests gradle: - image: debian:bookworm-slim - rules: - - if: "$PERSONAL_ACCESS_TOKEN" + image: debian:trixie-slim <<: *apt-template - variables: - GIT_DEPTH: 1000 + rules: + - changes: + - .gitlab-ci.yml + - makebuildserver script: - apt-get install ca-certificates git - openssh-client - python3-bs4 python3-colorama - python3-git - python3-gitlab python3-packaging python3-requests - # if this is a merge request fork, then only check if relevant files changed - - if [ "$CI_PROJECT_NAMESPACE" != "fdroid" ]; then - set -x; - git fetch https://gitlab.com/fdroid/fdroidserver.git; - for f in `git diff --name-only --diff-filter=d FETCH_HEAD...HEAD`; do - test "$f" == "makebuildserver" && export CHANGED="$f $CHANGED"; - test "$f" == "gradlew-fdroid" && export CHANGED="$f $CHANGED"; - done; - test -z "$CHANGED" && exit; - echo $CHANGED; - set +x; - fi - ./tests/gradle-release-checksums.py @@ -550,6 +521,8 @@ fdroid build: env HOME=$home_vagrant fdroid" + - git -C $home_vagrant/gradlew-fdroid pull + - chown -R vagrant $home_vagrant - chown -R vagrant $fdroidserver/.git - chown vagrant $fdroidserver/ @@ -734,7 +707,9 @@ pages: artifacts: paths: - public - needs: ["Build documentation"] + needs: + - job: "Build documentation" + optional: true rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # only publish pages on default (master) branch @@ -778,12 +753,12 @@ docker: # PUBLISH is the signing server. It has a very minimal manual setup. PUBLISH: - image: debian:bullseye-backports + image: debian:bookworm-backports <<: *python-rules-changes script: - apt-get update - apt-get -qy upgrade - - apt-get -qy install --no-install-recommends -t bullseye-backports + - apt-get -qy install --no-install-recommends -t bookworm-backports androguard apksigner curl diff --git a/MANIFEST.in b/MANIFEST.in index 0a24f98b..77c176d4 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -20,6 +20,7 @@ include examples/template.yml include examples/Vagrantfile.yaml include gradlew-fdroid include LICENSE +include locale/ba/LC_MESSAGES/fdroidserver.po include locale/bo/LC_MESSAGES/fdroidserver.po include locale/ca/LC_MESSAGES/fdroidserver.po include locale/cs/LC_MESSAGES/fdroidserver.po diff --git a/buildserver/Dockerfile b/buildserver/Dockerfile index 3e863df5..27ada3f8 100644 --- a/buildserver/Dockerfile +++ b/buildserver/Dockerfile @@ -37,11 +37,22 @@ RUN useradd --create-home -s /bin/bash vagrant && echo -n 'vagrant:vagrant' | ch # # Ensure fdroidserver's dependencies are marked manual before purging # unneeded packages, otherwise, all its dependencies get purged. +# +# The official Debian docker images ship without ca-certificates, so +# TLS certificates cannot be verified until that is installed. The +# following code temporarily turns off TLS verification, and enables +# HTTPS, so at least unverified TLS is used for apt-get instead of +# plain HTTP. Once ca-certificates is installed, the CA verification +# is enabled by removing the newly created config file. This set up +# makes the initial `apt-get update` and `apt-get install` look the +# same as verified TLS to the network observer and hides the metadata. RUN printf "path-exclude=/usr/share/locale/*\npath-exclude=/usr/share/man/*\npath-exclude=/usr/share/doc/*\npath-include=/usr/share/doc/*/copyright\n" >/etc/dpkg/dpkg.cfg.d/01_nodoc \ && mkdir -p /usr/share/man/man1 \ + && echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates \ + && find /etc/apt/sources.list* -type f -exec sed -i s,http:,https:, {} \; \ && apt-get update \ && apt-get install ca-certificates \ - && sed -i 's,http:,https:,' /etc/apt/sources.list.d/debian.sources \ + && rm /etc/apt/apt.conf.d/99nocacertificates \ && apt-get upgrade \ && apt-get dist-upgrade \ && apt-get install openssh-client iproute2 python3 openssh-server sudo \ diff --git a/buildserver/provision-gradle b/buildserver/provision-gradle index ca48bcf7..a282a4c5 100644 --- a/buildserver/provision-gradle +++ b/buildserver/provision-gradle @@ -25,7 +25,12 @@ fi chmod -R a+rX /opt/gradle test -e /opt/gradle/bin || mkdir -p /opt/gradle/bin -ln -fs /home/vagrant/fdroidserver/gradlew-fdroid /opt/gradle/bin/gradle +git clone --depth 1 https://gitlab.com/fdroid/gradlew-fdroid.git /home/vagrant/gradlew-fdroid/ +chmod 0755 /home/vagrant/gradlew-fdroid/gradlew-fdroid +chmod -R u+rwX,a+rX,go-w /home/vagrant/gradlew-fdroid/ +ln -fs /home/vagrant/gradlew-fdroid/gradlew-fdroid /opt/gradle/bin/gradle +ln -fs /home/vagrant/gradlew-fdroid/gradlew-fdroid /usr/local/bin/ + chown -h vagrant:vagrant /opt/gradle/bin/gradle chown vagrant:vagrant /opt/gradle/versions chmod 0755 /opt/gradle/versions diff --git a/docs/source/conf.py b/docs/source/conf.py index 382d8feb..c20542de 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,6 +12,7 @@ # import os import sys + sys.path.insert(0, os.path.abspath('../../fdroidserver')) # -- Project information ----------------------------------------------------- diff --git a/examples/fdroid_clean_repos.py b/examples/fdroid_clean_repos.py index cf6259a7..6b19cacc 100644 --- a/examples/fdroid_clean_repos.py +++ b/examples/fdroid_clean_repos.py @@ -6,7 +6,6 @@ import argparse import logging from fdroidserver import _, common, metadata - from fdroidserver.exception import VCSException fdroid_summary = 'reset app VCSs to the latest version' diff --git a/examples/fdroid_export_keystore_to_nitrokey.py b/examples/fdroid_export_keystore_to_nitrokey.py index 8fa81ffe..6e920a78 100644 --- a/examples/fdroid_export_keystore_to_nitrokey.py +++ b/examples/fdroid_export_keystore_to_nitrokey.py @@ -4,6 +4,7 @@ import os from argparse import ArgumentParser + from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException diff --git a/examples/fdroid_exportkeystore.py b/examples/fdroid_exportkeystore.py index 435874a5..f2a16980 100644 --- a/examples/fdroid_exportkeystore.py +++ b/examples/fdroid_exportkeystore.py @@ -4,6 +4,7 @@ import os from argparse import ArgumentParser + from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException diff --git a/examples/fdroid_extract_repo_pubkey.py b/examples/fdroid_extract_repo_pubkey.py index f3c51767..cb5a895c 100644 --- a/examples/fdroid_extract_repo_pubkey.py +++ b/examples/fdroid_extract_repo_pubkey.py @@ -4,6 +4,7 @@ # from argparse import ArgumentParser + from fdroidserver import common, index fdroid_summary = 'export the keystore in standard PEM format' diff --git a/examples/fdroid_fetchsrclibs.py b/examples/fdroid_fetchsrclibs.py index e4a105e2..aba6f7fa 100644 --- a/examples/fdroid_fetchsrclibs.py +++ b/examples/fdroid_fetchsrclibs.py @@ -8,6 +8,7 @@ import argparse import os import pprint + from fdroidserver import _, common, metadata fdroid_summary = 'prepare the srclibs for `fdroid build --on-server`' diff --git a/examples/fdroid_nitrokeyimport.py b/examples/fdroid_nitrokeyimport.py index 9b458103..d17a6186 100644 --- a/examples/fdroid_nitrokeyimport.py +++ b/examples/fdroid_nitrokeyimport.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from argparse import ArgumentParser + from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException diff --git a/fdroidserver/__init__.py b/fdroidserver/__init__.py index 9e4c197f..fdf64421 100644 --- a/fdroidserver/__init__.py +++ b/fdroidserver/__init__.py @@ -3,7 +3,6 @@ import glob import os import sys - # support running straight from git and standard installs rootpaths = [ os.path.realpath(os.path.join(os.path.dirname(__file__), '..')), @@ -15,7 +14,10 @@ rootpaths = [ localedir = None for rootpath in rootpaths: - if len(glob.glob(os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo'))) > 0: + found_mo = glob.glob( + os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo') + ) + if len(found_mo) > 0: localedir = os.path.join(rootpath, 'locale') break @@ -24,39 +26,52 @@ gettext.textdomain('fdroidserver') _ = gettext.gettext -from fdroidserver.exception import (FDroidException, - MetaDataException, - VerificationException) # NOQA: E402 +from fdroidserver.exception import ( + FDroidException, + MetaDataException, + VerificationException, # NOQA: E402 +) + FDroidException # NOQA: B101 MetaDataException # NOQA: B101 VerificationException # NOQA: B101 -from fdroidserver.common import (verify_apk_signature, - genkeystore as generate_keystore) # NOQA: E402 +from fdroidserver.common import genkeystore as generate_keystore # NOQA: E402 +from fdroidserver.common import verify_apk_signature + verify_apk_signature # NOQA: B101 generate_keystore # NOQA: B101 -from fdroidserver.index import (download_repo_index, - download_repo_index_v1, - download_repo_index_v2, - get_mirror_service_urls, - make as make_index) # NOQA: E402 +from fdroidserver.index import ( + download_repo_index, + download_repo_index_v1, + download_repo_index_v2, + get_mirror_service_urls, +) +from fdroidserver.index import make as make_index # NOQA: E402 + download_repo_index # NOQA: B101 download_repo_index_v1 # NOQA: B101 download_repo_index_v2 # NOQA: B101 get_mirror_service_urls # NOQA: B101 make_index # NOQA: B101 -from fdroidserver.update import (process_apk, - process_apks, - scan_apk, - scan_repo_files) # NOQA: E402 +from fdroidserver.update import ( + process_apk, + process_apks, + scan_apk, + scan_repo_files, # NOQA: E402 +) + process_apk # NOQA: B101 process_apks # NOQA: B101 scan_apk # NOQA: B101 scan_repo_files # NOQA: B101 -from fdroidserver.deploy import (update_awsbucket, - update_servergitmirrors, - update_serverwebroots, - update_serverwebroot) # NOQA: E402 +from fdroidserver.deploy import ( + update_awsbucket, + update_servergitmirrors, + update_serverwebroot, # NOQA: E402 + update_serverwebroots, +) + update_awsbucket # NOQA: B101 update_servergitmirrors # NOQA: B101 update_serverwebroots # NOQA: B101 diff --git a/fdroidserver/__main__.py b/fdroidserver/__main__.py index 14813fa1..71c39b2c 100755 --- a/fdroidserver/__main__.py +++ b/fdroidserver/__main__.py @@ -18,20 +18,20 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import re -import sys +import importlib.metadata +import logging import os import pkgutil -import logging -import importlib.metadata - -import git -import fdroidserver.common -import fdroidserver.metadata -from fdroidserver import _ +import re +import sys from argparse import ArgumentError from collections import OrderedDict +import git + +import fdroidserver.common +import fdroidserver.metadata +from fdroidserver import _ COMMANDS = OrderedDict([ ("build", _("Build a package from source")), diff --git a/fdroidserver/apksigcopier.py b/fdroidserver/apksigcopier.py index 2ab0b8c4..f36de2eb 100644 --- a/fdroidserver/apksigcopier.py +++ b/fdroidserver/apksigcopier.py @@ -68,9 +68,18 @@ import struct import sys import zipfile import zlib - from collections import namedtuple -from typing import Any, BinaryIO, Callable, Dict, Iterable, Iterator, Optional, Tuple, Union +from typing import ( + Any, + BinaryIO, + Callable, + Dict, + Iterable, + Iterator, + Optional, + Tuple, + Union, +) __version__ = "1.1.1" NAME = "apksigcopier" diff --git a/fdroidserver/btlog.py b/fdroidserver/btlog.py index df889396..7ca3ddbf 100755 --- a/fdroidserver/btlog.py +++ b/fdroidserver/btlog.py @@ -28,22 +28,21 @@ # the F-Droid client. import collections -import defusedxml.minidom -import git import glob -import os import json import logging -import requests +import os import shutil import tempfile import zipfile from argparse import ArgumentParser from typing import Optional -from . import _ -from . import common -from . import deploy +import defusedxml.minidom +import git +import requests + +from . import _, common, deploy from .exception import FDroidException diff --git a/fdroidserver/build.py b/fdroidserver/build.py index 8a59c771..2e716c10 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -18,31 +18,27 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import os -import shutil +import argparse import glob -import subprocess +import logging +import os import posixpath import re +import shutil +import subprocess import tarfile -import threading -import traceback -import time -import requests import tempfile -import argparse -import logging +import threading +import time +import traceback from gettext import ngettext from pathlib import Path -from . import _ -from . import common -from . import net -from . import metadata -from . import scanner -from . import vmtools +import requests + +from . import _, common, metadata, net, scanner, vmtools from .common import FDroidPopen -from .exception import FDroidException, BuildException, VCSException +from .exception import BuildException, FDroidException, VCSException try: import paramiko @@ -155,9 +151,7 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): ftp.mkdir('fdroidserver') ftp.chdir('fdroidserver') ftp.put(os.path.join(serverpath, '..', 'fdroid'), 'fdroid') - ftp.put(os.path.join(serverpath, '..', 'gradlew-fdroid'), 'gradlew-fdroid') ftp.chmod('fdroid', 0o755) # nosec B103 permissions are appropriate - ftp.chmod('gradlew-fdroid', 0o755) # nosec B103 permissions are appropriate send_dir(os.path.join(serverpath)) ftp.chdir(homedir) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 9ed93298..cff7bcd7 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -19,28 +19,30 @@ # along with this program. If not, see . import configparser -import git +import copy +import logging import os import re -import urllib.request -import urllib.error -import time import subprocess import sys -from argparse import ArgumentParser +import time import traceback -import logging -import copy +import urllib.error import urllib.parse +import urllib.request +from argparse import ArgumentParser from pathlib import Path from typing import Optional -from . import _ -from . import common -from . import metadata -from . import net -from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException +import git +from . import _, common, metadata, net +from .exception import ( + FDroidException, + MetaDataException, + NoSubmodulesException, + VCSException, +) # https://gitlab.com/fdroid/checkupdates-runner/-/blob/1861899262a62a4ed08fa24e5449c0368dfb7617/.gitlab-ci.yml#L36 BOT_EMAIL = 'fdroidci@bubu1.eu' diff --git a/fdroidserver/common.py b/fdroidserver/common.py index b131ce19..ec0079af 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -52,53 +52,58 @@ environment variable to include. """ +import ast +import base64 import copy import difflib -from typing import List -import git +import filecmp import glob +import gzip +import hashlib import io import itertools +import json +import logging +import operator import os -import sys import re -import ast -import gzip import shutil +import socket import stat import subprocess -import time -import operator -import logging -import hashlib -import socket -import base64 -import zipfile +import sys import tempfile -import json -from pathlib import Path - -import defusedxml.ElementTree as XMLElementTree - +import time +import zipfile from argparse import BooleanOptionalAction -from asn1crypto import cms from base64 import urlsafe_b64encode from binascii import hexlify from datetime import datetime, timedelta, timezone +from pathlib import Path from queue import Queue +from typing import List from urllib.parse import urlparse, urlsplit, urlunparse from zipfile import ZipFile +import defusedxml.ElementTree as XMLElementTree +import git +from asn1crypto import cms + import fdroidserver.metadata from fdroidserver import _ -from fdroidserver._yaml import yaml, config_dump -from fdroidserver.exception import FDroidException, VCSException, NoSubmodulesException, \ - BuildException, VerificationException, MetaDataException -from .asynchronousfilereader import AsynchronousFileReader -from .looseversion import LooseVersion +from fdroidserver._yaml import config_dump, yaml +from fdroidserver.exception import ( + BuildException, + FDroidException, + MetaDataException, + NoSubmodulesException, + VCSException, + VerificationException, +) from . import apksigcopier, common - +from .asynchronousfilereader import AsynchronousFileReader +from .looseversion import LooseVersion # The path to this fdroidserver distribution FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..')) @@ -183,7 +188,7 @@ default_config = { 'scan_binary': False, 'ant': "ant", 'mvn3': "mvn", - 'gradle': os.path.join(FDROID_PATH, 'gradlew-fdroid'), + 'gradle': shutil.which('gradlew-fdroid'), 'sync_from_local_copy_dir': False, 'allow_disabled_algorithms': False, 'keep_when_not_allowed': False, @@ -812,7 +817,10 @@ def load_localized_config(name, repodir): icons_dir = os.path.join(repodir, 'icons') if not os.path.exists(icons_dir): os.makedirs(icons_dir, exist_ok=True) - shutil.copy(os.path.join("config", value), icons_dir) + src = os.path.join("config", value) + dest = os.path.join(icons_dir, os.path.basename(src)) + if not os.path.exists(dest) or not filecmp.cmp(src, dest): + shutil.copy2(src, dest) ret[afname][key][locale] = file_entry( os.path.join(icons_dir, value) ) @@ -2729,17 +2737,17 @@ def getpaths_map(build_dir, globpaths): paths[p] = [r[len(str(build_dir)) + 1:] for r in glob.glob(full_path)] if not paths[p]: not_found_paths.append(p) + return paths, not_found_paths + + +def getpaths(build_dir, globpaths): + """Extend via globbing the paths from a field and return them as a set.""" + paths_map, not_found_paths = getpaths_map(build_dir, globpaths) if not_found_paths: raise FDroidException( "Some glob paths did not match any files/dirs:\n" + "\n".join(not_found_paths) ) - return paths - - -def getpaths(build_dir, globpaths): - """Extend via globbing the paths from a field and return them as a set.""" - paths_map = getpaths_map(build_dir, globpaths) paths = set() for k, v in paths_map.items(): for p in v: @@ -2900,9 +2908,9 @@ def is_debuggable_or_testOnly(apkfile): return False try: # these were moved in androguard 4.0 - from androguard.core.axml import AXMLParser, format_value, START_TAG + from androguard.core.axml import START_TAG, AXMLParser, format_value except ImportError: - from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG + from androguard.core.bytecodes.axml import START_TAG, AXMLParser, format_value _androguard_logging_level() with ZipFile(apkfile) as apk: @@ -2974,9 +2982,23 @@ def get_apk_id_androguard(apkfile): try: # these were moved in androguard 4.0 - from androguard.core.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT + from androguard.core.axml import ( + END_DOCUMENT, + END_TAG, + START_TAG, + TEXT, + AXMLParser, + format_value, + ) except ImportError: - from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT + from androguard.core.bytecodes.axml import ( + END_DOCUMENT, + END_TAG, + START_TAG, + TEXT, + AXMLParser, + format_value, + ) _androguard_logging_level() appid = None diff --git a/fdroidserver/deploy.py b/fdroidserver/deploy.py index cc7d6c52..b4f98f34 100644 --- a/fdroidserver/deploy.py +++ b/fdroidserver/deploy.py @@ -16,28 +16,28 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import sys import glob import hashlib import json +import logging import os +import pathlib import re +import shutil import subprocess +import sys import time import urllib -from typing import Dict, List -from git import Repo -import yaml from argparse import ArgumentParser -import logging -import pathlib -import shutil +from typing import Dict, List + import git +import yaml +from git import Repo + import fdroidserver.github -from . import _ -from . import common -from . import index +from . import _, common, index from .exception import FDroidException config = None @@ -349,8 +349,8 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False): import libcloud.security libcloud.security.VERIFY_SSL_CERT = True - from libcloud.storage.types import Provider, ContainerDoesNotExistError from libcloud.storage.providers import get_driver + from libcloud.storage.types import ContainerDoesNotExistError, Provider if not config.get('awsaccesskeyid') or not config.get('awssecretkey'): raise FDroidException( @@ -854,9 +854,10 @@ def upload_to_android_observatory(repo_section): def upload_apk_to_android_observatory(path): # depend on requests and lxml only if users enable AO import requests - from . import net from lxml.html import fromstring + from . import net + apkfilename = os.path.basename(path) r = requests.post( 'https://androidobservatory.org/', diff --git a/fdroidserver/exception.py b/fdroidserver/exception.py index a598b368..682ccef7 100644 --- a/fdroidserver/exception.py +++ b/fdroidserver/exception.py @@ -35,6 +35,10 @@ class VCSException(FDroidException): pass +class NoVersionCodeException(FDroidException): + pass + + class NoSubmodulesException(VCSException): pass diff --git a/fdroidserver/github.py b/fdroidserver/github.py index 0a6844d9..34a3ee53 100644 --- a/fdroidserver/github.py +++ b/fdroidserver/github.py @@ -18,8 +18,8 @@ import json import pathlib -import urllib.request import urllib.parse +import urllib.request class GithubApi: diff --git a/fdroidserver/gpgsign.py b/fdroidserver/gpgsign.py index 4ba6ebd5..4341cb36 100644 --- a/fdroidserver/gpgsign.py +++ b/fdroidserver/gpgsign.py @@ -16,14 +16,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import os import glob -from argparse import ArgumentParser import logging +import os import time +from argparse import ArgumentParser -from . import _ -from . import common +from . import _, common from .common import FDroidPopen from .exception import FDroidException diff --git a/fdroidserver/index.py b/fdroidserver/index.py index 86394d7c..b63729e4 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -30,6 +30,7 @@ these installed on the signing server. """ +import calendar import collections import hashlib import json @@ -41,20 +42,27 @@ import sys import tempfile import urllib.parse import zipfile -import calendar from binascii import hexlify, unhexlify from datetime import datetime, timezone from pathlib import Path from xml.dom.minidom import Document -from . import _ -from . import common -from . import metadata -from . import signindex -from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME, CONFIG_CONFIG_NAME, MIRRORS_CONFIG_NAME, RELEASECHANNELS_CONFIG_NAME, DEFAULT_LOCALE, FDroidPopen, FDroidPopenBytes, load_publish_signer_fingerprints from fdroidserver._yaml import yaml +from fdroidserver.common import ( + ANTIFEATURES_CONFIG_NAME, + CATEGORIES_CONFIG_NAME, + CONFIG_CONFIG_NAME, + DEFAULT_LOCALE, + MIRRORS_CONFIG_NAME, + RELEASECHANNELS_CONFIG_NAME, + FDroidPopen, + FDroidPopenBytes, + load_publish_signer_fingerprints, +) from fdroidserver.exception import FDroidException, VerificationException +from . import _, common, metadata, signindex + def make(apps, apks, repodir, archive): """Generate the repo index files. @@ -587,7 +595,10 @@ def convert_version(version, app, repodir): ver["file"]["ipfsCIDv1"] = ipfsCIDv1 if "srcname" in version: - ver["src"] = common.file_entry(os.path.join(repodir, version["srcname"])) + ver["src"] = common.file_entry( + os.path.join(repodir, version["srcname"]), + version["srcnameSha256"], + ) if "obbMainFile" in version: ver["obbMainFile"] = common.file_entry( @@ -956,7 +967,7 @@ def make_v1(apps, packages, repodir, repodict, requestsdict, signer_fingerprints for k, v in sorted(package.items()): if not v: continue - if k in ('icon', 'icons', 'icons_src', 'ipfsCIDv1', 'name'): + if k in ('icon', 'icons', 'icons_src', 'ipfsCIDv1', 'name', 'srcnameSha256'): continue if k == 'antiFeatures': d[k] = sorted(v.keys()) diff --git a/fdroidserver/init.py b/fdroidserver/init.py index a5575fea..39b18c1a 100644 --- a/fdroidserver/init.py +++ b/fdroidserver/init.py @@ -19,16 +19,15 @@ # along with this program. If not, see . import glob +import logging import os import re import shutil import socket import sys from argparse import ArgumentParser -import logging -from . import _ -from . import common +from . import _, common from .exception import FDroidException config = {} diff --git a/fdroidserver/install.py b/fdroidserver/install.py index 74754520..8c1dc948 100644 --- a/fdroidserver/install.py +++ b/fdroidserver/install.py @@ -17,24 +17,21 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import sys -import os import glob import locale import logging +import os +import sys import termios import tty - -import defusedxml.ElementTree as XMLElementTree - from argparse import ArgumentParser, BooleanOptionalAction from pathlib import Path from urllib.parse import urlencode, urlparse, urlunparse -from . import _ -from . import common, github, index, net -from .exception import FDroidException +import defusedxml.ElementTree as XMLElementTree +from . import _, common, github, index, net +from .exception import FDroidException DEFAULT_IPFS_GATEWAYS = ("https://gateway.ipfs.io/ipfs/",) MAVEN_CENTRAL_MIRRORS = [ diff --git a/fdroidserver/lint.py b/fdroidserver/lint.py index cb5ead84..f384cb62 100644 --- a/fdroidserver/lint.py +++ b/fdroidserver/lint.py @@ -24,9 +24,10 @@ import urllib.parse from argparse import ArgumentParser from pathlib import Path -from . import _, common, metadata, rewritemeta from fdroidserver._yaml import yaml +from . import _, common, metadata, rewritemeta + config = None diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 47fbdca7..0d9195be 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -18,19 +18,19 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from pathlib import Path -import math -import platform -import os -import re import logging -import ruamel.yaml +import math +import os +import platform +import re from collections import OrderedDict +from pathlib import Path -from . import common -from . import _ -from .exception import MetaDataException +import ruamel.yaml + +from . import _, common from ._yaml import yaml +from .exception import MetaDataException srclibs = None warnings_action = None diff --git a/fdroidserver/mirror.py b/fdroidserver/mirror.py index 80f8394f..b06df3b1 100644 --- a/fdroidserver/mirror.py +++ b/fdroidserver/mirror.py @@ -7,13 +7,10 @@ import posixpath import socket import subprocess import sys -from argparse import ArgumentParser import urllib.parse +from argparse import ArgumentParser -from . import _ -from . import common -from . import index -from . import update +from . import _, common, index, update def _run_wget(path, urls, verbose=False): @@ -133,6 +130,7 @@ def main(): import io import json import zipfile + from . import net url = _append_to_url_path(section, 'index-v1.jar') diff --git a/fdroidserver/net.py b/fdroidserver/net.py index 1ec7d096..fe097fd5 100644 --- a/fdroidserver/net.py +++ b/fdroidserver/net.py @@ -21,10 +21,11 @@ import copy import logging import os import random -import requests import tempfile import time import urllib + +import requests import urllib3 from requests.adapters import HTTPAdapter, Retry diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 3d57c452..372390ea 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -19,25 +19,25 @@ import base64 import datetime -import git import hashlib import inspect import logging import os -import paramiko import platform import shutil import ssl import subprocess import sys import tempfile -import yaml -from urllib.parse import urlparse from argparse import ArgumentParser from typing import Optional +from urllib.parse import urlparse -from . import _ -from . import common +import git +import paramiko +import yaml + +from . import _, common from .exception import VCSException # hard coded defaults for Android ~/.android/debug.keystore files diff --git a/fdroidserver/publish.py b/fdroidserver/publish.py index 4c0bd791..42945166 100644 --- a/fdroidserver/publish.py +++ b/fdroidserver/publish.py @@ -28,23 +28,21 @@ mostly reports success by moving an APK from unsigned/ to repo/ """ -import sys +import glob +import hashlib +import json +import logging import os import re import shutil -import glob -import hashlib -from argparse import ArgumentParser -from collections import OrderedDict -import logging -from gettext import ngettext -import json +import sys import time import zipfile +from argparse import ArgumentParser +from collections import OrderedDict +from gettext import ngettext -from . import _ -from . import common -from . import metadata +from . import _, common, metadata from .common import FDroidPopen from .exception import BuildException, FDroidException diff --git a/fdroidserver/readmeta.py b/fdroidserver/readmeta.py index b8049a9f..b3ef7c3b 100644 --- a/fdroidserver/readmeta.py +++ b/fdroidserver/readmeta.py @@ -17,8 +17,8 @@ # along with this program. If not, see . from argparse import ArgumentParser -from . import common -from . import metadata + +from . import common, metadata def main(): diff --git a/fdroidserver/rewritemeta.py b/fdroidserver/rewritemeta.py index 9f3316b4..4bbe810d 100644 --- a/fdroidserver/rewritemeta.py +++ b/fdroidserver/rewritemeta.py @@ -17,16 +17,14 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from argparse import ArgumentParser -import logging import io -import tempfile +import logging import shutil +import tempfile +from argparse import ArgumentParser from pathlib import Path -from . import _ -from . import common -from . import metadata +from . import _, common, metadata config = None diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index a81912fc..0d5a3ecf 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -729,6 +729,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): 'www.jitpack.io', 'repo.maven.apache.org/maven2', 'oss.jfrog.org/artifactory/oss-snapshot-local', + 'central.sonatype.com/repository/maven-snapshots/', 'oss.sonatype.org/content/repositories/snapshots', 'oss.sonatype.org/content/repositories/releases', 'oss.sonatype.org/content/groups/public', @@ -750,8 +751,12 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): ] ] - scanignore = common.getpaths_map(build_dir, build.scanignore) - scandelete = common.getpaths_map(build_dir, build.scandelete) + scanignore, scanignore_not_found_paths = common.getpaths_map( + build_dir, build.scanignore + ) + scandelete, scandelete_not_found_paths = common.getpaths_map( + build_dir, build.scandelete + ) scanignore_worked = set() scandelete_worked = set() @@ -1109,11 +1114,19 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): json_per_build, ) + for p in scanignore_not_found_paths: + logging.error(_("Non-exist scanignore path: %s") % p) + count += 1 + for p in scanignore: if p not in scanignore_worked: logging.error(_('Unused scanignore path: %s') % p) count += 1 + for p in scandelete_not_found_paths: + logging.error(_("Non-exist scandelete path: %s") % p) + count += 1 + for p in scandelete: if p not in scandelete_worked: logging.error(_('Unused scandelete path: %s') % p) diff --git a/fdroidserver/signatures.py b/fdroidserver/signatures.py index 486e5d18..00c9d264 100644 --- a/fdroidserver/signatures.py +++ b/fdroidserver/signatures.py @@ -15,15 +15,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import logging +import os +import re +import sys from argparse import ArgumentParser -import re -import os -import sys -import logging - -from . import _ -from . import common +from . import _, common from .exception import FDroidException diff --git a/fdroidserver/signindex.py b/fdroidserver/signindex.py index 4ca2d569..47cd5ec2 100644 --- a/fdroidserver/signindex.py +++ b/fdroidserver/signindex.py @@ -17,15 +17,13 @@ # along with this program. If not, see . import json +import logging import os import time import zipfile from argparse import ArgumentParser -import logging -from . import _ -from . import common -from . import metadata +from . import _, common, metadata from .exception import FDroidException config = None diff --git a/fdroidserver/tail.py b/fdroidserver/tail.py index 8107f10d..2bea3504 100644 --- a/fdroidserver/tail.py +++ b/fdroidserver/tail.py @@ -28,8 +28,8 @@ Example import os import sys -import time import threading +import time class Tail(object): diff --git a/fdroidserver/update.py b/fdroidserver/update.py index ba3b5506..52e9f7f0 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -20,25 +20,27 @@ # along with this program. If not, see . import argparse -import sys -import os -import shutil +import copy +import filecmp import glob -import logging -import re -import socket -import warnings -import zipfile import hashlib import json +import logging +import os +import re +import shutil +import socket +import sys import time -import yaml -import copy +import warnings +import zipfile +from argparse import ArgumentParser +from datetime import datetime, timezone +from pathlib import Path + import asn1crypto.cms import defusedxml.ElementTree as ElementTree -from datetime import datetime, timezone -from argparse import ArgumentParser -from pathlib import Path +import yaml try: from yaml import CSafeLoader as SafeLoader @@ -48,14 +50,13 @@ except ImportError: import collections from binascii import hexlify -from . import _ -from . import common -from . import metadata -from .common import DEFAULT_LOCALE -from .exception import BuildException, FDroidException, VerificationException +from PIL import Image, PngImagePlugin + import fdroidserver.index -from PIL import Image, PngImagePlugin +from . import _, common, metadata +from .common import DEFAULT_LOCALE +from .exception import BuildException, FDroidException, NoVersionCodeException, VerificationException if hasattr(Image, 'DecompressionBombWarning'): warnings.simplefilter('error', Image.DecompressionBombWarning) @@ -369,6 +370,12 @@ def get_cache(): v['antiFeatures'] = {k: {} for k in sorted(v['antiFeatures'])} if 'added' in v: v['added'] = datetime.fromtimestamp(v['added'], tz=timezone.utc) + if v.get('srcname') and not v.get('srcnameSha256'): + f = f'archive/{v["srcname"]}' + if not os.path.exists(f): + f = f'repo/{v["srcname"]}' + if os.path.exists(f): + v['srcnameSha256'] = common.sha256sum(f) return apkcache @@ -1147,6 +1154,7 @@ def insert_localized_app_metadata(apps): metadata// fastlane/metadata/android// + /fastlane/metadata/android// src//fastlane/metadata/android// ...as well as the /metadata// directory. @@ -1166,7 +1174,7 @@ def insert_localized_app_metadata(apps): https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#in-the-apps-build-metadata-in-an-fdroiddata-collection """ sourcedirs = glob.glob(os.path.join('build', '[A-Za-z]*', 'src', '[A-Za-z]*', 'fastlane', 'metadata', 'android', '[a-z][a-z]*')) - sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', 'fastlane', 'metadata', 'android', '[a-z][a-z]*')) + sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', '**', 'fastlane', 'metadata', 'android', '[a-z][a-z]*'), recursive=True) sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', 'metadata', '[a-z][a-z]*')) sourcedirs += glob.glob(os.path.join('metadata', '[A-Za-z]*', '[a-z][a-z]*')) @@ -1182,20 +1190,40 @@ def insert_localized_app_metadata(apps): locale = segments[-1] destdir = os.path.join('repo', packageName, locale) + builds = apps.get(packageName, {}).get('Builds', []) + found_in_subdir = ( + builds + and len(segments) > 6 + and segments[-4] == "fastlane" + and segments[-3] == "metadata" + and segments[-2] == "android" + and '/'.join(segments[2:-4]) == builds[-1].get('subdir') + ) + # flavors specified in build receipt build_flavors = [] - if ( - apps[packageName] - and len(apps[packageName].get('Builds', [])) > 0 - and 'gradle' in apps[packageName]['Builds'][-1] - and apps[packageName]['Builds'][-1]['gradle'] != ['yes'] - ): + if builds and 'gradle' in builds[-1] and builds[-1]['gradle'] != ['yes']: build_flavors = common.calculate_gradle_flavor_combination( - apps[packageName]['Builds'][-1]['gradle'] + builds[-1]['gradle'] ) + found_in_flavor = ( + len(segments) > 7 + and segments[2] == 'src' + and segments[4] == "fastlane" + and segments[3] in build_flavors + ) - if len(segments) >= 5 and segments[4] == "fastlane" and segments[3] not in build_flavors: - logging.debug("ignoring due to wrong flavor") + if ( + not found_in_subdir + and not found_in_flavor + and segments[0] == 'build' + and segments[2] not in ('metadata', 'fastlane') + ): + logging.debug( + 'Not scanning "{dir}" with unknown subdir or gradle flavor "{value}"'.format( + dir=os.path.relpath(root), value=segments[3] + ) + ) continue for f in files: @@ -1233,9 +1261,7 @@ def insert_localized_app_metadata(apps): try: versionCode = int(base) locale = segments[-2] - if versionCode in [ - a["versionCode"] for a in apps[packageName]["Builds"] - ]: + if versionCode in [b["versionCode"] for b in builds]: _set_localized_text_entry( apps[packageName], locale, @@ -1460,19 +1486,18 @@ def insert_localized_ios_app_metadata(apps_with_packages): fdroidserver.update.copy_ios_screenshots_to_repo(screenshots, package_name) # lookup icons, copy them and put them into app - icon_path = _get_ipa_icon(Path('build') / package_name) + icon_src = _get_ipa_icon(Path('build') / package_name) icon_dest = Path('repo') / package_name / 'icon.png' # for now just assume png - icon_stat = os.stat(icon_path) app['iconv2'] = { DEFAULT_LOCALE: { 'name': str(icon_dest).lstrip('repo'), 'sha256': common.sha256sum(icon_dest), - 'size': icon_stat.st_size, + 'size': os.path.getsize(icon_src), } } - if not icon_dest.exists(): + if not icon_dest.exists() or not filecmp.cmp(icon_src, icon_dest): icon_dest.parent.mkdir(parents=True, exist_ok=True) - shutil.copy(icon_path, icon_dest) + shutil.copy2(icon_src, icon_dest) def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): @@ -1551,8 +1576,10 @@ def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): repo_file['packageName'] = m.group(1) repo_file['versionCode'] = int(m.group(2)) srcfilename = name + b'_src.tar.gz' - if os.path.exists(os.path.join(repodir, srcfilename)): + srcpath = os.path.join(repodir, srcfilename) + if os.path.exists(srcpath): repo_file['srcname'] = srcfilename.decode() + repo_file['srcnameSha256'] = common.sha256sum(srcpath.decode()) repo_file['size'] = stat.st_size apkcache[name_utf8] = repo_file @@ -1774,6 +1801,7 @@ def scan_apk_androguard(apk, apkfile): xml = apkobject.get_android_manifest_xml() androidmanifest_xml = apkobject.xml['AndroidManifest.xml'] + if len(xml.nsmap) > 0: # one of them surely will be the Android one, or its corrupt xmlns = common.XMLNS_ANDROID @@ -1783,8 +1811,12 @@ def scan_apk_androguard(apk, apkfile): xmlns = '{}' vcstr = androidmanifest_xml.get(xmlns + 'versionCode') + logging.debug("Version Code: %r (%s)" % (vcstr, apkfile)) - if vcstr.startswith('0x'): + if not vcstr: + raise NoVersionCodeException(_("APK file {path} does not have a version code " + "in its manifest").format(path=apkfile)) + elif vcstr.startswith('0x'): apk['versionCode'] = int(vcstr, 16) else: apk['versionCode'] = int(vcstr) @@ -1932,6 +1964,10 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal logging.warning(_("Skipping '{apkfilename}' with invalid signature!") .format(apkfilename=apkfilename)) return True, None, False + except NoVersionCodeException: + logging.warning(_("Skipping '{apkfilename}' without versionCode!") + .format(apkfilename=apkfilename)) + return True, None, False if apps: if apk['packageName'] in apps: @@ -1970,8 +2006,10 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal apk['apkName'] = apkfilename srcfilename = apkfilename[:-4] + "_src.tar.gz" - if os.path.exists(os.path.join(repodir, srcfilename)): + srcpath = os.path.join(repodir, srcfilename) + if os.path.exists(srcpath): apk['srcname'] = srcfilename + apk['srcnameSha256'] = common.sha256sum(srcpath) # verify the jar signature is correct, allow deprecated # algorithms only if the APK is in the archive. diff --git a/fdroidserver/verify.py b/fdroidserver/verify.py index 46963bb4..897463ae 100644 --- a/fdroidserver/verify.py +++ b/fdroidserver/verify.py @@ -16,18 +16,17 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import sys -import os import glob import json import logging -import requests +import os +import sys from argparse import ArgumentParser from collections import OrderedDict -from . import _ -from . import common -from . import net +import requests + +from . import _, common, net from .exception import FDroidException config = None @@ -58,8 +57,8 @@ def _add_diffoscope_info(d): ] d['diffoscope']['External-Tools-Required'] = external_tools - from diffoscope.tools import OS_NAMES, get_current_os from diffoscope.external_tools import EXTERNAL_TOOLS + from diffoscope.tools import OS_NAMES, get_current_os current_os = get_current_os() os_list = [current_os] if (current_os in OS_NAMES) else iter(OS_NAMES) diff --git a/fdroidserver/vmtools.py b/fdroidserver/vmtools.py index 0251e179..2ba92ad6 100644 --- a/fdroidserver/vmtools.py +++ b/fdroidserver/vmtools.py @@ -16,16 +16,16 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from os.path import isdir, isfile, basename, abspath, expanduser -import os import json +import logging +import os import shutil import subprocess import textwrap -import logging -from .common import FDroidException - import threading +from os.path import abspath, basename, expanduser, isdir, isfile + +from .common import FDroidException lock = threading.Lock() diff --git a/gradlew-fdroid b/gradlew-fdroid deleted file mode 100755 index ed316eca..00000000 --- a/gradlew-fdroid +++ /dev/null @@ -1,312 +0,0 @@ -#!/bin/bash - -bindir="$(dirname $0)" -basedir="$(dirname $bindir)" -# Check if GRADLE_VERSION_DIR/CACHEDIR is set from environment -if [ -z "$GRADLE_VERSION_DIR" ]; then - gradle_version_dir="${basedir}/versions" -else - gradle_version_dir="$GRADLE_VERSION_DIR" -fi -BUILDSERVER_CACHEDIR=/vagrant/cache -if [ -n "$CACHEDIR" ]; then - cachedir="$CACHEDIR" -elif [ -d $BUILDSERVER_CACHEDIR ]; then - cachedir=$BUILDSERVER_CACHEDIR -fi -args=("$@") - -run_gradle() { - if [ ! -d "${gradle_version_dir}/${v_found}" ]; then - download_gradle ${v_found} - fi - # shellcheck disable=SC2145 - echo "Running ${gradle_version_dir}/${v_found}/bin/gradle ${args[@]}" - "${gradle_version_dir}/${v_found}/bin/gradle" "${args[@]}" - exit $? -} - -download_gradle() { - URL="https://downloads.gradle.org/distributions/gradle-${1}-bin.zip" - shasum=$(get_sha $1) - if [ $? != 0 ]; then - echo "No hash for gradle version $1! Exiting..." - exit 1 - fi - if [ -n "${cachedir}" ] && [ -e "${cachedir}/gradle-$1-bin.zip" ]; then - echo "Using cached ${cachedir}/gradle-$1-bin.zip ..." - gradle_zip="${cachedir}/gradle-$1-bin.zip" - else - echo "Downloading missing gradle version $1" - echo cachedir $cachedir - if [[ -n "${cachedir}" && ! -d "${cachedir}" ]]; then - mkdir -p "${cachedir}" - fi - if [[ -n "${cachedir}" && -d "${cachedir}" && -w "${cachedir}" ]]; then - tmpdir="${cachedir}" - else - tmpdir=$(mktemp -d) - fi - curl -o "${tmpdir}/gradle-$1-bin.zip" --silent --fail --show-error --location --retry 3 --retry-all-errors "${URL}" - gradle_zip="${tmpdir}/gradle-$1-bin.zip" - fi - echo "${shasum} ${gradle_zip}" | sha256sum -c - - if [ $? != 0 ]; then - echo "gradle download checksum mismatch! Exiting..." - exit 1 - fi - mkdir -p "${gradle_version_dir}/" - unzip -q -d "${gradle_version_dir}" "${gradle_zip}" - mv "${gradle_version_dir}/gradle-$1" "${gradle_version_dir}/${v_found}" -} - -get_sha() { - case $1 in - '0.7') echo '4e354fcb0d5c0b0e7789cd6ee900456edaf993f6dd890c4a1c217d90d2a6a6ad' ;; - '0.8') echo '940e623ea98e40ea9ad398770a6ebb91a61c0869d394dda81aa86b0f4f0025e7' ;; - '0.9') echo '994e46d4b467254a0f25ce92b602618331b9b3ac8b32a094fd84ff0e0ceec135' ;; - '0.9.1') echo '5d48cba95db031ec109ae9ab60561e960b6507046036e8191aa78572ec27e2a5' ;; - '0.9.2') echo 'f94d7642348c558fc05ab5fd6fb947fb1ed8fed5931ddb73dd04fb0de22d669b' ;; - '1.0') echo '894bca0360a7e2040815096788f118a2dd106ff6694221b274efb9c32bce0384' ;; - '1.1') echo '552c1fc9f3a1b9668b79cc447370f0263e664ffb6d5c6e1c21e77ce0c8a20d4c' ;; - '1.2') echo 'eb53da3704d24cabb7565f34a3bf16bcd863c4b0c139917606fb15d4f27c7bdf' ;; - '1.3') echo 'ada68561efbb9f1cae0f9063974cbde15c180351a2f92bc2f1106e39ddcae5ba' ;; - '1.4') echo 'cd99e85fbcd0ae8b99e81c9992a2f10cceb7b5f009c3720ef3a0078f4f92e94e' ;; - '1.5') echo 'a5511a0659caa47d9d74fd2844c9da43157d2f78e63a0223c6289d88f5aaecbe' ;; - '1.6') echo 'de3e89d2113923dcc2e0def62d69be0947ceac910abd38b75ec333230183fac4' ;; - '1.7') echo '360c97d51621b5a1ecf66748c718594e5f790ae4fbc1499543e0c006033c9d30' ;; - '1.8') echo 'a342bbfa15fd18e2482287da4959588f45a41b60910970a16e6d97959aea5703' ;; - '1.9') echo '097ddc2bcbc9da2bb08cbf6bf8079585e35ad088bafd42e8716bc96405db98e9' ;; - '1.10') echo '6e6db4fc595f27ceda059d23693b6f6848583950606112b37dfd0e97a0a0a4fe' ;; - '1.11') echo '07e235df824964f0e19e73ea2327ce345c44bcd06d44a0123d29ab287fc34091' ;; - '1.12') echo '8734b13a401f4311ee418173ed6ca8662d2b0a535be8ff2a43ecb1c13cd406ea' ;; - '2.0') echo 'a1eb880c8755333c4d33c4351b269bebe517002532d3142c0b6164c9e8c081c3' ;; - '2.1') echo '3eee4f9ea2ab0221b89f8e4747a96d4554d00ae46d8d633f11cfda60988bf878' ;; - '2.2') echo '91e5655fe11ef414449f218c4fa2985b3a49b7903c57556da109c84fa26e1dfb' ;; - '2.2.1') echo '420aa50738299327b611c10b8304b749e8d3a579407ee9e755b15921d95ff418' ;; - '2.3') echo '010dd9f31849abc3d5644e282943b1c1c355f8e2635c5789833979ce590a3774' ;; - '2.4') echo 'c4eaecc621a81f567ded1aede4a5ddb281cc02a03a6a87c4f5502add8fc2f16f' ;; - '2.5') echo '3f953e0cb14bb3f9ebbe11946e84071547bf5dfd575d90cfe9cc4e788da38555' ;; - '2.6') echo '18a98c560af231dfa0d3f8e0802c20103ae986f12428bb0a6f5396e8f14e9c83' ;; - '2.7') echo 'cde43b90945b5304c43ee36e58aab4cc6fb3a3d5f9bd9449bb1709a68371cb06' ;; - '2.8') echo 'a88db9c2f104defdaa8011c58cf6cda6c114298ae3695ecfb8beb30da3a903cb' ;; - '2.9') echo 'c9159ec4362284c0a38d73237e224deae6139cbde0db4f0f44e1c7691dd3de2f' ;; - '2.10') echo '66406247f745fc6f05ab382d3f8d3e120c339f34ef54b86f6dc5f6efc18fbb13' ;; - '2.11') echo '8d7437082356c9fd6309a4479c8db307673965546daea445c6c72759cd6b1ed6' ;; - '2.12') echo 'e77064981906cd0476ff1e0de3e6fef747bd18e140960f1915cca8ff6c33ab5c' ;; - '2.13') echo '0f665ec6a5a67865faf7ba0d825afb19c26705ea0597cec80dd191b0f2cbb664' ;; - '2.14') echo '993b4f33b652c689e9721917d8e021cab6bbd3eae81b39ab2fd46fdb19a928d5' ;; - '2.14.1') echo 'cfc61eda71f2d12a572822644ce13d2919407595c2aec3e3566d2aab6f97ef39' ;; - '3.0') echo '39c906941a474444afbddc38144ed44166825acb0a57b0551dddb04bbf157f80' ;; - '3.1') echo 'c7de3442432253525902f7e8d7eac8b5fd6ce1623f96d76916af6d0e383010fc' ;; - '3.2') echo '5321b36837226dc0377047a328f12010f42c7bf88ee4a3b1cee0c11040082935' ;; - '3.2.1') echo '9843a3654d3e57dce54db06d05f18b664b95c22bf90c6becccb61fc63ce60689' ;; - '3.3') echo 'c58650c278d8cf0696cab65108ae3c8d95eea9c1938e0eb8b997095d5ca9a292' ;; - '3.4') echo '72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205' ;; - '3.4.1') echo 'db1db193d479cc1202be843f17e4526660cfb0b21b57d62f3a87f88c878af9b2' ;; - '3.5') echo '0b7450798c190ff76b9f9a3d02e18b33d94553f708ebc08ebe09bdf99111d110' ;; - '3.5.1') echo '8dce35f52d4c7b4a4946df73aa2830e76ba7148850753d8b5e94c5dc325ceef8' ;; - '4.0') echo '56bd2dde29ba2a93903c557da1745cafd72cdd8b6b0b83c05a40ed7896b79dfe' ;; - '4.0.1') echo 'd717e46200d1359893f891dab047fdab98784143ac76861b53c50dbd03b44fd4' ;; - '4.0.2') echo '79ac421342bd11f6a4f404e0988baa9c1f5fabf07e3c6fa65b0c15c1c31dda22' ;; - '4.1') echo 'd55dfa9cfb5a3da86a1c9e75bb0b9507f9a8c8c100793ccec7beb6e259f9ed43' ;; - '4.2') echo '515dd63d32e55a9c05667809c5e40a947529de3054444ad274b3b75af5582eae' ;; - '4.2.1') echo 'b551cc04f2ca51c78dd14edb060621f0e5439bdfafa6fd167032a09ac708fbc0' ;; - '4.3') echo '8dcbf44eef92575b475dcb1ce12b5f19d38dc79e84c662670248dc8b8247654c' ;; - '4.3.1') echo '15ebe098ce0392a2d06d252bff24143cc88c4e963346582c8d88814758d93ac7' ;; - '4.4') echo 'fa4873ae2c7f5e8c02ec6948ba95848cedced6134772a0169718eadcb39e0a2f' ;; - '4.4.1') echo 'e7cf7d1853dfc30c1c44f571d3919eeeedef002823b66b6a988d27e919686389' ;; - '4.5') echo '03f2a43a314ff0fb843a85ef68078e06d181c4549c1e5fb983f289382b59b5e3' ;; - '4.5.1') echo '3e2ea0d8b96605b7c528768f646e0975bd9822f06df1f04a64fd279b1a17805e' ;; - '4.6') echo '98bd5fd2b30e070517e03c51cbb32beee3e2ee1a84003a5a5d748996d4b1b915' ;; - '4.7') echo 'fca5087dc8b50c64655c000989635664a73b11b9bd3703c7d6cabd31b7dcdb04' ;; - '4.8') echo 'f3e29692a8faa94eb0b02ebf36fa263a642b3ae8694ef806c45c345b8683f1ba' ;; - '4.8.1') echo 'af334d994b5e69e439ab55b5d2b7d086da5ea6763d78054f49f147b06370ed71' ;; - '4.9') echo 'e66e69dce8173dd2004b39ba93586a184628bc6c28461bc771d6835f7f9b0d28' ;; - '4.10') echo '248cfd92104ce12c5431ddb8309cf713fe58de8e330c63176543320022f59f18' ;; - '4.10.1') echo 'e53ce3a01cf016b5d294eef20977ad4e3c13e761ac1e475f1ffad4c6141a92bd' ;; - '4.10.2') echo 'b49c6da1b2cb67a0caf6c7480630b51c70a11ca2016ff2f555eaeda863143a29' ;; - '4.10.3') echo '8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e' ;; - '5.0') echo '6157ac9f3410bc63644625b3b3e9e96c963afd7910ae0697792db57813ee79a6' ;; - '5.1') echo '7506638a380092a0406364c79d6c87d03d23017fc25a5770379d1ce23c3fcd4d' ;; - '5.1.1') echo '4953323605c5d7b89e97d0dc7779e275bccedefcdac090aec123375eae0cc798' ;; - '5.2') echo 'ff322863250159595e93b5a4d17a6f0d21c59a1a0497c1e1cf1d53826485503f' ;; - '5.2.1') echo '748c33ff8d216736723be4037085b8dc342c6a0f309081acf682c9803e407357' ;; - '5.3') echo 'bed2bdd3955be5a09ca7e0201e9d131f194f7f6c466e1795a733733ccfb09f25' ;; - '5.3.1') echo '1c59a17a054e9c82f0dd881871c9646e943ec4c71dd52ebc6137d17f82337436' ;; - '5.4') echo 'c8c17574245ecee9ed7fe4f6b593b696d1692d1adbfef425bef9b333e3a0e8de' ;; - '5.4.1') echo '7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc' ;; - '5.5') echo '8d78b2ed63e7f07ad169c1186d119761c4773e681f332cfe1901045b1b0141bc' ;; - '5.5.1') echo '222a03fcf2fcaf3691767ce9549f78ebd4a77e73f9e23a396899fb70b420cd00' ;; - '5.6') echo '15c02ef5dd3631ec02ac52e8725703e0285d9a7eecbf4e5939aa9e924604d01d' ;; - '5.6.1') echo '0986244820e4a35d32d91df2ec4b768b5ba5d6c8246753794f85159f9963ec12' ;; - '5.6.2') echo '32fce6628848f799b0ad3205ae8db67d0d828c10ffe62b748a7c0d9f4a5d9ee0' ;; - '5.6.3') echo '60a6d8f687e3e7a4bc901cc6bc3db190efae0f02f0cc697e323e0f9336f224a3' ;; - '5.6.4') echo '1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d' ;; - '6.0') echo '5a3578b9f0bb162f5e08cf119f447dfb8fa950cedebb4d2a977e912a11a74b91' ;; - '6.0.1') echo 'd364b7098b9f2e58579a3603dc0a12a1991353ac58ed339316e6762b21efba44' ;; - '6.1') echo 'd0c43d14e1c70a48b82442f435d06186351a2d290d72afd5b8866f15e6d7038a' ;; - '6.1.1') echo '9d94e6e4a28ad328072ef6e56bce79a810494ae756751fdcedffdeaf27c093b1' ;; - '6.2') echo 'b93a5f30d01195ec201e240f029c8b42d59c24086b8d1864112c83558e23cf8a' ;; - '6.2.1') echo 'a68ca7ba57f3404c3f6fc1f70a02d3a7d78652e6b46bbfaff83fc9a17168c279' ;; - '6.2.2') echo '0f6ba231b986276d8221d7a870b4d98e0df76e6daf1f42e7c0baec5032fb7d17' ;; - '6.3') echo '038794feef1f4745c6347107b6726279d1c824f3fc634b60f86ace1e9fbd1768' ;; - '6.4') echo 'b888659f637887e759749f6226ddfcb1cb04f828c58c41279de73c463fdbacc9' ;; - '6.4.1') echo 'e58cdff0cee6d9b422dcd08ebeb3177bc44eaa09bd9a2e838ff74c408fe1cbcd' ;; - '6.5') echo '23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f' ;; - '6.5.1') echo '50a7d30529fa939721fe9268a0205142f3f2302bcac5fb45b27a3902e58db54a' ;; - '6.6') echo 'e6f83508f0970452f56197f610d13c5f593baaf43c0e3c6a571e5967be754025' ;; - '6.6.1') echo '7873ed5287f47ca03549ab8dcb6dc877ac7f0e3d7b1eb12685161d10080910ac' ;; - '6.7') echo '8ad57759019a9233dc7dc4d1a530cefe109dc122000d57f7e623f8cf4ba9dfc4' ;; - '6.7.1') echo '3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d' ;; - '6.8') echo 'e2774e6fb77c43657decde25542dea710aafd78c4022d19b196e7e78d79d8c6c' ;; - '6.8.1') echo 'fd591a34af7385730970399f473afabdb8b28d57fd97d6625c388d090039d6fd' ;; - '6.8.2') echo '8de6efc274ab52332a9c820366dd5cf5fc9d35ec7078fd70c8ec6913431ee610' ;; - '6.8.3') echo '7faa7198769f872826c8ef4f1450f839ec27f0b4d5d1e51bade63667cbccd205' ;; - '6.9') echo '765442b8069c6bee2ea70713861c027587591c6b1df2c857a23361512560894e' ;; - '6.9.1') echo '8c12154228a502b784f451179846e518733cf856efc7d45b2e6691012977b2fe' ;; - '6.9.2') echo '8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f' ;; - '6.9.3') echo 'dcf350b8ae1aa192fc299aed6efc77b43825d4fedb224c94118ae7faf5fb035d' ;; - '6.9.4') echo '3e240228538de9f18772a574e99a0ba959e83d6ef351014381acd9631781389a' ;; - '7.0') echo 'eb8b89184261025b0430f5b2233701ff1377f96da1ef5e278af6ae8bac5cc305' ;; - '7.0.1') echo 'dccda8aa069563c8ba2f6cdfd0777df0e34a5b4d15138ca8b9757e94f4e8a8cb' ;; - '7.0.2') echo '0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c' ;; - '7.1') echo '2debee19271e1b82c6e41137d78e44e6e841035230a1a169ca47fd3fb09ed87b' ;; - '7.1.1') echo 'bf8b869948901d422e9bb7d1fa61da6a6e19411baa7ad6ee929073df85d6365d' ;; - '7.2') echo 'f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd' ;; - '7.3') echo 'de8f52ad49bdc759164f72439a3bf56ddb1589c4cde802d3cec7d6ad0e0ee410' ;; - '7.3.1') echo '9afb3ca688fc12c761a0e9e4321e4d24e977a4a8916c8a768b1fe05ddb4d6b66' ;; - '7.3.2') echo '23b89f8eac363f5f4b8336e0530c7295c55b728a9caa5268fdd4a532610d5392' ;; - '7.3.3') echo 'b586e04868a22fd817c8971330fec37e298f3242eb85c374181b12d637f80302' ;; - '7.4') echo '8cc27038d5dbd815759851ba53e70cf62e481b87494cc97cfd97982ada5ba634' ;; - '7.4.1') echo 'e5444a57cda4a95f90b0c9446a9e1b47d3d7f69057765bfb54bd4f482542d548' ;; - '7.4.2') echo '29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda' ;; - '7.5') echo 'cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2' ;; - '7.5.1') echo 'f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4' ;; - '7.6') echo '7ba68c54029790ab444b39d7e293d3236b2632631fb5f2e012bb28b4ff669e4b' ;; - '7.6.1') echo '6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87' ;; - '7.6.2') echo 'a01b6587e15fe7ed120a0ee299c25982a1eee045abd6a9dd5e216b2f628ef9ac' ;; - '7.6.3') echo '740c2e472ee4326c33bf75a5c9f5cd1e69ecf3f9b580f6e236c86d1f3d98cfac' ;; - '7.6.4') echo 'bed1da33cca0f557ab13691c77f38bb67388119e4794d113e051039b80af9bb1' ;; - '7.6.5') echo 'b812fec0edb7d27e0ae35955887bb2954536fa3e44edaf481150da058e154d9a' ;; - '8.0') echo '4159b938ec734a8388ce03f52aa8f3c7ed0d31f5438622545de4f83a89b79788' ;; - '8.0.1') echo '1b6b558be93f29438d3df94b7dfee02e794b94d9aca4611a92cdb79b6b88e909' ;; - '8.0.2') echo 'ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7' ;; - '8.1') echo 'a62c5f99585dd9e1f95dab7b9415a0e698fa9dd1e6c38537faa81ac078f4d23e' ;; - '8.1.1') echo 'e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f' ;; - '8.2') echo '38f66cd6eef217b4c35855bb11ea4e9fbc53594ccccb5fb82dfd317ef8c2c5a3' ;; - '8.2.1') echo '03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1' ;; - '8.3') echo '591855b517fc635b9e04de1d05d5e76ada3f89f5fc76f87978d1b245b4f69225' ;; - '8.4') echo '3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae' ;; - '8.5') echo '9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026' ;; - '8.6') echo '9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c' ;; - '8.7') echo '544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d' ;; - '8.8') echo 'a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612' ;; - '8.9') echo 'd725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab' ;; - '8.10') echo '5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a' ;; - '8.10.1') echo '1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1' ;; - '8.10.2') echo '31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26' ;; - '8.11') echo '57dafb5c2622c6cc08b993c85b7c06956a2f53536432a30ead46166dbca0f1e9' ;; - '8.11.1') echo 'f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6' ;; - '8.12') echo '7a00d51fb93147819aab76024feece20b6b84e420694101f276be952e08bef03' ;; - '8.12.1') echo '8d97a97984f6cbd2b85fe4c60a743440a347544bf18818048e611f5288d46c94' ;; - '8.13') echo '20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78' ;; - '8.14') echo '61ad310d3c7d3e5da131b76bbf22b5a4c0786e9d892dae8c1658d4b484de3caa' ;; - '8.14.1') echo '845952a9d6afa783db70bb3b0effaae45ae5542ca2bb7929619e8af49cb634cf' ;; - '8.14.2') echo '7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999' ;; - *) exit 1 - esac -} - -contains() { - local e - for e in $2; do - [[ $e == $1 ]] && return 0; - done - return 1 -} - -# key-value pairs of what gradle version (value) each gradle plugin version -# (key) should accept. plugin versions are actually prefixes and catch sub- -# versions as well. Pairs are taken from: -# https://developer.android.com/studio/releases/gradle-plugin#updating-gradle -d_gradle_plugin_ver_k=(8.9 8.8 8.7 8.6 8.5 8.4 8.3 8.2 8.1 8.0 7.4 7.3 7.2 7.1 7.0 4.2 4.1 4.0 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.3 2.2 2.1.3 2.1 2.0) -d_plugin_min_gradle_v=(8.11.1 8.10.2 8.9 8.7 8.7 8.6 8.4 8.2 8.0 8.0 7.5 7.4 7.3.3 7.2 7.0.2 6.7.1 6.5 6.1.1 5.6.4 5.4.1 5.1.1 4.10.1 4.6 4.4 4.1 3.3 2.14.1 2.14.1 2.12 2.12) - -# All gradle versions we know about -plugin_v=(8.14.2 8.14.1 8.14 8.13 8.12.1 8.12 8.11.1 8.11 8.10.2 8.10.1 8.10 8.9 8.8 8.7 8.6 8.5 8.4 8.3 8.2.1 8.2 8.1.1 8.1 8.0.2 8.0.1 8.0 7.6.5 7.6.4 7.6.3 7.6.2 7.6.1 7.6 7.5.1 7.5 7.4.2 7.4.1 7.4 7.3.3 7.3.2 7.3.1 7.3 7.2 7.1.1 7.1 7.0.2 7.0.1 7.0 6.9.4 6.9.3 6.9.2 6.9.1 6.9 6.8.3 6.8.2 6.8.1 6.8 6.7.1 6.7 6.6.1 6.6 6.5.1 6.5 6.4.1 6.4 6.3 6.2.2 6.2.1 6.2 6.1.1 6.1 6.0.1 6.0 5.6.4 5.6.3 5.6.2 5.6.1 5.6 5.5.1 5.5 5.4.1 5.4 5.3.1 5.3 5.2.1 5.2 5.1.1 5.1 5.0 4.10.3 4.10.2 4.10.1 4.10 4.9 4.8.1 4.8 4.7 4.6 4.5.1 4.5 4.4.1 4.4 4.3.1 4.3 4.2.1 4.2 4.1 4.0.2 4.0.1 4.0 3.5.1 3.5 3.4.1 3.4 3.3 3.2.1 3.2 3.1 3.0 2.14.1 2.14 2.13 2.12 2.11 2.10 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2.1 2.2 2.1 2.0 1.12 1.11 1.10 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9.2 0.9.1 0.9 0.8 0.7) - -v_all=${plugin_v[@]} - -# Earliest file takes priority -# Last key takes priority if there are duplicates (matching java.util.Properties) -for f in {.,..,../..}/gradle/wrapper/gradle-wrapper.properties; do - [[ -f $f ]] || continue - while IFS='' read -r line || [ -n "$line" ]; do - line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds - if [[ $line == 'distributionUrl='* ]]; then - wrapper_ver=${line#*/gradle-} - wrapper_ver=${wrapper_ver%-*.zip} - fi - done < $f - [[ -n $wrapper_ver ]] && break -done - -if [[ -n $wrapper_ver ]]; then - v_found=$wrapper_ver - echo "Found $v_found via distributionUrl" - run_gradle -fi - -# Earliest takes priority -for f in {.,..}/build.gradle{,.kts}; do - [[ -f $f ]] || continue - while IFS='' read -r line || [ -n "$line" ]; do - line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds - if [[ -z "$plugin_pver" && $line == *'com.android.tools.build:gradle:'* ]]; then - plugin_pver=${line#*[\'\"]com.android.tools.build:gradle:} - plugin_pver=${plugin_pver%[\'\"]*} - elif [[ -z "$wrapper_ver" && $line == *'gradleVersion = '* ]]; then - wrapper_ver=${line#*gradleVersion*=*[\'\"]} - wrapper_ver=${wrapper_ver%[\'\"]*} - fi - done < $f -done - -if [[ -n $wrapper_ver ]]; then - v_found=$wrapper_ver - echo "Found $v_found via gradleVersion" - run_gradle -fi - -if [[ -n $plugin_pver ]]; then - i=0 - match=false - for k in "${d_gradle_plugin_ver_k[@]}"; do - if [[ $plugin_pver == ${k}* ]]; then - plugin_ver=${d_plugin_min_gradle_v[$i]} - match=true - break - fi - let i++ - done - if $match; then - v_found=$plugin_ver - echo "Found $v_found via gradle plugin version $k" - fi -fi - -# Find the highest version available -for v in ${plugin_v[*]}; do - if contains $v "${v_all[*]}"; then - v_def=$v - break - fi -done - -if [[ -z $v_found ]]; then - echo "No suitable gradle version found - defaulting to $v_def" - v_found=$v_def -fi - -run_gradle diff --git a/hooks/pre-commit b/hooks/pre-commit index 039c1b65..a147e689 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -11,7 +11,7 @@ if [ -z "$files" ]; then PY_FILES="fdroid makebuildserver setup.py fdroidserver/*.py examples/*.py tests/*-release-checksums.py" PY_TEST_FILES="tests/test_*.py" SH_FILES="hooks/pre-commit" - BASH_FILES="gradlew-fdroid jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*" + BASH_FILES="jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*" RB_FILES="buildserver/Vagrantfile" YML_FILES=".*.yml .yamllint */*.yml */*.yaml" else diff --git a/locale/az/LC_MESSAGES/fdroidserver.po b/locale/az/LC_MESSAGES/fdroidserver.po index 6bc37559..48050f95 100644 --- a/locale/az/LC_MESSAGES/fdroidserver.po +++ b/locale/az/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2023-05-26 19:39+0000\n" "Last-Translator: Mehrab Poladov \n" "Language-Team: Azerbaijani \n" @@ -353,6 +353,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1478,6 +1483,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1991,6 +2001,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/ba/LC_MESSAGES/fdroidserver.po b/locale/ba/LC_MESSAGES/fdroidserver.po new file mode 100644 index 00000000..9804a4f7 --- /dev/null +++ b/locale/ba/LC_MESSAGES/fdroidserver.po @@ -0,0 +1,2695 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# Zulfar , 2025. +msgid "" +msgstr "" +"Project-Id-Version: fdroidserver 2.4.0\n" +"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-06-22 06:50+0000\n" +"Last-Translator: Zulfar \n" +"Language-Team: Bashkir \n" +"Language: ba\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.13-dev\n" + +#: ../fdroidserver/nightly.py +msgid "" +"\n" +"SSH public key to be used as deploy key:" +msgstr "" +"\n" +"Урынлаштырыу асҡысы итеп ҡулланыу өсөн SSH асыҡ асҡысы:" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "" +"\n" +"{path} encoded for the DEBUG_KEYSTORE secret variable:" +msgstr "" +"\n" +"{path} DEBUG_KEYSTORE йәшерен үҙгәреүсәне өсөн кодланған:" + +#: ../fdroidserver/lint.py +#, python-format +msgid "\"%s/\" has no matching metadata file!" +msgstr "\"%s/\" өсөн ярашлы мета-мәғлүмәт файлы юҡ!" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "\"isPrimary\" асҡысы көҙгөләргә өҫтәлергә тейеш түгел!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "\"local_copy_dir\" {path} does not exist!" +msgstr "\"local_copy_dir\" {path} каталогы юҡ!" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "\"{apkfilename}\" is already installed on {dev}." +msgstr "\"{apkfilename}\" {dev} ҡоролмаһында инде ҡуйылған." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" contains recent {name} ({version})" +msgstr "\"{path}\" эсендә {name} ({version}) ҡушымтаһының яңы версияһы бар." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "\"{path}\" exists but s3cmd is not installed!" +msgstr "\"{path}\" бар, ләкин s3cmd ҡуйылмаған!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" +msgstr "\"{path}\" — яраҡлы файл форматы түгел (ҡулланығыҙ: metadata/*.yml)" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" is signed by a key that is not allowed:" +msgstr "\"{path}\" рөхсәт ителмәгән асҡыс менән тамғаланған:" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "\"{url}\" is not a valid URL!" +msgstr "\"{url}\" — дөрөҫ URL түгел!" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%(prog)s: error: %(message)s\n" +msgstr "%(prog)s: хата: %(message)s\n" + +#: ../fdroidserver/publish.py +#, python-format +msgid "%d APKs failed to be signed or verified!" +msgstr "%d APK тамғаланманы йәки тикшерелмәне!" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "%d problems found" +msgstr "%d проблема табылды" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%r is not callable" +msgstr "%r саҡырылмалы түгел" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s did not produce a dict!" +msgstr "%s һүҙлек (dict) ҡайтарманы!" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s has bad SHA-256: %s" +msgstr "%s файлының SHA-256 суммаһы дөрөҫ түгел: %s" + +#: ../fdroidserver/lint.py +#, python-format +msgid "%s is not an accepted build field" +msgstr "%s — рөхсәт ителгән йыйыу яланы түгел" + +#: ../fdroidserver/common.py +msgid "'keypass' not found in config.yml!" +msgstr "config.yml файлында 'keypass' табылманы!" + +#: ../fdroidserver/common.py +msgid "'keystore' is NONE and 'smartcardoptions' is blank!" +msgstr "'keystore' күрһәтелмәгән һәм 'smartcardoptions' буш!" + +#: ../fdroidserver/common.py +msgid "'keystore' not found in config.yml!" +msgstr "config.yml файлында 'keystore' табылманы!" + +#: ../fdroidserver/common.py +msgid "'keystorepass' not found in config.yml!" +msgstr "config.yml файлында 'keystorepass' табылманы!" + +#: ../fdroidserver/common.py +msgid "'repo_keyalias' not found in config.yml!" +msgstr "config.yml файлында 'repo_keyalias' табылманы!" + +#: /usr/lib/python3.11/argparse.py +msgid "'required' is an invalid argument for positionals" +msgstr "Позицион аргументтар өсөн 'required' — дөрөҫ булмаған аргумент" + +#: ../fdroidserver/common.py +msgid "'sdk_path' not set in config.yml!" +msgstr "config.yml файлында 'sdk_path' күрһәтелмәгән!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" +msgstr "'{aapt}' бигерәк иҫке, F-Droid өсөн build-tools-{version} йәки яңыраҡ версияһы кәрәк!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{path}' failed to execute!" +msgstr "'{path}' башҡарылманы!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{path}' has invalid format, it should be a dictionary!" +msgstr "'{path}' форматы дөрөҫ түгел, ул һүҙлек булырға тейеш!" + +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" +msgstr "'{appid}' өсөн '{value}' — дөрөҫ булмаған {field} ҡиммәте. Regex ҡалыбы: {pattern}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field}, should be {pattern}" +msgstr "'{value}' — яраҡлы {field} түгел, {pattern} булырға тейеш" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request тик бер appid менән генә эшләй!" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "...checkupdate failed for {appid} : {error}" +msgstr "...{appid} өсөн checkupdate уңышһыҙ үтте: {error}" + +#: /usr/lib/python3.11/argparse.py +msgid ".__call__() not defined" +msgstr ".__call__() билдәләнмәгән" + +#: ../fdroidserver/lint.py +msgid "/issues is missing" +msgstr "/issues юҡ" + +#: ../fdroidserver/mirror.py +msgid "A URL is required as an argument!" +msgstr "Аргумент итеп URL күрһәтеү мотлаҡ!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "APK signatures have different certificates in {path}:" +msgstr "{path} эсендәге APK-имзаларҙың сертификаттары төрлө:" + +#: ../fdroidserver/__main__.py +msgid "Add PGP signatures using GnuPG for packages in repo" +msgstr "Репозиторийҙағы пакеттарға GnuPG ярҙамында PGP-имзалар өҫтәү" + +#: ../fdroidserver/update.py +msgid "Add a repo signing key to an unsigned repo" +msgstr "Тамғаланмаған репозиторийға репо-имзалау асҡысын өҫтәү" + +#: ../fdroidserver/update.py +msgid "Add skeleton metadata files for APKs that are missing them" +msgstr "Мета-мәғлүмәт файлдары булмаған APK-лар өсөн ҡалыптар өҫтәү" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Adding new repo for only {name}" +msgstr "Тик {name} өсөн генә яңы репозиторий өҫтәү" + +#: ../fdroidserver/init.py +msgid "Alias of the repo signing key in the keystore" +msgstr "Асҡыстар һаҡлағысындағы репо-имзалау асҡысының псевдонимы" + +#: ../fdroidserver/build.py +msgid "AllowedAPKSigningKeys missing but reference binary supplied" +msgstr "AllowedAPKSigningKeys юҡ, ләкин өлгө бинар файл бирелгән" + +#: ../fdroidserver/import_subcommand.py +msgid "Allows a different revision (or git branch) to be specified for the initial import" +msgstr "Башланғыс импорт өсөн икенсе ревизия (йәки git ботағын) күрһәтергә мөмкинлек бирә" + +#: ../fdroidserver/mirror.py +msgid "Also mirror the full archive section" +msgstr "Шулай уҡ архив бүлегенең тулы күсермәһен яһау" + +#: ../fdroidserver/lint.py +msgid "Also warn about formatting issues, like rewritemeta -l" +msgstr "Шулай уҡ rewritemeta -l кеүек форматлау проблемалары тураһында иҫкәртеү" + +#: ../fdroidserver/scanner.py +msgid "Android AAR library" +msgstr "Android AAR китапханаһы" + +#: ../fdroidserver/scanner.py +msgid "Android APK file" +msgstr "Android APK файлы" + +#: ../fdroidserver/scanner.py +msgid "Android DEX code" +msgstr "Android DEX коды" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Android SDK not found at {path}!" +msgstr "Android SDK {path} юлында табылманы!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' does not exist!" +msgstr "'{path}' Android SDK юлы юҡ!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' is not a directory!" +msgstr "'{path}' Android SDK юлы — каталог түгел!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK tool {cmd} not found!" +msgstr "{cmd} Android SDK ҡоралы табылманы!" + +#: ../fdroidserver/lint.py +msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "Ҡушымтала Binaries бар, ләкин сертификатты беркетеү өсөн тейешле AllowedAPKSigningKeys юҡ." + +#: ../fdroidserver/lint.py +msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" +msgstr "Ҡушымтала NoSourceSince йәки ArchivePolicy \"0 versions\" йәки 0 ҡуйылған, ләкин AutoUpdateMode йәки UpdateCheckMode None түгел" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "App is in '{repo}' but has a link to {url}" +msgstr "Ҡушымта '{repo}' эсендә, ләкин {url} адресына һылтанмаһы бар" + +#: ../fdroidserver/lint.py +msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "Ҡушымта версияһында бинар файл бар, ләкин сертификатты беркетеү өсөн тейешле AllowedAPKSigningKeys юҡ." + +#: ../fdroidserver/lint.py +msgid "Appending .git is not necessary" +msgstr ".git ҡушып яҙыу мотлаҡ түгел" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Archiving {apkfilename} with invalid signature!" +msgstr "{apkfilename} дөрөҫ булмаған имза менән архивлана!" + +#: ../fdroidserver/lint.py +msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." +msgstr "AutoUpdateMode-ла UpdateCheckMode: HTTP өсөн ҡалып булырға тейеш." + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Барлыҡ һорауҙарға автоматик рәүештә \"юҡ\" тигән яуап." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Барлыҡ һорауҙарға автоматик рәүештә \"эйе\" тигән яуап." + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" +msgstr "Көҙгөләр көйләүҙәрендә дөрөҫ булмаған яҙма төрө \"{mirrortype}\": {mirror}" + +#: ../fdroidserver/mirror.py +msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" +msgstr "Көҙгө яһау өсөн төп URL, һорау юлы аша индекс имзалау асҡысын ҡушырға мөмкин: ?fingerprint=" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in build '{versionName}'" +msgstr "'{versionName}' йыйылмаһында '{branch}' ботағы коммит булараҡ ҡулланылған" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in srclib '{srclib}'" +msgstr "'{srclib}' сығанаҡ китапханаһында '{branch}' ботағы коммит булараҡ ҡулланылған" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Broken symlink: {path}" +msgstr "Өҙөлгән символик һылтанма: {path}" + +#: ../fdroidserver/__main__.py +msgid "Build a package from source" +msgstr "Пакетты сығанаҡ кодтан йыйыу" + +#: ../fdroidserver/build.py +msgid "Build all applications available" +msgstr "Барлыҡ ҡушымталарҙы йыйыу" + +#: ../fdroidserver/lint.py +msgid "Build generated by `fdroid import` - remove disable line once ready" +msgstr "`fdroid import` менән яһалған йыйылма — әҙер булғас, һүндереү юлын алып ташлағыҙ" + +#: ../fdroidserver/checkupdates.py +msgid "Build metadata git repo has uncommited changes!" +msgstr "Йыйыу мета-мәғлүмәттәренең git репозиторийында һаҡланмаған үҙгәрештәр бар!" + +#: ../fdroidserver/build.py +msgid "Build only the latest version of each package" +msgstr "Һәр пакеттың һуңғы версияһын ғына йыйыу" + +#: ../fdroidserver/init.py +#, python-format +msgid "Built repo based in \"%s\" with this config:" +msgstr "\"%s\" каталогында ошо көйләүҙәр менән репозиторий төҙөлдө:" + +#: ../fdroidserver/checkupdates.py +msgid "Can't auto-update app with no CurrentVersionCode" +msgstr "CurrentVersionCode булмаған ҡушымтаны автоматик яңыртып булмай" + +#: ../fdroidserver/build.py +msgid "Can't build due to {} error while scanning" +msgid_plural "Can't build due to {} errors while scanning" +msgstr[0] "Сканлау ваҡытындағы {} хата арҡаһында йыйып булмай" +msgstr[1] "Сканлау ваҡытындағы {} хата арҡаһында йыйып булмай" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path} уҡылманы: {error}" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Cannot rewrite \"{path}\"" +msgstr "\"{path}\" файлын үҙгәртеп яҙып булмай" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +#, python-format +msgid "Categories '%s' is not valid" +msgstr "'%s' категориялары дөрөҫ түгел" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +msgid "Categories are not set" +msgstr "Категориялар күрһәтелмәгән" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Category \"{category}\" defined but not used for any apps!" +msgstr "\"{category}\" категорияһы билдәләнгән, ләкин бер ҡушымтала ла ҡулланылмай!" + +#: ../fdroidserver/__main__.py +msgid "Check for updates to applications" +msgstr "Ҡушымталар өсөн яңыртыуҙарҙы тикшереү" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" +msgstr "{appid} өсөн архивлауҙы тикшереү - apk:{integer}, һаҡларға:{keep}, архивта:{arch}" + +#: ../fdroidserver/update.py +msgid "Clean update - don't uses caches, reprocess all APKs" +msgstr "Таҙа яңыртыу — кештарҙы ҡулланмаҫҡа, бөтә APK-ларҙы яңынан эшкәртергә" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Лог сығарылышын төҫлө итеү" + +#: ../fdroidserver/import_subcommand.py +msgid "Comma separated list of categories." +msgstr "Өтөр менән айырылған категориялар исемлеге." + +#: ../fdroidserver/__main__.py +#, python-format +msgid "Command '%s' not recognised.\n" +msgstr "'%s' командаһы танылманы.\n" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes" +msgstr "Үҙгәрештәрҙе һаҡлау (commit)" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Үҙгәрештәрҙе һаҡларға (commit), ебәрергә (push), шунан берләштереүгә һорау яһарға" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Conflicting \"{field}\" definitions between .yml and localized files:" +msgstr ".yml һәм локалләштерелгән файлдар араһында \"{field}\" өсөн ҡапма-ҡаршылыҡлы билдәләмәләр:" + +#: ../fdroidserver/__main__.py +msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." +msgstr "Ҡапма-ҡаршылыҡлы аргументтар: '--verbose' һәм '--quiet' бер үк ваҡытта күрһәтелә алмай." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not find '{command}' on your system" +msgstr "Системала '{command}' табылманы" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version code" +msgstr "Һуңғы версияның кодын табып булманы" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version name" +msgstr "Һуңғы версияның исемен табып булманы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not find {path} to remove it" +msgstr "Юйыу өсөн {path} табылманы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not open APK {path} for analysis: " +msgstr "Анализ өсөн {path} APK файлын асып булманы: " + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not parse size \"{size}\", wrong type \"{type}\"" +msgstr "\"{size}\" үлсәмен танып булманы, дөрөҫ булмаған тип \"{type}\"" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/import_subcommand.py +msgid "Couldn't find Application ID" +msgstr "Ҡушымтаның идентификаторын (Application ID) табып булманы" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find any version information" +msgstr "Бер ниндәй ҙә версия мәғлүмәте табылманы" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find package ID" +msgstr "Пакет идентификаторын табып булманы" + +#: ../fdroidserver/update.py +msgid "Cowardily refusing to overwrite existing signing key setup!" +msgstr "Инде булған имзалау асҡысы көйләүҙәрен өҫтөнән яҙҙырыуҙан ҡурҡаҡтарса баш тартам!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Created new container \"{name}\"" +msgstr "Яңы \"{name}\" контейнеры булдырылды" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating \"{path}\" for configuring s3cmd." +msgstr "s3cmd-ты көйләү өсөн \"{path}\" булдырыла." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Буш {config_file} булдырыла" + +#: ../fdroidserver/publish.py +msgid "Creating log directory" +msgstr "Логтар каталогы булдырыла" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating new S3 bucket: {url}" +msgstr "Яңы S3 биҙрәһе булдырыла: {url}" + +#: ../fdroidserver/publish.py +msgid "Creating output directory" +msgstr "Сығарыу каталогы булдырыла" + +#: ../fdroidserver/index.py +msgid "Creating signed index with this key (SHA256):" +msgstr "Ошо асҡыс менән тамғаланған индекс булдырыла (SHA256):" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "Creating temporary directory" +msgstr "Ваҡытлыса каталог булдырыла" + +#: ../fdroidserver/index.py +msgid "Creating unsigned index in preparation for signing" +msgstr "Тамғалауға әҙерлек өсөн тамғаланмаған индекс булдырыла" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" +msgstr "Ағымдағы CurrentVersionCode {cv} иң иҫке йыйылма яҙмаһынан {versionCode} бәләкәйерәк" + +#: ../fdroidserver/nightly.py +msgid "DEBUG_KEYSTORE is not set or the value is incomplete" +msgstr "DEBUG_KEYSTORE күрһәтелмәгән йәки уның ҡиммәте тулы түгел" + +#: ../fdroidserver/update.py +msgid "Delete APKs and/or OBBs without metadata from the repo" +msgstr "Репозиторийҙан мета-мәғлүмәттәрһеҙ APK-ларҙы һәм/йәки OBB-ларҙы юйыу" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting archive, repo is too big ({size} max {limit})" +msgstr "Архив юйыла, репозиторий бигерәк ҙур ({size} макс. {limit})" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" +msgstr "git-көҙгөнөң тарихы юйыла, репозиторий бигерәк ҙур ({size} макс. {limit})" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Deleting unknown file: {path}" +msgstr "Билдәһеҙ файл юйыла: {path}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Description '%s' is just the app's summary" +msgstr "'%s' тасуирламаһы — ул ҡушымтаның ҡыҫҡаса аңлатмаһы ғына" + +#: ../fdroidserver/lint.py +msgid "Description has a duplicate line" +msgstr "Тасуирламала ҡабатланған юл бар" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Description of length {length} is over the {limit} char limit" +msgstr "{length} оҙонлоғондағы тасуирлама {limit} символ сикләүенән артып китә" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Did you mean config/{name}.yml?" +msgstr "Һеҙ config/{name}.yml-ды күҙ уңында тоттоғоҙмо?" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Did you mean {code}?" +msgstr "Һеҙ {code}-ты күҙ уңында тоттоғоҙмо?" + +#: ../fdroidserver/import_subcommand.py +msgid "Do not add 'disable:' to the generated build entries" +msgstr "Булдырылған йыйылма яҙмаларына 'disable:' өҫтәмәгеҙ" + +#: ../fdroidserver/nightly.py +msgid "Do not deploy the new files to the repo" +msgstr "Яңы файлдарҙы репозиторийға урынлаштырмағыҙ" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Do not include \"{path}\" in URL!" +msgstr "URL-ға \"{path}\"-ты индермәгеҙ!" + +#: ../fdroidserver/init.py +msgid "Do not prompt for Android SDK path, just fail" +msgstr "Android SDK юлын һорамаҫҡа, шунда уҡ уңышһыҙлыҡ менән тамамларға" + +#: ../fdroidserver/nightly.py +msgid "Do not remove the private keys generated from the keystore" +msgstr "Асҡыстар һаҡлағысынан булдырылған шәхси асҡыстарҙы юймағыҙ" + +#: ../fdroidserver/build.py +msgid "Don't create a source tarball, useful when testing a build" +msgstr "Сығанаҡ кодтарҙың tarball-ын яһамаҫҡа, йыйылманы һынағанда файҙалы" + +#: ../fdroidserver/build.py +msgid "Don't refresh the repository, useful when testing a build with no internet connection" +msgstr "Репозиторийҙы яңыртмаҫҡа, интернетһыҙ йыйылманы һынағанда файҙалы" + +#: ../fdroidserver/deploy.py ../fdroidserver/nightly.py +msgid "Don't use rsync checksums" +msgstr "rsync контроль суммаларын ҡулланмаҫҡа" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "F-Droid.apk-ны селтәргә аҙыраҡ мәғлүмәт ебәргән көҙгөләр аша йөкмәтергә" + +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" +msgstr "Бәләкәй репозиторийҙарҙың тулы көҙгөләрен йөкмәтеү" + +#: ../fdroidserver/common.py +msgid "Downloading the repository already failed once, not trying again." +msgstr "Репозиторийҙы йөкмәтеү бер тапҡыр уңышһыҙ булды инде, яңынан ҡабатланмаясаҡ." + +#: ../fdroidserver/verify.py +#, python-brace-format +msgid "Downloading {url} failed. {error}" +msgstr "{url} йөкмәтелмәне. {error}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Duplicate Anti-Feature declaration at {path} was ignored!" +msgstr "{path} юлындағы ҡабатланған Anti-Feature декларацияһы иғтибарһыҙ ҡалдырылды!" + +#: ../fdroidserver/index.py +#, python-format +msgid "Duplicate entry \"%s\" in mirrors config!" +msgstr "Көҙгөләр көйләүҙәрендә ҡабатланған \"%s\" яҙмаһы!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Duplicate link in '{field}': {url}" +msgstr "'{field}' яланында ҡабатланған һылтанма: {url}" + +#: ../fdroidserver/common.py +#, python-format +msgid "ERROR: %(message)s" +msgstr "ХАТА: %(message)s" + +#: ../fdroidserver/__main__.py +msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" +msgstr "ХАТА: \"server\" аҫкомандаһы алынды, \"deploy\" командаһын ҡулланығыҙ!" + +#: ../fdroidserver/nightly.py +msgid "ERROR: unsupported CI type, patches welcome!" +msgstr "ХАТА: яраҡһыҙ CI төрө, төҙәтмәләр хуплана!" + +#: ../fdroidserver/nightly.py +#, python-format +msgid "ERROR: unsupported git host \"%s\", patches welcome!" +msgstr "ХАТА: яраҡһыҙ git хосты \"%s\", төҙәтмәләр хуплана!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "ХАТА: {path} эсендәге {key} асҡысы \"archive\" йәки \"repo\" түгел!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ХАТА: {key} — дөрөҫ асҡыс түгел!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ХАТА: {key} асҡысының ҡиммәте {t} тибында булырға тейеш!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "ХАТА: {path} эсендәге {key}:{subkey} рөхсәт ителгән асҡыстар исемлегендә юҡ: {allowed_keys}!" + +#: ../fdroidserver/__main__.py +#, python-brace-format +msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." +msgstr "Кодировка '{enc}' итеп ҡуйылған, F-Droid-та кодировка проблемалары булыуы мөмкин. Иң яҡшы һөҙөмтә өсөн уны 'UTF-8'-гә ҡуйығыҙ." + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"Enter the path to the Android SDK (%s) here:\n" +"> " +msgstr "" +"Android SDK-ның юлын (%s) бында яҙығыҙ:\n" +"> " + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {var} from {configname} is not set!" +msgstr "{configname} эсенән {var} мөхит үҙгәреүсәне күрһәтелмәгән!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "{{env: {var}}} мөхит үҙгәреүсәне күрһәтелмәгән!" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "'github_releases' урынлаштырыу хатаһы, {} юҡ. (Башта `fdroid update` командаһын эшләтеп алырға кәрәк булыуы мөмкин.)" + +#: ../fdroidserver/import_subcommand.py +msgid "Error while getting repo address" +msgstr "Репозиторий адресын алғанда хата" + +#: ../fdroidserver/scanner.py +msgid "Exit with a non-zero code if problems were found" +msgstr "Проблемалар табылһа, нулдән айырмалы код менән сығырға" + +#: ../fdroidserver/__main__.py +msgid "Extract application metadata from a source repository" +msgstr "Сығанаҡ репозиторийынан ҡушымтаның мета-мәғлүмәттәрен сығарыу" + +#: ../fdroidserver/__main__.py +msgid "Extract signatures from APKs" +msgstr "APK-ларҙан имзаларҙы сығарыу" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk-ны билдәле сығанаҡтарҙың береһенән дә йөкмәтеп булманы!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed copying {path}: {error}" +msgstr "{path} күсерелмәне: {error}" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Failed fetching signatures for '{apkfilename}': {error}" +msgstr "'{apkfilename}' өсөн имзаларҙы алып булманы: {error}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed reading {path}: {error}" +msgstr "{path} уҡылманы: {error}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed resizing {path}: {error}" +msgstr "{path} үлсәме үҙгәртелмәне: {error}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Failed to create S3 bucket: {url}" +msgstr "S3 контейнерын булдырып булманы: {url}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, deleting {path}" +msgstr "APK тураһында мәғлүмәт алып булманы, {path} юйыла" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, skipping {path}" +msgstr "APK тураһында мәғлүмәт алып булманы, {path} үткәреп ебәрелә" + +#: ../fdroidserver/update.py +msgid "Failed to get APK signing key fingerprint" +msgstr "APK имзалау асҡысының бармаҡ эҙен алып булманы" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Failed to install '{apkfilename}' on {dev}: {error}" +msgstr "'{apkfilename}' {dev} ҡоролмаһына ҡуйылманы: {error}" + +#: ../fdroidserver/common.py +msgid "Failed to sign application" +msgstr "Ҡушымтаны тамғалап булманы" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Fetched buildserverid from VM: {buildserverid}" +msgstr "VM-дан йыйыу-серверының ID-һы алынды: {buildserverid}" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" +msgstr "'{apkfilename}' өсөн имзалар алынды -> '{sigdir}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "File disappeared while processing it: {path}" +msgstr "Файл эшкәртелгән ваҡытта юғалды: {path}" + +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py +#: ../fdroidserver/update.py +msgid "Finished" +msgstr "Тамамланды" + +#: ../fdroidserver/lint.py +msgid "Forbidden HTML tags" +msgstr "Тыйылған HTML тегтары" + +#: ../fdroidserver/build.py +msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." +msgstr "Һүндерелгән ҡушымталарҙы мәжбүри йыйыу һәм сканлау проблемаларына ҡарамаҫтан дауам итеү. Тик һынау режимында ғына рөхсәт ителә." + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Force halting build after {0} sec timeout!" +msgstr "{0} секундлыҡ тайм-ауттан һуң йыйыуҙы мәжбүри туҡтатыу!" + +#: ../fdroidserver/scanner.py +msgid "Force scan of disabled apps and builds." +msgstr "Һүндерелгән ҡушымталарҙы һәм йыйылмаларҙы мәжбүри сканлау." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" +msgstr "\"{name}\" ҡушымтаһы өсөн мета-мәғлүмәтһеҙ \"{path}\" графикаһы табылды!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found bad funding file \"{path}\" for \"{name}\":" +msgstr "\"{name}\" өсөн дөрөҫ булмаған \"{path}\" финанслау файлы табылды:" + +#: ../fdroidserver/common.py +msgid "Found invalid appids in arguments" +msgstr "Аргументтарҙа дөрөҫ булмаған appid-ҙар табылды" + +#: ../fdroidserver/common.py +msgid "Found invalid versionCodes for some apps" +msgstr "Ҡайһы бер ҡушымталар өсөн дөрөҫ булмаған versionCode-тар табылды" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Found multiple JAR Signature Block Files in {path}" +msgstr "{path} эсендә бер нисә JAR имза блок файлы табылды" + +#: ../fdroidserver/common.py +msgid "Found multiple Signer Certificates!" +msgstr "Бер нисә имзалаусы сертификаты табылды!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Found multiple metadata files for {appid}" +msgstr "{appid} өсөн бер нисә мета-мәғлүмәт файлы табылды" + +#: ../fdroidserver/index.py +msgid "Found multiple signing certificates for repository." +msgstr "Репозиторий өсөн бер нисә имзалау сертификаты табылды." + +#: ../fdroidserver/index.py +msgid "Found no signing certificates for repository." +msgstr "Репозиторий өсөн имзалау сертификаттары табылманы." + +#: ../fdroidserver/lint.py +#, python-format +msgid "Found non-file at %s" +msgstr "%s юлында файл булмаған объект табылды" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Found {apkfilename} at {url}" +msgstr "{apkfilename} {url} адресында табылды" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} problems in {filename}" +msgstr "{filename} эсендә {count} проблема табылды" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} warnings in {filename}" +msgstr "{filename} эсендә {count} иҫкәрмә табылды" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Generated skeleton metadata for {appid}" +msgstr "{appid} өсөн мета-мәғлүмәт ҡалыбы булдырылды" + +#: ../fdroidserver/common.py +#, python-format +msgid "Git checkout of '%s' failed" +msgstr "'%s' Git checkout-ы уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git clean failed" +msgstr "Git clean уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git fetch failed" +msgstr "Git fetch уңышһыҙ булды" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +#, python-format +msgid "Git remote set-head failed: \"%s\"" +msgstr "Git remote set-head уңышһыҙ булды: \"%s\"" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Git reset failed" +msgstr "Git reset уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git submodule deinit failed" +msgstr "Git submodule deinit уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git submodule sync failed" +msgstr "Git submodule sync уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git submodule update failed" +msgstr "Git submodule update уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "HTTPS must be used with Subversion URLs!" +msgstr "Subversion URL-дары менән HTTPS ҡулланылырға тейеш!" + +#: ../fdroidserver/deploy.py +msgid "If a git mirror gets to big, allow the archive to be deleted" +msgstr "git көҙгөһө бигерәк ҙурайып китһә, архивты юйырға рөхсәт итеү" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "If this upload fails, try manually uploading to {url}" +msgstr "Был йөкмәү уңышһыҙ булһа, {url} адресына ҡулдан йөкмәп ҡарағыҙ" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." +msgstr "'{metapath}' мета-мәғлүмәттәрендәге '{field}' иҫкергән булғанға иғтибарһыҙ ҡалдырыла." + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring FUNDING.yml entry longer than 2048: %s" +msgstr "2048-ҙән оҙонораҡ FUNDING.yml яҙмаһы иғтибарһыҙ ҡалдырыла: %s" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring bad element in manifest: %s" +msgstr "Манифестағы дөрөҫ булмаған элемент иғтибарһыҙ ҡалдырыла: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Иҫкергән {oldfile} иғтибарһыҙ ҡалдырыла, {newfile} ҡулланығыҙ!" + +#: ../fdroidserver/index.py +msgid "Ignoring package without metadata: " +msgstr "Мета-мәғлүмәтһеҙ пакет иғтибарһыҙ ҡалдырыла: " + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Ignoring stale cache data for {apkfilename}" +msgstr "{apkfilename} өсөн иҫкергән кеш мәғлүмәттәре иғтибарһыҙ ҡалдырыла" + +#: ../fdroidserver/update.py +msgid "Include APKs that are signed with disabled algorithms like MD5" +msgstr "MD5 кеүек һүндерелгән алгоритмдар менән тамғаланған APK-ларҙы индереү" + +#: ../fdroidserver/mirror.py +msgid "Include the PGP signature .asc files in the mirror" +msgstr "Көҙгөгә PGP-имзалы .asc файлдарын индереү" + +#: ../fdroidserver/mirror.py +msgid "Include the build logs in the mirror" +msgstr "Көҙгөгә йыйыу логтарын индереү" + +#: ../fdroidserver/mirror.py +msgid "Include the source tarballs in the mirror" +msgstr "Көҙгөгә сығанаҡ tarball-дарҙы индереү" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Including metadata from %s@%s" +msgstr "%s@%s версияһынан мета-мәғлүмәттәр индерелә" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Including metadata from {path}" +msgstr "{path} юлынан мета-мәғлүмәттәр индерелә" + +#: ../fdroidserver/common.py +msgid "Initialising submodules" +msgstr "Аҫмодулдәрҙе инициализациялау" + +#: ../fdroidserver/install.py +msgid "Install all signed applications available" +msgstr "Барлыҡ тамғаланған ҡушымталарҙы ҡуйыу" + +#: ../fdroidserver/__main__.py +msgid "Install built packages on devices" +msgstr "Йыйылған пакеттарҙы ҡоролмаларға ҡуйыу" + +#: ../fdroidserver/install.py +#, python-format +msgid "Installing %s..." +msgstr "%s ҡуйыла..." + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Installing '{apkfilename}' on {dev}..." +msgstr "'{apkfilename}' {dev} ҡоролмаһына ҡуйыла..." + +#: ../fdroidserver/__main__.py +msgid "Interact with the repo HTTP server" +msgstr "Репоның HTTP-серверы менән эш итеү" + +#: ../fdroidserver/update.py +msgid "Invalid APK" +msgstr "Дөрөҫ булмаған APK" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid AutoUpdateMode: {mode}" +msgstr "Дөрөҫ булмаған AutoUpdateMode: {mode}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid UpdateCheckMode: {mode}" +msgstr "Дөрөҫ булмаған UpdateCheckMode: {mode}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid VercodeOperation: {field}" +msgstr "Дөрөҫ булмаған VercodeOperation: {field}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Invalid VercodeOperation: {invalid_ops}" +msgstr "Дөрөҫ булмаған VercodeOperation: {invalid_ops}" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid application ID {appid}" +msgstr "Дөрөҫ булмаған ҡушымта идентификаторы {appid}" + +#: ../fdroidserver/lint.py +msgid "Invalid bulleted list" +msgstr "Дөрөҫ булмаған маркировкалы исемлек" + +#: ../fdroidserver/common.py +#, python-format +msgid "Invalid name for published file: %s" +msgstr "Баҫтырылған файл өсөн дөрөҫ булмаған исем: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid ndk: entry in build: \"{ndk}\"" +msgstr "Йыйылмала дөрөҫ булмаған ndk: яҙмаһы: \"{ndk}\"" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid redirect to non-HTTPS: {before} -> {after} " +msgstr "HTTPS булмаған адресҡа дөрөҫ булмаған йүнәлтеү: {before} -> {after} " + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid scrlib metadata: '{file}' does not exist" +msgstr "Дөрөҫ булмаған scrlib мета-мәғлүмәте: '{file}' юҡ" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: could not parse '{file}'" +msgstr "Дөрөҫ булмаған srclib мета-мәғлүмәте: '{file}' танылманы" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" +msgstr "Дөрөҫ булмаған srclib мета-мәғлүмәте: '{file}' эсендә билдәһеҙ '{key}' асҡысы" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature failed to verify: {path}" +msgstr "JAR имзаһы тикшерелмәне: {path}" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature verified: {path}" +msgstr "JAR имзаһы тикшерелде: {path}" + +#: ../fdroidserver/scanner.py +msgid "Java JAR file" +msgstr "Java JAR файлы" + +#: ../fdroidserver/mirror.py ../fdroidserver/publish.py +#: ../fdroidserver/update.py +msgid "Java JDK not found! Install in standard location or set java_paths!" +msgstr "Java JDK табылманы! Стандарт урынға ҡуйығыҙ йәки java_paths-ты күрһәтегеҙ!" + +#: ../fdroidserver/scanner.py +msgid "Java compiled class" +msgstr "Компиляцияланған Java класы" + +#: ../fdroidserver/signindex.py +msgid "Java jarsigner not found! Install in standard location or set java_paths!" +msgstr "Java jarsigner табылманы! Стандарт урынға ҡуйығыҙ йәки java_paths-ты күрһәтегеҙ!" + +#: ../fdroidserver/lint.py +msgid "Javascript in HTML src attributes" +msgstr "HTML-дың src атрибуттарында Javascript" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Keeping failed build \"{apkfilename}\"" +msgstr "Уңышһыҙ йыйылған \"{apkfilename}\" һаҡлана" + +#: ../fdroidserver/init.py +msgid "Keystore for signing key:\t" +msgstr "Имзалау асҡысы өсөн асҡыстар һаҡлағысы:\t" + +#: ../fdroidserver/lint.py +msgid "Known debug key is used in AllowedAPKSigningKeys: " +msgstr "AllowedAPKSigningKeys-та билдәле төҙәтеү асҡысы ҡулланыла: " + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" +msgstr "Һуңғы ҡулланылған '{commit}' коммиты тегҡа оҡшаған, ләкин UpdateCheckMode '{ucm}' итеп ҡуйылған" + +#: ../fdroidserver/lint.py +msgid "Liberapay donation methods belong in the Liberapay: field" +msgstr "Liberapay иғәнә ысулдары Liberapay: яланында булырға тейеш" + +#: ../fdroidserver/rewritemeta.py +msgid "List files that would be reformatted (dry run)" +msgstr "Яңынан форматланасаҡ файлдарҙың исемлеге (ҡоро эшләтеп ҡарау)" + +#: ../fdroidserver/lint.py +msgid "Locale included in f-droid.org URL" +msgstr "f-droid.org URL-ында локаль бар" + +#: ../fdroidserver/build.py +msgid "Make the build stop on exceptions" +msgstr "Хаталар булғанда йыйыуҙы туҡтатыу" + +#: ../fdroidserver/index.py +msgid "Malformed repository mirrors." +msgstr "Репозиторий көҙгөләре дөрөҫ форматланмаған." + +#: ../fdroidserver/deploy.py +msgid "Malformed serverwebroot line:" +msgstr "serverwebroot юлы дөрөҫ форматланмаған:" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Max recursion depth in ZIP file reached: %s" +msgstr "ZIP файлында максималь рекурсия тәрәнлегенә етелде: %s" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "{url} өсөн көҙгө көйләүҙәрендә \"isPrimary\" асҡысы бар!" + +#: ../fdroidserver/mirror.py +msgid "Mirror the full repo and archive, all file types." +msgstr "Репо менән архивтың тулы көҙгөһөн яһау, бөтә файл төрҙәре." + +#: ../fdroidserver/gpgsign.py +msgid "Missing output directory" +msgstr "Сығарыу каталогы юҡ" + +#: ../fdroidserver/metadata.py +msgid "Moving Anti-Features declarations to localized files:" +msgstr "Anti-Features декларацияларын локалләштерелгән файлдарға күсереү:" + +#: ../fdroidserver/index.py +msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" +msgstr "config.yml-да \"repo_pubkey\" ҙә, \"keystorepass\" та күрһәтелмәгән" + +#: ../fdroidserver/verify.py +#, python-format +msgid "No APK for package: %s" +msgstr "%s пакеты өсөн APK юҡ" + +#: ../fdroidserver/common.py +msgid "No Android SDK found!" +msgstr "Android SDK табылманы!" + +#: ../fdroidserver/install.py +msgid "No attached devices found" +msgstr "Тоташтырылған ҡоролмалар табылманы" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "`adb install` өсөн ҡоролмалар табылманы! Зинһар, берәйһен тоташтырығыҙ." + +#: ../fdroidserver/index.py +msgid "No fingerprint in URL." +msgstr "URL-да бармаҡ эҙе юҡ." + +#: ../fdroidserver/common.py +msgid "No git submodules available" +msgstr "git аҫмодулдәре юҡ" + +#: ../fdroidserver/import_subcommand.py +msgid "No gradle project could be found. Specify --subdir?" +msgstr "gradle проекты табылманы. --subdir күрһәтеп ҡарайһығыҙмы?" + +#: ../fdroidserver/import_subcommand.py +msgid "No information found." +msgstr "Мәғлүмәт табылманы." + +#: ../fdroidserver/checkupdates.py +msgid "No matching tags found" +msgstr "Ярашлы тегтар табылманы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "No minimum SDK version found in {0}, using default (3)." +msgstr "{0} эсендә SDK-ның минималь версияһы табылманы, стандарт (3) ҡулланыла." + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is Free Software" +msgstr "Ҡушымтаның Ирекле Программа булыуын күрһәтеү кәрәкмәй" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is for Android" +msgstr "Ҡушымтаның Android өсөн булыуын күрһәтеү кәрәкмәй" + +#: ../fdroidserver/deploy.py +msgid "No option set! Edit your config.yml to set at least one of these:" +msgstr "Бер параметр ҙа күрһәтелмәгән! config.yml файлына үҙгәреш индереп, ошоларҙың кәмендә береһен күрһәтегеҙ:" + +#: ../fdroidserver/common.py +msgid "No packages specified" +msgstr "Пакеттар күрһәтелмәгән" + +#: ../fdroidserver/install.py +#, python-format +msgid "No signed APK available for %s" +msgstr "%s өсөн тамғаланған APK юҡ" + +#: ../fdroidserver/install.py +msgid "No signed output directory - nothing to do" +msgstr "Тамғаланған сығарыу каталогы юҡ — эшләр нәмә юҡ" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No signing certificates found in {path}" +msgstr "{path} эсендә имзалау сертификаттары табылманы" + +#: ../fdroidserver/common.py +#, python-format +msgid "No such package: %s" +msgstr "Бындай пакет юҡ: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No such versionCode {versionCode} for app {appid}" +msgstr "{appid} ҡушымтаһы өсөн бындай {versionCode} versionCode-ы юҡ" + +#: ../fdroidserver/checkupdates.py +msgid "No tags found" +msgstr "Тегтар табылманы" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "No unsigned directory - nothing to do" +msgstr "Тамғаланмаған каталог юҡ — эшләр нәмә юҡ" + +#: ../fdroidserver/__main__.py +msgid "No version information could be found." +msgstr "Версия тураһында мәғлүмәт табылманы." + +#: ../fdroidserver/common.py +msgid "Not a valid size definition: \"{}\"" +msgstr "Дөрөҫ булмаған үлсәм билдәләмәһе: \"{}\"" + +#: ../fdroidserver/signindex.py +msgid "Nothing to do" +msgstr "Эшләр нәмә юҡ" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Nothing to do for {appid}." +msgstr "{appid} өсөн эшләр нәмә юҡ." + +#: ../fdroidserver/init.py +msgid "Now set these in config.yml:" +msgstr "Хәҙер ошоларҙы config.yml-да күрһәтегеҙ:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "OBB файлының versionCode-ы ({integer}) теләһә ҡайһы APK-ныҡынан яңыраҡ:" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "OBB файлының исеме \"main.\" йәки \"patch.\" менән башланырға тейеш:" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "OBB-ның пакет исеме яраҡлы APK-ға тап килмәй:" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "Офлайн машина, `fdroid deploy` эшләтелгәнгә тиклем git көҙгөһөн булдырыу үткәреп ебәрелә" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "'github_releases' көйләүҙәренең береһендә 'packageNames' ҡиммәте юҡ. үткәреп ебәрелә ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "'github_releases' көйләүҙәренең береһендә 'projectUrl' ҡиммәте юҡ. үткәреп ебәрелә ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "'github_releases' көйләүҙәренең береһендә 'token' ҡиммәте юҡ. үткәреп ебәрелә ..." + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Only PNG and JPEG are supported for graphics, found: {path}" +msgstr "Графика өсөн тик PNG һәм JPEG ғына ярай, табылды: {path}" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Тик бер генә \"env\" асҡысын ҡабул итә" + +#: ../fdroidserver/checkupdates.py +msgid "Only process apps with auto-updates" +msgstr "Тик автоматик яңыртылыусы ҡушымталарҙы ғына эшкәртеү" + +#: ../fdroidserver/lint.py +msgid "OpenCollective donation methods belong in the OpenCollective: field" +msgstr "OpenCollective иғәнә ысулдары OpenCollective: яланында булырға тейеш" + +#: ../fdroidserver/verify.py +msgid "Output JSON report to file named after APK." +msgstr "JSON отчетын APK исеме менән аталған файлға сығарыу." + +#: ../fdroidserver/scanner.py +msgid "Output JSON to stdout." +msgstr "JSON-ды стандарт сығарыу ағымына (stdout) сығарыу." + +#: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py +#: ../fdroidserver/publish.py ../fdroidserver/signindex.py +#: ../fdroidserver/update.py +msgid "Outputting JSON" +msgstr "JSON сығарыла" + +#: ../fdroidserver/import_subcommand.py +msgid "Overall license of the project." +msgstr "Проекттың дөйөм лицензияһы." + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" +msgstr "{apkfilename} эсендәге буш versionName мета-мәғлүмәттән алынған {version} менән алмаштырыла" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "Package \"{appid}\" already exists" +msgstr "\"{appid}\" пакеты инде бар" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Parsing manifest at '{path}'" +msgstr "'{path}' юлындағы манифест таныла" + +#: ../fdroidserver/common.py +msgid "Password required with username" +msgstr "Ҡулланыусы исеме менән бергә пароль кәрәк" + +#: ../fdroidserver/import_subcommand.py +msgid "Path to main Android project subdirectory, if not in root." +msgstr "Төп Android проектының аҫкаталогына юл, әгәр ул тамыр каталогында булмаһа." + +#: ../fdroidserver/init.py +msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" +msgstr "Android SDK-ға юл (ҡайһы саҡ ANDROID_HOME-да күрһәтелә)" + +#: ../fdroidserver/btlog.py +msgid "Path to the git repo to use as the log" +msgstr "Лог итеп ҡулланыу өсөн git репозиторийына юл" + +#: ../fdroidserver/init.py +msgid "Path to the keystore for the repo signing key" +msgstr "Репо имзалау асҡысы өсөн асҡыстар һаҡлағысына юл" + +#: ../fdroidserver/nightly.py +msgid "Print the secret variable to the terminal for easy copy/paste" +msgstr "Йәшерен үҙгәреүсәнде күсереп-ҡуйыу еңел булһын өсөн терминалға сығарыу" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Һеҙҙең локаль ({country_code}) нигеҙендә хосусилыҡ режимы ҡабыҙылды." + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Problem with ZIP file: %s, error %s" +msgstr "ZIP файлы менән проблема: %s, хата %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Problem with xml at '{path}'" +msgstr "'{path}' юлындағы xml менән проблема" + +#: ../fdroidserver/checkupdates.py +msgid "Process auto-updates" +msgstr "Автоматик яңыртыуҙарҙы эшкәртеү" + +#: ../fdroidserver/publish.py ../fdroidserver/update.py +#, python-brace-format +msgid "Processing {apkfilename}" +msgstr "{apkfilename} эшкәртелә" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py +#, python-brace-format +msgid "Processing {appid}" +msgstr "{appid} эшкәртелә" + +#: ../fdroidserver/update.py +msgid "Produce human-readable XML/JSON for index files" +msgstr "Индекс файлдары өсөн кеше уҡый алырлыҡ XML/JSON булдырыу" + +#: ../fdroidserver/import_subcommand.py +msgid "Project URL to import from." +msgstr "Импортлау өсөн проекттың URL-ы." + +#: ../fdroidserver/lint.py +msgid "Punctuation should be avoided" +msgstr "Тыныш билдәләренән ҡасырға кәрәк" + +#: ../fdroidserver/btlog.py +msgid "Push the log to this git remote repository" +msgstr "Логты ошо алыҫтағы git репозиторийына ебәреү" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing binary transparency log to {url}" +msgstr "Бинар асыҡлыҡ логы {url} адресына ебәрелә" + +#: ../fdroidserver/deploy.py +msgid "Pushing to remote server failed!" +msgstr "Алыҫтағы серверға ебәреү уңышһыҙ булды!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing to {url}" +msgstr "{url} адресына ебәрелә" + +#: ../fdroidserver/__main__.py +msgid "Quickly start a new repository" +msgstr "Яңы репозиторийҙы тиҙ генә башлау" + +#: ../fdroidserver/__main__.py +msgid "Read all the metadata files and exit" +msgstr "Барлыҡ мета-мәғлүмәт файлдарын уҡыу һәм сығыу" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading '{config_file}'" +msgstr "'{config_file}' уҡыла" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" +msgstr "packageName/versionCode/versionName уҡылманы, APK дөрөҫ түгел: '{apkfilename}'" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" +msgstr "packageName/versionCode/versionName уҡылманы, APK дөрөҫ түгел: '{apkfilename}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Reading {apkfilename} from cache" +msgstr "{apkfilename} кештан уҡыла" + +#: ../fdroidserver/build.py +msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "Сканлаусы ҡағиҙәләрен һәм имзаларын селтәрҙән яңыртыу һәм кешлау" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "'{path}' тамғалауҙан баш тартам, файл {dir1} һәм {dir2} каталогтарында ла бар." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Уңышлы тикшерелһә, сығанаҡ tarball-ды һәм теләһә ниндәй APK-ларҙы юйыу." + +#: ../fdroidserver/common.py +msgid "Removing specified files" +msgstr "Күрһәтелгән файлдар юйыла" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Removing {path}\"" +msgstr "\"{path} юйыла" + +#: ../fdroidserver/update.py +msgid "Rename APK files that do not match package.name_123.apk" +msgstr "package.name_123.apk ҡалыбына тап килмәгән APK файлдарының исемен үҙгәртеү" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Resigning {apkfilename} with provided debug.keystore" +msgstr "{apkfilename} бирелгән debug.keystore менән яңынан тамғалана" + +#: ../fdroidserver/update.py +msgid "Resize all the icons exceeding the max pixel size and exit" +msgstr "Максималь пиксель үлсәменән артҡан бөтә иконкаларҙың үлсәмен үҙгәртеү һәм сығыу" + +#: ../fdroidserver/common.py +msgid "Restrict output to warnings and errors" +msgstr "Сығарылышты иҫкәрмәләр һәм хаталар менән сикләү" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Уңышһыҙ йөкмәү ҡабатлана: %s" + +#: ../fdroidserver/__main__.py +msgid "Rewrite all the metadata files" +msgstr "Барлыҡ мета-мәғлүмәт файлдарын үҙгәртеп яҙыу" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Rewriting '{appid}'" +msgstr "'{appid}' үҙгәртеп яҙыла" + +#: ../fdroidserver/checkupdates.py +msgid "Run on git repo that has uncommitted changes" +msgstr "Һаҡланмаған үҙгәрештәре булған git репозиторийында эшләтеү" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "{cibase} буйлап -debug.apk. табыу өсөн эшләтеү. һәм repo_basedir {repo_basedir} үткәреп ебәреү" + +#: ../fdroidserver/lint.py +msgid "Run rewritemeta to fix formatting" +msgstr "Форматлауҙы төҙәтеү өсөн rewritemeta-ны эшләтегеҙ" + +#: ../fdroidserver/deploy.py +msgid "Running first pass with MD5 checking disabled" +msgstr "MD5 тикшереүе һүндерелгән килеш беренсе үтеү башҡарыла" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Running wget in {path}" +msgstr "wget {path} каталогында эшләтелә" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "SHA-256 of {url} does not match entry!" +msgstr "{url} адресының SHA-256 суммаһы яҙмаға тап килмәй!" + +#: ../fdroidserver/build.py +msgid "Scan the resulting APK(s) for known non-free classes." +msgstr "Алынған APK(-лар)ҙы билдәле ирекле булмаған кластарға сканлау." + +#: ../fdroidserver/__main__.py +msgid "Scan the source code of a package" +msgstr "Пакеттың сығанаҡ кодын сканлау" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {apk}" +msgstr "Сканлаусы {apk} эсендә {count} проблема тапты" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:" +msgstr "Сканлаусы {appid} эсендә {count} проблема тапты:" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:{versionCode}:" +msgstr "Сканлаусы {appid}:{versionCode} эсендә {count} проблема тапты:" + +#: ../fdroidserver/build.py +msgid "Scanner found {} problem" +msgid_plural "Scanner found {} problems" +msgstr[0] "Сканлаусы {} проблема тапты" +msgstr[1] "Сканлаусы {} проблема тапты" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "APK-ны өҫтәмә имзалау блоктарына сканлау." + +#: ../fdroidserver/scanner.py +msgid "Scanning APK with dexdump for known non-free classes." +msgstr "APK-ны dexdump менән билдәле ирекле булмаған кластарға сканлау." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Set NDK {release} ({version}) up" +msgstr "NDK {release} ({version}) көйләнде" + +#: ../fdroidserver/common.py +msgid "Set clock to that time using:" +msgstr "Сәғәтте ошо ваҡытҡа ҡуйыу өсөн ҡулланығыҙ:" + +#: ../fdroidserver/nightly.py +msgid "Set maximum releases in repo before older ones are archived" +msgstr "Иҫкерәктәре архивланыр алдынан репозиторийҙағы максималь релиздар һанын билдәләү" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Set open file limit to {integer}" +msgstr "Асыҡ файлдар сикләүен {integer} итеп ҡуйыу" + +#: ../fdroidserver/__main__.py +msgid "Set up an app build for a nightly build repo" +msgstr "Төнгө йыйыу репозиторийы өсөн ҡушымта йыйыуҙы көйләү" + +#: ../fdroidserver/build.py +msgid "Setting open file limit failed: " +msgstr "Асыҡ файлдар сикләүен ҡуйып булманы: " + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Setting {0} sec timeout for this build" +msgstr "Был йыйыу өсөн {0} секундлыҡ тайм-аут ҡуйыла" + +#: ../fdroidserver/__main__.py +msgid "Sign and place packages in the repo" +msgstr "Пакеттарҙы тамғалау һәм репозиторийға урынлаштырыу" + +#: ../fdroidserver/__main__.py +msgid "Sign indexes created using update --nosign" +msgstr "update --nosign ярҙамында булдырылған индекстарҙы тамғалау" + +#: ../fdroidserver/build.py +msgid "Skip scanning the source code for binaries and other problems" +msgstr "Сығанаҡ кодты бинарҙарға һәм башҡа проблемаларға сканлауҙы үткәреп ебәреү" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping '{apkfilename}' with invalid signature!" +msgstr "Дөрөҫ булмаған имзалы '{apkfilename}' үткәреп ебәрелә!" + +#: ../fdroidserver/deploy.py ../fdroidserver/index.py +#, python-format +msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" +msgstr "GitLab Pages көҙгөһө үткәреп ебәрелә, сөнки репозиторий бигерәк ҙур (>%.2fGB)!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping index generation for {appid}" +msgstr "{appid} өсөн индекс булдырыу үткәреп ебәрелә" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping {apkfilename} with invalid signature!" +msgstr "Дөрөҫ булмаған имзалы {apkfilename} үткәреп ебәрелә!" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Skipping {appid}: disabled" +msgstr "{appid} үткәреп ебәрелә: һүндерелгән" + +#: ../fdroidserver/deploy.py +msgid "Specify a local folder to sync the repo to" +msgstr "Репоны синхронлаштырыу өсөн локаль каталогты күрһәтегеҙ" + +#: ../fdroidserver/deploy.py +msgid "Specify an identity file to provide to SSH for rsyncing" +msgstr "rsync өсөн SSH-ға биреләсәк идентификация файлын күрһәтегеҙ" + +#: ../fdroidserver/nightly.py +msgid "Specify which debug keystore file to use." +msgstr "Ҡайһы төҙәтеү асҡыстар һаҡлағысы файлын ҡулланырға икәнен күрһәтегеҙ." + +#: ../fdroidserver/common.py +msgid "Spew out even more information than normal" +msgstr "Ғәҙәттәгенән дә күберәк мәғлүмәт сығарыу" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Stripping mystery signature from {apkfilename}" +msgstr "Серле имза {apkfilename} файлынан алына" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Summary '%s' is just the app's name" +msgstr "'%s' ҡыҫҡаса аңлатмаһы — ул ҡушымтаның исеме генә" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Summary of length {length} is over the {limit} char limit" +msgstr "{length} оҙонлоғондағы ҡыҫҡаса аңлатма {limit} символ сикләүенән артып китә" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "System clock is older than date in {path}!" +msgstr "Система сәғәте {path} эсендәге датанан иҫкерәк!" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" +msgstr "Тегтарҙы яңыртыу режимы әлеге ваҡытта тик git, hg, bzr һәм git-svn репозиторийҙары өсөн генә эшләй" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode used in git-svn, but the repo was not set up with tags" +msgstr "Тегтарҙы яңыртыу режимы git-svn-да ҡулланылған, ләкин репо тегтар менән көйләнмәгән" + +#: ../fdroidserver/build.py +msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." +msgstr "Һынау режимы — сығарылышты тик tmp каталогына ғына урынлаштырыу һәм сығарылыш булһа ла, һәр ваҡыт йыйыу." + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "\"qrcode\" Python пакеты ҡуйылмаған (мәҫ. apt-get install python3-qrcode)!" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "The OBB version code must come after \"{name}.\":" +msgstr "OBB версия коды \"{name}.\" һуңынан килергә тейеш:" + +#: ../fdroidserver/btlog.py +msgid "The base URL for the repo to log (default: https://f-droid.org)" +msgstr "Лог яһаласаҡ репоның төп URL-ы (стандарт: https://f-droid.org)" + +#: ../fdroidserver/mirror.py +msgid "The directory to write the mirror to" +msgstr "Көҙгөнө яҙыу өсөн каталог" + +#: ../fdroidserver/nightly.py +msgid "The file to be included in the repo (path or glob)" +msgstr "Репоға индереләсәк файл (юл йәки ҡалып)" + +#: ../fdroidserver/index.py +msgid "The repository's fingerprint does not match." +msgstr "Репозиторийҙың бармаҡ эҙе тап килмәй." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "The root dir for local_copy_dir \"{path}\" does not exist!" +msgstr "local_copy_dir \"{path}\" өсөн тамыр каталогы юҡ!" + +#: ../fdroidserver/publish.py +msgid "There is a keyalias collision - publishing halted" +msgstr "keyalias ҡапма-ҡаршылығы бар — баҫтырыу туҡтатылды" + +#: ../fdroidserver/common.py +msgid "These are the apps that have been archived from the main repo." +msgstr "Былар — төп репозиторийҙан архиваланған ҡушымталар." + +#: ../fdroidserver/mirror.py +msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." +msgstr "Был команда f-droid.org-тың көҙгөһөн яһау өсөн бер ҡасан да ҡулланылырға тейеш түгел! Тулы күсермә өсөн 600GB-тан ашыу урын кәрәк." + +#: ../fdroidserver/common.py +msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." +msgstr "Был — F-Droid менән ҡулланыу өсөн ҡушымталар репозиторийы. Был репозиторийҙағы ҡушымталар йә оригиналь эшләүселәр тарафынан йыйылған рәсми бинарҙар, йә f-droid.org администраторы тарафынан https://gitlab.com/fdroid адресындағы ҡоралдар ярҙамында сығанаҡ кодтан йыйылған бинарҙар." + +#: ../fdroidserver/import_subcommand.py +#, python-format +msgid "This repo already has local metadata: %s" +msgstr "Был репоның инде локаль мета-мәғлүмәттәре бар: %s" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"To complete the setup, add your APKs to \"%s\"\n" +"then run \"fdroid update -c; fdroid update\". You might also want to edit\n" +"\"config.yml\" to set the URL, repo name, and more. You should also set up\n" +"a signing key (a temporary one might have been automatically generated).\n" +"\n" +"For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"and https://f-droid.org/docs/Signing_Process" +msgstr "" +"Көйләүҙе тамамлау өсөн, APK-ларығыҙҙы \"%s\" каталогына өҫтәгеҙ,\n" +"шунан \"fdroid update -c; fdroid update\" командаһын эшләтегеҙ. Шулай уҡ URL-ды, репо исемен\n" +"һәм башҡаларҙы көйләү өсөн \"config.yml\" файлына үҙгәреш индерергә теләрһегеҙ. \n" +"Шулай уҡ имзалау асҡысын көйләргә тейешһегеҙ (ваҡытлыса асҡыс автоматик рәүештә булдырылған булырға мөмкин).\n" +"\n" +"Күберәк мәғлүмәт өсөн: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"һәм https://f-droid.org/docs/Signing_Process" + +#: ../fdroidserver/deploy.py +msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" +msgstr "awsbucket-ты ҡулланыу өсөн config.yml-да awssecretkey һәм awsaccesskeyid та күрһәтелергә тейеш!" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "rclone-ды ҡулланыу өсөн config.yml-да rclone_config һәм awsbucket күрһәтелергә тейеш!" + +#: ../fdroidserver/lint.py +msgid "URL must start with https:// or http://" +msgstr "URL https:// йәки http:// менән башланырға тейеш" + +#: ../fdroidserver/lint.py +msgid "URL shorteners should not be used" +msgstr "URL ҡыҫҡартҡыстары ҡулланылырға тейеш түгел" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "URL {url} in Description: {error}" +msgstr "Тасуирламалағы {url} URL-ы: {error}" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" +msgstr "Көтөлмәгән \"{}\" лицензия тегы! Тик https://spdx.org/license-list адресынан FSF йәки OSI тарафынан раҫланған тегтарҙы ҡулланығыҙ" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" +msgstr "Көтөлмәгән \"{}\" лицензия тегы! Тик конфигурация файлында көйләнгән лицензия тегтарын ҡулланығыҙ" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Unknown entry {key} in {configname}" +msgstr "{configname} эсендә билдәһеҙ {key} яҙмаһы" + +#: ../fdroidserver/__main__.py +msgid "Unknown exception found!" +msgstr "Билдәһеҙ хата табылды!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Unknown file '{filename}' in build '{versionName}'" +msgstr "'{versionName}' йыйылмаһында билдәһеҙ '{filename}' файлы" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Unknown metadata format: %s" +msgstr "Билдәһеҙ мета-мәғлүмәт форматы: %s" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unknown metadata format: {path} (use: *.yml)" +msgstr "Билдәһеҙ мета-мәғлүмәт форматы: {path} (ҡулланығыҙ: *.yml)" + +#: ../fdroidserver/common.py +msgid "Unknown version of aapt, might cause problems: " +msgstr "aapt-тың билдәһеҙ версияһы, проблемалар тыуҙырыуы мөмкин: " + +#: ../fdroidserver/lint.py +msgid "Unnecessary leading space" +msgstr "Кәрәкмәгән алғы буш урын" + +#: ../fdroidserver/lint.py +msgid "Unnecessary trailing space" +msgstr "Кәрәкмәгән артҡы буш урын" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised app field '{fieldname}' in '{path}'" +msgstr "'{path}' эсендә танылмаған '{fieldname}' ҡушымта яланы" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised build flag '{build_flag}' in '{path}'" +msgstr "'{path}' эсендә танылмаған '{build_flag}' йыйыу флагы" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported file type \"{extension}\" for repo graphic" +msgstr "Репо графикаһы өсөн яраҡһыҙ \"{extension}\" файл төрө" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported graphics file found: {path}" +msgstr "Яраҡһыҙ графика файлы табылды: {path}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused extlib at %s" +msgstr "%s юлында ҡулланылмаған extlib" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused file at %s" +msgstr "%s юлында ҡулланылмаған файл" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scandelete path: %s" +msgstr "Ҡулланылмаған scandelete юлы: %s" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scanignore path: %s" +msgstr "Ҡулланылмаған scanignore юлы: %s" + +#: ../fdroidserver/__main__.py +msgid "Update repo information for new packages" +msgstr "Яңы пакеттар өсөн репо мәғлүмәтен яңыртыу" + +#: ../fdroidserver/__main__.py +msgid "Update the binary transparency log for a URL" +msgstr "URL өсөн бинар асыҡлыҡ логын яңыртыу" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "UpdateCheckData has invalid URL: {url}" +msgstr "UpdateCheckData-ла дөрөҫ булмаған URL: {url}" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" +msgstr "UpdateCheckData версия кодына бөтөн һан булараҡ тап килергә тейеш (\\d йәки [0-9]): {codeex}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must use HTTPS URL: {url}" +msgstr "UpdateCheckData HTTPS URL-ын ҡулланырға тейеш: {url}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData not a valid URL: {url}" +msgstr "UpdateCheckData — дөрөҫ URL түгел: {url}" + +#: ../fdroidserver/lint.py +msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." +msgstr "UpdateCheckMode ҡуйылған, ләкин checkupdates әле эшләтелмәгән кеүек." + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/lint.py +msgid "UpdateCheckName is set to the known application ID, it can be removed" +msgstr "UpdateCheckName билдәле ҡушымта идентификаторына ҡуйылған, уны алып ташларға мөмкин" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to androidobservatory.org" +msgstr "{apkfilename} androidobservatory.org-ҡа йөкләнә" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to virustotal" +msgstr "{apkfilename} virustotal-ға йөкләнә" + +#: ../fdroidserver/lint.py +msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" +msgstr "Стандарт ботаҡтағы файлға күрһәтеү өсөн /master йәки /main урынына /HEAD ҡулланығыҙ" + +#: ../fdroidserver/update.py +msgid "Use `fdroid update -c` to create it." +msgstr "Уны булдырыу өсөн `fdroid update -c` ҡулланығыҙ." + +#: ../fdroidserver/build.py +msgid "Use build server" +msgstr "Йыйыу серверын ҡулланыу" + +#: ../fdroidserver/update.py +msgid "Use date from APK instead of current time for newly added APKs" +msgstr "Яңы өҫтәлгән APK-лар өсөн ағымдағы ваҡыт урынына APK-нан датаны ҡулланыу" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for configuring s3cmd." +msgstr "s3cmd-ты көйләү өсөн \"{path}\" ҡулланыла." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "Алыҫтағы һаҡлағыс менән синхронлаштырыу өсөн \"{path}\" ҡулланыла." + +#: ../fdroidserver/common.py +msgid "Using APK Signature v2" +msgstr "APK имзаһының v2 версияһы ҡулланыла" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v3" +msgstr "APK имзаһының v3 версияһы ҡулланыла" + +#: ../fdroidserver/common.py +msgid "Using JAR Signature" +msgstr "JAR имзаһы ҡулланыла" + +#: ../fdroidserver/common.py +msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" +msgstr "Java-ның jarsigner-ы ҡулланыла, APK-ларҙы тикшереү өсөн тәҡдим ителмәй! apksigner ҡулланығыҙ" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Using blank dictionary instead of contents of {path}!" +msgstr "{path} эстәлеге урынына буш һүҙлек ҡулланыла!" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Using existing keystore \"{path}\"" +msgstr "Инде булған \"{path}\" асҡыстар һаҡлағысы ҡулланыла" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "Синхронлаштырыу өсөн rclone ҡулланыла: {url}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using s3cmd to sync with: {url}" +msgstr "Синхронлаштырыу өсөн s3cmd ҡулланыла: {url}" + +#: ../fdroidserver/__main__.py +msgid "Valid commands are:" +msgstr "Яраҡлы командалар:" + +#: ../fdroidserver/verify.py +msgid "Verify against locally cached copy rather than redownloading." +msgstr "Яңынан йөкмәү урынына локаль кешланған күсермәгә ҡаршы тикшереү." + +#: ../fdroidserver/__main__.py +msgid "Verify the integrity of downloaded packages" +msgstr "Йөкләнгән пакеттарҙың бөтөнлөгөн тикшереү" + +#: ../fdroidserver/index.py +msgid "Verifying index signature:" +msgstr "Индекс имзаһы тикшерелә:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "{path} пакеты apksigner менән тикшерелә." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "VirusTotal API асҡысы 32MB-тан ҙурыраҡ файлдарҙы йөкләй алмай, {path} файлын йөкләү өсөн {url} ҡулланығыҙ." + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Warn about possible metadata errors" +msgstr "Мөмкин булған мета-мәғлүмәт хаталары тураһында иҫкәртеү" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssembly бинар файлы" + +#: ../fdroidserver/update.py +msgid "When configured for signed indexes, create only unsigned indexes at this stage" +msgstr "Тамғаланған индекстар өсөн көйләнгәндә, был этапта тик тамғаланмаған индекстарҙы ғына булдырыу" + +#: ../fdroidserver/lint.py +msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." +msgstr "Бөтә репозиторийҙы линтлағанда yamllint стандарт буйынса һүндерелгән. Был опция yamllint-ты мәжбүри рәүештә эшләтә." + +#: ../fdroidserver/publish.py +msgid "When signing or verifying fails, exit with an error code." +msgstr "Тамғалау йәки тикшереү уңышһыҙ булһа, хата коды менән сығыу." + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "F-Droid.apk-ны adb аша йөкләп ҡуйырға теләйһегеҙме? (ЭЙЕ/юҡ)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Ҡушымта(лар)ҙы f-droid.org-тан йөкләргә теләйһегеҙме? (ЭЙЕ/юҡ)" + +#: ../fdroidserver/init.py +msgid "X.509 'Distinguished Name' used when generating keys" +msgstr "Асҡыстарҙы булдырғанда ҡулланылған X.509 'Айырым исем' (Distinguished Name)" + +#: ../fdroidserver/common.py +msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" +msgstr "SDK-ға юлды күрһәтеү өсөн ANDROID_HOME ҡуллана алаһығыҙ, йәғни:" + +#: ../fdroidserver/scanner.py +msgid "ZIP file archive" +msgstr "ZIP файл архивы" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb хәбәр итә: {serial} — \"{status}\"!" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "adding IdentityFile to {path}" +msgstr "IdentityFile {path} юлына өҫтәлә" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "adding to {name}: {path}" +msgstr "{name}-ға өҫтәлә: {path}" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ambiguous option: %(option)s could match %(matches)s" +msgstr "ике мәғәнәле опция: %(option)s %(matches)s-ҡа тап килеүе мөмкин" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "build-tools;{version} эсендәге apksigner дөрөҫ булмаған v3 имзалы APK-ларҙы үткәрә, иғтибарһыҙ ҡалдырыла." + +#: ../fdroidserver/common.py +msgid "apksigner not found! Cannot sign or verify modern APKs" +msgstr "apksigner табылманы! Заманса APK-ларҙы тамғалап йәки тикшереп булмай" + +#: ../fdroidserver/common.py +msgid "apksigner not found, it's required for signing!" +msgstr "apksigner табылманы, ул тамғалау өсөн кәрәк!" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py +#: ../fdroidserver/rewritemeta.py +msgid "application ID of file to operate on" +msgstr "эшкәртеләсәк файлдың ҡушымта идентификаторы" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/publish.py ../fdroidserver/scanner.py +#: ../fdroidserver/verify.py +msgid "application ID with optional versionCode in the form APPID[:VERCODE]" +msgstr "ҡушымта идентификаторы, APPID[:VERCODE] рәүешендә versionCode өҫтәмә булыуы мөмкин" + +#: ../fdroidserver/common.py +msgid "archive_url needs to end with /archive" +msgstr "archive_url /archive менән тамамланырға тейеш" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument \"-\" with mode %r" +msgstr "%r режимлы \"-\" аргументы" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument %(argument_name)s: %(message)s" +msgstr "%(argument_name)s аргументы: %(message)s" + +#: ../fdroidserver/nightly.py +msgid "attempting bare SSH connection to test deploy key:" +msgstr "урынлаштырыу асҡысын һынау өсөн ябай SSH тоташыуы яһала:" + +#: ../fdroidserver/common.py +msgid "can not parse scrlib spec (not a string): '{}'" +msgstr "scrlib спецификацияһын танып булмай (юл түгел): '{}'" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "can't open '%(filename)s': %(error)s" +msgstr "'%(filename)s' асылманы: %(error)s" + +#: ../fdroidserver/scanner.py +msgid "can't open non-https url: '{};" +msgstr "https булмаған url-ды асып булмай: '{};" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "cannot find required srclibs: \"{path}\"" +msgstr "кәрәкле srclib-тар табылманы: \"{path}\"" + +#: /usr/lib/python3.11/argparse.py +msgid "cannot have multiple subparser arguments" +msgstr "бер нисә аҫпарсер аргументы була алмай" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "cannot merge actions - two groups are named %r" +msgstr "ғәмәлдәрҙе берләштереп булмай — ике төркөм %r тип аталған" + +#: ../fdroidserver/nightly.py +msgid "cannot publish update, did you set the deploy key?" +msgstr "яңыртыуҙы баҫтырып булмай, урынлаштырыу асҡысын күрһәттегеҙме?" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "cloning {url}" +msgstr "{url} клонлана" + +#: ../fdroidserver/__main__.py +msgid "commands from plugin modules:" +msgstr "плагин модулдәренән командалар:" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting option string: %s" +msgid_plural "conflicting option strings: %s" +msgstr[0] "ҡапма-ҡаршылыҡлы опция юлы: %s" +msgstr[1] "ҡапма-ҡаршылыҡлы опция юлдары: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser alias: %s" +msgstr "ҡапма-ҡаршылыҡлы аҫпарсер псевдонимы: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser: %s" +msgstr "ҡапма-ҡаршылыҡлы аҫпарсер: %s" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "could not parse '{path}'" +msgstr "'{path}' танылманы" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no name specified): '{}'" +msgstr "srclib спецификацияһын танып булманы (исем күрһәтелмәгән): '{}'" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no ref specified): '{}'" +msgstr "srclib спецификацияһын танып булманы (ref күрһәтелмәгән): '{}'" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "created {path}" +msgstr "{path} булдырылды" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "current version is newer: old vercode={old}, new vercode={new}" +msgstr "ағымдағы версия яңыраҡ: иҫке vercode={old}, яңы vercode={new}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "deleting: repo/{apkfilename}" +msgstr "юйыла: repo/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "йоҙаҡһыҙ бәйлелек файлы" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "deployed process log {path} to {dest}" +msgstr "эшкәртеү логы {path} {dest} адресына урынлаштырылды" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "dest= is required for options like %r" +msgstr "%r кеүек опциялар өсөн dest= кәрәк" + +#: ../fdroidserver/scanner.py +msgid "downloading '{}'" +msgstr "'{}' йөкләнә" + +#: ../fdroidserver/scanner.py +msgid "downloading scanner signatures from '{}' failed" +msgstr "сканлаусы имзаларын '{}' адресынан йөкләү уңышһыҙ булды" + +#: ../fdroidserver/scanner.py +msgid "executable binary, possibly code" +msgstr "башҡарылыусы бинар, код булыуы мөмкин" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "expected %s argument" +msgid_plural "expected %s arguments" +msgstr[0] "%s аргумент көтөлә" +msgstr[1] "%s аргумент көтөлә" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at least one argument" +msgstr "кәмендә бер аргумент көтөлә" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at most one argument" +msgstr "күп тигәндә бер аргумент көтөлә" + +#: /usr/lib/python3.11/argparse.py +msgid "expected one argument" +msgstr "бер аргумент көтөлә" + +#: ../fdroidserver/__main__.py +msgid "fdroid [] [-h|--help|--version|]" +msgstr "fdroid [<команда>] [-h|--help|--version|<аргументтар>]" + +#: ../fdroidserver/scanner.py +msgid "fetch the latest version of signatures from the web" +msgstr "имзаларҙың һуңғы версияһын вебтән алыу" + +#: ../fdroidserver/metadata.py +msgid "force metadata errors (default) to be warnings, or to be ignored." +msgstr "мета-мәғлүмәт хаталарын (стандарт) иҫкәрмәләргә әйләндерергә йәки иғтибарһыҙ ҡалдырырға мәжбүр итеү." + +#: ../fdroidserver/common.py +msgid "git svn clone failed" +msgstr "git svn clone уңышһыҙ булды" + +#: ../fdroidserver/scanner.py +msgid "gzip file archive" +msgstr "gzip файл архивы" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ignored explicit argument %r" +msgstr "асыҡтан-асыҡ %r аргументы иғтибарһыҙ ҡалдырылды" + +#: ../fdroidserver/index.py +msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" +msgstr "index-v1 имзалы булырға тейеш, уны булдырыу өсөн `fdroid signindex` ҡулланығыҙ!" + +#: ../fdroidserver/index.py +msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" +msgstr "index-v2 имзалы булырға тейеш, уны булдырыу өсөн `fdroid signindex` ҡулланығыҙ!" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid %(type)s value: %(value)r" +msgstr "дөрөҫ булмаған %(type)s ҡиммәте: %(value)r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid choice: %(value)r (choose from %(choices)s)" +msgstr "дөрөҫ булмаған һайлау: %(value)r (%(choices)s араһынан һайлағыҙ)" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "дөрөҫ булмаған conflict_resolution ҡиммәте: %r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" +msgstr "дөрөҫ булмаған %(option)r опция юлы: %(prefix_chars)r символы менән башланырға тейеш" + +#: ../fdroidserver/common.py +msgid "ipfs_cid not found, skipping CIDv1 generation" +msgstr "ipfs_cid табылманы, CIDv1 булдырыу үткәреп ебәрелә" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" +msgstr "һуңғы йыйыу рецебы яңыраҡ: иҫке vercode={old}, яңы vercode={new}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" +msgstr "local_copy_dir \"fdroid\" менән тамамланмай, бәлки һеҙ быны күҙ уңында тоттоғоҙ: \"{path}\"" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be an absolute path!" +msgstr "local_copy_dir абсолют юл булырға тейеш!" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be directory, not a file!" +msgstr "local_copy_dir каталог булырға тейеш, файл түгел!" + +#: ../fdroidserver/index.py +#, python-format +msgid "mirror '%s' does not end with 'fdroid'!" +msgstr "'%s' көҙгөһө 'fdroid' менән тамамланмай!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "mirrors set twice, in config.yml and {path}!" +msgstr "көҙгөләр ике тапҡыр күрһәтелгән, config.yml-да һәм {path}-та!" + +#: /usr/lib/python3.11/argparse.py +msgid "mutually exclusive arguments must be optional" +msgstr "бер-береһен инҡар итеүсе аргументтар өҫтәмә булырға тейеш" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "next {name} cache update due in {time}" +msgstr "киләһе {name} кешын яңыртыу {time} аша" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "no \"icon\" in {appid}" +msgstr "{appid}-та \"icon\" юҡ" + +#: ../fdroidserver/signatures.py +msgid "no APK supplied" +msgstr "APK бирелмәгән" + +#: ../fdroidserver/checkupdates.py +msgid "no version information found" +msgstr "версия тураһында мәғлүмәт табылманы" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "not allowed with argument %s" +msgstr "%s аргументы менән рөхсәт ителмәй" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "one of the arguments %s is required" +msgstr "%s аргументтарының береһе кәрәк" + +#: ../fdroidserver/common.py ../fdroidserver/index.py +msgid "only accepts strings, lists, and tuples" +msgstr "тик юлдарҙы, исемлектәрҙе һәм кортеждарҙы ғына ҡабул итә" + +#: /usr/lib/python3.11/argparse.py +msgid "options" +msgstr "опциялар" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "overwriting existing {path}" +msgstr "инде булған {path} өҫтөнән яҙыла" + +#: /usr/lib/python3.11/argparse.py +msgid "positional arguments" +msgstr "позицион аргументтар" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "process log deploy {path} to {dest} failed!" +msgstr "эшкәртеү логын {path} {dest} адресына урынлаштырыу уңышһыҙ булды!" + +#: ../fdroidserver/build.py +msgid "reference binary missing signature" +msgstr "өлгө бинарҙың имзаһы юҡ" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" +msgstr "хәүефһеҙ булмаған HTTP тоташыуы аша йөкләүҙән баш тартыу (HTTPS ҡулланығыҙ йәки --no-https-check күрһәтегеҙ): {apkfilename}" + +#: ../fdroidserver/index.py +#, python-format +msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." +msgstr "\"repo/icons/%s\" repo_icon-ы юҡ, ҡалып булдырыла." + +#: ../fdroidserver/common.py +msgid "repo_url needs to end with /repo" +msgstr "repo_url /repo менән тамамланырға тейеш" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "rsync is missing or broken: {error}" +msgstr "rsync юҡ йәки боҙолған: {error}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" +msgstr "s3cmd индекстарҙы {path}-тан {url}-ға синхронлаштыра һәм юя" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "s3cmd индекстарҙы {path}-тан {url}-ға синхронлаштыра һәм юйылғандарҙы юя" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "scanner cache is malformed! You can clear it with: '{clear}'" +msgstr "сканлаусы кешы боҙолған! Уны былай таҙартырға мөмкин: '{clear}'" + +#: ../fdroidserver/deploy.py +msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" +msgstr "serverwebroot: юл \"fdroid\" менән тамамланмай, бәлки һеҙ быларҙың береһен күҙ уңында тоттоғоҙ:" + +#: ../fdroidserver/scanner.py +msgid "shared library" +msgstr "уртаҡ китапхана" + +#: /usr/lib/python3.11/argparse.py +msgid "show this help message and exit" +msgstr "был ярҙам хәбәрен күрһәтеү һәм сығыу" + +#: ../fdroidserver/signatures.py +msgid "signed APK, either a file-path or HTTPS URL." +msgstr "тамғаланған APK, файл юлы йәки HTTPS URL-ы." + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: log content is empty" +msgstr "тулы йыйыу логтарын урынлаштырыуҙы үткәреп ебәреү: лог эстәлеге буш" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: not enabled in config" +msgstr "тулы йыйыу логтарын урынлаштырыуҙы үткәреп ебәреү: конфигурацияла ҡабыҙылмаған" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "skipping source tarball: {path}" +msgstr "сығанаҡ tarball үткәреп ебәрелә: {path}" + +#: ../fdroidserver/lint.py +msgid "srclibs missing name and/or @" +msgstr "srclibs-та исем һәм/йәки @ юҡ" + +#: ../fdroidserver/scanner.py +msgid "static library" +msgstr "статик китапхана" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "supplied reference binary has allowed signer {signer}" +msgstr "бирелгән өлгө бинарҙың рөхсәт ителгән имзалаусыһы {signer} бар" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "the following arguments are required: %s" +msgstr "түбәндәге аргументтар мотлаҡ: %s" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "дөрөҫ" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unexpected option string: %s" +msgstr "көтөлмәгән опция юлы: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unknown parser %(parser_name)r (choices: %(choices)s)" +msgstr "билдәһеҙ парсер %(parser_name)r (һайлау варианттары: %(choices)s)" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unrecognized arguments: %s" +msgstr "танылмаған аргументтар: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "unsafe permissions on '{config_file}' (should be 0600)!" +msgstr "'{config_file}' өсөн хәүефле рөхсәттәр (0600 булырға тейеш)!" + +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py +msgid "usage: " +msgstr "ҡулланыу: " + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "using Apache libcloud to sync with {url}" +msgstr "{url} менән синхронлаштырыу өсөн Apache libcloud ҡулланыла" + +#: ../fdroidserver/deploy.py +msgid "virustotal.com is rate limiting, waiting to retry..." +msgstr "virustotal.com сикләү ҡуйҙы, ҡабатлап ҡарау өсөн көтөлә..." + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "эйе" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "{0} app, {1} key aliases" +msgid_plural "{0} apps, {1} key aliases" +msgstr[0] "{0} ҡушымта, {1} асҡыс псевдонимы" +msgstr[1] "{0} ҡушымта, {1} асҡыс псевдонимы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename} ({appid}) has no metadata!" +msgstr "{apkfilename} ({appid}) өсөн мета-мәғлүмәт юҡ!" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " +msgstr "{apkfilename}-ның AndroidManifest.xml-ында дөрөҫ булмаған дата: " + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} does not have a name! Using application ID instead." +msgstr "{appid} өсөн исем юҡ! Уның урынына ҡушымта идентификаторы ҡулланыла." + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Android application ID!" +msgstr "{path} эсендәге {appid} — дөрөҫ Android ҡушымта идентификаторы түгел!" + +#: ../fdroidserver/metadata.py ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Java Package Name!" +msgstr "{path} эсендәге {appid} — дөрөҫ Java пакет исеме түгел!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} has both APKs and files: {files}" +msgstr "{appid}-та APK-лар ҙа, файлдар ҙа бар: {files}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{appid} is missing {name}" +msgstr "{appid}-та {name} юҡ" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: Unknown extlib {path} in build '{versionName}'" +msgstr "{appid}: '{versionName}' йыйылмаһында билдәһеҙ extlib {path}" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "{appid}: no builds specified, running on current source state" +msgstr "{appid}: йыйылмалар күрһәтелмәгән, ағымдағы сығанаҡ хәлендә эшләтелә" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" +msgstr "{appid}: {field} '{type}' булырға тейеш, ләкин ул '{fieldtype}'!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" +msgstr "{appid}: {field} '{type}' булырға тейеш, ләкин ул '{fieldtype}'!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be an integer, found: {value}" +msgstr "{build_flag} бөтөн һан булырға тейеш, табылды: {value}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be list or string, found: {value}" +msgstr "{build_flag} исемлек йәки юл булырға тейеш, табылды: {value}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{file} is blank or corrupt!" +msgstr "{file} буш йәки боҙолған!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." +msgstr "{name} \"{section}/icons/{path}\" юҡ! \"config.yml\"-ды тикшерегеҙ." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} — {path2}-нең күсермәһе, береһен юйығыҙ!" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{path} already exists, ignoring import results!" +msgstr "{path} инде бар, импорт һөҙөмтәләре иғтибарһыҙ ҡалдырыла!" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "{path} does not exist! Create it by running:" +msgstr "{path} юҡ! Уны булдырыу өсөн эшләтегеҙ:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" +msgstr "{path} файлының имзаһы дөрөҫ түгел \"{pattern}\", Janus эксплойты булыуы мөмкин!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} has been flagged by virustotal {count} times:" +msgstr "{path} virustotal тарафынан {count} тапҡыр билдәләнгән:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} файлының бармаҡ эҙе дөрөҫ түгел ({fingerprint})!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not \"key: value\" dict, but a {datatype}!" +msgstr "{path} — \"key: value\" һүҙлеге түгел, ә {datatype}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not a standard config file!" +msgstr "{path} — стандарт конфигурация файлы түгел!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "{path} is not list, but a {datatype}!" +msgstr "{path} — исемлек түгел, ә {datatype}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not {expected_type}, but a {datatype}!" +msgstr "{path} — {expected_type} түгел, ә {datatype}!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} is zero size!" +msgstr "{path} үлсәме нуль!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} more than 200MB, manually upload: {url}" +msgstr "{path} 200MB-тан ҙурыраҡ, ҡулдан йөкләү: {url}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" +msgstr "{path}: \"{code}\" — дөрөҫ ISO_3166-1 alpha-2 ил коды түгел!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path}: {error}" +msgstr "{path}: {error}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{url} does not end with \"fdroid\", check the URL path!" +msgstr "{url} \"fdroid\" менән тамамланмай, URL юлын тикшерегеҙ!" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{url} does not start with \"http\"!" +msgstr "{url} \"http\" менән башланмай!" + +#: ../fdroidserver/build.py +msgid "{} build failed" +msgid_plural "{} builds failed" +msgstr[0] "{} йыйыу уңышһыҙ булды" +msgstr[1] "{} йыйыу уңышһыҙ булды" + +#: ../fdroidserver/build.py +msgid "{} build succeeded" +msgid_plural "{} builds succeeded" +msgstr[0] "{} йыйыу уңышлы булды" +msgstr[1] "{} йыйыу уңышлы булды" diff --git a/locale/be/LC_MESSAGES/fdroidserver.po b/locale/be/LC_MESSAGES/fdroidserver.po index bab918a4..9526f6ea 100644 --- a/locale/be/LC_MESSAGES/fdroidserver.po +++ b/locale/be/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-01-21 00:08+0000\n" "Last-Translator: flac \n" "Language-Team: Belarusian \n" @@ -358,6 +358,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1483,6 +1488,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Перайменуйце файлы APK, якія не адпавядаюць package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1996,6 +2006,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Папярэджваць аб магчымых памылках метададзеных" diff --git a/locale/bg/LC_MESSAGES/fdroidserver.po b/locale/bg/LC_MESSAGES/fdroidserver.po index bc6bff77..bbcbc06a 100644 --- a/locale/bg/LC_MESSAGES/fdroidserver.po +++ b/locale/bg/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-07-19 10:21+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" @@ -354,6 +354,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1479,6 +1484,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1992,6 +2002,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/bn/LC_MESSAGES/fdroidserver.po b/locale/bn/LC_MESSAGES/fdroidserver.po index fa057130..44e14abf 100644 --- a/locale/bn/LC_MESSAGES/fdroidserver.po +++ b/locale/bn/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-02-12 09:48+0000\n" "Last-Translator: Oymate \n" "Language-Team: Bengali \n" @@ -353,6 +353,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1478,6 +1483,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1991,6 +2001,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/bo/LC_MESSAGES/fdroidserver.po b/locale/bo/LC_MESSAGES/fdroidserver.po index 3f892a0e..cbd1c63c 100644 --- a/locale/bo/LC_MESSAGES/fdroidserver.po +++ b/locale/bo/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-04-10 13:33+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Tibetan \n" @@ -358,6 +358,11 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "ཚགས་རྒྱབ་པའི་སྐབས་སུ་ནོར་སྐྱོན་ {} ཤོར་བས་བཟོ་སྐྲུན་བྱེད་ཐུབ་མེད།" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "ཀློག་མི་ཐུབ།{path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1499,6 +1504,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apk དང་མི་འདྲ་བའི་APK ཡིག་ཆ་དེ་ཚོར་མིང་སྐྱར་ཏུ་བཏགས།" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2015,6 +2025,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་སྐྱོན་སྲིད་པ་རྣམས་པ་ཉེན་བརྡ་གཏོང་།" diff --git a/locale/ca/LC_MESSAGES/fdroidserver.po b/locale/ca/LC_MESSAGES/fdroidserver.po index 4a12ad45..48cea1fc 100644 --- a/locale/ca/LC_MESSAGES/fdroidserver.po +++ b/locale/ca/LC_MESSAGES/fdroidserver.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-05-16 16:36+0000\n" "Last-Translator: Ecron \n" "Language-Team: Catalan \n" @@ -363,6 +363,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No es pot construir a causa d'un error {} en escanejar" msgstr[1] "No es pot construir a causa d'errors {} en escanejar" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "No s'ha pogut llegir {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1490,6 +1495,11 @@ msgstr "S'està suprimint {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Canvia el nom dels fitxers APK que no coincideixin amb package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2010,6 +2020,10 @@ msgstr "S'està verificant el paquet {path} l'apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La clau de l'API VirusTotal no pot pujar fitxers més grans de 32 MB, utilitzeu {url} per pujar {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisa de possibles errors a les metadades" diff --git a/locale/cs/LC_MESSAGES/fdroidserver.po b/locale/cs/LC_MESSAGES/fdroidserver.po index 4fc63dea..351d8885 100644 --- a/locale/cs/LC_MESSAGES/fdroidserver.po +++ b/locale/cs/LC_MESSAGES/fdroidserver.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-26 10:00+0000\n" "Last-Translator: Fjuro \n" "Language-Team: Czech \n" @@ -366,6 +366,11 @@ msgstr[0] "Nelze sestavit kvůli {} chybě při skenování" msgstr[1] "Nelze sestavit kvůli {} chybám při skenování" msgstr[2] "Nelze sestavit kvůli {} chybám při skenování" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Chyba při čtení {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1493,6 +1498,11 @@ msgstr "Odebírání {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Přejmenovat soubory APK, které se neshodují s package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2014,6 +2024,10 @@ msgstr "Ověřování balíčku {path} pomocí apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Klíč API VirusTotal neumožňuje nahrávání souborů větších než 32 MB, k nahrání {path} použijte {url}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Varovat ohledně možných chyb metadat" diff --git a/locale/cy/LC_MESSAGES/fdroidserver.po b/locale/cy/LC_MESSAGES/fdroidserver.po index 37648a7b..8451062c 100644 --- a/locale/cy/LC_MESSAGES/fdroidserver.po +++ b/locale/cy/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-01-16 21:23+0000\n" "Last-Translator: Aled Powell \n" "Language-Team: Welsh \n" @@ -357,6 +357,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1482,6 +1487,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Ailenwi ffeiliau APK na sy'n dilyn y ffurf package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2006,6 +2016,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Rhybuddio am wallau metaddata posib" diff --git a/locale/de/LC_MESSAGES/fdroidserver.po b/locale/de/LC_MESSAGES/fdroidserver.po index 201eac5c..5dde0e8f 100644 --- a/locale/de/LC_MESSAGES/fdroidserver.po +++ b/locale/de/LC_MESSAGES/fdroidserver.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-04-29 10:16+0000\n" "Last-Translator: VfBFan \n" "Language-Team: German \n" @@ -378,6 +378,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Kann nicht erstellt werden, da {} Fehler beim Prüfen aufgetreten ist" msgstr[1] "Kann nicht erstellt werden, da {} Fehler beim Prüfen aufgetreten sind" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Lesen von {path} fehlgeschlagen: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1505,6 +1510,11 @@ msgstr "Entferne {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "APK-Dateien umbenennen, die nicht dem Muster „package.name_123.apk“ entsprechen" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2025,6 +2035,10 @@ msgstr "Überprüfen des Pakets {path} mit apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal-API-Schlüssel kann nicht Dateien größer 32MB hochladen, verwende {url} um {path} hochzuladen." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Vor möglichen Metadaten-Fehlern warnen" diff --git a/locale/el/LC_MESSAGES/fdroidserver.po b/locale/el/LC_MESSAGES/fdroidserver.po index 13380be3..5bd92c4a 100644 --- a/locale/el/LC_MESSAGES/fdroidserver.po +++ b/locale/el/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-05-10 13:24+0000\n" "Last-Translator: ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ \n" "Language-Team: Greek \n" @@ -360,6 +360,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1485,6 +1490,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Μετονομασία αρχείων APK που δεν αντιστοιχούν με «όνομα.πακέτου_123.apk»" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1998,6 +2008,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Προειδοποίηση για πιθανά σφάλματα μετα-δεδομένων" diff --git a/locale/es/LC_MESSAGES/fdroidserver.po b/locale/es/LC_MESSAGES/fdroidserver.po index 07ac3ea5..64a43a1c 100644 --- a/locale/es/LC_MESSAGES/fdroidserver.po +++ b/locale/es/LC_MESSAGES/fdroidserver.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-06-24 11:02+0000\n" "Last-Translator: Swyter \n" "Language-Team: Spanish \n" @@ -371,6 +371,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No se puede construir debido al error {} mientras se comprobaba" msgstr[1] "No se puede construir debido a los errores {} mientras se comprobaba" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Fallo al leer {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1498,6 +1503,11 @@ msgstr "Eliminando {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Cambiar el nombre de archivos APK que no coinciden con el formato package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2018,6 +2028,10 @@ msgstr "Verificando el paquete {path} con apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La clave de API de VirusTotal no puede subir archivos mayores de 32MB. Use {url} para subir {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Alertar sobre posibles errores de metadatos" diff --git a/locale/es_AR/LC_MESSAGES/fdroidserver.po b/locale/es_AR/LC_MESSAGES/fdroidserver.po index f6e544a1..a15ddd81 100644 --- a/locale/es_AR/LC_MESSAGES/fdroidserver.po +++ b/locale/es_AR/LC_MESSAGES/fdroidserver.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-04-10 21:26+0000\n" "Last-Translator: Germe the fur star \n" "Language-Team: Spanish (Argentina) \n" @@ -361,6 +361,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No se pudo empaquetar debido al {} error mientras se escaneaba" msgstr[1] "No se pudo empaquetar debido a los {} errores mientras se escaneaba" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "No se puede reescribir \"{path}\"" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1495,6 +1500,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renombrar archivos APK que no corresponden a package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2008,6 +2018,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Advertir sobre posibles errores en los metadatos" diff --git a/locale/es_MX/LC_MESSAGES/fdroidserver.po b/locale/es_MX/LC_MESSAGES/fdroidserver.po index 344bf130..aaddd007 100644 --- a/locale/es_MX/LC_MESSAGES/fdroidserver.po +++ b/locale/es_MX/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2020-04-29 12:49+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Spanish (Mexico) \n" @@ -354,6 +354,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1483,6 +1488,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1996,6 +2006,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/eu/LC_MESSAGES/fdroidserver.po b/locale/eu/LC_MESSAGES/fdroidserver.po index 8d6c69b4..4cb555c2 100644 --- a/locale/eu/LC_MESSAGES/fdroidserver.po +++ b/locale/eu/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -352,6 +352,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1477,6 +1482,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1990,6 +2000,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/fa/LC_MESSAGES/fdroidserver.po b/locale/fa/LC_MESSAGES/fdroidserver.po index d8aad95a..ff34a457 100644 --- a/locale/fa/LC_MESSAGES/fdroidserver.po +++ b/locale/fa/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-11-26 15:16+0000\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" @@ -356,6 +356,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1481,6 +1486,11 @@ msgstr "برداشتن {path}" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1994,6 +2004,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/fdroidserver.pot b/locale/fdroidserver.pot index 0f9e9b28..486f290d 100644 --- a/locale/fdroidserver.pot +++ b/locale/fdroidserver.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: fdroidserver 2.4.0\n" +"Project-Id-Version: fdroidserver 2.4.2-3-gdcb804f7\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -354,6 +354,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1479,6 +1484,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1992,6 +2002,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/fi/LC_MESSAGES/fdroidserver.po b/locale/fi/LC_MESSAGES/fdroidserver.po index 065b07d8..31803e83 100644 --- a/locale/fi/LC_MESSAGES/fdroidserver.po +++ b/locale/fi/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-01-31 14:19+0000\n" "Last-Translator: Ricky Tigg \n" "Language-Team: Finnish \n" @@ -355,6 +355,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1480,6 +1485,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1993,6 +2003,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/fr/LC_MESSAGES/fdroidserver.po b/locale/fr/LC_MESSAGES/fdroidserver.po index 61cd9215..d65abe95 100644 --- a/locale/fr/LC_MESSAGES/fdroidserver.po +++ b/locale/fr/LC_MESSAGES/fdroidserver.po @@ -47,7 +47,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-04-11 17:20+0000\n" "Last-Translator: Laurent FAVOLE \n" "Language-Team: French \n" @@ -399,6 +399,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Build impossible à cause de l'erreur lors de l'analyse" msgstr[1] "Build impossible à cause des {} erreurs lors de l'analyse" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Erreur de lecture {path} : {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1526,6 +1531,11 @@ msgstr "Suppression de {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomme les fichiers APK dont le nom ne ressemble pas à nom.paquet_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2048,6 +2058,10 @@ msgstr "Vérification du paquet {path} avec apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "L’API de VirusTotal ne permet pas d’envoyer des fichiers plus grands que 32Mo, utilisez {url} pour envoyer {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avertir de possibles erreurs dans les métadonnées" diff --git a/locale/fy/LC_MESSAGES/fdroidserver.po b/locale/fy/LC_MESSAGES/fdroidserver.po index 677eea67..1f751485 100644 --- a/locale/fy/LC_MESSAGES/fdroidserver.po +++ b/locale/fy/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-07-01 15:29+0000\n" "Last-Translator: Vancha March \n" "Language-Team: Frisian \n" @@ -353,6 +353,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1478,6 +1483,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1991,6 +2001,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/ga/LC_MESSAGES/fdroidserver.po b/locale/ga/LC_MESSAGES/fdroidserver.po index a0c708cc..b9916f78 100644 --- a/locale/ga/LC_MESSAGES/fdroidserver.po +++ b/locale/ga/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1-162-gfbb3cc59\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-27 19:35+0000\n" "Last-Translator: Aindriú Mac Giolla Eoin \n" "Language-Team: Irish \n" @@ -360,6 +360,11 @@ msgstr[2] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" msgstr[3] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" msgstr[4] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Theip ar léamh {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1487,6 +1492,11 @@ msgstr "Ag baint {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Athainmnigh comhaid APK nach bhfuil comhoiriúnach package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2010,6 +2020,10 @@ msgstr "Pacáiste {path} á fhíorú le apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ní féidir le heochair API VirusTotal comhaid níos mó ná 32MB a uaslódáil, úsáid {url} chun {path} a uaslódáil." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Tabhair rabhadh faoi earráidí meiteashonraí a d'fhéadfadh a bheith ann" diff --git a/locale/hi/LC_MESSAGES/fdroidserver.po b/locale/hi/LC_MESSAGES/fdroidserver.po index 11e53f7d..58779021 100644 --- a/locale/hi/LC_MESSAGES/fdroidserver.po +++ b/locale/hi/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2023-02-22 11:24+0000\n" "Last-Translator: Saurmandal \n" "Language-Team: Hindi \n" @@ -354,6 +354,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1479,6 +1484,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1992,6 +2002,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/hu/LC_MESSAGES/fdroidserver.po b/locale/hu/LC_MESSAGES/fdroidserver.po index a9d51973..6e232ead 100644 --- a/locale/hu/LC_MESSAGES/fdroidserver.po +++ b/locale/hu/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-04-10 13:33+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Hungarian \n" @@ -359,6 +359,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Nem lehet összeállítani, mert {} hiba történt az átvizsgáláskor" msgstr[1] "Nem lehet összeállítani, mert {} hiba történt az átvizsgáláskor" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "A(z) {path} olvasása sikertelen: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1494,6 +1499,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Azon APK fájlok átnevezése, melyek nem illeszkednek a csomag.név_123.apk mintára" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2011,6 +2021,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Figyelmeztetés a lehetséges metaadat-hibákról" diff --git a/locale/it/LC_MESSAGES/fdroidserver.po b/locale/it/LC_MESSAGES/fdroidserver.po index a20dfa82..5117e2d4 100644 --- a/locale/it/LC_MESSAGES/fdroidserver.po +++ b/locale/it/LC_MESSAGES/fdroidserver.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-20 16:21+0000\n" "Last-Translator: Champ0999 \n" "Language-Team: Italian \n" @@ -375,6 +375,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Impossibile costruire a causa di un errore con {} durante la scansione" msgstr[1] "Impossibile costruire a causa di errori con {} durante la scansione" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Impossibile leggere {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1504,6 +1509,11 @@ msgstr "Rimozione di {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Rinomina i file APK che non corrispondono a package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2028,6 +2038,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La chiave API di VirusTotal non può caricare file più grandi di 32MB, usa {url} per caricare {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avvisa riguardo possibili errori nei metadati" diff --git a/locale/ja/LC_MESSAGES/fdroidserver.po b/locale/ja/LC_MESSAGES/fdroidserver.po index be68cfc4..50dd832d 100644 --- a/locale/ja/LC_MESSAGES/fdroidserver.po +++ b/locale/ja/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-224-g4b0ade7\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-04-30 04:07+0000\n" "Last-Translator: Liner Seven \n" "Language-Team: Japanese \n" @@ -359,6 +359,11 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "スキャン時に{}個のエラーが発生したためビルドできません" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path}を読み込めませんでした:{error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1486,6 +1491,11 @@ msgstr "{path} を削除" msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apkに合致しないAPKファイルの名前を変更" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2005,6 +2015,10 @@ msgstr "apksignerを使用してパッケージ{path}を検証しています。 msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotalのAPI鍵は32メガバイトより大きいファイルをアップロードできません。{url}から{path}をアップロードしてください。" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "潜在的なメタデータのエラーに関して警告" diff --git a/locale/kab/LC_MESSAGES/fdroidserver.po b/locale/kab/LC_MESSAGES/fdroidserver.po index 9cc66432..121b58f0 100644 --- a/locale/kab/LC_MESSAGES/fdroidserver.po +++ b/locale/kab/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-01-15 13:25+0000\n" "Last-Translator: R_SACI \n" "Language-Team: Kabyle \n" @@ -355,6 +355,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1482,6 +1487,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1995,6 +2005,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/ko/LC_MESSAGES/fdroidserver.po b/locale/ko/LC_MESSAGES/fdroidserver.po index 66244698..cb546be1 100644 --- a/locale/ko/LC_MESSAGES/fdroidserver.po +++ b/locale/ko/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-135-g16dd6d28\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-09-06 14:57+0000\n" "Last-Translator: Cxnfl1ct \n" "Language-Team: Korean \n" @@ -358,6 +358,11 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1485,6 +1490,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apk와 일치하지 않는 APK 파일의 이름을 바꿉니다" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1997,6 +2007,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "가능한 메타데이터 오류에 대해 경고합니다" diff --git a/locale/ml/LC_MESSAGES/fdroidserver.po b/locale/ml/LC_MESSAGES/fdroidserver.po index 39b7a730..1a4cc764 100644 --- a/locale/ml/LC_MESSAGES/fdroidserver.po +++ b/locale/ml/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2023-06-23 14:52+0000\n" "Last-Translator: abe1242 \n" "Language-Team: Malayalam \n" @@ -358,6 +358,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1483,6 +1488,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1999,6 +2009,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/nb_NO/LC_MESSAGES/fdroidserver.po b/locale/nb_NO/LC_MESSAGES/fdroidserver.po index 26cf9e7f..8ba73029 100644 --- a/locale/nb_NO/LC_MESSAGES/fdroidserver.po +++ b/locale/nb_NO/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-74-ga380b9f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2022-09-06 14:30+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Norwegian Bokmål \n" @@ -366,6 +366,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Kan ikke bygge som følge av {} feil under skanning" msgstr[1] "Kan ikke bygge som følge av {} feiler under skanning" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Klarte ikke å lese {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, fuzzy, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1537,6 +1542,11 @@ msgstr "Fjerner {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Gi nytt navn til APK-filer som ikke samsvarer med package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2070,6 +2080,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API-nøkkel kan ikke laste opp filer større enn 32 MB, bruk {url} for å laste opp {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Advar om mulige metadata-feil" diff --git a/locale/nl/LC_MESSAGES/fdroidserver.po b/locale/nl/LC_MESSAGES/fdroidserver.po index aa9106fb..f5dbfba0 100644 --- a/locale/nl/LC_MESSAGES/fdroidserver.po +++ b/locale/nl/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-01-03 09:07+0000\n" "Last-Translator: Issa1553 \n" "Language-Team: Dutch \n" @@ -361,6 +361,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1486,6 +1491,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Hernoem APK-bestanden die niet overeenkomen met pakket.naam_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1999,6 +2009,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Waarschuwen voor mogelijke metadata fouten" diff --git a/locale/nn/LC_MESSAGES/fdroidserver.po b/locale/nn/LC_MESSAGES/fdroidserver.po index 180c114d..5db8fd94 100644 --- a/locale/nn/LC_MESSAGES/fdroidserver.po +++ b/locale/nn/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3.0-3-g4ba7b5c9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-11-26 10:54+0000\n" "Last-Translator: Bård Sigurd Møller \n" "Language-Team: Norwegian Nynorsk \n" @@ -353,6 +353,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1478,6 +1483,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1991,6 +2001,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/pa/LC_MESSAGES/fdroidserver.po b/locale/pa/LC_MESSAGES/fdroidserver.po index b08867aa..8c64a1c2 100644 --- a/locale/pa/LC_MESSAGES/fdroidserver.po +++ b/locale/pa/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3.3\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -352,6 +352,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1477,6 +1482,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1990,6 +2000,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/pick-complete-translations.py b/locale/pick-complete-translations.py index 8c4d377b..be11426c 100755 --- a/locale/pick-complete-translations.py +++ b/locale/pick-complete-translations.py @@ -2,13 +2,13 @@ # # add completed translations from weblate to MANIFEST.in -import git import json import os import re -import requests import subprocess +import git +import requests projectbasedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) localedir = os.path.join(projectbasedir, 'locale') diff --git a/locale/pl/LC_MESSAGES/fdroidserver.po b/locale/pl/LC_MESSAGES/fdroidserver.po index 7b417234..03bbc39f 100644 --- a/locale/pl/LC_MESSAGES/fdroidserver.po +++ b/locale/pl/LC_MESSAGES/fdroidserver.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-06-24 12:05+0000\n" "Last-Translator: WaldiS \n" "Language-Team: Polish \n" @@ -363,6 +363,11 @@ msgstr[0] "Nie można zbudować z powodu błędu {} podczas skanowania" msgstr[1] "Nie można zbudować z powodu błędów {} podczas skanowania" msgstr[2] "Nie można zbudować z powodu błędów {} podczas skanowania" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Błąd odczytu {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1490,6 +1495,11 @@ msgstr "Usuwanie „{path}”" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Zmień nazwy plików APK, które nie pasują do pliku package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2011,6 +2021,10 @@ msgstr "Weryfikacja pakietu {path} za pomocą apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Klucz VirusTotal API nie może przesyłać plików większych niż 32 MB, użyj {url}, aby przesłać {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Ostrzegaj o możliwych błędach metadanych" diff --git a/locale/pt/LC_MESSAGES/fdroidserver.po b/locale/pt/LC_MESSAGES/fdroidserver.po index 780bebdf..84ee4ed9 100644 --- a/locale/pt/LC_MESSAGES/fdroidserver.po +++ b/locale/pt/LC_MESSAGES/fdroidserver.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-04-06 16:45+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" @@ -361,6 +361,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível construir devido a erro {} durante a digitalização" msgstr[1] "Não é possível construir devido a erros {} durante a digitalização" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Falha de leitura {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1488,6 +1493,11 @@ msgstr "A remover {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomear todos os ficheiros APKs que não correspondem com package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2008,6 +2018,10 @@ msgstr "A verificar o pacote {path} com apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave VirusTotal API não pode enviar ficheiros maiores que 32MB, use {url} para enviar {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisar sobre possíveis erros de metadados" diff --git a/locale/pt_BR/LC_MESSAGES/fdroidserver.po b/locale/pt_BR/LC_MESSAGES/fdroidserver.po index 53b8a080..ea2ad833 100644 --- a/locale/pt_BR/LC_MESSAGES/fdroidserver.po +++ b/locale/pt_BR/LC_MESSAGES/fdroidserver.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-26 10:00+0000\n" "Last-Translator: Igor Rückert \n" "Language-Team: Portuguese (Brazil) \n" @@ -371,6 +371,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível criar devido a {} erro durante a digitalização" msgstr[1] "Não é possível criar devido a {} erros durante a digitalização" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Falha ao ler {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1498,6 +1503,11 @@ msgstr "Removendo {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomeia arquivos APK que não correspondem a pacote.nome_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2018,6 +2028,10 @@ msgstr "Verificando o pacote {path} com apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave API do VirusTotal não pode carregar arquivos maiores que 32MB, utilize {url} para enviar para {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisa sobre possíveis erros de metadados" diff --git a/locale/pt_PT/LC_MESSAGES/fdroidserver.po b/locale/pt_PT/LC_MESSAGES/fdroidserver.po index 1fac5cd5..e9f15dfa 100644 --- a/locale/pt_PT/LC_MESSAGES/fdroidserver.po +++ b/locale/pt_PT/LC_MESSAGES/fdroidserver.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-05-30 07:19+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese (Portugal) \n" @@ -363,6 +363,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível construir devido a erro {} durante a digitalização" msgstr[1] "Não é possível construir devido a erros {} durante a digitalização" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Falha de leitura {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1490,6 +1495,11 @@ msgstr "A remover {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomear todos os ficheiros APKs que não correspondem com package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2010,6 +2020,10 @@ msgstr "A verificar o pacote {path} com apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave VirusTotal API não pode enviar ficheiros maiores que 32MB, use {url} para enviar {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisar sobre possíveis erros de metadados" diff --git a/locale/ro/LC_MESSAGES/fdroidserver.po b/locale/ro/LC_MESSAGES/fdroidserver.po index 4293395d..0599ee8c 100644 --- a/locale/ro/LC_MESSAGES/fdroidserver.po +++ b/locale/ro/LC_MESSAGES/fdroidserver.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-12-02 17:00+0000\n" "Last-Translator: Licaon Kter \n" "Language-Team: Romanian \n" @@ -362,6 +362,11 @@ msgstr[0] "Nu se poate construi din cauza unei erori {} în timpul scanării" msgstr[1] "Nu se poate construi din cauza erorilor {} în timpul scanării" msgstr[2] "Nu se poate construi din cauza erorilor {} în timpul scanării" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "A eșuat citirea {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1489,6 +1494,11 @@ msgstr "Eliminarea lui {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Redenumiți fișierele APK care nu se potrivesc cu package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2011,6 +2021,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API key nu poate încărca fișiere mai mari de 32MB, utilizați {url} pentru a încărca {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avertizează cu privire la posibile erori de metadate" diff --git a/locale/ru/LC_MESSAGES/fdroidserver.po b/locale/ru/LC_MESSAGES/fdroidserver.po index e8222af3..bd4aa6f5 100644 --- a/locale/ru/LC_MESSAGES/fdroidserver.po +++ b/locale/ru/LC_MESSAGES/fdroidserver.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-06-24 10:15+0000\n" "Last-Translator: Artyom Rybakov \n" "Language-Team: Russian \n" @@ -374,6 +374,11 @@ msgstr[0] "Запустить сборку невозможно из-за {} о msgstr[1] "Запустить сборку невозможно из-за {} ошибок во время сканирования данных" msgstr[2] "Запустить сборку невозможно из-за {} ошибок во время сканирования данных" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Не удалось распознать {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1501,6 +1506,11 @@ msgstr "Удаление {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Переименовать все APK файлы, не соответствующие шаблону \"название.пакета_123.apk\"" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2022,6 +2032,10 @@ msgstr "Проверка пакета {path} с помощью apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Через API VirusTotal нельзя загрузить файлы больше 32MB, загрузите {path} на {url} самостоятельно." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Предупреждать о возможных ошибках в метаданных" diff --git a/locale/sk/LC_MESSAGES/fdroidserver.po b/locale/sk/LC_MESSAGES/fdroidserver.po index a4dd859f..f3f21800 100644 --- a/locale/sk/LC_MESSAGES/fdroidserver.po +++ b/locale/sk/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -353,6 +353,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1478,6 +1483,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1992,6 +2002,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/sq/LC_MESSAGES/fdroidserver.po b/locale/sq/LC_MESSAGES/fdroidserver.po index 709bf334..efa0401b 100644 --- a/locale/sq/LC_MESSAGES/fdroidserver.po +++ b/locale/sq/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-26 21:33+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -358,6 +358,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "S’montohet dot, për shkak të {} gabimi teksa skanohej" msgstr[1] "S’montohet dot, për shkak të {} gabimeve teksa skanohej" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "S’u arrit të lexohej {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1485,6 +1490,11 @@ msgstr "Po hiqet {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Riemërtoni kartelat APK që nuk përputhen me package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2006,6 +2016,10 @@ msgstr "Po verifikohet paketë {path} me apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Kyçi API VirusTotal s’mund të ngarkojë kartela më të mëdha se 2MB, përdorni {url} që të ngarkoni {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Sinjalizo rreth gabimesh të mundshëm tejtëdhënash" diff --git a/locale/sr/LC_MESSAGES/fdroidserver.po b/locale/sr/LC_MESSAGES/fdroidserver.po index b07f0c4e..5413ac1d 100644 --- a/locale/sr/LC_MESSAGES/fdroidserver.po +++ b/locale/sr/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-12-30 22:00+0000\n" "Last-Translator: Reno Tx \n" "Language-Team: Serbian \n" @@ -361,6 +361,11 @@ msgstr[0] "Не може се изградити због {} грешке при msgstr[1] "Не може се изградити због {} грешке приликом скенирања" msgstr[2] "Не може се изградити због {} грешака приликом скенирања" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Није успело читање {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1488,6 +1493,11 @@ msgstr "Уклањање {path}" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Преименујте APK фајлове који не одговарају package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2009,6 +2019,10 @@ msgstr "Провера пакета {path} са apksigner." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API кључ не може отпремити датотеке веће од 32MB, користи {url} за отпремање {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Упозорење о могућим грешкама у метаподацима" diff --git a/locale/sv/LC_MESSAGES/fdroidserver.po b/locale/sv/LC_MESSAGES/fdroidserver.po index ce93975f..a0928312 100644 --- a/locale/sv/LC_MESSAGES/fdroidserver.po +++ b/locale/sv/LC_MESSAGES/fdroidserver.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-17 21:44+0000\n" "Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" @@ -362,6 +362,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1487,6 +1492,11 @@ msgstr "Tar bort {path}''" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Byt namn på APK-filer som inte matchar paket.namn_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2000,6 +2010,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Visa varningar vid möjliga metadatafel" diff --git a/locale/sw/LC_MESSAGES/fdroidserver.po b/locale/sw/LC_MESSAGES/fdroidserver.po index 21e2b3a3..3ddf8eb8 100644 --- a/locale/sw/LC_MESSAGES/fdroidserver.po +++ b/locale/sw/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-09-08 11:09+0000\n" "Last-Translator: abelbiwott-dev \n" "Language-Team: Swahili \n" @@ -359,6 +359,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Haiwezi kujenga kutokana na kosa la {} wakati wa uchanganuzi" msgstr[1] "Haiwezi kujenga kutokana na makosa ya {} wakati wa uchanganuzi" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Imeshindwa kusoma {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1486,6 +1491,11 @@ msgstr "Kuondoa {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Badilisha jina la faili za APK ambazo hazilingani na package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2007,6 +2017,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ufunguo wa API ya VirusTotal haiwezi kupakia faili zaidi ya 32MB, tumia {url} kupakia {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Onya kuhusu hitilafu ya metadata yanayoweza kutokea" diff --git a/locale/ta/LC_MESSAGES/fdroidserver.po b/locale/ta/LC_MESSAGES/fdroidserver.po index 00d2540d..0661e420 100644 --- a/locale/ta/LC_MESSAGES/fdroidserver.po +++ b/locale/ta/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-01-20 14:04+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Tamil \n" @@ -360,6 +360,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "ச்கேன் செய்யும் போது {} பிழை காரணமாக உருவாக்க முடியாது" msgstr[1] "ச்கேன் செய்யும் போது {} பிழைகள் காரணமாக உருவாக்க முடியாது" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "தோல்வியுற்ற வாசிப்பு {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1487,6 +1492,11 @@ msgstr "{path} \"ஐ நீக்குதல்" msgid "Rename APK files that do not match package.name_123.apk" msgstr "தொகுப்புடன் பொருந்தாத APK கோப்புகளை மறுபெயரிடுங்கள். NAME_123.APK" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2007,6 +2017,10 @@ msgstr "Apksigner உடன் தொகுப்பு {path} ஐ சரிப msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "வைரச்டோட்டல் பநிஇ விசையை 32MB ஐ விட பெரிய கோப்புகளை பதிவேற்ற முடியாது, {path} பதிவேற்ற {url} ஐப் பயன்படுத்தவும்." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "சாத்தியமான மேனிலை தரவு பிழைகள் குறித்து எச்சரிக்கவும்" diff --git a/locale/tr/LC_MESSAGES/fdroidserver.po b/locale/tr/LC_MESSAGES/fdroidserver.po index 4c051537..b3bbe3d5 100644 --- a/locale/tr/LC_MESSAGES/fdroidserver.po +++ b/locale/tr/LC_MESSAGES/fdroidserver.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-05-26 22:01+0000\n" "Last-Translator: Bora Atıcı \n" "Language-Team: Turkish \n" @@ -363,6 +363,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Tarama sırasında {} hata nedeniyle inşa edilemiyor" msgstr[1] "Tarama sırasında {} hata nedeniyle inşa edilemiyor" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path} okunamadı: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1490,6 +1495,11 @@ msgstr "\"{path}\" kaldırılıyor" msgid "Rename APK files that do not match package.name_123.apk" msgstr "paket.adı_123.apk örüntüsüyle eşleşmeyen tüm APK dosyalarını yeniden adlandır" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2010,6 +2020,10 @@ msgstr "{path} paketi apksigner ile doğrulanıyor." msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API anahtarı 32MB'den büyük dosyaları yükleyemiyor, {path} yüklemek için {url} kullanın." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Olası üst veri hataları hakkında uyar" diff --git a/locale/tzm/LC_MESSAGES/fdroidserver.po b/locale/tzm/LC_MESSAGES/fdroidserver.po index 705a018c..fcfc7527 100644 --- a/locale/tzm/LC_MESSAGES/fdroidserver.po +++ b/locale/tzm/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-681-gc19e8952\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2020-10-29 08:32+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Central Atlas Tamazight \n" @@ -353,6 +353,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1478,6 +1483,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1991,6 +2001,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/ug/LC_MESSAGES/fdroidserver.po b/locale/ug/LC_MESSAGES/fdroidserver.po index e4565e46..82346c03 100644 --- a/locale/ug/LC_MESSAGES/fdroidserver.po +++ b/locale/ug/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2018-06-08 03:44+0000\n" "Last-Translator: ۋولقان \n" "Language-Team: Uyghur \n" @@ -354,6 +354,11 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1480,6 +1485,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1993,6 +2003,10 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" diff --git a/locale/uk/LC_MESSAGES/fdroidserver.po b/locale/uk/LC_MESSAGES/fdroidserver.po index a8503aeb..822f3358 100644 --- a/locale/uk/LC_MESSAGES/fdroidserver.po +++ b/locale/uk/LC_MESSAGES/fdroidserver.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-27 19:35+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: Ukrainian \n" @@ -370,6 +370,11 @@ msgstr[0] "Неможливо створити через {} помилку пі msgstr[1] "Неможливо створити через {} помилки під час сканування" msgstr[2] "Неможливо створити через {} помилок під час сканування" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Не вдалося розпізнати {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1497,6 +1502,11 @@ msgstr "Вилучення {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Перейменування файлів APK, які не відповідають package.name_123.apk" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2018,6 +2028,10 @@ msgstr "Перевірка пакета {path} за допомогою apksigner msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ключ API VirusTotal не може завантажити файли, розмір яких понад 32 МБ, використовуйте {url} для завантаження {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Попереджати про можливі помилки метаданих" diff --git a/locale/zh_Hans/LC_MESSAGES/fdroidserver.po b/locale/zh_Hans/LC_MESSAGES/fdroidserver.po index 952e4838..6bb2b142 100644 --- a/locale/zh_Hans/LC_MESSAGES/fdroidserver.po +++ b/locale/zh_Hans/LC_MESSAGES/fdroidserver.po @@ -39,7 +39,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2025-03-26 10:00+0000\n" "Last-Translator: 大王叫我来巡山 \n" "Language-Team: Chinese (Simplified Han script) \n" @@ -390,6 +390,11 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "因扫描时的{}错误而无法构建" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "读取 {path} 失败:{error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1517,6 +1522,11 @@ msgstr "删除 {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "重命名文件名不符合 package.name_123.apk 的 APK 文件" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2036,6 +2046,10 @@ msgstr "使用 apksigner 验证包 {path}。" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal 的 API 密钥无法用于上传大于 32MB 的文件,请使用 {url} 上传 {path}。" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "警告元数据中可能存在的错误" diff --git a/locale/zh_Hant/LC_MESSAGES/fdroidserver.po b/locale/zh_Hant/LC_MESSAGES/fdroidserver.po index 4516afc7..e2358e7e 100644 --- a/locale/zh_Hant/LC_MESSAGES/fdroidserver.po +++ b/locale/zh_Hant/LC_MESSAGES/fdroidserver.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-11-26 15:16+0000\n" "Last-Translator: Peter Dave Hello \n" "Language-Team: Chinese (Traditional Han script) \n" @@ -362,6 +362,11 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "掃描時由於 {} 出錯,無法進行編譯" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "讀取 {path} 失敗:錯誤訊息{error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" @@ -1509,6 +1514,11 @@ msgstr "正在移除 {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "為不符合 package.name_123.apk 格式的 APK 檔案更名" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -2045,6 +2055,10 @@ msgstr "正在使用 apksigner 驗證套件 {path}。" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API key 無法上傳大於 32MB 的檔案, 選擇使用 {url} 來上傳檔案 {path} 。" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "關於中介資料可能錯誤的警告" diff --git a/pyproject.toml b/pyproject.toml index a1f8a99b..c0ae09c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,6 @@ force-exclude = '''( | examples/fdroid_exportkeystore\.py | examples/fdroid_fetchsrclibs\.py | examples/fdroid_nitrokeyimport\.py - | fdroidserver/__init__\.py | fdroidserver/__main__\.py | fdroidserver/apksigcopier\.py | fdroidserver/looseversion\.py diff --git a/tests/config/antiFeatures.yml b/tests/config/antiFeatures.yml index 06d794a1..cb4dc676 100644 --- a/tests/config/antiFeatures.yml +++ b/tests/config/antiFeatures.yml @@ -39,7 +39,3 @@ Tracking: description: This app tracks and reports your activity icon: ic_antifeature_tracking.xml name: Tracking -UpstreamNonFree: - description: The upstream source code is not entirely Free - icon: ic_antifeature_upstreamnonfree.xml - name: Upstream Non-Free diff --git a/tests/config/de/antiFeatures.yml b/tests/config/de/antiFeatures.yml index 3053e41a..65111db1 100644 --- a/tests/config/de/antiFeatures.yml +++ b/tests/config/de/antiFeatures.yml @@ -38,7 +38,3 @@ Tracking: description: Diese App verfolgt und versendet Ihre Aktivitäten icon: ic_antifeature_tracking.xml name: Tracking -UpstreamNonFree: - description: Der Originalcode ist nicht völlig quelloffen - icon: ic_antifeature_upstreamnonfree.xml - name: Originalcode nicht-quelloffen diff --git a/tests/config/fa/antiFeatures.yml b/tests/config/fa/antiFeatures.yml index 554dcee9..aa8290ef 100644 --- a/tests/config/fa/antiFeatures.yml +++ b/tests/config/fa/antiFeatures.yml @@ -37,7 +37,3 @@ Tracking: description: این کاره، فعّالیتتان را ردیابی و گزارش می‌کند icon: ic_antifeature_tracking.xml name: ردیابی -UpstreamNonFree: - description: کد مبدأ بالادستی کاملاً آزاد نیست - icon: ic_antifeature_upstreamnonfree.xml - name: بالادست ناآزاد diff --git a/tests/config/ro/antiFeatures.yml b/tests/config/ro/antiFeatures.yml index 97d61172..9610b448 100644 --- a/tests/config/ro/antiFeatures.yml +++ b/tests/config/ro/antiFeatures.yml @@ -38,7 +38,3 @@ Tracking: description: Aplicația îți înregistrează și raportează activitatea undeva icon: ic_antifeature_tracking.xml name: Urmărire -UpstreamNonFree: - description: Codul sursa originar nu este în totalitatea lui software liber - icon: ic_antifeature_upstreamnonfree.xml - name: Surse ne-libere diff --git a/tests/config/zh-rCN/antiFeatures.yml b/tests/config/zh-rCN/antiFeatures.yml index a1b287b9..2c9f0819 100644 --- a/tests/config/zh-rCN/antiFeatures.yml +++ b/tests/config/zh-rCN/antiFeatures.yml @@ -37,7 +37,3 @@ Tracking: description: 此应用会记录并报告你的活动 icon: ic_antifeature_tracking.xml name: 跟踪用户 -UpstreamNonFree: - description: 上游源代码不是完全自由的 - icon: ic_antifeature_upstreamnonfree.xml - name: 上游代码非自由 diff --git a/tests/dump_internal_metadata_format.py b/tests/dump_internal_metadata_format.py index f9763ebc..ffc72059 100755 --- a/tests/dump_internal_metadata_format.py +++ b/tests/dump_internal_metadata_format.py @@ -25,7 +25,6 @@ import sys from argparse import ArgumentParser import git - import yaml localmodule = os.path.realpath( diff --git a/tests/extra/manual-vmtools-test.py b/tests/extra/manual-vmtools-test.py index 0f0c745b..2f01c9ff 100755 --- a/tests/extra/manual-vmtools-test.py +++ b/tests/extra/manual-vmtools-test.py @@ -4,12 +4,12 @@ # that run in the buildserver setup. It is not really maintained, but # is still here as a kind of reference. +import inspect +import logging import os import sys -import logging -import textwrap import tempfile -import inspect +import textwrap from argparse import ArgumentParser localmodule = os.path.realpath( diff --git a/tests/get-country-region-data.py b/tests/get-country-region-data.py index f0f52e4b..240d70b2 100755 --- a/tests/get-country-region-data.py +++ b/tests/get-country-region-data.py @@ -5,11 +5,12 @@ import collections import os import re -import requests -import requests_cache import sys import tempfile +import requests +import requests_cache + def main(): # we want all the data diff --git a/tests/gradle-release-checksums.py b/tests/gradle-release-checksums.py index 0c190ebf..53ceb1a5 100755 --- a/tests/gradle-release-checksums.py +++ b/tests/gradle-release-checksums.py @@ -1,16 +1,14 @@ #!/usr/bin/env python3 -import git -import gitlab import os import re -import requests import subprocess import sys + +import requests from colorama import Fore, Style from packaging.version import Version - checksums = None versions = dict() @@ -64,88 +62,6 @@ for version in sorted(versions.keys()): with open('makebuildserver', 'w') as fp: fp.write(makebuildserver_current) -# write out update to gradlew-fdroid -with open('gradlew-fdroid') as fp: - gradlew_fdroid = fp.read() -current = '' -get_sha_pat = re.compile(r""" +'([0-9][0-9.]+[0-9])'\)\s+echo '([0-9a-f]{64})' ;;\n""") -for m in get_sha_pat.finditer(gradlew_fdroid): - current += m.group() - checksum = m.group(2) - if checksum != versions[m.group(1)]: - print(Fore.RED - + 'ERROR: checksum mismatch:', checksum, versions[m.group(1)] - + Style.RESET_ALL) - errors += 1 -new = '' -for version in sorted(versions.keys(), key=Version): - sha256 = versions[version] - spaces = '' - for i in range(6 - len(version)): - spaces += ' ' - new += """ '%s')%s echo '%s' ;;\n""" % (version, spaces, sha256) -gradlew_fdroid = gradlew_fdroid.replace(current, new) -plugin_v = ' '.join(sorted(versions.keys(), key=Version, reverse=True)) -plugin_v_pat = re.compile(r'\nplugin_v=\(([0-9. ]+)\)') -with open('gradlew-fdroid', 'w') as fp: - fp.write(plugin_v_pat.sub('\nplugin_v=(%s)' % plugin_v, gradlew_fdroid)) - -if os.getenv('CI_PROJECT_NAMESPACE') != 'fdroid': - p = subprocess.run(['git', '--no-pager', 'diff']) - print(p.stdout) - sys.exit(errors) - -# This only runs after commits are pushed to fdroid/fdroidserver -git_repo = git.repo.Repo('.') -modified = git_repo.git().ls_files(modified=True).split() -if git_repo.is_dirty() and ('gradlew-fdroid' in modified or 'makebuildserver' in modified): - private_token = os.getenv('PERSONAL_ACCESS_TOKEN') - if not private_token: - print(Fore.RED - + 'ERROR: GitLab Token not found in PERSONAL_ACCESS_TOKEN!' - + Style.RESET_ALL) - sys.exit(1) - - branch = git_repo.create_head(os.path.basename(__file__), force=True) - branch.checkout() - git_repo.index.add(['gradlew-fdroid', 'makebuildserver']) - author = git.Actor('fdroid-bot', 'fdroid-bot@f-droid.org') - git_repo.index.commit('gradle v' + version, author=author) - project_path = 'fdroid-bot/' + os.getenv('CI_PROJECT_NAME') - url = ('https://gitlab-ci-token:%s@%s/%s.git' - % (os.getenv('PERSONAL_ACCESS_TOKEN'), os.getenv('CI_SERVER_HOST'), project_path)) - remote_name = 'fdroid-bot' - try: - remote = git_repo.create_remote(remote_name, url) - # See https://github.com/PyCQA/pylint/issues/2856 . - # pylint: disable-next=no-member - except git.exc.GitCommandError: - remote = git.remote.Remote(git_repo, remote_name) - remote.set_url(url) - remote.push(force=True) - git.remote.Remote.rm(git_repo, remote_name) - - gl = gitlab.Gitlab(os.getenv('CI_SERVER_URL'), api_version=4, - private_token=private_token) - project = gl.projects.get(project_path, lazy=True) - description = ( - 'see ' - '\n\n

generated by GitLab CI Job #%s

' - % (os.getenv('CI_PROJECT_URL'), os.getenv('CI_JOB_ID'), os.getenv('CI_JOB_ID')) - ) - try: - mr = project.mergerequests.create({ - 'source_branch': branch.name, - 'target_project_id': 36527, # fdroid/fdroidserver - 'target_branch': 'master', - 'title': 'update to gradle v' + version, - 'description': description, - 'labels': ['fdroid-bot', 'gradle'], - 'remove_source_branch': True, - }) - mr.save() - except gitlab.exceptions.GitlabCreateError as e: - if e.response_code == 409: # Another open merge request already exists for this source branch - print(e.error_message) - else: - raise e +p = subprocess.run(['git', '--no-pager', 'diff']) +errors += p.returncode +sys.exit(errors) diff --git a/tests/key-tricks.py b/tests/key-tricks.py index 7fc0f3ea..a01bf0bf 100755 --- a/tests/key-tricks.py +++ b/tests/key-tricks.py @@ -1,9 +1,10 @@ #!/usr/bin/env python3 import os -import fdroidserver import shutil import sys + +import fdroidserver from fdroidserver import common, nightly if os.getenv('CI') is None: diff --git a/tests/metadata-rewrite-yml/app.with.special.build.params.yml b/tests/metadata-rewrite-yml/app.with.special.build.params.yml index 0fc97b65..95c1695c 100644 --- a/tests/metadata-rewrite-yml/app.with.special.build.params.yml +++ b/tests/metadata-rewrite-yml/app.with.special.build.params.yml @@ -1,5 +1,5 @@ AntiFeatures: - - UpstreamNonFree + - Tracking Categories: - System License: GPL-3.0-only diff --git a/tests/metadata/app.with.special.build.params.yml b/tests/metadata/app.with.special.build.params.yml index d12c713c..c58cadf1 100644 --- a/tests/metadata/app.with.special.build.params.yml +++ b/tests/metadata/app.with.special.build.params.yml @@ -1,5 +1,5 @@ AntiFeatures: - - UpstreamNonFree + - Tracking Categories: - System License: GPL-3.0-only diff --git a/tests/metadata/com.politedroid.yml b/tests/metadata/com.politedroid.yml index cd474d6c..87d13bcb 100644 --- a/tests/metadata/com.politedroid.yml +++ b/tests/metadata/com.politedroid.yml @@ -22,7 +22,6 @@ Builds: target: android-10 antifeatures: - KnownVuln - - UpstreamNonFree - NonFreeAssets - versionName: '1.3' @@ -43,7 +42,6 @@ Builds: - yes antifeatures: - KnownVuln - - UpstreamNonFree - NonFreeAssets ArchivePolicy: 4 versions diff --git a/tests/metadata/dump/app.with.special.build.params.yaml b/tests/metadata/dump/app.with.special.build.params.yaml index 9f2c61f6..fae6c9ae 100644 --- a/tests/metadata/dump/app.with.special.build.params.yaml +++ b/tests/metadata/dump/app.with.special.build.params.yaml @@ -2,7 +2,7 @@ --- AllowedAPKSigningKeys: [] AntiFeatures: - UpstreamNonFree: {} + Tracking: {} ArchivePolicy: 0 AuthorEmail: null AuthorName: null diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml index b4d56c3e..01d55b82 100644 --- a/tests/metadata/dump/com.politedroid.yaml +++ b/tests/metadata/dump/com.politedroid.yaml @@ -19,7 +19,6 @@ Builds: antifeatures: KnownVuln: {} NonFreeAssets: {} - UpstreamNonFree: {} binary: null build: '' buildjni: [] @@ -127,7 +126,6 @@ Builds: antifeatures: KnownVuln: {} NonFreeAssets: {} - UpstreamNonFree: {} binary: null build: '' buildjni: [] diff --git a/tests/openssl-version-check-test.py b/tests/openssl-version-check-test.py index d4022126..69a1ff59 100755 --- a/tests/openssl-version-check-test.py +++ b/tests/openssl-version-check-test.py @@ -6,6 +6,7 @@ # This is used in update.has_known_vulnerability() import re + import requests # this list was generated using: diff --git a/tests/repo/entry.json b/tests/repo/entry.json index 1eb017bc..85b6b14f 100644 --- a/tests/repo/entry.json +++ b/tests/repo/entry.json @@ -3,8 +3,8 @@ "version": 20002, "index": { "name": "/index-v2.json", - "sha256": "f0912b64db80168ee807f43ab3470bb709b6659aee05ad63057dcbcd1c97dc5e", - "size": 55186, + "sha256": "94dca5f4398d2a0167bbe69c790cdd66f1bc305ca5e362ee5e3f793e9f88e3cf", + "size": 53355, "numPackages": 11 }, "diffs": {} diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index ed1cbcde..03f8f060 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -244,8 +244,7 @@ "added": 1498176000000, "antiFeatures": [ "KnownVuln", - "NonFreeAssets", - "UpstreamNonFree" + "NonFreeAssets" ], "apkName": "com.politedroid_6.apk", "hash": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", @@ -332,8 +331,7 @@ "added": 1498176000000, "antiFeatures": [ "KnownVuln", - "NonFreeAssets", - "UpstreamNonFree" + "NonFreeAssets" ], "apkName": "com.politedroid_3.apk", "hash": "665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d", diff --git a/tests/repo/index-v2.json b/tests/repo/index-v2.json index 96c2cfea..263dffd2 100644 --- a/tests/repo/index-v2.json +++ b/tests/repo/index-v2.json @@ -453,49 +453,6 @@ "ro": "Urmărire", "zh-rCN": "跟踪用户" } - }, - "UpstreamNonFree": { - "description": { - "de": "Der Originalcode ist nicht völlig quelloffen", - "en-US": "The upstream source code is not entirely Free", - "fa": "کد مبدأ بالادستی کاملاً آزاد نیست", - "ro": "Codul sursa originar nu este în totalitatea lui software liber", - "zh-rCN": "上游源代码不是完全自由的" - }, - "icon": { - "de": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "en-US": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "fa": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "ro": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "zh-rCN": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - } - }, - "name": { - "de": "Originalcode nicht-quelloffen", - "en-US": "Upstream Non-Free", - "fa": "بالادست ناآزاد", - "ro": "Surse ne-libere", - "zh-rCN": "上游代码非自由" - } } }, "categories": { @@ -627,8 +584,7 @@ "en-US": "1.5" }, "NonFreeAssets": {}, - "NonFreeNet": {}, - "UpstreamNonFree": {} + "NonFreeNet": {} } }, "5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d": { @@ -756,8 +712,7 @@ "en-US": "1.5" }, "NonFreeAssets": {}, - "NonFreeNet": {}, - "UpstreamNonFree": {} + "NonFreeNet": {} } } } diff --git a/tests/repo/index.xml b/tests/repo/index.xml index 4036a6f7..04e8f87d 100644 --- a/tests/repo/index.xml +++ b/tests/repo/index.xml @@ -346,7 +346,7 @@ APK is called F-Droid Privileged Extension. https://github.com/miguelvps/PoliteDroid/issues 1.5 6 - KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet,UpstreamNonFree + KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet 1.5 6 diff --git a/tests/shared_test_code.py b/tests/shared_test_code.py index 59f515a7..3e34900b 100644 --- a/tests/shared_test_code.py +++ b/tests/shared_test_code.py @@ -20,10 +20,8 @@ import sys import tempfile import unittest import unittest.mock - from pathlib import Path - GP_FINGERPRINT = 'B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A6135' diff --git a/tests/test_api.py b/tests/test_api.py index 6cb9a53b..ba18caa6 100755 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -8,8 +8,8 @@ from unittest import mock import fdroidserver from fdroidserver import common, signindex -from .shared_test_code import GP_FINGERPRINT, mkdtemp +from .shared_test_code import GP_FINGERPRINT, mkdtemp basedir = Path(__file__).parent diff --git a/tests/test_build.py b/tests/test_build.py index f7558c8c..578837ed 100755 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -6,15 +6,16 @@ import sys import tempfile import textwrap import unittest -import yaml from pathlib import Path from unittest import mock -from .shared_test_code import TmpCwd, mkdtemp +import yaml import fdroidserver.build import fdroidserver.common +from .shared_test_code import TmpCwd, mkdtemp + class FakeProcess: output = 'fake output' diff --git a/tests/test_checkupdates.py b/tests/test_checkupdates.py index 4cc76db3..107caf29 100755 --- a/tests/test_checkupdates.py +++ b/tests/test_checkupdates.py @@ -1,19 +1,19 @@ #!/usr/bin/env python3 -import git import os import platform import shutil import tempfile import time import unittest -from unittest import mock from pathlib import Path +from unittest import mock + +import git import fdroidserver import fdroidserver.checkupdates - basedir = Path(__file__).parent diff --git a/tests/test_common.py b/tests/test_common.py index 1f6ff947..3110b446 100755 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -1,40 +1,44 @@ #!/usr/bin/env python3 import difflib -import git import glob +import gzip import importlib import json import logging import os import re -import ruamel.yaml import shutil import subprocess import sys import tempfile +import textwrap import time import unittest -import textwrap -import gzip from argparse import ArgumentParser from datetime import datetime, timezone -from zipfile import BadZipFile, ZipFile -from unittest import mock from pathlib import Path +from unittest import mock +from zipfile import BadZipFile, ZipFile +import git +import ruamel.yaml import fdroidserver -import fdroidserver.signindex import fdroidserver.common import fdroidserver.metadata -from .shared_test_code import TmpCwd, mkdtemp, mkdir_testfiles +import fdroidserver.signindex +from fdroidserver._yaml import config_dump, yaml, yaml_dumper from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME -from fdroidserver._yaml import yaml, yaml_dumper, config_dump -from fdroidserver.exception import FDroidException, VCSException,\ - MetaDataException, VerificationException +from fdroidserver.exception import ( + FDroidException, + MetaDataException, + VCSException, + VerificationException, +) from fdroidserver.looseversion import LooseVersion +from .shared_test_code import TmpCwd, mkdir_testfiles, mkdtemp basedir = Path(__file__).parent @@ -2415,9 +2419,10 @@ class CommonTest(SetUpTearDownMixin, unittest.TestCase): @mock.patch('sdkmanager._generate_package_xml', lambda a, b, c: None) def test_auto_install_ndk_mock_dl(self): """Test NDK installs by actually calling sdkmanager""" - import sdkmanager import importlib.metadata + import sdkmanager + sdkmanager_version = LooseVersion(importlib.metadata.version('sdkmanager')) if sdkmanager_version < LooseVersion('0.6.4'): raise unittest.SkipTest('needs fdroid sdkmanager >= 0.6.4') @@ -2779,7 +2784,6 @@ class CommonTest(SetUpTearDownMixin, unittest.TestCase): 'NonFreeDep', 'NonFreeNet', 'Tracking', - 'UpstreamNonFree', ], list(antiFeatures.keys()), ) @@ -2815,6 +2819,46 @@ class CommonTest(SetUpTearDownMixin, unittest.TestCase): ) self.assertEqual(['en-US'], list(categories['GuardianProject']['name'].keys())) + def test_load_localized_config_copy_icon(self): + os.chdir(self.testdir) + os.mkdir('config') + Path('config/categories.yml').write_text('System:\n icon: system.png') + source_file = 'config/system.png' + Path(source_file).write_text('placeholder') + time.sleep(0.01) # ensure reliable failure if mtime isn't preserved + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + dest_file = f'repo/icons/{os.path.basename(source_file)}' + self.assertEqual(os.path.getsize(source_file), os.path.getsize(dest_file)) + self.assertEqual(os.path.getmtime(source_file), os.path.getmtime(dest_file)) + + def test_load_localized_config_copy_unchanged(self): + """The destination file should only change if the source file did.""" + os.chdir(self.testdir) + os.mkdir('config') + Path('config/categories.yml').write_text('System:\n icon: system.png') + source_file = 'config/system.png' + Path(source_file).write_text('placeholder') + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + delta = 0.01 + time.sleep(delta) # ensure reliable failure if file isn't preserved + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + dest_file = f'repo/icons/{os.path.basename(source_file)}' + self.assertAlmostEqual( + os.path.getctime(source_file), os.path.getctime(dest_file), delta=delta + ) + + def test_load_localized_config_copy_over_dest(self): + os.chdir(self.testdir) + os.mkdir('config') + Path('config/categories.yml').write_text('System:\n icon: system.png') + source_file = Path('config/system.png') + dest_file = Path(f'repo/icons/{os.path.basename(source_file)}') + source_file.write_text('placeholder') + dest_file.parent.mkdir(parents=True) + dest_file.write_text('different contents') + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + self.assertEqual(os.path.getsize(source_file), os.path.getsize(dest_file)) + def test_load_localized_config_0_file(self): os.chdir(self.testdir) os.mkdir('config') diff --git a/tests/test_deploy.py b/tests/test_deploy.py index b821725c..60d157c3 100755 --- a/tests/test_deploy.py +++ b/tests/test_deploy.py @@ -11,7 +11,8 @@ from unittest import mock import git import fdroidserver -from .shared_test_code import TmpCwd, mkdtemp, VerboseFalseOptions + +from .shared_test_code import TmpCwd, VerboseFalseOptions, mkdtemp basedir = Path(__file__).parent diff --git a/tests/test_exception.py b/tests/test_exception.py index accc6653..01a6cd46 100755 --- a/tests/test_exception.py +++ b/tests/test_exception.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import unittest + import fdroidserver diff --git a/tests/test_github.py b/tests/test_github.py index 39514c5d..f30ce0bb 100755 --- a/tests/test_github.py +++ b/tests/test_github.py @@ -3,9 +3,10 @@ import unittest import unittest.mock -from .shared_test_code import mock_urlopen import fdroidserver +from .shared_test_code import mock_urlopen + class GithubApiTest(unittest.TestCase): def test__init(self): diff --git a/tests/test_gpgsign.py b/tests/test_gpgsign.py index f73b217e..84634874 100755 --- a/tests/test_gpgsign.py +++ b/tests/test_gpgsign.py @@ -5,11 +5,11 @@ import os import shutil import tempfile import unittest - -from fdroidserver import common, gpgsign from pathlib import Path from unittest.mock import MagicMock, patch +from fdroidserver import common, gpgsign + basedir = Path(__file__).parent diff --git a/tests/test_gradlew-fdroid b/tests/test_gradlew-fdroid deleted file mode 100755 index 26d9bf5b..00000000 --- a/tests/test_gradlew-fdroid +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash - -red='\033[0;31m' -green='\033[0;32m' -nocolor='\033[0m' - -TEST_VALUE='HELLO WORLD!' - -run_test() { - cd $source_files/$1 - printf "\n${1}:\n" - if ($basedir/gradlew-fdroid 2>/dev/null || true) | grep -Fo "$2"; then - printf "${green}passed: $1\n" - else - printf "${red}ERROR: $2 not found in $1\n" - ((exit_value++)) - fi - printf $nocolor -} - -download_cache_test() { - if $basedir/gradlew-fdroid helloWorld 2>/dev/null | grep -F "$TEST_VALUE"; then - printf "${green}passed: $1\n" - else - printf "${red}ERROR: \n" - $basedir/gradlew-fdroid helloWorld - ((exit_value++)) - fi - printf $nocolor -} - -exit_value=0 -basedir=$(cd $(dirname $0)/..; pwd) -source_files=$basedir/tests/source-files -export https_proxy=127.7.7.7:7 # fake proxy to block downloading - -run_test osmandapp/osmand 2.2.1 -run_test com.integreight.onesheeld 3.3 -run_test se.manyver/android 5.5 -run_test yuriykulikov/AlarmClock 5.1.1 - -printf "\n\nforce test files to have Windows linefeeds:\n" -tmpdir=`mktemp -d` -cp -a $source_files/osmandapp $source_files/yuriykulikov $tmpdir/ -awk 'sub("$", "\r")' \ - $source_files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties \ - > $tmpdir/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties -awk 'sub("$", "\r")' \ - $source_files/osmandapp/osmand/build.gradle \ - > $tmpdir/osmandapp/osmand/build.gradle -source_files=$tmpdir - -run_test yuriykulikov/AlarmClock 5.1.1 -run_test osmandapp/osmand 2.2.1 - -cd $tmpdir -mkdir -p download_cache_test/gradle/wrapper -cd download_cache_test -echo 'distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip' \ - > gradle/wrapper/gradle-wrapper.properties -printf "task helloWorld {\n\tdoLast {\n\t\tprintln '$TEST_VALUE'\n\t}\n}" > build.gradle - -export GRADLE_VERSION_DIR=$tmpdir/gradle/versions -mkdir -p $GRADLE_VERSION_DIR - -unset https_proxy -printf "download, unpack, and run: " -download_cache_test 7.3 -printf "unpack and run: " -rm -rf $GRADLE_VERSION_DIR/7.3/ -download_cache_test 7.3 -printf "just run: " -download_cache_test 7.3 - -exit $exit_value diff --git a/tests/test_import_subcommand.py b/tests/test_import_subcommand.py index 05e2c379..530e10fb 100755 --- a/tests/test_import_subcommand.py +++ b/tests/test_import_subcommand.py @@ -13,11 +13,11 @@ import git import requests import yaml -from .shared_test_code import TmpCwd, mkdtemp, VerboseFalseOptions - import fdroidserver import fdroidserver.import_subcommand +from .shared_test_code import TmpCwd, VerboseFalseOptions, mkdtemp + basedir = Path(__file__).parent logging.basicConfig(level=logging.DEBUG) diff --git a/tests/test_index.py b/tests/test_index.py index b4973d79..c8ff5cbe 100755 --- a/tests/test_index.py +++ b/tests/test_index.py @@ -3,21 +3,22 @@ import copy import datetime import glob -import os -import unittest -from pathlib import Path -import yaml -import zipfile -from unittest.mock import patch -import requests -import tempfile import json +import os import shutil +import tempfile +import unittest +import zipfile +from pathlib import Path +from unittest.mock import patch + +import requests +import yaml import fdroidserver from fdroidserver import common, index, publish, signindex, update -from .shared_test_code import GP_FINGERPRINT, TmpCwd, mkdtemp +from .shared_test_code import GP_FINGERPRINT, TmpCwd, mkdtemp basedir = Path(__file__).parent diff --git a/tests/test_init.py b/tests/test_init.py index 179f06c7..a038493b 100755 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -8,6 +8,7 @@ import unittest import fdroidserver.common import fdroidserver.init + from .shared_test_code import mkdtemp basedir = pathlib.Path(__file__).parent diff --git a/tests/test_install.py b/tests/test_install.py index b4e404d5..aa239d4d 100755 --- a/tests/test_install.py +++ b/tests/test_install.py @@ -3,7 +3,6 @@ import os import textwrap import unittest - from pathlib import Path from unittest.mock import Mock, patch diff --git a/tests/test_integration.py b/tests/test_integration.py index 76a7e82b..6d757b1e 100755 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -18,6 +18,7 @@ except ModuleNotFoundError: from androguard.core.apk import get_apkid from fdroidserver._yaml import yaml, yaml_dumper + from .shared_test_code import mkdir_testfiles # TODO: port generic tests that use index.xml to index-v2 (test that diff --git a/tests/test_lint.py b/tests/test_lint.py index f0bf6b4d..37b7ce95 100755 --- a/tests/test_lint.py +++ b/tests/test_lint.py @@ -9,13 +9,13 @@ import unittest from pathlib import Path from unittest import mock -from .shared_test_code import mkdtemp - import fdroidserver.common import fdroidserver.lint import fdroidserver.metadata from fdroidserver._yaml import config_dump +from .shared_test_code import mkdtemp + basedir = Path(__file__).parent @@ -510,7 +510,7 @@ class LintAntiFeaturesTest(unittest.TestCase): def test_check_antiFeatures(self): app = fdroidserver.metadata.App() - app['AntiFeatures'] = ['Ads', 'UpstreamNonFree'] + app['AntiFeatures'] = ['Ads', 'Tracking'] self.assertEqual([], list(fdroidserver.lint.check_antiFeatures(app))) def test_check_antiFeatures_fails_one(self): diff --git a/tests/test_main.py b/tests/test_main.py index 50fda3e2..68984088 100755 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -2,12 +2,13 @@ import os import pkgutil +import tempfile import textwrap import unittest -import tempfile from unittest import mock import fdroidserver.__main__ + from .shared_test_code import TmpCwd, TmpPyPath diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 8c3f7591..84040024 100755 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -4,22 +4,23 @@ import copy import io import os import random -import ruamel.yaml import shutil -import unittest import tempfile import textwrap +import unittest from collections import OrderedDict from pathlib import Path from unittest import mock +import ruamel.yaml + import fdroidserver from fdroidserver import metadata -from fdroidserver.exception import MetaDataException -from fdroidserver.common import DEFAULT_LOCALE from fdroidserver._yaml import yaml -from .shared_test_code import TmpCwd, mkdtemp +from fdroidserver.common import DEFAULT_LOCALE +from fdroidserver.exception import MetaDataException +from .shared_test_code import TmpCwd, mkdtemp basedir = Path(__file__).parent @@ -671,7 +672,7 @@ class MetadataTest(unittest.TestCase): """Definitions in .yml files should override the localized versions.""" app = metadata.parse_metadata('metadata/app.with.special.build.params.yml') - self.assertEqual(app['AntiFeatures'], {'UpstreamNonFree': {}}) + self.assertEqual(app['AntiFeatures'], {'Tracking': {}}) self.assertEqual(49, app['Builds'][-3]['versionCode']) self.assertEqual( @@ -960,7 +961,6 @@ class MetadataTest(unittest.TestCase): - versionCode: 123 antifeatures: - KnownVuln - - UpstreamNonFree - NonFreeAssets """ ) @@ -971,11 +971,7 @@ class MetadataTest(unittest.TestCase): 'AntiFeatures': {'Ads': {}}, 'Builds': [ { - 'antifeatures': { - 'KnownVuln': {}, - 'NonFreeAssets': {}, - 'UpstreamNonFree': {}, - }, + 'antifeatures': {'KnownVuln': {}, 'NonFreeAssets': {}}, 'versionCode': 123, } ], @@ -996,7 +992,7 @@ class MetadataTest(unittest.TestCase): es: 2nd az: zero en-US: first - UpstreamNonFree: + Tracking: NonFreeAssets: AntiFeatures: NonFreeDep: @@ -1018,7 +1014,7 @@ class MetadataTest(unittest.TestCase): 'antifeatures': { 'KnownVuln': {'az': 'zero', 'en-US': 'first', 'es': '2nd'}, 'NonFreeAssets': {}, - 'UpstreamNonFree': {}, + 'Tracking': {}, }, 'versionCode': 123, } @@ -1872,7 +1868,6 @@ class MetadataTest(unittest.TestCase): antifeatures: - KnownVuln - NonFreeAssets - - UpstreamNonFree ArchivePolicy: 4 AutoUpdateMode: Version v%v diff --git a/tests/test_net.py b/tests/test_net.py index 581edcfb..beacd9af 100755 --- a/tests/test_net.py +++ b/tests/test_net.py @@ -2,16 +2,17 @@ import os import random -import requests import socket import tempfile import threading import time import unittest +from pathlib import Path from unittest.mock import MagicMock, patch +import requests + from fdroidserver import net -from pathlib import Path class RetryServer: diff --git a/tests/test_nightly.py b/tests/test_nightly.py index 681df96d..fb1614b7 100755 --- a/tests/test_nightly.py +++ b/tests/test_nightly.py @@ -2,19 +2,18 @@ import os import platform -import requests import shutil import subprocess import tempfile import time import unittest -import yaml - from pathlib import Path from unittest.mock import patch -from fdroidserver import common, exception, index, nightly +import requests +import yaml +from fdroidserver import common, exception, index, nightly DEBUG_KEYSTORE = '/u3+7QAAAAIAAAABAAAAAQAPYW5kcm9pZGRlYnVna2V5AAABNYhAuskAAAK8MIICuDAOBgorBgEEASoCEQEBBQAEggKkqRnFlhidQmVff83bsAeewXPIsF0jiymzJnvrnUAQtCK0MV9uZonu37Mrj/qKLn56mf6QcvEoKvpCstZxzftgYYpAHWMVLM+hy2Z707QZEHlY7Ukppt8DItj+dXkeqGt7f8KzOb2AQwDbt9lm1fJb+MefLowTaubtvrLMcKIne43CbCu2D8HyN7RPWpEkVetA2Qgr5W4sa3tIUT80afqo9jzwJjKCspuxY9A1M8EIM3/kvyLo2B9r0cuWwRjYZXJ6gmTYI2ARNz0KQnCZUok14NDg+mZTb1B7AzRfb0lfjbA6grbzuAL+WaEpO8/LgGfuOh7QBZBT498TElOaFfQ9toQWA79wAmrQCm4OoFukpPIy2m/l6VjJSmlK5Q+CMOl/Au7OG1sUUCTvPaIr0XKnsiwDJ7a71n9garnPWHkvuWapSRCzCNgaUoGQjB+fTMJFFrwT8P1aLfM6onc3KNrDStoQZuYe5ngCLlNS56bENkVGvJBfdkboxtHZjqDXXON9jWGSOI527J3o2D5sjSVyx3T9XPrsL4TA/nBtdU+c/+M6aoASZR2VymzAKdMrGfj9kE5GXp8vv2vkJj9+OJ4Jm5yeczocc/Idtojjb1yg+sq1yY8kAQxgezpY1rpgi2jF3tSN01c23DNvAaSJLJX2ZuH8sD40ACc80Y1Qp1nUTdpwBZUeaeNruBwx4PHU8GnC71FwtiUpwNs0OoSl0pgDUJ3ODC5bs8B5QmW1wu1eg7I4mMSmCsNGW6VN3sFcu+WEqnmTxPoZombdFZKxsr2oq359Nn4bJ6Uc9PBz/sXsns7Zx1vND/oK/Jv5Y269UVAMeKX/eGpfnxzagW3tqGbOu12C2p9Azo5VxiU2fG/tmk2PjaG5hV/ywReco7I6C1p8OWM2fwAAAAEABVguNTA5AAAB6TCCAeUwggFOoAMCAQICBE89gTUwDQYJKoZIhvcNAQEFBQAwNzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0FuZHJvaWQxFjAUBgNVBAMTDUFuZHJvaWQgRGVidWcwHhcNMTIwMjE2MjIyMDM3WhcNNDIwMjA4MjIyMDM3WjA3MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHQW5kcm9pZDEWMBQGA1UEAxMNQW5kcm9pZCBEZWJ1ZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3AKU7S7JXhUjEwxWP1/LPHXieh61SaA/+xbpqsPA+yjGz1sAcGAyuG6bjNAVm56pq7nkjJzicX7Wi83nUBo58DEC/quxOLdy0C4PEOSAeTnTT1RJIwMDvOgiL1GFCErvQ7gCH6zuAID/JRFbN6nIkhDjs2DYnSBl7aJJf8wCLc0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAoq/TJffA0l+ZGf89xndmHdxrO6qi+TzSlByvLZ4eFfCovTh1iO+Edrd5V1yXGLxyyvdsadMAFZT8SaxMrP5xxhJ0nra0APWYLpA96M//auMhQBWPgqPntwgvEZuEH7f0kdItjBJ39yijbG8xfgwid6XqNUo0TDDkp/wNWKpJ9tJe+2PrGw1NAvrgSydoH2j8DI1Eq' DEBUG_KEYSTORE_KEY_FILE_NAME = ( diff --git a/tests/test_publish.py b/tests/test_publish.py index cb47bff5..82c670d7 100755 --- a/tests/test_publish.py +++ b/tests/test_publish.py @@ -15,17 +15,15 @@ import os import pathlib import shutil import sys -import unittest import tempfile +import unittest from unittest import mock -from fdroidserver import publish -from fdroidserver import common -from fdroidserver import metadata -from fdroidserver import signatures +from fdroidserver import common, metadata, publish, signatures from fdroidserver._yaml import yaml from fdroidserver.exception import FDroidException -from .shared_test_code import mkdtemp, VerboseFalseOptions + +from .shared_test_code import VerboseFalseOptions, mkdtemp basedir = pathlib.Path(__file__).parent diff --git a/tests/test_rewritemeta.py b/tests/test_rewritemeta.py index 5ad1b94d..4dcdd03f 100755 --- a/tests/test_rewritemeta.py +++ b/tests/test_rewritemeta.py @@ -1,13 +1,14 @@ #!/usr/bin/env python3 import os -import unittest import tempfile import textwrap +import unittest from pathlib import Path from unittest import mock from fdroidserver import metadata, rewritemeta + from .shared_test_code import TmpCwd, mkdtemp basedir = Path(__file__).parent @@ -39,7 +40,6 @@ class RewriteMetaTest(unittest.TestCase): 'target': 'android-10', 'antifeatures': { 'KnownVuln': {}, - 'UpstreamNonFree': {}, 'NonFreeAssets': {}, }, }, diff --git a/tests/test_scanner.py b/tests/test_scanner.py index d982ed4f..849476e6 100755 --- a/tests/test_scanner.py +++ b/tests/test_scanner.py @@ -26,6 +26,7 @@ import fdroidserver.common import fdroidserver.exception import fdroidserver.metadata import fdroidserver.scanner + from .shared_test_code import TmpCwd, mkdtemp, mock_open_to_str basedir = pathlib.Path(__file__).parent diff --git a/tests/test_signatures.py b/tests/test_signatures.py index 603ddf2c..4f7bd105 100755 --- a/tests/test_signatures.py +++ b/tests/test_signatures.py @@ -6,9 +6,10 @@ import sys import unittest from tempfile import TemporaryDirectory -from .shared_test_code import TmpCwd from fdroidserver import common, signatures +from .shared_test_code import TmpCwd + basedir = os.path.dirname(__file__) diff --git a/tests/test_signindex.py b/tests/test_signindex.py index 149afb24..21d54585 100755 --- a/tests/test_signindex.py +++ b/tests/test_signindex.py @@ -6,11 +6,11 @@ import shutil import subprocess import tempfile import unittest - -from fdroidserver import apksigcopier, common, exception, signindex, update from pathlib import Path from unittest.mock import patch +from fdroidserver import apksigcopier, common, exception, signindex, update + class Options: allow_disabled_algorithms = False diff --git a/tests/test_update.py b/tests/test_update.py index de39d8fd..623f48cc 100755 --- a/tests/test_update.py +++ b/tests/test_update.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 import copy -import git import glob import hashlib import json @@ -12,16 +11,18 @@ import shutil import string import subprocess import sys +import textwrap import time import unittest -import yaml import zipfile -import textwrap from binascii import hexlify from datetime import datetime from pathlib import Path from unittest import mock +import git +import yaml + try: # these were moved in androguard 4.0 from androguard.core.apk import APK @@ -44,15 +45,16 @@ except ImportError: except ImportError: from yaml import Loader as FullLoader +from PIL import PngImagePlugin + import fdroidserver.common import fdroidserver.exception import fdroidserver.metadata import fdroidserver.update from fdroidserver.common import CATEGORIES_CONFIG_NAME from fdroidserver.looseversion import LooseVersion -from .shared_test_code import TmpCwd, mkdtemp -from PIL import PngImagePlugin +from .shared_test_code import TmpCwd, mkdtemp DONATION_FIELDS = ('Donate', 'Liberapay', 'OpenCollective') @@ -253,6 +255,113 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual('42', apps[app.id]['localized']['en-US']['whatsNew']) + def test_fastlane_with_subdir(self): + """Test if fastlane in simple one-level subdir is found.""" + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'com.example.app' + build_dir = f'build/{app.id}' + flavor = 'flavor' + subdir = 'subproject' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = [flavor] + build.subdir = subdir + app['Builds'] = [build] + + first_value = 'first' + first_dir = Path(f'{build_dir}/src/{flavor}/fastlane/metadata/android/en-US') + first_dir.mkdir(parents=True) + (first_dir / 'title.txt').write_text(first_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(first_value, apps[app.id]['localized']['en-US']['name']) + + second_value = 'second' + second_dir = Path(f'{build_dir}/{subdir}/fastlane/metadata/android/en-US') + second_dir.mkdir(parents=True) + (second_dir / 'title.txt').write_text(second_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name']) + + def test_fastlane_with_schildichat(self): + """Test if fastlane is found in this tangle of dirs and symlinks. + + https://github.com/SchildiChat/schildichat-android-next/tree/sc_v0.10.3-ex_25_6_2 + """ + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'chat.schildi.android' + build_dir = f'build/{app.id}' + flavors = ['fdroid', 'sc', 'default'] + subdir = 'app' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = flavors + build.subdir = subdir + app['Builds'] = [build] + + wrong_value = 'wrong' + wrong_dir = Path(f'{build_dir}/upstream_infra/fastlane/metadata/android/en-US') + wrong_dir.mkdir(parents=True) + (wrong_dir / 'title.txt').write_text(wrong_value) + + right_value = 'right' + right_dir = Path(f'{build_dir}/metadata/en-US') + right_dir.mkdir(parents=True) + (right_dir / 'title.txt').write_text(right_value) + _fastlane = Path('.fastlane/metadata') + _fastlane.mkdir(parents=True) + os.symlink('../../metadata', _fastlane / 'android') + os.symlink('.fastlane', 'fastlane') + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(right_value, apps[app.id]['localized']['en-US']['name']) + + def test_fastlane_with_multi_level_subdir(self): + """Test if fastlane in multi-level subdir is found.""" + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'org.videolan.vlc' + build_dir = f'build/{app.id}' + subdir = 'application/app' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = ['yes'] + build.subdir = subdir + app['Builds'] = [build] + + first_value = 'first' + first_dir = Path(f'{build_dir}/{subdir}/fastlane/metadata/android/en-US') + first_dir.mkdir(parents=True) + (first_dir / 'title.txt').write_text(first_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(first_value, apps[app.id]['localized']['en-US']['name']) + + # I'm not sure that it is correct behavior for this path to + # override the above path, but it is how it is working now. It + # seems to me it should be the other way around, but that is + # really hard to implement using the current algorithm. + second_value = 'second' + second_dir = Path(f'{build_dir}/fastlane/metadata/android/en-US') + second_dir.mkdir(parents=True) + (second_dir / 'title.txt').write_text(second_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name']) + def test_name_title_scraping(self): """metadata file --> fdroiddata localized files --> fastlane/triple-t in app source --> APK""" shutil.copytree(basedir, self.testdir, dirs_exist_ok=True) @@ -1266,7 +1375,7 @@ class UpdateTest(unittest.TestCase): if apk['packageName'] == 'com.politedroid' and apk['versionCode'] == 3: antiFeatures = apk.get('antiFeatures') self.assertTrue('KnownVuln' in antiFeatures) - self.assertEqual(3, len(antiFeatures)) + self.assertEqual(2, len(antiFeatures)) foundtest = True self.assertTrue(foundtest) diff --git a/tests/test_vcs.py b/tests/test_vcs.py index 2b640a9e..a007feae 100755 --- a/tests/test_vcs.py +++ b/tests/test_vcs.py @@ -7,7 +7,8 @@ from git import Repo import fdroidserver.common import fdroidserver.metadata -from .shared_test_code import mkdtemp, VerboseFalseOptions + +from .shared_test_code import VerboseFalseOptions, mkdtemp class VCSTest(unittest.TestCase): diff --git a/tests/test_verify.py b/tests/test_verify.py index f9da9092..e5a2f7c4 100755 --- a/tests/test_verify.py +++ b/tests/test_verify.py @@ -6,13 +6,11 @@ import shutil import sys import tempfile import unittest - from pathlib import Path from unittest.mock import patch from fdroidserver import verify - TEST_APP_ENTRY = { "1539780240.3885746": { "local": {