1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-09-21 04:10:37 +02:00

Compare commits

..

235 Commits

Author SHA1 Message Date
proletarius101
8ec3a2a3db
chore(deploy): cleanup code 2024-06-04 22:04:38 +08:00
proletarius101
8caee19dd6
fix(deploy): fix errors introduced by merging 2024-06-04 22:02:11 +08:00
proletarius101
cb18d10197
feat(deploy): add index-only mode to the rclone deployment method 2024-06-04 21:18:31 +08:00
proletarius101
4c0e096a99
chore(deploy): rename index_only variable to is_index_only for Python idiomaticness 2024-06-04 20:57:15 +08:00
proletarius101
b48e297ec2
chore(deploy): clean up code 2024-06-04 20:56:10 +08:00
proletarius101
9244189ce5
fix(deploy): remove the --index-only flag 2024-06-04 20:56:10 +08:00
proletarius101
b164241026
fix(deploy): $GIT_MIRROR/fdroid/repo/com.politedroid_6.apk doesn't exist when the test is finished 2024-06-04 20:55:50 +08:00
proletarius101
f27ecd1674
style(deploy): rename working_dir_root variable to workspace_dir 2024-06-04 20:55:50 +08:00
proletarius101
f321f62904
style(deploy): fix pyflake 2024-06-04 20:55:01 +08:00
proletarius101
01990411c7
fix(deploy): all files are uploaded if the index only mode deployment follows a full mode one
switch the branch before rsyncing
2024-06-04 20:55:01 +08:00
proletarius101
77c3f83fd7
chore(deploy): convert print to logging for in-order output 2024-06-04 20:55:01 +08:00
proletarius101
5ff6cdd53b
fix(deploy): all files are uploaded if the index only mode deployment follows a full mode one
create new branches from groud up
2024-06-04 20:55:01 +08:00
proletarius101
b74c848d6e
fix(deploy): all files are uploaded if the index only mode deployment follows a full mode one
let rsync only sync necessary files
2024-06-04 20:55:01 +08:00
proletarius101
bd2eaa5868
fix(deploy): all files are uploaded if the index only mode deployment follows a full mode one 2024-06-04 20:54:36 +08:00
proletarius101
c190b7fb56
debug 2024-06-04 20:54:36 +08:00
proletarius101
9c30b087c4
fix(deploy): fatal: A branch named 'full' already exists. 2024-06-04 20:54:36 +08:00
proletarius101
4941e699df
test(deploy): make sure the APK file is not uploaded in the index only mode 2024-06-04 20:54:36 +08:00
proletarius101
04987a021b
fix(deploy): local files are not synced to the local git repo 2024-06-04 20:54:36 +08:00
proletarius101
e8e8f8b9f0
fix(deploy): remove unnecessary additional initial commit
and fix the test error: https://gitlab.com/proletarius101/fdroidserver/-/jobs/6997355250#L6978
2024-06-04 20:53:54 +08:00
proletarius101
d619fbff26
chore(deploy): list all files in the local git repo 2024-06-04 20:53:54 +08:00
proletarius101
0e3bd6f63e
fix(deploy): files are not pushed to the remote 2024-06-04 20:53:54 +08:00
proletarius101
d1c881e2c3
test(deploy): fix fdroidserver.deploy.options is None 2024-06-04 20:53:54 +08:00
proletarius101
097f81a565
test(deploy): fix errors 2024-06-04 20:53:40 +08:00
proletarius101
abf4c93a7b
fix(deploy): don't recreate the branches 2024-06-04 20:53:40 +08:00
proletarius101
0e781913b8
fix: No such file or directory: 'repo/entry.jar' 2024-06-04 20:52:47 +08:00
proletarius101
7bfcb21ba6
test 2024-06-04 20:52:47 +08:00
proletarius101
1331d089ce
test 2024-06-04 20:52:47 +08:00
proletarius101
cda322445f
test 2024-06-04 20:52:47 +08:00
proletarius101
0eefa6fbe5
test 2024-06-04 20:52:47 +08:00
proletarius101
2f37cfb9a2
test 2024-06-04 20:52:47 +08:00
proletarius101
b4cfbd26e9
fix(deploy): align the config naming 2024-06-04 20:52:47 +08:00
proletarius101
1d8f404ef1
test 2024-06-04 20:52:47 +08:00
proletarius101
dbd6e4237e
test 2024-06-04 20:52:47 +08:00
proletarius101
2bc584d442
test 2024-06-04 20:52:47 +08:00
proletarius101
4689da8d08
test 2024-06-04 20:52:47 +08:00
proletarius101
4c32be112c
test 2024-06-04 20:52:47 +08:00
proletarius101
d30e7a0169
fix(deploy): error: The branch 'full' is not fully merged. 2024-06-04 20:52:47 +08:00
proletarius101
fcba5a4227
fix(deploy): error: The following untracked working tree files would be overwritten by checkout 2024-06-04 20:52:47 +08:00
proletarius101
fd7adaa61f
fix: no files are uploaded 2024-06-04 20:52:47 +08:00
proletarius101
bc2838829b
fix(deploy): Reference at 'refs/heads/full' does already exist 2024-06-04 20:52:47 +08:00
proletarius101
489944a503
fix: index only mode setting doesn't work if it follows a full mode config 2024-06-04 20:52:47 +08:00
proletarius101
3e67622736
fix: index only mode setting doesn't work if it follows a full mode config 2024-06-04 20:52:47 +08:00
Hans-Christoph Steiner
4acab21d81
fix: avoid making the parent directory redundantly in test case 2024-06-04 20:52:39 +08:00
proletarius101
ca5e9a089c
lint: fix pydocstyle 2024-06-04 20:52:39 +08:00
proletarius101
99a3823621
fix: ModuleNotFoundError 2024-06-04 20:52:39 +08:00
proletarius101
76432199be
lint: fix black formatting 2024-06-04 20:52:39 +08:00
proletarius101
df28c1e6c3
fix(deploy): remove the index-only mode from elsewhere except the config file
To enable per-remote configuration
2024-06-04 20:52:39 +08:00
proletarius101
0ea0a3de78
style: fix lint 2024-06-04 20:49:35 +08:00
proletarius101
f2fcfeabe5
style: fix lint 2024-06-04 20:49:35 +08:00
proletarius101
a4247eea0d
style: fix lint 2024-06-04 20:49:35 +08:00
proletarius101
221739b653
refactor: use _get_index_file_paths() instead of this mix of --include/--exclude 2024-06-04 20:49:07 +08:00
proletarius101
c7574037a9
refactor: remove the support of the index only mode when syncing to the local filesystem 2024-06-04 20:45:22 +08:00
proletarius101
359661a332
chore: revert repository vscode settings 2024-06-04 20:43:47 +08:00
proletarius101
cc75f2f9a4
feat(deploy): add index only mode in update_servergitmirrors 2024-06-04 20:43:47 +08:00
proletarius101
e22f7e52a8
style(deploy): remove unused imports 2024-06-04 20:43:03 +08:00
proletarius101
7840d0dc35
style(deploy): fix pydocstyle errors 2024-06-04 20:43:03 +08:00
proletarius101
1f3f02765d
test(deploy): add test cases for update_awsbucket_libcloud and fix errors 2024-06-04 20:43:03 +08:00
proletarius101
91cf352b96
test(deploy): add test cases for update_awsbucket_s3cmd 2024-06-04 20:43:03 +08:00
proletarius101
5e3b474a1c
fix(deploy): add test cases for local copy mode and fix issues 2024-06-04 20:43:03 +08:00
proletarius101
160c23a547
fix(deploy): add test cases for server webroot mode and fix issues 2024-06-04 20:40:34 +08:00
proletarius101
2b6542b231
fix(deploy): restore accidentally removed code 2024-06-04 20:39:38 +08:00
proletarius101
742381a923
test(deploy): properly test non-index-only mode 2024-06-04 20:38:44 +08:00
proletarius101
3b58c386a4
fix(deploy): fix typo 2024-06-04 20:38:07 +08:00
proletarius101
7071cc6f6d
feat(deploy): support the index-only option when syncing from/to local copies 2024-06-04 20:37:45 +08:00
proletarius101
3ec997d58e
feat(deploy): support index-only mode in libcloud 2024-06-04 20:36:33 +08:00
proletarius101
bd62007b54
feat(deploy): support --index-only option for serverwebroot deployments 2024-06-04 20:35:40 +08:00
proletarius101
2c361f6cee
refactor: revert changes to the full sync mode for s3cmd 2024-06-04 20:34:37 +08:00
proletarius101
1cf0185508
feat(update_awsbucket_s3cmd): support the index-only flag 2024-06-04 20:34:00 +08:00
proletarius101
3dee7e915d
feat: add --index-only flag 2024-06-04 20:33:05 +08:00
Hans-Christoph Steiner
f50e5a806d Merge branch 'switching-s3cmd-for-rclone' into 'master'
Adding rclone as an option to fdroid deploy

Closes #1095

See merge request fdroid/fdroidserver!1095
2024-05-29 14:08:07 +00:00
paul mayero
7aabfbcbf0 Adding rclone as an option to fdroid deploy 2024-05-29 14:08:07 +00:00
Hans-Christoph Steiner
eadbf06d48 Merge branch 'licaon-kter-master-patch-05845' into 'master'
Fix more tests after !1487

See merge request fdroid/fdroidserver!1488
2024-05-23 08:30:36 +00:00
Licaon_Kter
feafe2812d Fix more tests after !1487 2024-05-22 13:40:27 +00:00
Hans-Christoph Steiner
b3748aa3f1 Merge branch 'scannerid' into 'master'
scanner - pickup by id, sort list

See merge request fdroid/fdroidserver!1487
2024-05-22 09:26:13 +00:00
Licaon_Kter
98f935493e fix test cases 2024-05-22 09:25:49 +00:00
Licaon_Kter
df97ebe052 scanner - pickup by id, sort list 2024-05-22 09:25:49 +00:00
Hans-Christoph Steiner
18c9bc6e01 Merge branch 'sdkmanager-bookworm-backports' into 'master'
buildserver: use sdkmanager from backports

See merge request fdroid/fdroidserver!1475
2024-05-20 18:36:40 +00:00
Hans-Christoph Steiner
afb9b7570e buildserver: use sdkmanager from backports 2024-05-20 18:36:33 +00:00
Hans-Christoph Steiner
25b1a77424
fix merge conflict with https://hosted.weblate.org/projects/f-droid/fdroidserver/ 2024-05-14 12:22:56 +02:00
Hans-Christoph Steiner
4c0fa1d0a9 Merge branch 'update-pot' into 'master'
make -C locale update

See merge request fdroid/fdroidserver!1484
2024-05-13 12:10:49 +00:00
Hans-Christoph Steiner
c37a26bcd2
make -C locale update 2024-05-13 13:59:52 +02:00
Hans-Christoph Steiner
b45b31b927
version 2.3 alpha 1 2024-05-13 10:45:09 +02:00
Hans-Christoph Steiner
2f148b4407 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1483
2024-05-13 08:44:31 +00:00
Hans-Christoph Steiner
6bebd8b160
safety: ignore CVE-2018-20225, should never affect fdroidserver
https://data.safetycli.com/v/67599/97c
2024-05-13 10:33:37 +02:00
Fjuro
7e1b2e0788 Translated using Weblate: Czech (cs) by Fjuro <fjuro@alius.cz>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:52 +02:00
Random
34dd9a75e4 Translated using Weblate: Italian (it) by Random <random-r@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/it/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:43 +02:00
ALoLo_527
f6235831ae Translated using Weblate: Chinese (Simplified) (zh_Hans) by ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>
Currently translated at 82.0% (453 of 552 strings)

Co-authored-by: ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:35 +02:00
Oğuz Ersen
99841bf7c5 Translated using Weblate: Turkish (tr) by Oğuz Ersen <oguz@ersen.moe>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/
Translation: F-Droid/F-Droid Server
2024-05-13 10:25:03 +02:00
Agnieszka C
c7f1bdd14c Translated using Weblate: Polish (pl) by Agnieszka C <aga_04@o2.pl>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Agnieszka C <aga_04@o2.pl>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/
Translation: F-Droid/F-Droid Server
2024-05-13 10:24:56 +02:00
gallegonovato
25278801de Translated using Weblate: Spanish (es) by gallegonovato <fran-carro@hotmail.es>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/es/
Translation: F-Droid/F-Droid Server
2024-05-13 10:24:45 +02:00
Michael Pöhn
8d9c048505 Merge branch 'config-options-as-module-level-variables' into 'master'
clarify that 'config' and 'options' should only be module-level variables

See merge request fdroid/fdroidserver!1477
2024-05-08 14:47:49 +00:00
Hans-Christoph Steiner
64c9154fff
gitlab-ci: fix macOS job after !1466 2024-05-08 16:36:21 +02:00
Hans-Christoph Steiner
5745ed4753 common: only try to delete .testfiles dir if it exists
Otherwise, some tests fail with an error.
2024-05-08 16:28:14 +02:00
Hans-Christoph Steiner
18f3acc32e split out options from read_config()
There is no longer any reason for these to be intertwined.

This deliberately avoids touching some files as much as possible because
they are super tangled and due to be replaced.  Those files are:

* fdroidserver/build.py
* fdroidserver/update.py

# Conflicts:
#	tests/testcommon.py

# Conflicts:
#	fdroidserver/btlog.py
#	fdroidserver/import_subcommand.py
2024-05-08 16:26:46 +02:00
Hans-Christoph Steiner
685efa23d4 import: always load testcommon from localmodule
Having this import before sys.path.insert() made it load testcommon from
the Debian package.
2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
1e5699e90c remove all references to optparse (deprecated since Python 3.2) 2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
717df09be0 clarify that config/options can be global or module-level variable 2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
92a3f4b191 rename local variable to stop overwriting global options
This fixes a bug where if smartcardoptions is set as a str in config.yml
will overwrite all command line options.

a4d069862
fdroidserver!1106
2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
1eaba25021 common: do not use module reference for local functions
This just makes things more confusing.
2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
8208841460 common: make explicit which test cases need mocked options 2024-05-08 16:19:27 +02:00
Hans-Christoph Steiner
660f8756e5 Merge branch 'docstrings' into 'master'
docstrings and code format from !1436

See merge request fdroid/fdroidserver!1482
2024-05-08 13:55:10 +00:00
Gregor Düster
dbdefe200c Format files with ruff 2024-05-08 15:41:51 +02:00
Gregor Düster
df27405d8b [build] Add more docstrings 2024-05-08 15:35:28 +02:00
Gregor Düster
1c70758940 [btlog] Add more docstrings 2024-05-08 15:31:43 +02:00
Gregor Düster
4109e8fb03 [checkupdates] Add module docstring 2024-05-08 15:31:38 +02:00
Gregor Düster
97346a2cba [nightly] Add more docstrings 2024-05-08 15:31:32 +02:00
Gregor Düster
6c27fec94b [import] Add more docstrings 2024-05-08 15:31:29 +02:00
Michael Pöhn
5d8c6b8cd5 Merge branch 'fix-ubuntu-ppa-job' into 'master'
Fix ubuntu ppa job

See merge request fdroid/fdroidserver!1481
2024-05-08 13:17:23 +00:00
Hans-Christoph Steiner
9f62445f38 gitlab-ci: fix ubuntu_lts_ppa job to work with Ubuntu/noble 2024-05-08 13:16:00 +00:00
Michael Pöhn
80705579c2 Merge branch 'getcert' into 'master'
get_first_signer_certificate: check all v1 v2 and v3 certs

Closes #1128

See merge request fdroid/fdroidserver!1466
2024-05-08 13:14:05 +00:00
Hans-Christoph Steiner
ad9f0a9022 include @obfusk's proof-of-concept APKs in test suite
https://github.com/obfusk/fdroid-fakesigner-poc/releases/tag/poc-apks
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
fc4a9c96a5 test APK signatures with a cert chain are parsed like apksigner
Microsoft and SanDisk sign APKs with a X.509 certificate chain of
trust, so there are actually three certificates included. apksigner
only cares about one certificate and ignores the other certificates in
the chain.

The correct values come from:

    apksigner verify --print-certs 883cbdae7aeb2e4b122e8ee8d89966c7062d0d49107a130235fa220a5b994a79.apk

X.509 certificates are machine generated and just data, so are not
copyrightable.  So I included SANAPPSI.* directly.
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
accdd65f91 also handle APKs entirely without JAR/v1 signatures
future-proofing!
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
9a327b5097 reliable implementation of get_first_signer_certificate()
This keeps key pieces of @linsui's algorithm, specifically the check
that all certificates are the same.  apksigner also does this check.

closes #1128
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
a8fd360a88 skip AndroidManifest.xml and resources when fetching v2+ certs 2024-05-07 16:22:59 +02:00
FC (Fay) Stegerman
6f5fd2b132 PoC + writeup + patch
6c6dc25112/fdroidserver.patch (L28)

https://github.com/androguard/androguard/issues/1030
refs #1128

(this is an excerpt of the original patch)
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
312f822764 androguard is required, stop using use_androguard() 2024-05-07 16:22:59 +02:00
linsui
2fea71a6c7 get_first_signer_certificate: check all v1 v2 and v3 certs 2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
93f361c623 replace decade old pyasn1 crypto impl with working asn1crypto
For some APKs, get_certificate() was returning a different result than
apksigner and keytool.  So I just took the algorithm from androguard, which
uses asn1crypto instead of pyasn1.  So that removes a dependency as well.
asn1crypto is already required by androguard.

The original get_certificate() came from 6e2d0a9e1
2024-05-07 16:22:59 +02:00
Hans-Christoph Steiner
4666330a4d Merge branch 'gradlefile' into 'master'
throw error if gradle build method is used but no build.gradle file is found

See merge request fdroid/fdroidserver!1479
2024-05-07 14:14:26 +00:00
linsui
7104411296 throw error if gradle build method is used but no build.gradle file is found 2024-05-07 14:13:47 +00:00
Hans-Christoph Steiner
99bd544ab9 Merge branch 'fedora-40-ci-failure' into 'master'
make it easier to support the Fedora job

See merge request fdroid/fdroidserver!1474
2024-05-07 14:11:53 +00:00
Hans-Christoph Steiner
5df3d27126 gitlab-ci: stay on Fedora 39 until it is no longer supported
We can rely on the debian:testing job to test the bleeding edge, and it is
a lot easier to troubleshoot.

The Fedora job is a lot harder to troubleshoot than the Debian-based jobs,
and they are often quite bleeding edge.  Currently, there is a change to
either Python or an image processing lib (Pillow?) that now compresses PNGs
differently than all previous releases.  That breaks the tests based on
processing images and checking the SHA-256 matches.

70e7e720b9
fdroidserver!669
2024-05-07 12:58:23 +00:00
Hans-Christoph Steiner
1b65e33835 make it easy to keep test artifacts from jobs
When troubleshooting things that are difficult to reproduce locally, like
different behaviors in the fedora_latest job, these changes make it easy to
keep the test files around after the tests run.  For example, if PNGs are
processed differently by newer Python versions.
2024-05-07 12:58:23 +00:00
Hans-Christoph Steiner
299e3e5f4c index: handle image processing diffs across various Python versions
Apparently, the newest Python thingies strip the PNGs a tiny bit smaller,
so a fixed file size will lead to the test failing:

https://gitlab.com/fdroid/fdroidserver/-/jobs/6703386074
```
Traceback (most recent call last):
  File "/builds/fdroid/fdroidserver/tests/index.TestCase", line 704, in test_package_metadata
    self.assertEqual(36027, metadata['featureGraphic']['en-US']['size'])
AssertionError: 36027 != 35619
```
2024-05-07 12:58:23 +00:00
Hans-Christoph Steiner
1cb1394de3 Merge branch 'debugkey' into 'master'
lint: blocklist known AOSP debug keys in AASK

See merge request fdroid/fdroidserver!1478
2024-05-07 11:33:12 +00:00
Hans-Christoph Steiner
9a9b5beeaa simplify test setup
I'm in the midst of working towards getting rid of the "config" instances
that are in the subcommand module, e.g. `fdroidserver.lint.config`
2024-05-07 11:33:04 +00:00
Hans-Christoph Steiner
14c8647909 add additional tests 2024-05-07 11:33:04 +00:00
linsui
d243cbd030 lint: blocklist known AOSP debug keys in AASK 2024-05-07 11:33:04 +00:00
Michael Pöhn
08c553e1cb Merge branch 'deploy' into 'master'
deploy: retry when git push fails

See merge request fdroid/fdroidserver!1480
2024-05-06 06:36:58 +00:00
linsui
f82d648cb1 deploy: retry when git push fails 2024-05-05 20:53:35 +00:00
Michael Pöhn
79586fd9e3 Merge branch 'fix-icons-in-fdroid-mirror' into 'master'
mirror: apparently the 'icons' dir does not always exist

See merge request fdroid/fdroidserver!1476
2024-05-05 17:14:49 +00:00
Hans-Christoph Steiner
6f07538cdc mirror: apparently the 'icons' dir does not always exist
https://apt.izzysoft.de/fdroid/archive/com.futsch1.medtimer_28.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.hardbacknutter.nevertoomanybooks_75.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.jovial.jrpn15_20.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.jovial.jrpn2_20.apk:
2024-04-21 18:55:20 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.logger.app_8.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.lorenzovainigli.foodexpirationdates.foss_22.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.openathena_36.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.oppzippy.openscq30_21.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.sanmer.mrepo_713.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/com.starry.myne_325.apk:
2024-04-21 18:55:21 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/dev.imranr.obtainium_22602.apk:
2024-04-21 18:55:22 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/dev.sanmer.pi_137.apk:
2024-04-21 18:55:22 ERROR 404: Not Found.
https://apt.izzysoft.de/fdroid/archive/org.breezyweather_50108.apk:
2024-04-21 18:55:22 ERROR 404: Not Found.
2024-04-21 18:55:22,448 ERROR: no "icon" in org.breezyweather
2024-04-21 18:55:22,449 ERROR: no "icon" in com.lorenzovainigli.foodexpirationdates.foss
2024-04-21 18:55:22,449 ERROR: no "icon" in com.jovial.jrpn15
2024-04-21 18:55:22,450 ERROR: no "icon" in com.jovial.jrpn2
2024-04-21 18:55:22,450 ERROR: no "icon" in com.logger.app
2024-04-21 18:55:22,450 ERROR: no "icon" in com.futsch1.medtimer
2024-04-21 18:55:22,451 ERROR: no "icon" in com.sanmer.mrepo
2024-04-21 18:55:22,451 ERROR: no "icon" in com.starry.myne
2024-04-21 18:55:22,451 ERROR: no "icon" in com.hardbacknutter.nevertoomanybooks
2024-04-21 18:55:22,452 ERROR: no "icon" in dev.imranr.obtainium
2024-04-21 18:55:22,452 ERROR: no "icon" in com.openathena
2024-04-21 18:55:22,453 ERROR: no "icon" in com.oppzippy.openscq30
2024-04-21 18:55:22,453 ERROR: no "icon" in dev.sanmer.pi
2024-04-21 18:55:22,454 CRITICAL: Unknown exception found!
Traceback (most recent call last):
  File "/home/fdroid/code/fdroid/fdroidserver/fdroid", line 22, in <module>
    fdroidserver.__main__.main()
  File "/home/fdroid/code/fdroid/fdroidserver/fdroidserver/__main__.py", line 230, in main
    raise e
  File "/home/fdroid/code/fdroid/fdroidserver/fdroidserver/__main__.py", line 211, in main
    mod.main()
  File "/home/fdroid/code/fdroid/fdroidserver/fdroidserver/mirror.py", line 269, in main
    _run_wget(os.path.join(basedir, section, icondir), urls[icondir])
KeyError: 'icons'
2024-05-02 18:29:42 +02:00
Hans-Christoph Steiner
32ef77ecb6 Merge branch 'androguard-modernization' into 'master'
port to androguard >= 4 and drop support for older than 3.3.5

See merge request fdroid/fdroidserver!1462
2024-04-25 11:09:27 +00:00
Hans-Christoph Steiner
be59b38ac1 update: handle ValueError from apkInspector in androguard 4.1
androguard 4.1 uses a new lib called apkInspector instead of zipfile.ZipFile
so that it can handle usable but invalid ZIP files.  It will also throw
ValueError on some things, for example:

Traceback (most recent call last):
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/tests/update.TestCase", line 878, in test_scan_apk_bad_zip
    fdroidserver.update.scan_apk(apkfile)
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/fdroidserver/update.py", line 1586, in scan_apk
    scan_apk_androguard(apk, apk_file)
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/fdroidserver/update.py", line 1725, in scan_apk_androguard
    apkobject = common.get_androguard_APK(apkfile)
  File "/builds/eighthave/fdroidserver/fdroidserver-2.3a0/fdroidserver/common.py", line 2673, in get_androguard_APK
    return APK(apkfile)
  File "/usr/local/lib/python3.10/dist-packages/androguard/core/apk/__init__.py", line 273, in __init__
    self.zip = ZipEntry.parse(filename, False)
  File "/usr/local/lib/python3.10/dist-packages/apkInspector/headers.py", line 410, in parse
    eocd = EndOfCentralDirectoryRecord.parse(apk_file)
  File "/usr/local/lib/python3.10/dist-packages/apkInspector/headers.py", line 59, in parse
    raise ValueError("End of central directory record (EOCD) signature not found")
ValueError: End of central directory record (EOCD) signature not found
2024-04-25 13:00:23 +02:00
Hans-Christoph Steiner
ef4ec74882 some parts of androguard 4.x use loguru instead of logging 2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
1c84f63247 replace deprecated get_element() which was removed in 4.x
/usr/lib/python3/dist-packages/androguard/core/bytecodes/apk.py:884: DeprecationWarning: This method is deprecated since 3.3.5.

It was added in 3.3.5.  Debian/bullseye and Ubuntu/20.04/focal both include
new enough versions.  Debian/buster's is too old (3.3.3).
2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
5b7abc0423 single function to tame androguard's verbose default output
# Conflicts:
#	fdroidserver/common.py
2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
7a144a4762 port to androguard >= 4 and drop support for older than 3.3.3
This also makes androguard a hard requirement, which has been true for a
while anyway.  So the code that handles androguard as an optional
requirement is removed.  androguard from Debian/buster is new enough, so
this does not seem like it will cause any problems.
2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
cdc7c98707 common.get_androguard_APK() is no longer private to the module 2024-04-25 12:39:12 +02:00
Hans-Christoph Steiner
a742df3758
add CHANGELOG entry for v2.2.2 2024-04-25 12:39:00 +02:00
Hans-Christoph Steiner
e45e37b2df Merge branch 'altstore-index-fix' into 'master'
🐛 index fix: skip altstore when no IPAs present

See merge request fdroid/fdroidserver!1473
2024-04-24 12:05:03 +00:00
Michael Pöhn
005a33732c apply review suggestions 2024-04-24 11:56:07 +00:00
Michael Pöhn
bd6afa4365
🐛 index fix: skip altstore when no IPAs present 2024-04-24 12:45:29 +02:00
Hans-Christoph Steiner
07929ffe66 Merge branch 'black' into 'master'
move fdroidserver/deploy.py to black format

See merge request fdroid/fdroidserver!1472
2024-04-24 08:51:46 +00:00
Hans-Christoph Steiner
79f148167a deploy: automatically convert to black format 2024-04-24 08:42:15 +00:00
Hans-Christoph Steiner
cb04d801d8 deploy: manually move hard cases to black code format 2024-04-24 08:42:15 +00:00
Hans-Christoph Steiner
eacfb8095b Merge branch 'alt-store' into 'master'
iOS metadata + alt-store source support

See merge request fdroid/fdroidserver!1465
2024-04-24 08:39:05 +00:00
Hans-Christoph Steiner
9716b5e1ab index: manual black format 2024-04-24 10:29:50 +02:00
Michael Pöhn
d00a87ed6c
🏏 alt-store index: incorporate review feedback 2024-04-23 17:28:30 +02:00
Michael Pöhn
f2118b35a3
🏟️ fix ci 2024-04-23 16:06:10 +02:00
Michael Pöhn
45efb88f85
🕴️ add test for make_altstore 2024-04-23 16:05:58 +02:00
Michael Pöhn
86db8c93cc
🩹 fix parse_ipa tests 2024-04-23 16:05:47 +02:00
Michael Pöhn
f742799a9d
🏟️ add test for _parse_from_pbxproj
Also fix lint issues
2024-04-23 16:05:34 +02:00
Michael Pöhn
450765490b
🗺️ add test for _get_ipa_ico 2024-04-23 16:05:22 +02:00
Michael Pöhn
a21ed39117
🛻 move alstore index function
Move function for generating altstore index from update.py to index.py
2024-04-23 16:05:10 +02:00
Michael Pöhn
301f0c8273
🍎 altstore: implement ipa entitlement parser
This adds a parser for reading entitlement values from .ipa files.
Entitlement values are stored in files called
'.../embedded.mobileprovision' packed into .ipa files. These are CMS
signed plist files.

https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax

This also ignores the 2 non-optional entitlements, as mentioned in
altstore docs:

https://faq.altstore.io/distribute-your-apps/make-a-source#entitlements-array-of-strings
2024-04-23 16:04:57 +02:00
Michael Pöhn
2658c22933
🖼️ altstore index screenshots and icons 2024-04-23 16:04:44 +02:00
Michael Pöhn
519c3c1fcf
👑 altstore index: add entitlement support 2024-04-23 16:04:31 +02:00
Michael Pöhn
93e7cc9092
📑 better alt-store index 2024-04-23 16:04:19 +02:00
Michael Pöhn
fb33ae58e2
🐑 naive alt-store support
Naive shot at implementing alt store support. Might still be missing important
bits and pices I'm not aware of.
2024-04-23 16:04:07 +02:00
Hans-Christoph Steiner
e24640da85 Merge branch 'weblate' into 'master'
weblate

See merge request fdroid/fdroidserver!1470
2024-04-10 14:03:35 +00:00
Hans-Christoph Steiner
1fa376a9dc CheckUpdates should be called checkupdates
"checkupdates" is an fdroid subcommand, e.g. `fdroid checkupdates`, and it
is always spelled all lower case.

sed -i 's,CheckUpdates,checkupdates,g' fdroidserver/*.py locale/*/LC_MESSAGES/fdroidserver.po
2024-04-10 15:50:26 +02:00
Hans-Christoph Steiner
6ab1fd9945 fix UpdateCheckMode string in lint
sed -i "s/UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet/UpdateCheckMode is set but it looks like checkupdates hasn't been run yet./g" locale/*/LC_MESSAGES/fdroidserver.po
2024-04-10 15:50:26 +02:00
Hans-Christoph Steiner
443973c6f1 Translated using Weblate: Romanian (ro) by Hans-Christoph Steiner <hans@guardianproject.info>
Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Hungarian (hu) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 57.6% (318 of 552 strings)

Translated using Weblate: Korean (ko) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 32.7% (181 of 552 strings)

Translated using Weblate: French (fr) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Tibetan (bo) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 53.4% (295 of 552 strings)

Translated using Weblate: Chinese (Traditional) (zh_Hant) by Hans-Christoph Steiner <hans@guardianproject.info>

Currently translated at 66.8% (369 of 552 strings)

Co-authored-by: Hans-Christoph Steiner <hans@guardianproject.info>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/bo/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/
Translation: F-Droid/F-Droid Server
2024-04-10 15:50:26 +02:00
VfBFan
954c136506 Translated using Weblate: German (de) by VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/de/
2024-04-10 15:50:26 +02:00
Alexander Ivanov
4e491830cc Translated using Weblate: Russian (ru) by Alexander Ivanov <saiv46.dev@gmail.com>
Currently translated at 100.0% (552 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/
2024-04-10 15:50:26 +02:00
Besnik Bleta
a90191949d Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 97.1% (536 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
2024-04-10 15:50:26 +02:00
Besnik Bleta
e8a980ea9c Translated using Weblate: Albanian (sq) by Besnik Bleta <besnik@programeshqip.org>
Currently translated at 94.5% (522 of 552 strings)

Translation: F-Droid/F-Droid Server
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/
2024-04-10 15:50:26 +02:00
Simona Iacob
0d12b5ffba Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>
Currently translated at 100.0% (552 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 99.6% (550 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 99.0% (547 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 98.5% (544 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 98.3% (543 of 552 strings)

Translated using Weblate: Romanian (ro) by Simona Iacob <s@zp1.net>

Currently translated at 97.2% (537 of 552 strings)

Co-authored-by: Simona Iacob <s@zp1.net>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2024-04-10 15:50:10 +02:00
Licaon Kter
b08ae68706 Translated using Weblate: Romanian (ro) by Licaon Kter <licaon.kter@protonmail.com>
Currently translated at 96.7% (534 of 552 strings)

Co-authored-by: Licaon Kter <licaon.kter@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/
Translation: F-Droid/F-Droid Server
2024-04-10 15:50:10 +02:00
linsui
44f4317ff8 Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>
Currently translated at 80.4% (444 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 80.4% (444 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 80.2% (443 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 80.0% (442 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by linsui <linsui@inbox.lv>

Currently translated at 79.8% (441 of 552 strings)

Co-authored-by: linsui <linsui@inbox.lv>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-04-10 15:47:54 +02:00
David Jiang
98d880fe1c Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>
Currently translated at 80.4% (444 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 80.2% (443 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 80.0% (442 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 79.8% (441 of 552 strings)

Translated using Weblate: Chinese (Simplified) (zh_Hans) by David Jiang <david.jiang2024@gmail.com>

Currently translated at 79.7% (440 of 552 strings)

Co-authored-by: David Jiang <david.jiang2024@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/
Translation: F-Droid/F-Droid Server
2024-04-10 15:47:54 +02:00
Daniel Hejduk
6ba048d660 Translated using Weblate: Czech (cs) by Daniel Hejduk <jellymail@protonmail.com>
Currently translated at 100.0% (552 of 552 strings)

Co-authored-by: Daniel Hejduk <jellymail@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/
Translation: F-Droid/F-Droid Server
2024-04-10 15:40:59 +02:00
Hans-Christoph Steiner
d6bbebddbb Merge branch 'buymeacoffee' into 'master'
insert_funding_yml_donation_links: update lfx link and add polar

See merge request fdroid/fdroidserver!1469
2024-04-10 12:06:06 +00:00
linsui
d62b8cc2ed insert_funding_yml_donation_links: support polar 2024-04-10 18:58:27 +08:00
linsui
c23af7984c insert_funding_yml_donation_links: update lfx link
community_bridge is lfx_crowdfunding now
2024-04-10 18:58:27 +08:00
Hans-Christoph Steiner
18fe76ced9 Merge branch 'drop_version_lock_pyasn1' into 'master'
Drop version locking on pyasn1

See merge request fdroid/fdroidserver!1467
2024-04-10 09:30:49 +00:00
Jochen Sprickerhof
4389168588 Drop version locking on pyasn1
I did not find any reason for this.
2024-04-10 09:30:34 +00:00
Hans-Christoph Steiner
b53c498fcd Merge branch 'buymeacoffee' into 'master'
insert_funding_yml_donation_links: support buymeacoffee

See merge request fdroid/fdroidserver!1468
2024-04-10 09:25:59 +00:00
linsui
d9f59536cf insert_funding_yml_donation_links: support buymeacoffee 2024-04-10 15:01:27 +08:00
Hans-Christoph Steiner
6a84fe1ae8 Merge branch 'ios-metadata' into 'master'
support iOS fastlane metadata

See merge request fdroid/fdroidserver!1426
2024-04-03 15:04:54 +00:00
Michael Pöhn
b6482f19a6 🛣️ update: fix pathlib import 2024-04-03 14:55:35 +00:00
Michael Pöhn
6152abee08 🪀 tests for insert_localized_ios_app_metadata
Split some functions from insert_localized_ios_app_metadata into
sub-functions and implemented separate tests for each.
2024-04-03 14:55:35 +00:00
Michael Pöhn
bbf17ee59c 🧆 improve and test parse_ios_screenshot_name 2024-04-03 14:55:35 +00:00
Michael Pöhn
806a07b719 🫏 better variable name 2024-04-03 14:55:35 +00:00
Michael Pöhn
53185ea2e7 🫏 appeace linter 2024-04-03 14:55:35 +00:00
Michael Pöhn
293caf5ff9 🪪 iOS fastlane screenshot support 2024-04-03 14:55:35 +00:00
Michael Pöhn
c166a8a2b7 🪄 split screenshot ingestion into separate function 2024-04-03 14:55:35 +00:00
Michael Pöhn
c1500e4ca1 🗨 iOS text metadata support
This change adds basic i18n support for parsing iOS fastlane metadata.
Currently supported:
 * name
 * subtitle (summary)
 * description
2024-04-03 14:55:35 +00:00
Hans-Christoph Steiner
d20e0adab4 Merge branch '1189-fdroid-link' into 'master'
Switch to generating fdroid.link links

Closes #1189

See merge request fdroid/fdroidserver!1459
2024-04-03 13:55:08 +00:00
Torsten Grote
faf1090214 Use fdroid.link for repo index page 2024-04-03 13:54:48 +00:00
Torsten Grote
be673c56cf Use fdroid.link for nightly README 2024-04-03 13:54:48 +00:00
Michael Pöhn
0ced053eaf Merge branch 'testOnly-check' into 'master'
check for <application android:testOnly="true">

See merge request fdroid/fdroidserver!1463
2024-04-03 13:49:47 +00:00
Hans-Christoph Steiner
9c65bed4a5 check for <application android:testOnly="true">
This adds a check for "testOnly" to the existing "debuggable" check, since
they are very similar.  We should really be refactoring all the checks into
a more reasonable setup.  Since "debuggable" and "testOnly" are both set in
the same place (`<application>` in _AndroidManifest.xml_) and are both set
by the same process (running debug builds), I thought it would be OK to
include both in the same place.  Plus it was a one-line change.
2024-04-03 13:47:04 +00:00
Michael Pöhn
0cf1749ec3 Merge branch 'publish-error-on-failed' into 'master'
publish: --error-on-failed to exit when signing/verifying fails

See merge request fdroid/fdroidserver!1464
2024-04-03 13:42:30 +00:00
Hans-Christoph Steiner
e269e41b12
publish: --error-on-failed to exit when signing/verifying fails
Since we have limited visibility into @CiaranG's signing server, it is hard
to make changes to the publishing process, especially ones that might break
@CiaranG's automation.  So `fdroid publish` mostly reports success by
moving an APK from unsigned/ to repo/.  In some cases, we want immediate
failure, like in CI.  So this adds `--error-on-failed` for that purpose.
2024-04-03 15:33:18 +02:00
Hans-Christoph Steiner
4c03082d14 Merge branch 'gradle' into 'master'
gradle 8.7

See merge request fdroid/fdroidserver!1460
2024-03-24 21:30:08 +00:00
linsui
1f28fce1ea gradle 8.7 2024-03-24 20:03:54 +08:00
Jochen Sprickerhof
6ab4b99a5f Merge branch 'jdk17' into 'master'
checkupdates: add a bookworm blocklist item

See merge request fdroid/fdroidserver!1458
2024-03-15 07:15:26 +00:00
linsui
082df1d9b6 checkupdates: add a bookworm blocklist item 2024-03-14 21:44:32 +08:00
Michael Pöhn
f7ca36a66b Merge branch 'appdirs' into 'master'
use appdirs to get easy cross-platform standard directories

See merge request fdroid/fdroidserver!1457
2024-03-14 12:44:10 +00:00
Hans-Christoph Steiner
6781525ddd use appdirs to get easy cross-platform standard directories
This is more important to get right now, with `fdroid install`, which
should work easily on all platforms.
2024-03-14 12:43:02 +00:00
Hans-Christoph Steiner
f003492574 Merge branch 'bookworm' into 'master'
Upgrade build server images to Bookworm

See merge request fdroid/fdroidserver!1439
2024-03-14 12:26:14 +00:00
proletarius101
ac4694fcd3
fix Could not initialize class org.codehaus.groovy.runtime.InvokerHelper
https://gitlab.com/proletarius101/fdroidserver/-/jobs/6068794117#L547
2024-03-14 13:14:41 +01:00
proletarius101
b20a14af09
fix unnecessary or invalid openjdk installation scripts 2024-03-14 13:14:41 +01:00
proletarius101
f2bdf5214a
install openjdk 11 from bullseye repo instead in the test cases 2024-03-14 13:14:41 +01:00
proletarius101
1bd35fc37f
upgrade basebox to 12.20231211.1 2024-03-14 13:14:41 +01:00
proletarius101
0a3f785254
drop gradle support before 7.3
debian bookworm supports only Java 17+, which is compatible with gradle 7.3+: https://docs.gradle.org/current/userguide/compatibility.html
2024-03-14 13:14:41 +01:00
proletarius101
a0a766cc8e
drop gradle support before 2.0
debian bullseye supports only Java 8+, which is compatible with gradle 2.0+: https://docs.gradle.org/current/userguide/compatibility.html
2024-03-14 13:14:41 +01:00
proletarius101
cf74ca5f56
update docker image tag 2024-03-14 13:14:41 +01:00
proletarius101
2fc9564ebe
use full base docker image 2024-03-14 13:14:40 +01:00
Licaon_Kter
5dc327e867
add missed file 2024-03-14 13:14:40 +01:00
Licaon_Kter
5733545972
fine tune purge 2024-03-14 13:14:40 +01:00
Licaon_Kter
27206162d4
Upgrade Buildserver VM to latest Debian (Bookworm) 2024-03-14 13:14:39 +01:00
Licaon_Kter
d31856b6c7
Upgrade Buildserver VM to latest Debian (Bookworm) 2024-03-14 13:14:35 +01:00
Licaon_Kter
f30dcf5069
Upgrade Buildserver VM to latest Debian (Bookworm) 2024-03-14 13:14:34 +01:00
Hans-Christoph Steiner
9105738427 Merge branch 'windows-path-split-fix' into 'master'
Fix path splitting error on Windows

See merge request fdroid/fdroidserver!1452
2024-03-13 19:46:08 +00:00
Sergey Zolotarev
6d71690946 Fix path splitting error on Windows 2024-03-13 19:44:44 +00:00
Hans-Christoph Steiner
980ff3c20a Merge branch 'fix_generic_whatsNew' into 'master'
Add unversioned whatsNew to index-v2 (Closes: #1202)

Closes #1202

See merge request fdroid/fdroidserver!1456
2024-03-13 18:11:00 +00:00
Jochen Sprickerhof
edb2d76e25
Add unversioned whatsNew to index-v2 (Closes: #1202)
copy_triple_t_store_metadata() can read the whatsNew from an unversioned
release-notes.txt. For v2 copy this to the latest build.
2024-03-13 06:40:33 +01:00
Hans-Christoph Steiner
b222275d77 Merge branch 'uri' into 'master'
scanner: update maven repo regex

See merge request fdroid/fdroidserver!1453
2024-03-12 07:57:11 +00:00
linsui
a002e46997 scanner: update maven repo regex 2024-03-12 07:57:11 +00:00
Hans-Christoph Steiner
07a0bd7314 Merge branch 'https-apt' into 'master'
gitlab-ci: always use HTTPS for apt repos

See merge request fdroid/fdroidserver!1450
2024-03-06 14:01:38 +00:00
Hans-Christoph Steiner
3560a2522a
gitlab-ci: docker:git has become stable, so switch to stable tag
When this job was implemented, it needed the "git" tag.  Now that it works,
still with the stable tag.
2024-03-06 14:51:19 +01:00
Hans-Christoph Steiner
7b45ea7898
gitlab-ci: always use HTTPS for apt repos
This has been in place in a number of other places and has proven stable,
so I'm introducing it here, since the "docker" job actually publishes
docker images that are publicly used.  So little painless security fixes
are worthwhile.
2024-03-06 14:50:51 +01:00
Hans-Christoph Steiner
2f556a9026 Merge branch 'net-install-tests' into 'master'
tests and code format from %"mirroring resilience" work

See merge request fdroid/fdroidserver!1451
2024-03-06 13:32:12 +00:00
Hans-Christoph Steiner
cff3364fdf split out mirrors data structure into standalone, tested function 2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
9749282b44 net: fix test_download_file_url_parsing
self.assertTrue(requests_get.called) will always be true because .called
will contain a MagicMock instance.
2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
7904f12d05 net: add test of automatic retries in download_file()
The existing logic from d1ddd525c in !1225 is confusing because it adds its
own retry loop on top of the retry mechanism that is built into requests.
So this test confirms that setting `download_file(retries=3)` actually
results in more than three retries.
2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
074dda4b61 use tiny entry.jar rather than large index-v1.jar for net test case 2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
261be20109 convert tests/testcommon.py to black code format 2024-03-06 13:31:46 +00:00
Hans-Christoph Steiner
617a9e75c7 convert install.py to black code format 2024-03-06 13:31:46 +00:00
Michael Pöhn
9dc14674f1 Merge branch 'nice-console-output' into 'master'
method to globally set logging to output nicely to the console

See merge request fdroid/fdroidserver!1449
2024-03-06 13:03:18 +00:00
Hans-Christoph Steiner
76d9eddb3a method to globally set logging to output nicely to the console
This will make all of the direct calls to logging level functions output
in a format that looks appropriate for the console. Previously, the default
output looked like it should be written to a log file.
2024-03-06 12:53:20 +00:00
128 changed files with 10867 additions and 1085 deletions

View File

@ -76,7 +76,13 @@ metadata_v0:
'Dpkg::Use-Pty "0";'
'quiet "1";'
>> /etc/apt/apt.conf.d/99gitlab
# 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:, ; }
- echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates
- apt-get update
- apt-get install ca-certificates
- rm /etc/apt/apt.conf.d/99nocacertificates
- apt-get dist-upgrade
@ -121,7 +127,7 @@ ubuntu_lts_ppa:
- export ANDROID_HOME=/usr/lib/android-sdk
- apt-get install gnupg
- while ! apt-key adv --keyserver keyserver.ubuntu.com --recv-key 9AAC253193B65D4DF1D0A13EEC4632C79C5E0151; do sleep 15; done
- export RELEASE=`sed -n 's,^deb [^ ][^ ]* \([a-z]*\).*,\1,p' /etc/apt/sources.list | head -1`
- export RELEASE=$(sed -n 's,^Suites\x3a \([a-z]*\).*,\1,p' /etc/apt/sources.list.d/*.sources | head -1)
- echo "deb http://ppa.launchpad.net/fdroid/fdroidserver/ubuntu $RELEASE main" >> /etc/apt/sources.list
- apt-get update
- apt-get dist-upgrade
@ -193,7 +199,7 @@ arch_pip_install:
# The gradlew-fdroid tests are isolated from the rest of the test
# suite, so they run as their own job.
gradlew-fdroid:
image: debian:bullseye-slim
image: debian:bookworm-slim
<<: *apt-template
only:
changes:
@ -279,9 +285,7 @@ black:
- black --check --diff --color $CI_PROJECT_DIR
fedora_latest:
image: fedora:latest
only:
- master@fdroid/fdroidserver
image: fedora:39 # support ends on 2024-11-12
script:
# tricks to hopefully make runs more reliable
- echo "timeout=600" >> /etc/dnf/dnf.conf
@ -358,14 +362,14 @@ macOS:
- /bin/bash -n gradlew-fdroid tests/run-tests
# TODO remove the packages below once they are included in the Homebrew package
- $(brew --prefix fdroidserver)/libexec/bin/python3 -m pip install biplist pycountry
- $(brew --prefix fdroidserver)/libexec/bin/python3 -m pip install biplist oscrypto pycountry
# test fdroidserver from git with current package's dependencies
- fdroid="$(brew --prefix fdroidserver)/libexec/bin/python3 $PWD/fdroid" ./tests/run-tests
gradle:
image: debian:bullseye
image: debian:bookworm-slim
<<: *apt-template
variables:
GIT_DEPTH: 1000
@ -463,7 +467,7 @@ fdroid build:
# fdroiddata because that one is known to work, and this is a CI job,
# so it should be isolated from the normal churn of fdroiddata.
plugin_fetchsrclibs:
image: debian:bullseye
image: debian:bookworm-slim
<<: *apt-template
only:
changes:
@ -507,7 +511,7 @@ plugin_fetchsrclibs:
# test a full update and deploy cycle to gitlab.com
servergitmirrors:
image: debian:bullseye-backports
image: debian:bookworm-slim
<<: *apt-template
only:
- master@fdroid/fdroidserver
@ -528,7 +532,7 @@ servergitmirrors:
python3-venv
rsync
wget
- apt-get install -t bullseye-backports apksigner
- apt-get install apksigner
- python3 -m venv --system-site-packages env
- . env/bin/activate
- export PYTHONPATH=`pwd`
@ -551,7 +555,7 @@ servergitmirrors:
- diff repo/index-v1.jar index-v1.jar
Build documentation:
image: debian:bookworm
image: debian:bookworm-slim
<<: *apt-template
script:
- apt-get install make python3-sphinx python3-numpydoc python3-pydata-sphinx-theme pydocstyle fdroidserver
@ -641,7 +645,7 @@ docker:
- buildserver/*
variables:
- $CI_COMMIT_BRANCH == "master" || $CI_PROJECT_NAMESPACE != "fdroid"
image: docker:git
image: docker:dind
services:
- docker:dind
variables:
@ -652,7 +656,7 @@ docker:
- cd buildserver
- docker build -t $TEST_IMAGE --build-arg GIT_REV_PARSE_HEAD=$(git rev-parse HEAD) .
- docker tag $TEST_IMAGE $RELEASE_IMAGE
- docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bullseye
- docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bookworm
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com
# This avoids filling up gitlab.com free tier accounts with unused docker images.
- if test -z "$FDROID_PUSH_DOCKER_IMAGE"; then
@ -662,4 +666,4 @@ docker:
exit 0;
fi
- docker push $RELEASE_IMAGE
- docker push $RELEASE_IMAGE-bullseye
- docker push $RELEASE_IMAGE-bookworm

View File

@ -20,3 +20,6 @@ security:
63687:
reason: Only affects Windows https://security-tracker.debian.org/tracker/CVE-2024-22190
expires: '2026-01-31'
67599:
reason: Only affects pip when using --extra-index-url, which is never the case in fdroidserver CI.
expires: '2026-05-31'

View File

@ -15,6 +15,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* The `maven:` field is now always a string, with `yes` as a legacy special
value. It is no longer treated like a boolean in any case.
## [2.2.2] - 2024-04-24
### Added
* Include sdkmanager as dep in setup.py for Homebrew package.
https://github.com/Homebrew/homebrew-core/pull/164510
## [2.2.1] - 2023-03-09
### Added

View File

@ -591,6 +591,11 @@ include tests/index.TestCase
include tests/init.TestCase
include tests/install.TestCase
include tests/IsMD5Disabled.java
include tests/issue-1128-min-sdk-30-poc.apk
include tests/issue-1128-poc1.apk
include tests/issue-1128-poc2.apk
include tests/issue-1128-poc3a.apk
include tests/issue-1128-poc3b.apk
include tests/janus.apk
include tests/keystore.jks
include tests/key-tricks.py
@ -723,6 +728,8 @@ include tests/repo/urzip-*.apk
include tests/repo/v1.v2.sig_1020.apk
include tests/rewritemeta.TestCase
include tests/run-tests
include tests/SANAPPSI.RSA
include tests/SANAPPSI.SF
include tests/scanner.TestCase
include tests/signatures.TestCase
include tests/signindex.TestCase

View File

@ -1,5 +1,5 @@
FROM debian:bullseye
FROM debian:bookworm
ENV LANG=C.UTF-8 \
DEBIAN_FRONTEND=noninteractive
@ -41,7 +41,7 @@ RUN printf "path-exclude=/usr/share/locale/*\npath-exclude=/usr/share/man/*\npat
&& mkdir -p /usr/share/man/man1 \
&& apt-get update \
&& apt-get install ca-certificates \
&& sed -i 's,http:,https:,' /etc/apt/sources.list \
&& sed -i 's,http:,https:,' /etc/apt/sources.list.d/debian.sources \
&& apt-get upgrade \
&& apt-get dist-upgrade \
&& apt-get install openssh-client iproute2 python3 openssh-server sudo \

View File

@ -35,7 +35,7 @@ Vagrant.configure("2") do |config|
config.cache.enable :chef
end
config.vm.box = "fdroid/bullseye64"
config.vm.box = "debian/bookworm64"
if not configfile.has_key? "vm_provider" or configfile["vm_provider"] == "virtualbox"
# default to VirtualBox if not set
@ -53,6 +53,8 @@ Vagrant.configure("2") do |config|
libvirt.uri = "qemu:///system"
libvirt.cpus = configfile["cpus"]
libvirt.memory = configfile["memory"]
# Debian Vagrant image is only 20G, so allocate more
libvirt.machine_virtual_size = 1024
if configfile.has_key? "libvirt_disk_bus"
libvirt.disk_bus = configfile["libvirt_disk_bus"]
end
@ -86,6 +88,12 @@ Vagrant.configure("2") do |config|
# necessary with 9p synced folders
Dir.mkdir('cache') unless File.exists?('cache')
# Root partition needs to be resized to the new allocated space
config.vm.provision "shell", inline: <<-SHELL
growpart -v -u auto /dev/vda 1
resize2fs /dev/vda1
SHELL
config.vm.provision "shell", name: "setup-env-vars", path: "setup-env-vars",
args: ["/opt/android-sdk"]
config.vm.provision "shell", name: "apt-get-install", path: "provision-apt-get-install",

View File

@ -39,28 +39,29 @@ if echo $debian_mirror | grep '^https' 2>&1 > /dev/null; then
fi
cat << EOF > /etc/apt/sources.list
deb ${debian_mirror} bullseye main
deb https://security.debian.org/debian-security bullseye-security main
deb ${debian_mirror} bullseye-updates main
deb ${debian_mirror} bookworm main
deb https://security.debian.org/debian-security bookworm-security main
deb ${debian_mirror} bookworm-updates main
EOF
echo "deb ${debian_mirror} bullseye-backports main" > /etc/apt/sources.list.d/backports.list
echo "deb ${debian_mirror} bookworm-backports main" > /etc/apt/sources.list.d/backports.list
apt-get update || apt-get update
# purge things that might come from the base box, but we don't want
# https://salsa.debian.org/cloud-team/debian-vagrant-images/-/tree/master/config_space/package_config
# cat config_space/package_config/* | sort -u | grep -v '[A-Z#]'
purge="
apt-listchanges
apt-utils
bash-completion
bind9-*
bsdextrautils
build-essential
bzip2
chrony
cloud-utils
cron
cron-daemon-common
dbus
debconf-i18n
debian-faq
@ -69,6 +70,7 @@ purge="
fdisk
file
groff-base
inetutils-telnet
krb5-locales
less
locales
@ -82,14 +84,13 @@ purge="
reportbug
rsyslog
tasksel
telnet
traceroute
unattended-upgrades
usrmerge
vim-*
wamerican
wget
whiptail
xxd
xz-utils
"
# clean up files packages to be purged, then purge the packages
@ -106,6 +107,7 @@ packages="
apksigner
default-jdk-headless
default-jre-headless
curl
dexdump
fdroidserver
git-svn
@ -114,8 +116,9 @@ packages="
patch
python3-packaging
rsync
sdkmanager
sdkmanager/bookworm-backports
sudo
unzip
"
apt-get install $packages --download-only

View File

@ -267,10 +267,20 @@
# sync_from_local_copy_dir: true
# To upload the repo to an Amazon S3 bucket using `fdroid server
# update`. Warning, this deletes and recreates the whole fdroid/
# directory each time. This prefers s3cmd, but can also use
# apache-libcloud. To customize how s3cmd interacts with the cloud
# To upload the repo to an Amazon S3 bucket using `fdroid deploy'
# . rclone, s3cmd and apache libcloud are the available options.
# If rclone and s3cmd are not installed, apache libcloud is used.
# To use apache libcloud, add the following options to this file
# (config.yml)
#
# awsbucket: myawsfdroid
# awsaccesskeyid: SEE0CHAITHEIMAUR2USA
# awssecretkey: {env: awssecretkey}
#
# In case s3cmd is installed and rclone is not installed,
# s3cmd will be the preferred sync option.
# It will delete and recreate the whole fdroid directory each time.
# To customize how s3cmd interacts with the cloud
# provider, create a 's3cfg' file next to this file (config.yml), and
# those settings will be used instead of any 'aws' variable below.
# Secrets can be fetched from environment variables to ensure that
@ -279,6 +289,47 @@
# awsbucket: myawsfdroid
# awsaccesskeyid: SEE0CHAITHEIMAUR2USA
# awssecretkey: {env: awssecretkey}
#
# In case rclone is installed and s3cmd is not installed,
# rclone will be the preferred sync option.
# It will sync the local folders with remote folders without
# deleting anything in one go.
# To ensure success, install rclone as per
# the instructions at https://rclone.org/install/ and also configure for
# object storage services as detailed at https://rclone.org/s3/#configuration
# By default rclone uses the configuration file at ~/.config/rclone/rclone.conf
# To specify a custom configuration file, please add the full path to the
# configuration file as below
#
# path_to_custom_rclone_config: /home/mycomputer/somedir/example.conf
#
# This setting will ignore the default rclone config found at
# ~/.config/rclone/rclone.conf
#
# Please note that rclone_config can be assigned a string or list
#
# awsbucket: myawsfdroid
# rclone_config: aws-sample-config
#
# or
#
# awsbucket: myawsfdroid
# rclone_config: [aws-sample-config, rclone-supported-service-config]
#
# In case both rclone and s3cmd are installed, the preferred sync
# tool can be specified in this file (config.yml)
# if s3cmd is preferred, set it as below
#
# s3cmd: true
#
# if rclone is preferred, set it as below
#
# rclone: true
#
# Please note that only one can be set to true at any time
# Also, in the event that both s3cmd and rclone are installed
# and both are missing from the config.yml file, the preferred
# tool will be s3cmd.
# If you want to force 'fdroid server' to use a non-standard serverwebroot.

View File

@ -23,12 +23,11 @@ def main():
help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"),
)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
common.options = options
options = common.parse_args(parser)
pkgs = common.read_pkg_args(options.appid, True)
allapps = metadata.read_metadata(pkgs)
apps = common.read_app_args(options.appid, allapps, True)
common.read_config(options)
common.read_config()
for appid, app in apps.items():
if "Builds" in app and len(app["Builds"]) > 0:

View File

@ -25,8 +25,8 @@ def main():
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
config = common.read_config(options)
common.parse_args(parser)
config = common.read_config()
destkeystore = config['keystore'].replace('.jks', '.p12').replace('/', '_')
exportkeystore = config['keystore'].replace('.jks', '.pem').replace('/', '_')
if os.path.exists(destkeystore) or os.path.exists(exportkeystore):

View File

@ -14,8 +14,8 @@ fdroid_summary = 'export the keystore in standard PEM format'
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
config = common.read_config(options)
common.parse_args(parser)
config = common.read_config()
env_vars = {'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass'],
'FDROID_KEY_PASS': config['keypass']}

View File

@ -12,8 +12,8 @@ fdroid_summary = 'export the keystore in standard PEM format'
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
common.config = common.read_config(options)
common.parse_args(parser)
common.read_config()
pubkey, repo_pubkey_fingerprint = index.extract_pubkey()
print('repo_pubkey = "%s"' % pubkey.decode())

View File

@ -18,12 +18,11 @@ def main():
common.setup_global_opts(parser)
parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
common.options = options
options = common.parse_args(parser)
pkgs = common.read_pkg_args(options.appid, True)
allapps = metadata.read_metadata(pkgs)
apps = common.read_app_args(options.appid, allapps, True)
common.read_config(options)
common.read_config()
srclib_dir = os.path.join('build', 'srclib')
os.makedirs(srclib_dir, exist_ok=True)
srclibpaths = []

View File

@ -11,8 +11,8 @@ fdroid_summary = 'import the local keystore into a SmartCard HSM'
def main():
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
config = common.read_config(options)
common.parse_args(parser)
config = common.read_config()
env_vars = {
'LC_ALL': 'C.UTF-8',
'FDROID_KEY_STORE_PASS': config['keystorepass'],

View File

@ -182,7 +182,7 @@ def main():
"can not be specified at the same time."))
sys.exit(1)
# Trick optparse into displaying the right usage when --help is used.
# Trick argparse into displaying the right usage when --help is used.
sys.argv[0] += ' ' + command
del sys.argv[1]

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Update the binary transparency log for a URL."""
#
# btlog.py - part of the FDroid server tools
# Copyright (C) 2017, Hans-Christoph Steiner <hans@eds.org>
@ -26,7 +27,6 @@
# client app so its not easy for the server to distinguish this from
# the F-Droid client.
import collections
import defusedxml.minidom
import git
@ -39,6 +39,7 @@ import shutil
import tempfile
import zipfile
from argparse import ArgumentParser
from typing import Optional
from . import _
from . import common
@ -46,18 +47,31 @@ from . import deploy
from .exception import FDroidException
options = None
def make_binary_transparency_log(
repodirs, btrepo='binary_transparency', url=None, commit_title='fdroid update'
repodirs: collections.abc.Iterable,
btrepo: str = 'binary_transparency',
url: Optional[str] = None,
commit_title: str = 'fdroid update',
):
"""Log the indexes in a standalone git repo to serve as a "binary transparency" log.
References
Parameters
----------
https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies
repodirs
The directories of the F-Droid repository to generate the binary
transparency log for.
btrepo
The path to the Git repository of the binary transparency log.
url
The URL of the F-Droid repository to generate the binary transparency
log for.
commit_title
The commit title for commits in the binary transparency log Git
repository.
Notes
-----
Also see https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies .
"""
logging.info('Committing indexes to ' + btrepo)
if os.path.exists(os.path.join(btrepo, '.git')):
@ -149,8 +163,17 @@ For more info on this idea:
def main():
global options
"""Generate or update a binary transparency log for a F-Droid repository.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If the specified or default Git repository does not exist.
"""
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument(
@ -169,7 +192,7 @@ def main():
default=None,
help=_("Push the log to this git remote repository"),
)
options = parser.parse_args()
options = common.parse_args(parser)
if options.verbose:
logging.getLogger("requests").setLevel(logging.INFO)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Build a package from source."""
#
# build.py - part of the FDroid server tools
# Copyright (C) 2010-2014, Ciaran Gultnieks, ciaran@ciarang.com
@ -59,15 +60,30 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
Parameters
----------
app
app metadata dict
The metadata of the app to build.
build
The build of the app to build.
vcs
version control system controller object
The version control system controller object of the app.
build_dir
local source-code checkout of app
The local source-code checkout directory of the app.
output_dir
target folder for the build result
The target folder for the build result.
log_dir
The directory in the VM where the build logs are getting stored.
force
Don't refresh the already cloned repository and make the build stop on
exceptions.
Raises
------
:exc:`~fdroidserver.exception.BuildException`
If Paramiko is not installed, a srclib directory or srclib metadata
file is unexpectedly missing, the build process in the VM failed or
output files of the build process are missing.
:exc:`~fdroidserver.exception.FDroidException`
If the Buildserver ID could not be obtained or copying a directory to
the server failed.
"""
global buildserverid, ssh_channel
@ -115,8 +131,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
# Put all the necessary files in place...
ftp.chdir(homedir)
# Helper to copy the contents of a directory to the server...
def send_dir(path):
"""Copy the contents of a directory to the server."""
logging.debug("rsyncing %s to %s" % (path, ftp.getcwd()))
# TODO this should move to `vagrant rsync` from >= v1.5
try:
@ -316,6 +332,15 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
def force_gradle_build_tools(build_dir, build_tools):
"""Manipulate build tools version used in top level gradle file.
Parameters
----------
build_dir
The directory to start looking for gradle files.
build_tools
The build tools version that should be forced to use.
"""
for root, dirs, files in os.walk(build_dir):
for filename in files:
if not filename.endswith('.gradle'):
@ -342,6 +367,31 @@ def get_metadata_from_apk(app, build, apkfile):
"""Get the required metadata from the built APK.
VersionName is allowed to be a blank string, i.e. ''
Parameters
----------
app
The app metadata used to build the APK.
build
The build that resulted in the APK.
apkfile
The path of the APK file.
Returns
-------
versionCode
The versionCode from the APK or from the metadata is build.novcheck is
set.
versionName
The versionName from the APK or from the metadata is build.novcheck is
set.
Raises
------
:exc:`~fdroidserver.exception.BuildException`
If native code should have been built but was not packaged, no version
information or no package ID could be found or there is a mismatch
between the package ID in the metadata and the one found in the APK.
"""
appid, versionCode, versionName = common.get_apk_id(apkfile)
native_code = common.get_native_code(apkfile)
@ -362,7 +412,56 @@ def get_metadata_from_apk(app, build, apkfile):
def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, extlib_dir, tmp_dir, force, onserver, refresh):
"""Do a build locally."""
"""Do a build locally.
Parameters
----------
app
The metadata of the app to build.
build
The build of the app to build.
vcs
The version control system controller object of the app.
build_dir
The local source-code checkout directory of the app.
output_dir
The target folder for the build result.
log_dir
The directory in the VM where the build logs are getting stored.
srclib_dir
The path to the srclibs directory, usually 'build/srclib'.
extlib_dir
The path to the extlibs directory, usually 'build/extlib'.
tmp_dir
The temporary directory for building the source tarball.
force
Don't refresh the already cloned repository and make the build stop on
exceptions.
onserver
Assume the build is happening inside the VM.
refresh
Enable fetching the latest refs from the VCS remote.
Raises
------
:exc:`~fdroidserver.exception.BuildException`
If running a `sudo` command failed, locking the root account failed,
`sudo` couldn't be removed, cleaning the build environment failed,
skipping the scanning has been requested but `scandelete` is present,
errors occurred during scanning, running the `build` commands from the
metadata failed, building native code failed, building with the
specified build method failed, no output could be found with build
method `maven`, more or less than one APK were found with build method
`gradle`, less or more than one APKs match the `output` glob specified
in the metadata, running a `postbuild` command specified in the
metadata failed, the built APK is debuggable, the unsigned APK is not
at the expected location, the APK does not contain the expected
`versionName` and `versionCode` or undesired package names have been
found in the APK.
:exc:`~fdroidserver.exception.FDroidException`
If no Android NDK version could be found and the build isn't run in a
builder VM, the selected Android NDK is not a directory.
"""
ndk_path = build.ndk_path()
if build.ndk or (build.buildjni and build.buildjni != ['no']):
if not ndk_path:
@ -720,8 +819,10 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext
f"{app.id}:{build.versionName}", p.output)
# Make sure it's not debuggable...
if common.is_apk_and_debuggable(src):
raise BuildException("APK is debuggable")
if common.is_debuggable_or_testOnly(src):
raise BuildException(
"%s: debuggable or testOnly set in AndroidManifest.xml" % src
)
# By way of a sanity check, make sure the version and version
# code in our new APK match what we expect...
@ -764,23 +865,47 @@ def trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir,
Parameters
----------
app
The metadata of the app to build.
build
The build of the app to build.
build_dir
The local source-code checkout directory of the app.
output_dir
The directory where the build output will go.
Usually this is the 'unsigned' directory.
The directory where the build output will go. Usually this is the
'unsigned' directory.
log_dir
The directory in the VM where the build logs are getting stored.
also_check_dir
An additional location for checking if the build is necessary (usually
the archive repo).
srclib_dir
The path to the srclibs directory, usually 'build/srclib'.
extlib_dir
The path to the extlibs directory, usually 'build/extlib'.
tmp_dir
The temporary directory for building the source tarball of the app to
build.
repo_dir
The repo directory - used for checking if the build is necessary.
also_check_dir
An additional location for checking if the build
is necessary (usually the archive repo)
vcs
The version control system controller object of the app to build.
test
True if building in test mode, in which case the build will
always happen, even if the output already exists. In test mode, the
output directory should be a temporary location, not any of the real
ones.
True if building in test mode, in which case the build will always
happen, even if the output already exists. In test mode, the output
directory should be a temporary location, not any of the real ones.
server
Use buildserver VM for building.
force
Build app regardless of disabled state or scanner errors.
onserver
Assume the build is happening inside the VM.
refresh
Enable fetching the latest refs from the VCS remote.
Returns
-------
Boolean
status
True if the build was done, False if it wasn't necessary.
"""
dest_file = common.get_release_filename(app, build)
@ -819,7 +944,13 @@ def trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir,
def force_halt_build(timeout):
"""Halt the currently running Vagrant VM, to be called from a Timer."""
"""Halt the currently running Vagrant VM, to be called from a Timer.
Parameters
----------
timeout
The timeout in seconds.
"""
logging.error(_('Force halting build after {0} sec timeout!').format(timeout))
timeout_event.set()
if ssh_channel:
@ -843,7 +974,9 @@ def parse_commandline():
Returns
-------
options
The resulting options parsed from the command line arguments.
parser
The argument parser.
"""
parser = argparse.ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
common.setup_global_opts(parser)
@ -881,7 +1014,7 @@ def parse_commandline():
parser.add_argument("-w", "--wiki", default=False, action="store_true",
help=argparse.SUPPRESS)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
# Force --stop with --on-server to get correct exit code
@ -903,6 +1036,22 @@ timeout_event = threading.Event()
def main():
"""Build a package from source.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If more than one local metadata file has been found, no app metadata
has been found, there are no apps to process, downloading binaries for
checking the reproducibility of a built binary failed, the built binary
is different from supplied reference binary, the reference binary is
signed with a different signing key than expected, a VCS error occured
while building an app or a different error occured while building an
app.
"""
global options, config, buildserverid, fdroidserverid
options, parser = parse_commandline()
@ -927,7 +1076,7 @@ def main():
if not options.appid and not options.all:
parser.error("option %s: If you really want to build all the apps, use --all" % "all")
config = common.read_config(opts=options)
config = common.read_config()
if config['build_server_always']:
options.server = True

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Check for updates to applications."""
#
# checkupdates.py - part of the FDroid server tools
# Copyright (C) 2010-2015, Ciaran Gultnieks, ciaran@ciarang.com
@ -505,7 +506,7 @@ def operate_vercode(operation: str, vercode: int) -> int:
return vercode
def checkupdates_app(app: metadata.App) -> None:
def checkupdates_app(app: metadata.App, auto: bool, commit: bool = False) -> None:
"""Check for new versions and updated name of a single app.
Also write back changes to the metadata file and create a Git commit if
@ -581,7 +582,7 @@ def checkupdates_app(app: metadata.App) -> None:
logging.info('...updating to version %s' % ver)
commitmsg = 'Update CurrentVersion of %s to %s' % (name, ver)
if options.auto:
if auto:
mode = app.AutoUpdateMode
if not app.CurrentVersionCode:
raise MetaDataException(
@ -617,19 +618,24 @@ def checkupdates_app(app: metadata.App) -> None:
if not gotcur:
newbuilds = copy.deepcopy(builds[-len(vercodes):])
bullseye_blocklist = [
# These are either built-in or invalid in newer system versions
bookworm_blocklist = [
'apt-get install -y openjdk-11-jdk',
'apt-get install openjdk-11-jdk-headless',
'apt-get install -y openjdk-11-jdk-headless',
'apt-get install -t stretch-backports openjdk-11-jdk-headless openjdk-11-jre-headless',
'apt-get install -y -t stretch-backports openjdk-11-jdk-headless openjdk-11-jre-headless',
'apt-get install -y openjdk-17-jdk',
'apt-get install openjdk-17-jdk-headless',
'apt-get install -y openjdk-17-jdk-headless',
'update-alternatives --auto java',
'update-java-alternatives -a',
]
for build in newbuilds:
if "sudo" in build:
if any("openjdk-11" in line for line in build["sudo"]):
build["sudo"] = [line for line in build["sudo"] if line not in bullseye_blocklist]
if any("openjdk-11" in line for line in build["sudo"]) or any("openjdk-17" in line for line in build["sudo"]):
build["sudo"] = [line for line in build["sudo"] if line not in bookworm_blocklist]
if build["sudo"] == ['apt-get update']:
build["sudo"] = ''
@ -659,7 +665,7 @@ def checkupdates_app(app: metadata.App) -> None:
if commitmsg:
metadata.write_metadata(app.metadatapath, app)
if options.commit:
if commit:
logging.info("Commiting update for " + app.metadatapath)
gitcmd = ["git", "commit", "-m", commitmsg]
if 'auto_author' in config:
@ -689,7 +695,6 @@ def status_update_json(processed: list, failed: dict) -> None:
config = None
options = None
start_timestamp = time.gmtime()
@ -699,7 +704,7 @@ def main():
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
"""
global config, options
global config
# Parse command line...
parser = ArgumentParser()
@ -714,10 +719,10 @@ def main():
parser.add_argument("--allow-dirty", action="store_true", default=False,
help=_("Run on git repo that has uncommitted changes"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
if not options.allow_dirty:
status = subprocess.check_output(['git', 'status', '--porcelain'])
@ -743,7 +748,7 @@ def main():
logging.info(msg)
try:
checkupdates_app(app)
checkupdates_app(app, options.auto, options.commit)
processed.append(appid)
except Exception as e:
msg = _("...checkupdate failed for {appid} : {error}").format(appid=appid, error=e)

View File

@ -55,16 +55,13 @@ from pathlib import Path
import defusedxml.ElementTree as XMLElementTree
from asn1crypto import cms
from base64 import urlsafe_b64encode
from binascii import hexlify
from datetime import datetime, timedelta, timezone
from queue import Queue
from zipfile import ZipFile
from pyasn1.codec.der import decoder, encoder
from pyasn1_modules import rfc2315
from pyasn1.error import PyAsn1Error
import fdroidserver.metadata
import fdroidserver.lint
from fdroidserver import _
@ -135,11 +132,27 @@ env = None
orig_path = None
def get_default_cachedir():
"""Get a cachedir, using appdirs for cross-platform, but works without.
Once appdirs is installed everywhere, this function can be
removed.
"""
appname = __name__.split('.')[0]
try:
import appdirs
return appdirs.user_cache_dir(appname, 'F-Droid')
except ImportError:
return str(Path.home() / '.cache' / appname)
# All paths in the config must be strings, never pathlib.Path instances
default_config = {
'sdk_path': "$ANDROID_HOME",
'ndk_paths': {},
'cachedir': str(Path.home() / '.cache/fdroidserver'),
'cachedir': get_default_cachedir(),
'java_paths': None,
'scan_binary': False,
'ant': "ant",
@ -179,6 +192,34 @@ default_config = {
}
def get_options():
"""Return options as set up by parse_args().
This provides an easy way to get the global instance without
having to think about very confusing import and submodule
visibility. The code should be probably refactored so it does not
need this. If each individual option value was always passed to
functions as args, for example.
https://docs.python.org/3/reference/import.html#submodules
"""
return fdroidserver.common.options
def parse_args(parser):
"""Call parser.parse_args(), store result in module-level variable and return it.
This is needed to set up the copy of the options instance in the
fdroidserver.common module. A subcommand only needs to call this
if it uses functions from fdroidserver.common that expect the
"options" variable to be initialized.
"""
fdroidserver.common.options = parser.parse_args()
return fdroidserver.common.options
def setup_global_opts(parser):
try: # the buildserver VM might not have PIL installed
from PIL import PngImagePlugin
@ -193,6 +234,31 @@ def setup_global_opts(parser):
help=_("Restrict output to warnings and errors"))
def set_console_logging(verbose=False):
"""Globally set logging to output nicely to the console."""
class _StdOutFilter(logging.Filter):
def filter(self, record):
return record.levelno < logging.ERROR
if verbose:
level = logging.DEBUG
else:
level = logging.ERROR
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.addFilter(_StdOutFilter())
stdout_handler.setFormatter(logging.Formatter('%(message)s'))
stderr_handler = logging.StreamHandler(sys.stderr)
stderr_handler.setLevel(logging.ERROR)
stderr_handler.setFormatter(logging.Formatter(_('ERROR: %(message)s')))
logging.basicConfig(
force=True, level=level, handlers=[stdout_handler, stderr_handler]
)
def _add_java_paths_to_config(pathlist, thisconfig):
def path_version_key(s):
versionlist = []
@ -336,20 +402,38 @@ def fill_config_defaults(thisconfig):
thisconfig['gradle_version_dir'] = str(Path(thisconfig['cachedir']) / 'gradle')
def get_config(opts=None):
"""Get config instace. This function takes care of initializing config data before returning it."""
global config, options
def get_config():
"""Get the initalized, singleton config instance.
config and options are intertwined in read_config(), so they have
to be here too. In the current ugly state of things, there are
multiple potential instances of config and options in use:
* global
* module-level in the subcommand module (e.g. fdroidserver/build.py)
* module-level in fdroidserver.common
There are some insane parts of the code that are probably
referring to multiple instances of these at different points.
This can be super confusing and maddening.
The current intermediate refactoring step is to move all
subcommands to always get/set config and options via this function
so that there is no longer a distinction between the global and
module-level instances. Then there can be only one module-level
instance in fdroidserver.common.
"""
global config
if config is not None:
return config
common.read_config(opts=opts)
read_config()
# make sure these values are available in common.py even if they didn't
# declare global in a scope
common.config = config
if opts is not None:
common.options = opts
return config
@ -382,7 +466,7 @@ def config_type_check(path, data):
)
def read_config(opts=None):
def read_config():
"""Read the repository config.
The config is read from config_file, which is in the current
@ -401,13 +485,11 @@ def read_config(opts=None):
in git, it makes sense to use a globally standard encoding.
"""
global config, options
global config
if config is not None:
return config
options = opts
config = {}
config_file = 'config.yml'
old_config_file = 'config.py'
@ -440,8 +522,8 @@ def read_config(opts=None):
# smartcardoptions must be a list since its command line args for Popen
smartcardoptions = config.get('smartcardoptions')
if isinstance(smartcardoptions, str):
options = re.sub(r'\s+', r' ', config['smartcardoptions']).split(' ')
config['smartcardoptions'] = [i.strip() for i in options if i]
sco_items = re.sub(r'\s+', r' ', config['smartcardoptions']).split(' ')
config['smartcardoptions'] = [i.strip() for i in sco_items if i]
elif not smartcardoptions and 'keystore' in config and config['keystore'] == 'NONE':
# keystore='NONE' means use smartcard, these are required defaults
config['smartcardoptions'] = ['-storetype', 'PKCS11', '-providerName',
@ -462,14 +544,7 @@ def read_config(opts=None):
fill_config_defaults(config)
if 'serverwebroot' in config:
if isinstance(config['serverwebroot'], str):
roots = [{'url': config['serverwebroot']}]
elif all(isinstance(item, str) for item in config['serverwebroot']):
roots = [{'url': i} for i in config['serverwebroot']]
elif all(isinstance(item, dict) for item in config['serverwebroot']):
roots = config['serverwebroot']
else:
raise TypeError(_('only accepts strings, lists, and tuples'))
roots = parse_mirrors_config(config['serverwebroot'])
rootlist = []
for d in roots:
# since this is used with rsync, where trailing slashes have
@ -482,15 +557,7 @@ def read_config(opts=None):
config['serverwebroot'] = rootlist
if 'servergitmirrors' in config:
if isinstance(config['servergitmirrors'], str):
roots = [{"url": config['servergitmirrors']}]
elif all(isinstance(item, str) for item in config['servergitmirrors']):
roots = [{'url': i} for i in config['servergitmirrors']]
elif all(isinstance(item, dict) for item in config['servergitmirrors']):
roots = config['servergitmirrors']
else:
raise TypeError(_('only accepts strings, lists, and tuples'))
config['servergitmirrors'] = roots
config['servergitmirrors'] = parse_mirrors_config(config['servergitmirrors'])
limit = config['git_mirror_size_limit']
config['git_mirror_size_limit'] = parse_human_readable_size(limit)
@ -533,10 +600,22 @@ def read_config(opts=None):
return config
def parse_mirrors_config(mirrors):
"""Mirrors can be specified as a string, list of strings, or dictionary map."""
if isinstance(mirrors, str):
return [{"url": mirrors}]
elif all(isinstance(item, str) for item in mirrors):
return [{'url': i} for i in mirrors]
elif all(isinstance(item, dict) for item in mirrors):
return mirrors
else:
raise TypeError(_('only accepts strings, lists, and tuples'))
def file_entry(filename, hash_value=None):
meta = {}
meta["name"] = "/" + filename.split("/", 1)[1]
meta["sha256"] = hash_value or common.sha256sum(filename)
meta["name"] = "/" + Path(filename).as_posix().split("/", 1)[1]
meta["sha256"] = hash_value or sha256sum(filename)
meta["size"] = os.stat(filename).st_size
return meta
@ -2317,6 +2396,8 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
gradlefile = build_gradle
elif os.path.exists(build_gradle_kts):
gradlefile = build_gradle_kts
else:
raise BuildException("No gradle file found")
regsub_file(r'compileSdkVersion[ =]+[0-9]+',
r'compileSdkVersion %s' % n,
gradlefile)
@ -2592,31 +2673,48 @@ def get_file_extension(filename):
return os.path.splitext(filename)[1].lower()[1:]
def use_androguard():
"""Report if androguard is available, and config its debug logging."""
def _androguard_logging_level(level=logging.ERROR):
"""Tames androguard's default debug output.
There should be no debug output when the functions are being used
via the API. Otherwise, the output is controlled by the --verbose
flag.
To get coverage across the full range of androguard >= 3.3.5, this
includes all known logger names that are relevant. So some of
these names might not be present in the version of androguard
currently in use.
"""
if options and options.verbose:
level = logging.WARNING
for name in (
'androguard.apk',
'androguard.axml',
'androguard.core.api_specific_resources',
'androguard.core.apk',
'androguard.core.axml',
):
logging.getLogger(name).setLevel(level)
# some parts of androguard 4.x use loguru instead of logging
try:
import androguard
if use_androguard.show_path:
logging.debug(_('Using androguard from "{path}"').format(path=androguard.__file__))
use_androguard.show_path = False
if options and options.verbose:
logging.getLogger("androguard.axml").setLevel(logging.INFO)
logging.getLogger("androguard.core.api_specific_resources").setLevel(logging.ERROR)
return True
from loguru import logger
logger.remove()
except ImportError:
return False
pass
use_androguard.show_path = True # type: ignore
def _get_androguard_APK(apkfile):
def get_androguard_APK(apkfile, skip_analysis=False):
try:
# these were moved in androguard 4.0
from androguard.core.apk import APK
except ImportError:
from androguard.core.bytecodes.apk import APK
except ImportError as exc:
raise FDroidException("androguard library is not installed") from exc
_androguard_logging_level()
return APK(apkfile)
return APK(apkfile, skip_analysis=skip_analysis)
def ensure_final_value(packageName, arsc, value):
@ -2640,10 +2738,13 @@ def ensure_final_value(packageName, arsc, value):
return ''
def is_apk_and_debuggable(apkfile):
"""Return True if the given file is an APK and is debuggable.
def is_debuggable_or_testOnly(apkfile):
"""Return True if the given file is an APK and is debuggable or testOnly.
Parse only <application android:debuggable=""> from the APK.
These two settings should never be enabled in release builds. This
parses <application android:debuggable="" android:testOnly="">
from the APK and nothing else to run fast, since it is run on
every APK as part of update.
Parameters
----------
@ -2653,7 +2754,13 @@ def is_apk_and_debuggable(apkfile):
"""
if get_file_extension(apkfile) != 'apk':
return False
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG
try:
# these were moved in androguard 4.0
from androguard.core.axml import AXMLParser, format_value, START_TAG
except ImportError:
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG
_androguard_logging_level()
with ZipFile(apkfile) as apk:
with apk.open('AndroidManifest.xml') as manifest:
axml = AXMLParser(manifest.read())
@ -2662,7 +2769,7 @@ def is_apk_and_debuggable(apkfile):
if _type == START_TAG and axml.getName() == 'application':
for i in range(0, axml.getAttributeCount()):
name = axml.getAttributeName(i)
if name == 'debuggable':
if name in ('debuggable', 'testOnly'):
_type = axml.getAttributeValueType(i)
_data = axml.getAttributeValueData(i)
value = format_value(_type, _data, lambda _: axml.getAttributeValue(i))
@ -2713,12 +2820,20 @@ def get_apk_id_androguard(apkfile):
versionName is set to a Android String Resource (e.g. an integer
hex value that starts with @).
This function is part of androguard as get_apkid(), so this
vendored and modified to return versionCode as an integer.
"""
if not os.path.exists(apkfile):
raise FDroidException(_("Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'")
.format(apkfilename=apkfile))
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT
try:
# these were moved in androguard 4.0
from androguard.core.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT
except ImportError:
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT
_androguard_logging_level()
appid = None
versionCode = None
@ -2753,7 +2868,7 @@ def get_apk_id_androguard(apkfile):
.format(path=apkfile))
if not versionName or versionName[0] == '@':
a = _get_androguard_APK(apkfile)
a = get_androguard_APK(apkfile)
versionName = ensure_final_value(a.package, a.get_android_resources(), a.get_androidversion_name())
if not versionName:
versionName = '' # versionName is expected to always be a str
@ -3091,10 +3206,7 @@ def signer_fingerprint_short(cert_encoded):
def signer_fingerprint(cert_encoded):
"""Obtain sha256 signing-key fingerprint for pkcs7 DER certificate.
Extracts hexadecimal sha256 signing-key fingerprint string
for a given pkcs7 signature.
"""Return SHA-256 signer fingerprint for PKCS#7 DER-encoded signature.
Parameters
----------
@ -3102,46 +3214,113 @@ def signer_fingerprint(cert_encoded):
Returns
-------
shortened signature fingerprint.
Standard SHA-256 signer fingerprint.
"""
return hashlib.sha256(cert_encoded).hexdigest()
def get_first_signer_certificate(apkpath):
"""Get the first signing certificate from the APK, DER-encoded."""
certs = None
cert_encoded = None
with zipfile.ZipFile(apkpath, 'r') as apk:
cert_files = [n for n in apk.namelist() if SIGNATURE_BLOCK_FILE_REGEX.match(n)]
if len(cert_files) > 1:
logging.error(_("Found multiple JAR Signature Block Files in {path}").format(path=apkpath))
return None
elif len(cert_files) == 1:
cert_encoded = get_certificate(apk.read(cert_files[0]))
"""Get the first signing certificate from the APK, DER-encoded.
if not cert_encoded and use_androguard():
apkobject = _get_androguard_APK(apkpath)
certs = apkobject.get_certificates_der_v2()
if len(certs) > 0:
logging.debug(_('Using APK Signature v2'))
cert_encoded = certs[0]
JAR and APK Signatures allow for multiple signers, though it is
rarely used, and this is poorly documented. So this method only
fetches the first certificate, and errors out if there are more.
Starting with targetSdkVersion 30, APK v2 Signatures are required.
https://developer.android.com/about/versions/11/behavior-changes-11#minimum-signature-scheme
When a APK v2+ signature is present, the JAR signature is not
verified. The verifier parses the signers from the v2+ signature
and does not seem to look at the JAR signature.
https://source.android.com/docs/security/features/apksigning/v2#apk-signature-scheme-v2-block
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/ApkVerifier.java#270
apksigner checks that the signers from all the APK signatures match:
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/ApkVerifier.java#383
apksigner verifies each signer's signature block file
.(RSA|DSA|EC) against the corresponding signature file .SF
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#280
NoOverwriteDict is a workaround for:
https://github.com/androguard/androguard/issues/1030
Lots more discusion here:
https://gitlab.com/fdroid/fdroidserver/-/issues/1128
"""
class NoOverwriteDict(dict):
def __setitem__(self, k, v):
if k not in self:
super().__setitem__(k, v)
cert_encoded = None
found_certs = []
apkobject = get_androguard_APK(apkpath)
apkobject._v2_blocks = NoOverwriteDict()
certs_v3 = apkobject.get_certificates_der_v3()
if certs_v3:
cert_v3 = certs_v3[0]
found_certs.append(cert_v3)
if not cert_encoded:
certs = apkobject.get_certificates_der_v3()
if len(certs) > 0:
logging.debug(_('Using APK Signature v3'))
cert_encoded = certs[0]
logging.debug(_('Using APK Signature v3'))
cert_encoded = cert_v3
certs_v2 = apkobject.get_certificates_der_v2()
if certs_v2:
cert_v2 = certs_v2[0]
found_certs.append(cert_v2)
if not cert_encoded:
logging.debug(_('Using APK Signature v2'))
cert_encoded = cert_v2
if get_min_sdk_version(apkobject) < 24 or (
not (certs_v3 or certs_v2) and get_effective_target_sdk_version(apkobject) < 30
):
with zipfile.ZipFile(apkpath, 'r') as apk:
cert_files = [
n for n in apk.namelist() if SIGNATURE_BLOCK_FILE_REGEX.match(n)
]
if len(cert_files) > 1:
logging.error(
_("Found multiple JAR Signature Block Files in {path}").format(
path=apkpath
)
)
return
elif len(cert_files) == 1:
signature_block_file = cert_files[0]
signature_file = (
cert_files[0][: signature_block_file.rindex('.')] + '.SF'
)
cert_v1 = get_certificate(
apk.read(signature_block_file),
apk.read(signature_file),
)
found_certs.append(cert_v1)
if not cert_encoded:
logging.debug(_('Using JAR Signature'))
cert_encoded = cert_v1
if not cert_encoded:
logging.error(_("No signing certificates found in {path}").format(path=apkpath))
return None
return
if not all(cert == found_certs[0] for cert in found_certs):
logging.error(
_("APK signatures have different certificates in {path}:").format(
path=apkpath
)
)
return
return cert_encoded
def apk_signer_fingerprint(apk_path):
"""Obtain sha256 signing-key fingerprint for APK.
Extracts hexadecimal sha256 signing-key fingerprint string
for a given APK.
"""Get SHA-256 fingerprint string for the first signer from given APK.
Parameters
----------
@ -3150,7 +3329,8 @@ def apk_signer_fingerprint(apk_path):
Returns
-------
signature fingerprint
Standard SHA-256 signer fingerprint
"""
cert_encoded = get_first_signer_certificate(apk_path)
if not cert_encoded:
@ -3159,10 +3339,7 @@ def apk_signer_fingerprint(apk_path):
def apk_signer_fingerprint_short(apk_path):
"""Obtain shortened sha256 signing-key fingerprint for APK.
Extracts the first 7 hexadecimal digits of sha256 signing-key fingerprint
for a given pkcs7 APK.
"""Get 7 hex digit SHA-256 fingerprint string for the first signer from given APK.
Parameters
----------
@ -3171,7 +3348,8 @@ def apk_signer_fingerprint_short(apk_path):
Returns
-------
shortened signing-key fingerprint
first 7 chars of the standard SHA-256 signer fingerprint
"""
return apk_signer_fingerprint(apk_path)[:7]
@ -3390,7 +3568,7 @@ def apk_extract_signatures(apkpath, outdir):
def get_min_sdk_version(apk):
"""Wrap the androguard function to always return and int.
"""Wrap the androguard function to always return an integer.
Fall back to 1 if we can't get a valid minsdk version.
@ -3401,7 +3579,7 @@ def get_min_sdk_version(apk):
Returns
-------
minsdk: int
minSdkVersion: int
"""
try:
return int(apk.get_min_sdk_version())
@ -3409,6 +3587,24 @@ def get_min_sdk_version(apk):
return 1
def get_effective_target_sdk_version(apk):
"""Wrap the androguard function to always return an integer.
Parameters
----------
apk
androguard APK object
Returns
-------
targetSdkVersion: int
"""
try:
return int(apk.get_effective_target_sdk_version())
except TypeError:
return get_min_sdk_version(apk)
def get_apksigner_smartcardoptions(smartcardoptions):
if '-providerName' in smartcardoptions.copy():
pos = smartcardoptions.index('-providerName')
@ -3820,14 +4016,33 @@ def get_cert_fingerprint(pubkey):
return " ".join(ret)
def get_certificate(signature_block_file):
"""Extract a DER certificate from JAR Signature's "Signature Block File".
def get_certificate(signature_block_file, signature_file=None):
"""Extract a single DER certificate from JAR Signature's "Signature Block File".
If there is more than one signer certificate, this exits with an
error, unless the signature_file is provided. If that is set, it
will return the certificate that matches the Signature File, for
example, if there is a certificate chain, like TLS does. In the
fdroidserver use cases, there should always be a single signer.
But rarely, some APKs include certificate chains.
This could be replaced by androguard's APK.get_certificate_der()
provided the cert chain fix was merged there. Maybe in 4.1.2?
https://github.com/androguard/androguard/pull/1038
https://docs.oracle.com/en/java/javase/21/docs/specs/man/jarsigner.html#the-signed-jar-file
Parameters
----------
signature_block_file
file bytes (as string) representing the
certificate, as read directly out of the APK/ZIP
Bytes representing the PKCS#7 signer certificate and
signature, as read directly out of the JAR/APK, e.g. CERT.RSA.
signature_file
Bytes representing the manifest signed by the Signature Block
File, e.g. CERT.SF. If this is not given, the assumption is
there will be only a single certificate in
signature_block_file, otherwise it is an error.
Returns
-------
@ -3835,18 +4050,107 @@ def get_certificate(signature_block_file):
or None in case of error
"""
content = decoder.decode(signature_block_file, asn1Spec=rfc2315.ContentInfo())[0]
if content.getComponentByName('contentType') != rfc2315.signedData:
return None
content = decoder.decode(content.getComponentByName('content'),
asn1Spec=rfc2315.SignedData())[0]
try:
certificates = content.getComponentByName('certificates')
cert = certificates[0].getComponentByName('certificate')
except PyAsn1Error:
logging.error("Certificates not found.")
return None
return encoder.encode(cert)
pkcs7obj = cms.ContentInfo.load(signature_block_file)
certificates = pkcs7obj['content']['certificates']
if len(certificates) == 1:
return certificates[0].chosen.dump()
elif not signature_file:
logging.error(_('Found multiple Signer Certificates!'))
return
certificate = get_jar_signer_certificate(pkcs7obj, signature_file)
if certificate:
return certificate.chosen.dump()
def _find_matching_certificate(signer_info, certificate):
"""Find the certificates that matches signer_info using issuer and serial number.
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#590
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/x509/Certificate.java#55
"""
certificate_serial = certificate.chosen['tbs_certificate']['serial_number']
expected_issuer_serial = signer_info['sid'].chosen
return (
expected_issuer_serial['issuer'] == certificate.chosen.issuer
and expected_issuer_serial['serial_number'] == certificate_serial
)
def get_jar_signer_certificate(pkcs7obj: cms.ContentInfo, signature_file: bytes):
"""Return the one certificate in a chain that actually signed the manifest.
PKCS#7-signed data can include certificate chains for use cases
where an Certificate Authority (CA) is used. Android does not
validate the certificate chain on APK signatures, so neither does
this.
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#512
Some useful fodder for understanding all this:
https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html
https://technotes.shemyak.com/posts/jar-signature-block-file-format/
https://docs.oracle.com/en/java/javase/21/docs/specs/man/jarsigner.html#the-signed-jar-file
https://qistoph.blogspot.com/2012/01/manual-verify-pkcs7-signed-data-with.html
"""
import oscrypto.asymmetric
import oscrypto.errors
# Android attempts to verify all SignerInfos and then picks the first verified SignerInfo.
first_verified_signer_info = None
first_verified_signer_info_signing_certificate = None
for signer_info in pkcs7obj['content']['signer_infos']:
signature = signer_info['signature'].contents
digest_algorithm = signer_info["digest_algorithm"]["algorithm"].native
public_key = None
for certificate in pkcs7obj['content']['certificates']:
if _find_matching_certificate(signer_info, certificate):
public_key = oscrypto.asymmetric.load_public_key(certificate.chosen.public_key)
break
if public_key is None:
logging.info('No certificate found that matches signer info!')
continue
signature_algo = signer_info['signature_algorithm'].signature_algo
if signature_algo == 'rsassa_pkcs1v15':
# ASN.1 - 1.2.840.113549.1.1.1
verify_func = oscrypto.asymmetric.rsa_pkcs1v15_verify
elif signature_algo == 'rsassa_pss':
# ASN.1 - 1.2.840.113549.1.1.10
verify_func = oscrypto.asymmetric.rsa_pss_verify
elif signature_algo == 'dsa':
# ASN.1 - 1.2.840.10040.4.1
verify_func = oscrypto.asymmetric.dsa_verify
elif signature_algo == 'ecdsa':
# ASN.1 - 1.2.840.10045.4
verify_func = oscrypto.asymmetric.ecdsa_verify
else:
logging.error(
'Unknown signature algorithm %s:\n %s\n %s'
% (
signature_algo,
hexlify(certificate.chosen.sha256).decode(),
certificate.chosen.subject.human_friendly,
),
)
return
try:
verify_func(public_key, signature, signature_file, digest_algorithm)
if not first_verified_signer_info:
first_verified_signer_info = signer_info
first_verified_signer_info_signing_certificate = certificate
except oscrypto.errors.SignatureError as e:
logging.error(
'"%s", skipping:\n %s\n %s' % (
e,
hexlify(certificate.chosen.sha256).decode(),
certificate.chosen.subject.human_friendly),
)
if first_verified_signer_info_signing_certificate:
return first_verified_signer_info_signing_certificate
def load_stats_fdroid_signing_key_fingerprints():
@ -4125,7 +4429,12 @@ def is_repo_file(filename, for_gpg_signing=False):
b'index_unsigned.jar',
]
if not for_gpg_signing:
ignore_files += [b'entry.json', b'index-v1.json', b'index-v2.json']
ignore_files += [
b'altstore-index.json',
b'entry.json',
b'index-v1.json',
b'index-v2.json',
]
return (
os.path.isfile(filename)

View File

@ -25,11 +25,12 @@ import re
import subprocess
import time
import urllib
from typing import Dict, Optional, List
from typing import Dict, List
from git import Repo
import yaml
from argparse import ArgumentParser, Namespace
from argparse import ArgumentParser
import logging
from shlex import split
import shutil
import git
from pathlib import Path
@ -40,7 +41,6 @@ from . import index
from .exception import FDroidException
config = None
options: Optional[Namespace] = None
start_timestamp = time.gmtime()
GIT_BRANCH = 'master'
@ -49,9 +49,11 @@ BINARY_TRANSPARENCY_DIR = 'binary_transparency'
AUTO_S3CFG = '.fdroid-deploy-s3cfg'
USER_S3CFG = 's3cfg'
USER_RCLONE_CONF = None
REMOTE_HOSTNAME_REGEX = re.compile(r'\W*\w+\W+(\w+).*')
INDEX_FILES = [
"altstore-index.json",
"entry.jar",
"entry.json",
"entry.json.asc",
@ -94,7 +96,7 @@ def _get_index_includes(base_dir):
return index_includes
def update_awsbucket(repo_section, is_index_only=False):
def update_awsbucket(repo_section, is_index_only=False, verbose=False, quiet=False):
"""Upload the contents of the directory `repo_section` (including subdirectories) to the AWS S3 "bucket".
The contents of that subdir of the
@ -102,11 +104,35 @@ def update_awsbucket(repo_section, is_index_only=False):
Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey
"""
logging.debug('Syncing "' + repo_section + '" to Amazon S3 bucket "'
+ config['awsbucket'] + '"')
logging.debug(
f'''Syncing "{repo_section}" to Amazon S3 bucket "{config['awsbucket']}"'''
)
if common.set_command_in_config('s3cmd'):
if common.set_command_in_config('s3cmd') and common.set_command_in_config('rclone'):
logging.info(
'Both rclone and s3cmd are installed. Checking config.yml for preference.'
)
if config['s3cmd'] is not True and config['rclone'] is not True:
logging.warning(
'No syncing tool set in config.yml!. Defaulting to using s3cmd'
)
update_awsbucket_s3cmd(repo_section, is_index_only)
if config['s3cmd'] is True and config['rclone'] is True:
logging.warning(
'Both syncing tools set in config.yml!. Defaulting to using s3cmd'
)
update_awsbucket_s3cmd(repo_section, is_index_only)
if config['s3cmd'] is True and config['rclone'] is not True:
update_awsbucket_s3cmd(repo_section, is_index_only)
if config['rclone'] is True and config['s3cmd'] is not True:
update_remote_storage_with_rclone(
repo_section, is_index_only, verbose, quiet
)
elif common.set_command_in_config('s3cmd'):
update_awsbucket_s3cmd(repo_section, is_index_only)
elif common.set_command_in_config('rclone'):
update_remote_storage_with_rclone(repo_section, is_index_only, verbose, quiet)
else:
update_awsbucket_libcloud(repo_section, is_index_only)
@ -122,17 +148,20 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
files are deleted from the server. The last pass is the only pass
to use a full MD5 checksum of all files to detect changes.
"""
logging.debug(_('Using s3cmd to sync with: {url}')
.format(url=config['awsbucket']))
logging.debug(_('Using s3cmd to sync with: {url}').format(url=config['awsbucket']))
if os.path.exists(USER_S3CFG):
logging.info(_('Using "{path}" for configuring s3cmd.').format(path=USER_S3CFG))
configfilename = USER_S3CFG
else:
fd = os.open(AUTO_S3CFG, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600)
logging.debug(_('Creating "{path}" for configuring s3cmd.').format(path=AUTO_S3CFG))
logging.debug(
_('Creating "{path}" for configuring s3cmd.').format(path=AUTO_S3CFG)
)
os.write(fd, '[default]\n'.encode('utf-8'))
os.write(fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8'))
os.write(
fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8')
)
os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8'))
os.close(fd)
configfilename = AUTO_S3CFG
@ -140,24 +169,34 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
s3bucketurl = 's3://' + config['awsbucket']
s3cmd = [config['s3cmd'], '--config=' + configfilename]
if subprocess.call(s3cmd + ['info', s3bucketurl]) != 0:
logging.warning(_('Creating new S3 bucket: {url}')
.format(url=s3bucketurl))
logging.warning(_('Creating new S3 bucket: {url}').format(url=s3bucketurl))
if subprocess.call(s3cmd + ['mb', s3bucketurl]) != 0:
logging.error(_('Failed to create S3 bucket: {url}')
.format(url=s3bucketurl))
logging.error(
_('Failed to create S3 bucket: {url}').format(url=s3bucketurl)
)
raise FDroidException()
s3cmd_sync = s3cmd + ['sync', '--acl-public']
if options.verbose:
options = common.get_options()
if options and options.verbose:
s3cmd_sync += ['--verbose']
if options.quiet:
if options and options.quiet:
s3cmd_sync += ['--quiet']
s3url = s3bucketurl + '/fdroid/'
logging.debug(
_('s3cmd sync indexes {path} to {url} and delete').format(
path=repo_section, url=s3url
)
)
if is_index_only:
logging.debug(_('s3cmd syncs indexes from {path} to {url} and deletes removed')
.format(path=repo_section, url=s3url))
logging.debug(
_('s3cmd syncs indexes from {path} to {url} and deletes removed').format(
path=repo_section, url=s3url
)
)
sync_indexes_flags = []
sync_indexes_flags.extend(_get_index_includes(repo_section))
sync_indexes_flags.append('--delete-removed')
@ -166,7 +205,9 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
sync_indexes_flags.append('--no-check-md5')
else:
sync_indexes_flags.append('--check-md5')
returncode = subprocess.call(s3cmd_sync + sync_indexes_flags + [repo_section, s3url])
returncode = subprocess.call(
s3cmd_sync + sync_indexes_flags + [repo_section, s3url]
)
if returncode != 0:
raise FDroidException()
else:
@ -187,8 +228,11 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
if returncode != 0:
raise FDroidException()
logging.debug(_('s3cmd sync indexes {path} to {url} and delete')
.format(path=repo_section, url=s3url))
logging.debug(
_('s3cmd sync indexes {path} to {url} and delete').format(
path=repo_section, url=s3url
)
)
s3cmd_sync.append('--delete-removed')
s3cmd_sync.append('--delete-after')
if options.no_checksum:
@ -199,6 +243,134 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
raise FDroidException()
def update_remote_storage_with_rclone(
repo_section, is_index_only=False, verbose=False, quiet=False
):
"""
Upload fdroid repo folder to remote storage using rclone sync.
Rclone sync can send the files to any supported remote storage
service once without numerous polling.
If remote storage is s3 e.g aws s3, wasabi, filebase then path will be
bucket_name/fdroid/repo where bucket_name will be an s3 bucket
If remote storage is storage drive/sftp e.g google drive, rsync.net
the new path will be bucket_name/fdroid/repo where bucket_name
will be a folder
Better than the s3cmd command as it does the syncing in one command
Check https://rclone.org/docs/#config-config-file (optional config file)
"""
logging.debug(_('Using rclone to sync with: {url}').format(url=config['awsbucket']))
if config.get('path_to_custom_rclone_config') is not None:
USER_RCLONE_CONF = config['path_to_custom_rclone_config']
if os.path.exists(USER_RCLONE_CONF):
logging.info("'path_to_custom_rclone_config' found in config.yml")
logging.info(
_('Using "{path}" for syncing with remote storage.').format(
path=USER_RCLONE_CONF
)
)
configfilename = USER_RCLONE_CONF
else:
logging.info('Custom configuration not found.')
logging.info(
'Using default configuration at {}'.format(
subprocess.check_output('rclone config file')
)
)
configfilename = None
else:
logging.warning("'path_to_custom_rclone_config' not found in config.yml")
logging.info('Custom configuration not found.')
logging.info(
'Using default configuration at {}'.format(
subprocess.check_output('rclone config file')
)
)
configfilename = None
upload_dir = 'fdroid/' + repo_section
if not config.get('rclone_config') or not config.get('awsbucket'):
raise FDroidException(
_('To use rclone, rclone_config and awsbucket must be set in config.yml!')
)
if is_index_only:
sources = _get_index_file_paths(repo_section)
else:
sources = repo_section
for source in sources:
if isinstance(config['rclone_config'], str):
rclone_sync_command = (
'rclone sync '
+ source
+ ' '
+ config['rclone_config']
+ ':'
+ config['awsbucket']
+ '/'
+ upload_dir
)
rclone_sync_command = split(rclone_sync_command)
if verbose:
rclone_sync_command += ['--verbose']
elif quiet:
rclone_sync_command += ['--quiet']
if configfilename:
rclone_sync_command += split('--config=' + configfilename)
complete_remote_path = (
config['rclone_config'] + ':' + config['awsbucket'] + '/' + upload_dir
)
logging.debug(
"rclone sync all files in " + source + ' to ' + complete_remote_path
)
if subprocess.call(rclone_sync_command) != 0:
raise FDroidException()
if isinstance(config['rclone_config'], list):
for remote_config in config['rclone_config']:
rclone_sync_command = (
'rclone sync '
+ source
+ ' '
+ remote_config
+ ':'
+ config['awsbucket']
+ '/'
+ upload_dir
)
rclone_sync_command = split(rclone_sync_command)
if verbose:
rclone_sync_command += ['--verbose']
elif quiet:
rclone_sync_command += ['--quiet']
if configfilename:
rclone_sync_command += split('--config=' + configfilename)
complete_remote_path = (
remote_config + ':' + config['awsbucket'] + '/' + upload_dir
)
logging.debug(
"rclone sync all files in " + source + ' to ' + complete_remote_path
)
if subprocess.call(rclone_sync_command) != 0:
raise FDroidException()
def update_awsbucket_libcloud(repo_section, is_index_only=False):
"""No summary.
@ -210,22 +382,28 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey
"""
logging.debug(_('using Apache libcloud to sync with {url}')
.format(url=config['awsbucket']))
logging.debug(
_('using Apache libcloud to sync with {url}').format(url=config['awsbucket'])
)
import libcloud.security
libcloud.security.VERIFY_SSL_CERT = True
from libcloud.storage.types import Provider, ContainerDoesNotExistError
from libcloud.storage.providers import get_driver
if not config.get('awsaccesskeyid') or not config.get('awssecretkey'):
raise FDroidException(
_('To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!'))
_(
'To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!'
)
)
awsbucket = config['awsbucket']
if os.path.exists(USER_S3CFG):
raise FDroidException(_('"{path}" exists but s3cmd is not installed!')
.format(path=USER_S3CFG))
raise FDroidException(
_('"{path}" exists but s3cmd is not installed!').format(path=USER_S3CFG)
)
cls = get_driver(Provider.S3)
driver = cls(config['awsaccesskeyid'], config['awssecretkey'])
@ -233,8 +411,7 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
container = driver.get_container(container_name=awsbucket)
except ContainerDoesNotExistError:
container = driver.create_container(container_name=awsbucket)
logging.info(_('Created new container "{name}"')
.format(name=container.name))
logging.info(_('Created new container "{name}"').format(name=container.name))
upload_dir = 'fdroid/' + repo_section
objs = dict()
@ -243,12 +420,22 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
objs[obj.name] = obj
if is_index_only:
index_files = [f"{os.getcwd()}/{name}" for name in _get_index_file_paths(repo_section)]
files_to_upload = [os.path.join(root, name) for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section)) for name in files]
index_files = [
f"{os.getcwd()}/{name}" for name in _get_index_file_paths(repo_section)
]
files_to_upload = [
os.path.join(root, name)
for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section))
for name in files
]
files_to_upload = list(set(files_to_upload) & set(index_files))
else:
files_to_upload = [os.path.join(root, name) for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section)) for name in files]
files_to_upload = [
os.path.join(root, name)
for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section))
for name in files
]
for file_to_upload in files_to_upload:
upload = False
@ -282,13 +469,15 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
extra['content_type'] = 'application/pgp-signature'
elif file_to_upload.endswith('.asc'):
extra['content_type'] = 'application/pgp-signature'
logging.info(' uploading ' + os.path.relpath(file_to_upload)
+ ' to s3://' + awsbucket + '/' + object_name)
path = os.path.relpath(file_to_upload)
logging.info(f' uploading {path} to s3://{awsbucket}/{object_name}')
with open(file_to_upload, 'rb') as iterator:
obj = driver.upload_object_via_stream(iterator=iterator,
container=container,
object_name=object_name,
extra=extra)
obj = driver.upload_object_via_stream(
iterator=iterator,
container=container,
object_name=object_name,
extra=extra,
)
# delete the remnants in the bucket, they do not exist locally
while objs:
object_name, obj = objs.popitem()
@ -324,6 +513,7 @@ def update_serverwebroot(serverwebroot, repo_section):
_('rsync is missing or broken: {error}').format(error=e)
) from e
rsyncargs = ['rsync', '--archive', '--delete-after', '--safe-links']
options = common.get_options()
if not options or not options.no_checksum:
rsyncargs.append('--checksum')
if options and options.verbose:
@ -331,9 +521,15 @@ def update_serverwebroot(serverwebroot, repo_section):
if options and options.quiet:
rsyncargs += ['--quiet']
if options and options.identity_file:
rsyncargs += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + options.identity_file]
rsyncargs += [
'-e',
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + options.identity_file,
]
elif config and config.get('identity_file'):
rsyncargs += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file']]
rsyncargs += [
'-e',
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file'],
]
url = serverwebroot['url']
is_index_only = serverwebroot.get('index_only', False)
logging.info('rsyncing ' + repo_section + ' to ' + url)
@ -350,10 +546,15 @@ def update_serverwebroot(serverwebroot, repo_section):
if subprocess.call(rsyncargs + [repo_section, url]) != 0:
raise FDroidException()
# upload "current version" symlinks if requested
if config['make_current_version_link'] and repo_section == 'repo':
if (
config
and config.get('make_current_version_link')
and repo_section == 'repo'
):
links_to_upload = []
for f in glob.glob('*.apk') \
+ glob.glob('*.apk.asc') + glob.glob('*.apk.sig'):
for f in (
glob.glob('*.apk') + glob.glob('*.apk.asc') + glob.glob('*.apk.sig')
):
if os.path.islink(f):
links_to_upload.append(f)
if len(links_to_upload) > 0:
@ -402,9 +603,11 @@ def sync_from_localcopy(repo_section, local_copy_dir):
# trailing slashes have a meaning in rsync which is not needed here, so
# make sure both paths have exactly one trailing slash
common.local_rsync(options,
[os.path.join(local_copy_dir, repo_section).rstrip('/') + '/'],
repo_section.rstrip('/') + '/')
common.local_rsync(
common.get_options(),
[os.path.join(local_copy_dir, repo_section).rstrip('/') + '/'],
repo_section.rstrip('/') + '/',
)
offline_copy = os.path.join(local_copy_dir, BINARY_TRANSPARENCY_DIR)
if os.path.exists(os.path.join(offline_copy, '.git')):
@ -421,7 +624,7 @@ def update_localcopy(repo_section, local_copy_dir):
"""
# local_copy_dir is guaranteed to have a trailing slash in main() below
common.local_rsync(options, [repo_section], local_copy_dir)
common.local_rsync(common.get_options(), [repo_section], local_copy_dir)
offline_copy = os.path.join(os.getcwd(), BINARY_TRANSPARENCY_DIR)
if os.path.isdir(os.path.join(offline_copy, '.git')):
@ -452,11 +655,14 @@ def update_servergitmirrors(servergitmirrors, repo_section):
"""
from clint.textui import progress
if config.get('local_copy_dir') \
and not config.get('sync_from_local_copy_dir'):
logging.debug(_('Offline machine, skipping git mirror generation until `fdroid deploy`'))
if config.get('local_copy_dir') and not config.get('sync_from_local_copy_dir'):
logging.debug(
_('Offline machine, skipping git mirror generation until `fdroid deploy`')
)
return
options = common.get_options()
workspace_dir = Path(os.getcwd())
# right now we support only 'repo' git-mirroring
@ -473,12 +679,18 @@ def update_servergitmirrors(servergitmirrors, repo_section):
dotgit_size = _get_size(dotgit)
dotgit_over_limit = dotgit_size > config['git_mirror_size_limit']
if os.path.isdir(dotgit) and dotgit_over_limit:
logging.warning(_('Deleting git-mirror history, repo is too big ({size} max {limit})')
.format(size=dotgit_size, limit=config['git_mirror_size_limit']))
logging.warning(
_(
'Deleting git-mirror history, repo is too big ({size} max {limit})'
).format(size=dotgit_size, limit=config['git_mirror_size_limit'])
)
shutil.rmtree(dotgit)
if options.no_keep_git_mirror_archive and dotgit_over_limit:
logging.warning(_('Deleting archive, repo is too big ({size} max {limit})')
.format(size=dotgit_size, limit=config['git_mirror_size_limit']))
logging.warning(
_('Deleting archive, repo is too big ({size} max {limit})').format(
size=dotgit_size, limit=config['git_mirror_size_limit']
)
)
archive_path = os.path.join(git_mirror_path, 'fdroid', 'archive')
shutil.rmtree(archive_path, ignore_errors=True)
@ -496,6 +708,7 @@ def update_servergitmirrors(servergitmirrors, repo_section):
def update(self, op_code, current, maximum=None, message=None):
if isinstance(maximum, float):
progressbar.show(current, maximum)
progress = MyProgressPrinter()
else:
progress = None
@ -519,33 +732,42 @@ def update_servergitmirrors(servergitmirrors, repo_section):
# trailing slashes have a meaning in rsync which is not needed here, so
# make sure both paths have exactly one trailing slash
if is_index_only:
files_to_sync = [str(workspace_dir / repo_section / index_file) for index_file in INDEX_FILES]
files_to_sync = [
str(workspace_dir / repo_section / index_file)
for index_file in INDEX_FILES
]
else:
files_to_sync = [str(workspace_dir / repo_section).rstrip('/') + '/']
common.local_rsync(options, files_to_sync, git_repodir.rstrip('/') + '/')
common.local_rsync(
common.get_options(), files_to_sync, git_repodir.rstrip('/') + '/'
)
upload_to_servergitmirror(mirror_config=d,
local_repo=repo,
enabled_remotes=enabled_remotes,
repo_section=repo_section,
is_index_only=is_index_only,
fdroid_dir=git_fdroiddir,
git_mirror_path=str(git_mirror_path),
ssh_cmd=ssh_cmd,
progress=progress)
upload_to_servergitmirror(
mirror_config=d,
local_repo=repo,
enabled_remotes=enabled_remotes,
repo_section=repo_section,
is_index_only=is_index_only,
fdroid_dir=git_fdroiddir,
git_mirror_path=str(git_mirror_path),
ssh_cmd=ssh_cmd,
progress=progress,
)
if progress:
progressbar.done()
def upload_to_servergitmirror(mirror_config: Dict[str, str],
local_repo: Repo,
enabled_remotes: List[str],
repo_section: str,
is_index_only: bool,
fdroid_dir: str,
git_mirror_path: str,
ssh_cmd: str,
progress: git.RemoteProgress) -> None:
def upload_to_servergitmirror(
mirror_config: Dict[str, str],
local_repo: Repo,
enabled_remotes: List[str],
repo_section: str,
is_index_only: bool,
fdroid_dir: str,
git_mirror_path: str,
ssh_cmd: str,
progress: git.RemoteProgress,
) -> None:
remote_branch_name = GIT_BRANCH
local_branch_name = local_repo.active_branch.name
@ -561,9 +783,10 @@ def upload_to_servergitmirror(mirror_config: Dict[str, str],
local_repo.create_remote(name, remote_url)
logging.info('Mirroring to: ' + remote_url)
logging.info("git status:", local_repo.git.status())
if is_index_only:
local_repo.index.add(_get_index_file_paths(os.path.join('fdroid', repo_section)))
local_repo.index.add(
_get_index_file_paths(os.path.join('fdroid', repo_section))
)
else:
# sadly index.add don't allow the --all parameter
logging.debug('Adding all files to git mirror')
@ -572,16 +795,13 @@ def upload_to_servergitmirror(mirror_config: Dict[str, str],
logging.debug('Committing files into git mirror')
local_repo.index.commit("fdroidserver git-mirror")
# only deploy to GitLab Artifacts if too big for GitLab Pages
if common.get_dir_size(fdroid_dir) <= common.GITLAB_COM_PAGES_MAX_SIZE:
gitlab_ci_job_name = 'pages'
else:
gitlab_ci_job_name = 'GitLab Artifacts'
logging.warning(
_(
'Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!'
)
_('Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!')
% (common.GITLAB_COM_PAGES_MAX_SIZE / 1000000000)
)
@ -609,31 +829,42 @@ def upload_to_servergitmirror(mirror_config: Dict[str, str],
local_repo.index.add(['.gitlab-ci.yml'])
local_repo.index.commit("fdroidserver git-mirror: Deploy to GitLab Pages")
logging.info(_('Pushing to {url}').format(url=remote.url))
logging.debug(_('Pushing to {url}').format(url=remote.url))
with local_repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd):
pushinfos = remote.push(
f"{local_branch_name}:{remote_branch_name}", force=True, set_upstream=True, progress=progress
f"{local_branch_name}:{remote_branch_name}",
force=True,
set_upstream=True,
progress=progress,
)
for pushinfo in pushinfos:
if pushinfo.flags & (git.remote.PushInfo.ERROR
| git.remote.PushInfo.REJECTED
| git.remote.PushInfo.REMOTE_FAILURE
| git.remote.PushInfo.REMOTE_REJECTED):
if pushinfo.flags & (
git.remote.PushInfo.ERROR
| git.remote.PushInfo.REJECTED
| git.remote.PushInfo.REMOTE_FAILURE
| git.remote.PushInfo.REMOTE_REJECTED
):
# Show potentially useful messages from git remote
for line in progress.other_lines:
if line.startswith('remote:'):
logging.debug(line)
raise FDroidException(remote.url + ' push failed: ' + str(pushinfo.flags)
+ ' ' + pushinfo.summary)
raise FDroidException(
remote.url
+ ' push failed: '
+ str(pushinfo.flags)
+ ' '
+ pushinfo.summary
)
else:
logging.debug(remote.url + ': ' + pushinfo.summary)
def upload_to_android_observatory(repo_section):
import requests
requests # stop unused import warning
if options.verbose:
if common.get_options().verbose:
logging.getLogger("requests").setLevel(logging.INFO)
logging.getLogger("urllib3").setLevel(logging.INFO)
else:
@ -652,9 +883,12 @@ def upload_apk_to_android_observatory(path):
from lxml.html import fromstring
apkfilename = os.path.basename(path)
r = requests.post('https://androidobservatory.org/',
data={'q': common.sha256sum(path), 'searchby': 'hash'},
headers=net.HEADERS, timeout=300)
r = requests.post(
'https://androidobservatory.org/',
data={'q': common.sha256sum(path), 'searchby': 'hash'},
headers=net.HEADERS,
timeout=300,
)
if r.status_code == 200:
# from now on XPath will be used to retrieve the message in the HTML
# androidobservatory doesn't have a nice API to talk with
@ -671,22 +905,30 @@ def upload_apk_to_android_observatory(path):
page = 'https://androidobservatory.org'
if href:
message = (_('Found {apkfilename} at {url}')
.format(apkfilename=apkfilename, url=(page + href)))
message = _('Found {apkfilename} at {url}').format(
apkfilename=apkfilename, url=(page + href)
)
logging.debug(message)
return
# upload the file with a post request
logging.info(_('Uploading {apkfilename} to androidobservatory.org')
.format(apkfilename=apkfilename))
r = requests.post('https://androidobservatory.org/upload',
files={'apk': (apkfilename, open(path, 'rb'))},
headers=net.HEADERS,
allow_redirects=False, timeout=300)
logging.info(
_('Uploading {apkfilename} to androidobservatory.org').format(
apkfilename=apkfilename
)
)
r = requests.post(
'https://androidobservatory.org/upload',
files={'apk': (apkfilename, open(path, 'rb'))},
headers=net.HEADERS,
allow_redirects=False,
timeout=300,
)
def upload_to_virustotal(repo_section, virustotal_apikey):
import requests
requests # stop unused import warning
if repo_section == 'repo':
@ -697,44 +939,47 @@ def upload_to_virustotal(repo_section, virustotal_apikey):
with open(os.path.join(repo_section, 'index-v1.json')) as fp:
data = json.load(fp)
else:
data, _ignored, _ignored = index.get_index_from_jar(os.path.join(repo_section, 'index-v1.jar'))
local_jar = os.path.join(repo_section, 'index-v1.jar')
data, _ignored, _ignored = index.get_index_from_jar(local_jar)
for packageName, packages in data['packages'].items():
for package in packages:
upload_apk_to_virustotal(virustotal_apikey, **package)
def upload_apk_to_virustotal(virustotal_apikey, packageName, apkName, hash,
versionCode, **kwargs):
def upload_apk_to_virustotal(
virustotal_apikey, packageName, apkName, hash, versionCode, **kwargs
):
import requests
logging.getLogger("urllib3").setLevel(logging.WARNING)
logging.getLogger("requests").setLevel(logging.WARNING)
outputfilename = os.path.join('virustotal',
packageName + '_' + str(versionCode)
+ '_' + hash + '.json')
outputfilename = os.path.join(
'virustotal', packageName + '_' + str(versionCode) + '_' + hash + '.json'
)
if os.path.exists(outputfilename):
logging.debug(apkName + ' results are in ' + outputfilename)
return outputfilename
repofilename = os.path.join('repo', apkName)
logging.info('Checking if ' + repofilename + ' is on virustotal')
headers = {
"User-Agent": "F-Droid"
}
headers = {"User-Agent": "F-Droid"}
if 'headers' in kwargs:
for k, v in kwargs['headers'].items():
headers[k] = v
data = {
apikey = {
'apikey': virustotal_apikey,
'resource': hash,
}
needs_file_upload = False
while True:
r = requests.get('https://www.virustotal.com/vtapi/v2/file/report?'
+ urllib.parse.urlencode(data), headers=headers, timeout=300)
report_url = (
'https://www.virustotal.com/vtapi/v2/file/report?'
+ urllib.parse.urlencode(apikey)
)
r = requests.get(report_url, headers=headers, timeout=300)
if r.status_code == 200:
response = r.json()
if response['response_code'] == 0:
@ -749,9 +994,12 @@ def upload_apk_to_virustotal(virustotal_apikey, packageName, apkName, hash,
json.dump(response, fp, indent=2, sort_keys=True)
if response.get('positives', 0) > 0:
logging.warning(repofilename + ' has been flagged by virustotal '
+ str(response['positives']) + ' times:'
+ '\n\t' + response['permalink'])
logging.warning(
_('{path} has been flagged by virustotal {count} times:').format(
path=repofilename, count=response['positives']
),
+'\n\t' + response['permalink'],
)
break
if r.status_code == 204:
logging.warning(_('virustotal.com is rate limiting, waiting to retry...'))
@ -763,32 +1011,48 @@ def upload_apk_to_virustotal(virustotal_apikey, packageName, apkName, hash,
size = os.path.getsize(repofilename)
if size > 200000000:
# VirusTotal API 200MB hard limit
logging.error(_('{path} more than 200MB, manually upload: {url}')
.format(path=repofilename, url=manual_url))
logging.error(
_('{path} more than 200MB, manually upload: {url}').format(
path=repofilename, url=manual_url
)
)
elif size > 32000000:
# VirusTotal API requires fetching a URL to upload bigger files
r = requests.get('https://www.virustotal.com/vtapi/v2/file/scan/upload_url?'
+ urllib.parse.urlencode(data), headers=headers, timeout=300)
query_url = (
'https://www.virustotal.com/vtapi/v2/file/scan/upload_url?'
+ urllib.parse.urlencode(apikey)
)
r = requests.get(query_url, headers=headers, timeout=300)
if r.status_code == 200:
upload_url = r.json().get('upload_url')
elif r.status_code == 403:
logging.error(_('VirusTotal API key cannot upload files larger than 32MB, '
+ 'use {url} to upload {path}.')
.format(path=repofilename, url=manual_url))
logging.error(
_(
'VirusTotal API key cannot upload files larger than 32MB, '
+ 'use {url} to upload {path}.'
).format(path=repofilename, url=manual_url)
)
else:
r.raise_for_status()
else:
upload_url = 'https://www.virustotal.com/vtapi/v2/file/scan'
if upload_url:
logging.info(_('Uploading {apkfilename} to virustotal')
.format(apkfilename=repofilename))
files = {
'file': (apkName, open(repofilename, 'rb'))
}
r = requests.post(upload_url, data=data, headers=headers, files=files, timeout=300)
logging.debug(_('If this upload fails, try manually uploading to {url}')
.format(url=manual_url))
logging.info(
_('Uploading {apkfilename} to virustotal').format(apkfilename=repofilename)
)
r = requests.post(
upload_url,
data=apikey,
headers=headers,
files={'file': (apkName, open(repofilename, 'rb'))},
timeout=300,
)
logging.debug(
_('If this upload fails, try manually uploading to {url}').format(
url=manual_url
)
)
r.raise_for_status()
response = r.json()
logging.info(response['verbose_msg'] + " " + response['permalink'])
@ -813,8 +1077,7 @@ def push_binary_transparency(git_repo_path, git_remote):
"""
import git
logging.info(_('Pushing binary transparency log to {url}')
.format(url=git_remote))
logging.info(_('Pushing binary transparency log to {url}').format(url=git_remote))
if os.path.isdir(os.path.dirname(git_remote)):
# from offline machine to thumbdrive
@ -843,24 +1106,47 @@ def push_binary_transparency(git_repo_path, git_remote):
origin.set_url(git_remote)
else:
origin = gitrepo.create_remote('origin', git_remote)
origin.push(GIT_BRANCH)
for _i in range(3):
try:
origin.push(GIT_BRANCH)
except git.GitCommandError as e:
logging.error(e)
continue
break
else:
raise FDroidException(_("Pushing to remote server failed!"))
def main():
global config, options
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument("-i", "--identity-file", default=None,
help=_("Specify an identity file to provide to SSH for rsyncing"))
parser.add_argument("--local-copy-dir", default=None,
help=_("Specify a local folder to sync the repo to"))
parser.add_argument("--no-checksum", action="store_true", default=False,
help=_("Don't use rsync checksums"))
parser.add_argument("--no-keep-git-mirror-archive", action="store_true", default=False,
help=_("If a git mirror gets to big, allow the archive to be deleted"))
options = parser.parse_args()
config = common.read_config(options)
parser.add_argument(
"-i",
"--identity-file",
default=None,
help=_("Specify an identity file to provide to SSH for rsyncing"),
)
parser.add_argument(
"--local-copy-dir",
default=None,
help=_("Specify a local folder to sync the repo to"),
)
parser.add_argument(
"--no-checksum",
action="store_true",
default=False,
help=_("Don't use rsync checksums"),
)
parser.add_argument(
"--no-keep-git-mirror-archive",
action="store_true",
default=False,
help=_("If a git mirror gets to big, allow the archive to be deleted"),
)
options = common.parse_args(parser)
config = common.read_config()
if config.get('nonstandardwebroot') is True:
standardwebroot = False
@ -879,17 +1165,23 @@ def main():
logging.error(_('local_copy_dir must be directory, not a file!'))
sys.exit(1)
if not os.path.exists(os.path.dirname(fdroiddir)):
logging.error(_('The root dir for local_copy_dir "{path}" does not exist!')
.format(path=os.path.dirname(fdroiddir)))
logging.error(
_('The root dir for local_copy_dir "{path}" does not exist!').format(
path=os.path.dirname(fdroiddir)
)
)
sys.exit(1)
if not os.path.isabs(fdroiddir):
logging.error(_('local_copy_dir must be an absolute path!'))
sys.exit(1)
repobase = os.path.basename(fdroiddir)
if standardwebroot and repobase != 'fdroid':
logging.error(_('local_copy_dir does not end with "fdroid", '
+ 'perhaps you meant: "{path}"')
.format(path=fdroiddir + '/fdroid'))
logging.error(
_(
'local_copy_dir does not end with "fdroid", '
+ 'perhaps you meant: "{path}"'
).format(path=fdroiddir + '/fdroid')
)
sys.exit(1)
if local_copy_dir[-1] != '/':
local_copy_dir += '/'
@ -897,16 +1189,20 @@ def main():
if not os.path.exists(fdroiddir):
os.mkdir(fdroiddir)
if not config.get('awsbucket') \
and not config.get('serverwebroot') \
and not config.get('servergitmirrors') \
and not config.get('androidobservatory') \
and not config.get('binary_transparency_remote') \
and not config.get('virustotal_apikey') \
and local_copy_dir is None:
logging.warning(_('No option set! Edit your config.yml to set at least one of these:')
+ '\nserverwebroot, servergitmirrors, local_copy_dir, awsbucket, '
+ 'virustotal_apikey, androidobservatory, or binary_transparency_remote')
if (
not config.get('awsbucket')
and not config.get('serverwebroot')
and not config.get('servergitmirrors')
and not config.get('androidobservatory')
and not config.get('binary_transparency_remote')
and not config.get('virustotal_apikey')
and local_copy_dir is None
):
logging.warning(
_('No option set! Edit your config.yml to set at least one of these:')
+ '\nserverwebroot, servergitmirrors, local_copy_dir, awsbucket, '
+ 'virustotal_apikey, androidobservatory, or binary_transparency_remote'
)
sys.exit(1)
repo_sections = ['repo']
@ -917,8 +1213,10 @@ def main():
if config['per_app_repos']:
repo_sections += common.get_per_app_repos()
if os.path.isdir('unsigned') or (local_copy_dir is not None
and os.path.isdir(os.path.join(local_copy_dir, 'unsigned'))):
if os.path.isdir('unsigned') or (
local_copy_dir is not None
and os.path.isdir(os.path.join(local_copy_dir, 'unsigned'))
):
repo_sections.append('unsigned')
for repo_section in repo_sections:
@ -935,7 +1233,7 @@ def main():
# update_servergitmirrors will take care of multiple mirrors so don't need a foreach
update_servergitmirrors(config['servergitmirrors'], repo_section)
if config.get('awsbucket'):
update_awsbucket(repo_section)
update_awsbucket(repo_section, options.verbose, options.quiet)
if config.get('androidobservatory'):
upload_to_android_observatory(repo_section)
if config.get('virustotal_apikey'):
@ -943,8 +1241,7 @@ def main():
binary_transparency_remote = config.get('binary_transparency_remote')
if binary_transparency_remote:
push_binary_transparency(BINARY_TRANSPARENCY_DIR,
binary_transparency_remote)
push_binary_transparency(BINARY_TRANSPARENCY_DIR, binary_transparency_remote)
common.write_status_json(common.setup_status_output(start_timestamp))
sys.exit(0)

View File

@ -28,7 +28,6 @@ from .common import FDroidPopen
from .exception import FDroidException
config = None
options = None
start_timestamp = time.gmtime()
@ -42,14 +41,14 @@ def status_update_json(signed):
def main():
global config, options
global config
# Parse command line...
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
common.parse_args(parser)
config = common.read_config(options)
config = common.read_config()
repodirs = ['repo']
if config['archive_older'] != 0:

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Extract application metadata from a source repository."""
#
# import_subcommand.py - part of the FDroid server tools
# Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com
@ -30,6 +31,7 @@ import yaml
from argparse import ArgumentParser
import logging
from pathlib import Path
from typing import Optional
try:
from yaml import CSafeLoader as SafeLoader
@ -43,7 +45,6 @@ from .exception import FDroidException
config = None
options = None
def handle_retree_error_on_windows(function, path, excinfo):
@ -53,7 +54,20 @@ def handle_retree_error_on_windows(function, path, excinfo):
function(path)
def clone_to_tmp_dir(app):
def clone_to_tmp_dir(app: metadata.App, rev=None) -> Path:
"""Clone the source repository of an app to a temporary directory for further processing.
Parameters
----------
app
The App instance to clone the source of.
Returns
-------
tmp_dir
The (temporary) directory the apps source has been cloned into.
"""
tmp_dir = Path('tmp')
tmp_dir.mkdir(exist_ok=True)
@ -62,12 +76,12 @@ def clone_to_tmp_dir(app):
if tmp_dir.exists():
shutil.rmtree(str(tmp_dir), onerror=handle_retree_error_on_windows)
vcs = common.getvcs(app.RepoType, app.Repo, tmp_dir)
vcs.gotorevision(options.rev)
vcs.gotorevision(rev)
return tmp_dir
def getrepofrompage(url):
def getrepofrompage(url: str) -> tuple[Optional[str], str]:
"""Get the repo type and address from the given web page.
The page is scanned in a rather naive manner for 'git clone xxxx',
@ -75,6 +89,17 @@ def getrepofrompage(url):
that's the information we want. Returns repotype, address, or
None, reason
Parameters
----------
url
The url to look for repository information at.
Returns
-------
repotype_or_none
The found repository type or None if an error occured.
address_or_reason
The address to the found repository or the reason if an error occured.
"""
if not url.startswith('http'):
return (None, _('{url} does not start with "http"!'.format(url=url)))
@ -120,13 +145,29 @@ def getrepofrompage(url):
return (None, _("No information found.") + page)
def get_app_from_url(url):
def get_app_from_url(url: str) -> metadata.App:
"""Guess basic app metadata from the URL.
The URL must include a network hostname, unless it is an lp:,
file:, or git/ssh URL. This throws ValueError on bad URLs to
match urlparse().
Parameters
----------
url
The URL to look to look for app metadata at.
Returns
-------
app
App instance with the found metadata.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If the VCS type could not be determined.
:exc:`ValueError`
If the URL is invalid.
"""
parsed = urllib.parse.urlparse(url)
invalid_url = False
@ -183,7 +224,21 @@ def get_app_from_url(url):
def main():
global config, options
"""Extract app metadata and write it to a file.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.FDroidException`
If the repository already has local metadata, no URL is specified and
the current directory is not a Git repository, no application ID could
be found, no Gradle project could be found or there is already metadata
for the found application ID.
"""
global config
# Parse command line...
parser = ArgumentParser()
@ -201,10 +256,10 @@ def main():
parser.add_argument("--rev", default=None,
help=_("Allows a different revision (or git branch) to be specified for the initial import"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
apps = metadata.read_metadata()
app = None
@ -235,7 +290,7 @@ def main():
write_local_file = True
elif options.url:
app = get_app_from_url(options.url)
tmp_importer_dir = clone_to_tmp_dir(app)
tmp_importer_dir = clone_to_tmp_dir(app, options.rev)
git_repo = git.Repo(tmp_importer_dir)
if not options.omit_disable:

View File

@ -125,6 +125,13 @@ def make(apps, apks, repodir, archive):
make_v2(sortedapps, apks, repodir, repodict, requestsdict,
fdroid_signing_key_fingerprints, archive)
make_website(sortedapps, repodir, repodict)
make_altstore(
sortedapps,
apks,
common.config,
repodir,
pretty=common.options.pretty,
)
def _should_file_be_generated(path, magic_string):
@ -195,10 +202,10 @@ def make_website(apps, repodir, repodict):
<kbd>
{number_of_apps}
</kbd>
apps. To add it to your F-Droid client, scan the QR code (click it to enlarge) or use this URL:
apps. To add it to your F-Droid app, scan the QR code (click it to enlarge) or use this link:
</p>
<p class="center" style="margin-top:.5em">
<a href="{link_fingerprinted}">
<a href="https://fdroid.link/#{link_fingerprinted}">
<code style="color:#000000;font-weight:bold;">
{link}
</code>
@ -640,7 +647,15 @@ def convert_version(version, app, repodir):
if version["versionCode"] > app["CurrentVersionCode"]:
ver[RELEASECHANNELS_CONFIG_NAME] = ["Beta"]
for build in app.get('Builds', []):
builds = app.get("Builds", [])
if len(builds) > 0 and version["versionCode"] == builds[-1]["versionCode"]:
if "localized" in app:
localized = {k: v["whatsNew"] for k, v in app["localized"].items() if "whatsNew" in v}
if localized:
ver["whatsNew"] = localized
for build in builds:
if build['versionCode'] == version['versionCode'] and "whatsNew" in build:
ver["whatsNew"] = build["whatsNew"]
break
@ -1742,3 +1757,100 @@ def get_public_key_from_jar(jar):
public_key_fingerprint = common.get_cert_fingerprint(public_key).replace(' ', '')
return public_key, public_key_fingerprint
def make_altstore(apps, apks, config, repodir, pretty=False):
"""Assemble altstore-index.json for iOS (.ipa) apps.
builds index files based on:
https://faq.altstore.io/distribute-your-apps/make-a-source
https://faq.altstore.io/distribute-your-apps/updating-apps
"""
if not any(Path(repodir).glob('*.ipa')):
# no IPA files present in repo, nothing to do here, exiting early
return
indent = 2 if pretty else None
# for now alt-store support is english only
for lang in ['en']:
# prepare minimal altstore index
idx = {
'name': config['repo_name'],
"apps": [],
"news": [],
}
# add optional values if available
# idx["subtitle"] F-Droid doesn't have a corresponding value
if config.get("repo_description"):
idx['description'] = config['repo_description']
if (Path(repodir) / 'icons' / config['repo_icon']).exists():
idx['iconURL'] = f"{config['repo_url']}/icons/{config['repo_icon']}"
# idx["headerURL"] F-Droid doesn't have a corresponding value
# idx["website"] F-Droid doesn't have a corresponding value
# idx["patreonURL"] F-Droid doesn't have a corresponding value
# idx["tintColor"] F-Droid doesn't have a corresponding value
# idx["featuredApps"] = [] maybe mappable to F-Droids what's new?
# assemble "apps"
for packageName, app in apps.items():
app_name = app.get("Name") or app.get("AutoName")
icon_url = "{}{}".format(
config['repo_url'],
app.get('iconv2', {}).get(DEFAULT_LOCALE, {}).get('name', ''),
)
screenshot_urls = [
"{}{}".format(config["repo_url"], s["name"])
for s in app.get("screenshots", {})
.get("phone", {})
.get(DEFAULT_LOCALE, {})
]
a = {
"name": app_name,
'bundleIdentifier': packageName,
'developerName': app.get("AuthorName") or f"{app_name} team",
'iconURL': icon_url,
"localizedDescription": "",
'appPermissions': {
"entitlements": set(),
"privacy": {},
},
'versions': [],
}
if app.get('summary'):
a['subtitle'] = app['summary']
# a["tintColor"] F-Droid doesn't have a corresponding value
# a["category"] F-Droid doesn't have a corresponding value
# a['patreon'] F-Droid doesn't have a corresponding value
a["screenshots"] = screenshot_urls
# populate 'versions'
for apk in apks:
last4 = apk.get('apkName', '').lower()[-4:]
if apk['packageName'] == packageName and last4 == '.ipa':
v = {
"version": apk["versionName"],
"date": apk["added"].isoformat(),
"downloadURL": f"{config['repo_url']}/{apk['apkName']}",
"size": apk['size'],
}
# v['localizedDescription'] maybe what's new text?
v["minOSVersion"] = apk["ipa_MinimumOSVersion"]
v["maxOSVersion"] = apk["ipa_DTPlatformVersion"]
# writing this spot here has the effect that always the
# permissions of the latest processed permissions list used
a['appPermissions']['privacy'] = apk['ipa_permissions']
a['appPermissions']['entitlements'] = list(apk['ipa_entitlements'])
a['versions'].append(v)
if len(a['versions']) > 0:
idx['apps'].append(a)
with open(Path(repodir) / 'altstore-index.json', "w", encoding="utf-8") as f:
json.dump(idx, f, indent=indent)

View File

@ -32,7 +32,6 @@ from . import common
from .exception import FDroidException
config = {}
options = None
def disable_in_config(key, value):
@ -49,7 +48,7 @@ def disable_in_config(key, value):
def main():
global options, config
global config
# Parse command line...
parser = ArgumentParser()
@ -81,7 +80,9 @@ def main():
default=False,
help=_("Do not prompt for Android SDK path, just fail"),
)
options = parser.parse_args()
options = common.parse_args(parser)
common.set_console_logging(options.verbose)
fdroiddir = os.getcwd()
test_config = dict()
@ -169,7 +170,7 @@ def main():
raise FDroidException('Repository already exists.')
# now that we have a local config.yml, read configuration...
config = common.read_config(options)
config = common.read_config()
# the NDK is optional and there may be multiple versions of it, so it's
# left for the user to configure
@ -280,14 +281,19 @@ def main():
msg += '\n\n'
msg += (
_(
'''To complete the setup, add your APKs to "%s"
"""To complete the setup, add your APKs to "%s"
then run "fdroid update -c; fdroid update". You might also want to edit
"config.yml" to set the URL, repo name, and more. You should also set up
a signing key (a temporary one might have been automatically generated).
For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo
and https://f-droid.org/docs/Signing_Process'''
and https://f-droid.org/docs/Signing_Process"""
)
% os.path.join(fdroiddir, 'repo')
)
logging.info(msg)
if not options.quiet:
# normally, INFO is only shown with --verbose, but show this unless --quiet
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info(msg)
logging.shutdown()

View File

@ -28,7 +28,6 @@ from . import common
from .common import SdkToolsPopen
from .exception import FDroidException
options = None
config = None
@ -44,20 +43,36 @@ def devices():
def main():
global options, config
global config
# Parse command line...
parser = ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
parser = ArgumentParser(
usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]"
)
common.setup_global_opts(parser)
parser.add_argument("appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"))
parser.add_argument("-a", "--all", action="store_true", default=False,
help=_("Install all signed applications available"))
options = parser.parse_args()
parser.add_argument(
"appid",
nargs='*',
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
)
parser.add_argument(
"-a",
"--all",
action="store_true",
default=False,
help=_("Install all signed applications available"),
)
options = common.parse_args(parser)
common.set_console_logging(options.verbose)
if not options.appid and not options.all:
parser.error(_("option %s: If you really want to install all the signed apps, use --all") % "all")
parser.error(
_("option %s: If you really want to install all the signed apps, use --all")
% "all"
)
config = common.read_config(options)
config = common.read_config()
output_dir = 'repo'
if not os.path.isdir(output_dir):
@ -65,14 +80,12 @@ def main():
sys.exit(0)
if options.appid:
vercodes = common.read_pkg_args(options.appid, True)
common.get_metadata_files(vercodes) # only check appids
common.get_metadata_files(vercodes) # only check appids
apks = {appid: None for appid in vercodes}
# Get the signed APK with the highest vercode
for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))):
try:
appid, vercode = common.publishednameinfo(apkfile)
except FDroidException:
@ -88,9 +101,10 @@ def main():
raise FDroidException(_("No signed APK available for %s") % appid)
else:
apks = {common.publishednameinfo(apkfile)[0]: apkfile for apkfile in
sorted(glob.glob(os.path.join(output_dir, '*.apk')))}
apks = {
common.publishednameinfo(apkfile)[0]: apkfile
for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk')))
}
for appid, apk in apks.items():
# Get device list each time to avoid device not found errors
@ -99,7 +113,11 @@ def main():
raise FDroidException(_("No attached devices found"))
logging.info(_("Installing %s...") % apk)
for dev in devs:
logging.info(_("Installing '{apkfilename}' on {dev}...").format(apkfilename=apk, dev=dev))
logging.info(
_("Installing '{apkfilename}' on {dev}...").format(
apkfilename=apk, dev=dev
)
)
p = SdkToolsPopen(['adb', "-s", dev, "install", apk])
fail = ""
for line in p.output.splitlines():
@ -109,11 +127,17 @@ def main():
continue
if fail == "INSTALL_FAILED_ALREADY_EXISTS":
logging.warning(_('"{apkfilename}" is already installed on {dev}.')
.format(apkfilename=apk, dev=dev))
logging.warning(
_('"{apkfilename}" is already installed on {dev}.').format(
apkfilename=apk, dev=dev
)
)
else:
raise FDroidException(_("Failed to install '{apkfilename}' on {dev}: {error}")
.format(apkfilename=apk, dev=dev, error=fail))
raise FDroidException(
_("Failed to install '{apkfilename}' on {dev}: {error}").format(
apkfilename=apk, dev=dev, error=fail
)
)
logging.info('\n' + _('Finished'))

View File

@ -31,7 +31,6 @@ from . import metadata
from . import rewritemeta
config = None
options = None
def enforce_https(domain):
@ -214,7 +213,7 @@ regex_checks = {
_("Forbidden HTML tags"),
),
(
re.compile(r'''.*\s+src=["']javascript:.*'''),
re.compile(r""".*\s+src=["']javascript:.*"""),
_("Javascript in HTML src attributes"),
),
],
@ -378,8 +377,7 @@ def check_checkupdates_ran(app):
if filling_ucms.match(app.UpdateCheckMode):
if not app.AutoName and not app.CurrentVersion and app.CurrentVersionCode == 0:
yield _(
"UpdateCheckMode is set but it looks like"
"checkupdates hasn't been run yet"
"UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
)
@ -460,9 +458,12 @@ def check_builds(app):
"Branch '{branch}' used as commit in srclib '{srclib}'"
).format(branch=s, srclib=srclib)
else:
yield _(
'srclibs missing name and/or @'
) + ' (srclibs: ' + srclib + ')'
yield (
_('srclibs missing name and/or @')
+ ' (srclibs: '
+ srclib
+ ')'
)
for key in build.keys():
if key not in supported_flags:
yield _('%s is not an accepted build field') % key
@ -501,7 +502,7 @@ def check_files_dir(app):
def check_format(app):
if options.format and not rewritemeta.proper_format(app):
if common.options.format and not rewritemeta.proper_format(app):
yield _("Run rewritemeta to fix formatting")
@ -723,7 +724,13 @@ def check_updates_ucm_http_aum_pattern(app): # noqa: D403
def check_certificate_pinned_binaries(app):
if len(app.get('AllowedAPKSigningKeys')) > 0:
keys = app.get('AllowedAPKSigningKeys')
known_keys = common.config.get('apk_signing_key_block_list', [])
if keys:
if known_keys:
for key in keys:
if key in known_keys:
yield _('Known debug key is used in AllowedAPKSigningKeys: ') + key
return
if app.get('Binaries') is not None:
yield _(
@ -779,7 +786,7 @@ def lint_config(arg):
def main():
global config, options
global config
# Parse command line...
parser = ArgumentParser()
@ -804,10 +811,10 @@ def main():
"appid", nargs='*', help=_("application ID of file to operate on")
)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
load_antiFeatures_config()
load_categories_config()

View File

@ -15,11 +15,9 @@ from . import common
from . import index
from . import update
options = None
def _run_wget(path, urls):
if options.verbose:
def _run_wget(path, urls, verbose=False):
if verbose:
verbose = '--verbose'
else:
verbose = '--no-verbose'
@ -48,8 +46,6 @@ def _run_wget(path, urls):
def main():
global options
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument(
@ -93,7 +89,9 @@ def main():
parser.add_argument(
"--output-dir", default=None, help=_("The directory to write the mirror to")
)
options = parser.parse_args()
options = common.parse_args(parser)
common.set_console_logging(options.verbose)
if options.all:
options.archive = True
@ -117,7 +115,7 @@ def main():
)
if fingerprint:
config = common.read_config(options)
config = common.read_config()
if not ('jarsigner' in config or 'apksigner' in config):
logging.error(
_('Java JDK not found! Install in standard location or set java_paths!')
@ -152,10 +150,10 @@ def main():
if hostname == 'f-droid.org' or (
ip is not None and hostname in socket.gethostbyname_ex('f-droid.org')[2]
):
print(
logging.error(
_(
'ERROR: this command should never be used to mirror f-droid.org!\n'
'A full mirror of f-droid.org requires more than 200GB.'
'This command should never be used to mirror f-droid.org! '
'A full copy requires more than 600GB.'
)
)
sys.exit(1)
@ -227,7 +225,7 @@ def main():
_append_to_url_path(section, f[:-4] + '.log.gz')
)
_run_wget(sectiondir, urls)
_run_wget(sectiondir, urls, options.verbose)
for app in data['apps']:
localized = app.get('localized')
@ -240,7 +238,7 @@ def main():
if f:
filepath_tuple = components + (f,)
urls.append(_append_to_url_path(*filepath_tuple))
_run_wget(os.path.join(basedir, *components), urls)
_run_wget(os.path.join(basedir, *components), urls, options.verbose)
for k in update.SCREENSHOT_DIRS:
urls = []
filelist = d.get(k)
@ -249,7 +247,11 @@ def main():
for f in filelist:
filepath_tuple = components + (f,)
urls.append(_append_to_url_path(*filepath_tuple))
_run_wget(os.path.join(basedir, *components), urls)
_run_wget(
os.path.join(basedir, *components),
urls,
options.verbose,
)
urls = dict()
for app in data['apps']:
@ -266,7 +268,12 @@ def main():
urls[icondir].append(url)
for icondir in icondirs:
_run_wget(os.path.join(basedir, section, icondir), urls[icondir])
if icondir in urls:
_run_wget(
os.path.join(basedir, section, icondir),
urls[icondir],
options.verbose,
)
if __name__ == "__main__":

View File

@ -29,12 +29,20 @@ HEADERS = {'User-Agent': 'F-Droid'}
def download_file(url, local_filename=None, dldir='tmp', retries=3, backoff_factor=0.1):
"""Try hard to download the file, including retrying on failures.
This has two retry cycles, one inside of the requests session, the
other provided by this function. The requests retry logic applies
to failed DNS lookups, socket connections and connection timeouts,
never to requests where data has made it to the server. This
handles ChunkedEncodingError during transfer in its own retry
loop. This can result in more retries than are specified in the
retries parameter.
"""
filename = urllib.parse.urlparse(url).path.split('/')[-1]
if local_filename is None:
local_filename = os.path.join(dldir, filename)
# Retry applies to failed DNS lookups, socket connections and connection
# timeouts, never to requests where data has made it to the server; so we
# handle ChunkedEncodingError during transfer ourselves.
for i in range(retries + 1):
if retries:
max_retries = Retry(total=retries - i, backoff_factor=backoff_factor)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
"""Set up an app build for a nightly build repo."""
#
# nightly.py - part of the FDroid server tools
# Copyright (C) 2017 Hans-Christoph Steiner <hans@eds.org>
@ -32,6 +33,7 @@ import tempfile
import yaml
from urllib.parse import urlparse
from argparse import ArgumentParser
from typing import Optional
from . import _
from . import common
@ -48,12 +50,38 @@ DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US'
NIGHTLY = '-nightly'
def _get_keystore_secret_var(keystore):
def _get_keystore_secret_var(keystore: str) -> str:
"""Get keystore secret as base64.
Parameters
----------
keystore
The path of the keystore.
Returns
-------
base64_secret
The keystore secret as base64 string.
"""
with open(keystore, 'rb') as fp:
return base64.standard_b64encode(fp.read()).decode('ascii')
def _ssh_key_from_debug_keystore(keystore=None):
def _ssh_key_from_debug_keystore(keystore: Optional[str] = None) -> str:
"""Convert a debug keystore to an SSH private key.
This leaves the original keystore file in place.
Parameters
----------
keystore
The keystore to convert to a SSH private key.
Returns
-------
key_path
The SSH private key file path in the temporary directory.
"""
if keystore is None:
# set this here so it can be overridden in the tests
# TODO convert this to a class to get rid of this nonsense
@ -148,7 +176,23 @@ def _ssh_key_from_debug_keystore(keystore=None):
return ssh_private_key_file
def get_repo_base_url(clone_url, repo_git_base, force_type=None):
def get_repo_base_url(clone_url: str, repo_git_base: str, force_type: Optional[str] = None) -> str:
"""Generate the base URL for the F-Droid repository.
Parameters
----------
clone_url
The URL to clone the Git repository.
repo_git_base
The project path of the Git repository at the Git forge.
force_type
The Git forge of the project.
Returns
-------
repo_base_url
The base URL of the F-Droid repository.
"""
if force_type is None:
force_type = urlparse(clone_url).netloc
if force_type == 'gitlab.com':
@ -160,6 +204,17 @@ def get_repo_base_url(clone_url, repo_git_base, force_type=None):
def main():
"""Deploy to F-Droid repository or generate SSH private key from keystore.
The behaviour of this function is influenced by the configuration file as
well as command line parameters.
Raises
------
:exc:`~fdroidserver.exception.VCSException`
If the nightly Git repository could not be cloned during an attempt to
deploy.
"""
parser = ArgumentParser()
common.setup_global_opts(parser)
parser.add_argument(
@ -204,8 +259,7 @@ def main():
help=_("Set maximum releases in repo before older ones are archived"),
)
# TODO add --with-btlog
options = parser.parse_args()
common.options = options
options = common.parse_args(parser)
# force a tighter umask since this writes private key material
umask = os.umask(0o077)
@ -306,7 +360,10 @@ def main():
readme = '''
# {repo_git_base}
[![{repo_url}]({repo_url}/icons/icon.png)]({repo_url})
This is an app repository for nightly versions.
You can use it with the [F-Droid](https://f-droid.org/) Android app.
[![{repo_url}]({repo_url}/icons/icon.png)](https://fdroid.link/#{repo_url})
Last updated: {date}'''.format(repo_git_base=repo_git_base,
repo_url=repo_url,
@ -370,7 +427,7 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
with open('config.yml', 'w') as fp:
yaml.dump(config, fp, default_flow_style=False)
os.chmod('config.yml', 0o600)
config = common.read_config(options)
config = common.read_config()
common.assert_config_keystore(config)
for root, dirs, files in os.walk(cibase):

View File

@ -18,6 +18,16 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Sign APKs using keys or via reproducible builds signature copying.
This command takes unsigned APKs and signs them. It looks for
unsigned APKs in the unsigned/ directory and puts successfully signed
APKs into the repo/ directory. The default is to run in a kind of
batch mode, where it will only quit on certain kinds of errors. It
mostly reports success by moving an APK from unsigned/ to repo/
"""
import sys
import os
import re
@ -39,7 +49,6 @@ from .common import FDroidPopen
from .exception import BuildException, FDroidException
config = None
options = None
start_timestamp = time.gmtime()
@ -259,23 +268,30 @@ def create_key_if_not_existing(keyalias):
def main():
global config, options
global config
# Parse command line...
parser = ArgumentParser(
usage="%(prog)s [options] " "[APPID[:VERCODE] [APPID[:VERCODE] ...]]"
)
common.setup_global_opts(parser)
parser.add_argument(
"-e",
"--error-on-failed",
action="store_true",
default=False,
help=_("When signing or verifying fails, exit with an error code."),
)
parser.add_argument(
"appid",
nargs='*',
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
if not ('jarsigner' in config and 'keytool' in config):
logging.critical(
@ -322,6 +338,7 @@ def main():
).format(len(allapps), len(allaliases))
)
failed = 0
# Process any APKs or ZIPs that are waiting to be signed...
for apkfile in sorted(
glob.glob(os.path.join(unsigned_dir, '*.apk'))
@ -364,12 +381,14 @@ def main():
if not os.path.isfile(srcapk):
logging.error("...reference binary missing - publish skipped: "
"'{refpath}'".format(refpath=srcapk))
failed += 1
else:
# Compare our unsigned one with the downloaded one...
compare_result = common.verify_apks(srcapk, apkfile, tmp_dir)
if compare_result:
logging.error("...verification failed - publish skipped : "
"{result}".format(result=compare_result))
failed += 1
else:
# Success! So move the downloaded file to the repo, and remove
# our built version.
@ -415,6 +434,7 @@ def main():
os.remove(devsignedtmp)
logging.error('...verification failed - skipping: %s', devsigned)
skipsigning = True
failed += 1
# Now we sign with the F-Droid key.
if not skipsigning:
@ -444,6 +464,11 @@ def main():
status_update_json(generated_keys, signed_apks)
logging.info('published list signing-key fingerprints')
if failed:
logging.error(_('%d APKs failed to be signed or verified!') % failed)
if options.error_on_failed:
sys.exit(failed)
if __name__ == "__main__":
main()

View File

@ -20,8 +20,6 @@ from argparse import ArgumentParser
from . import common
from . import metadata
options = None
def main():
parser = ArgumentParser()
@ -29,7 +27,7 @@ def main():
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
metadata.warnings_action = options.W
common.read_config(None)
common.read_config()
metadata.read_metadata()

View File

@ -29,7 +29,6 @@ from . import common
from . import metadata
config = None
options = None
def proper_format(app):
@ -62,7 +61,7 @@ def remove_blank_flags_from_builds(builds):
def main():
global config, options
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
@ -77,10 +76,10 @@ def main():
"appid", nargs='*', help=_("application ID of file to operate on")
)
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
# Get all apps...
allapps = metadata.read_metadata(options.appid)

View File

@ -40,8 +40,6 @@ from . import metadata
from .exception import BuildException, VCSException, ConfigurationException
from . import scanner
options = None
@dataclass
class MessageStore:
@ -50,7 +48,7 @@ class MessageStore:
errors: list = field(default_factory=list)
MAVEN_URL_REGEX = re.compile(r"""\smaven\s*(?:{.*?(?:setUrl|url)|\((?:url)?)\s*=?\s*(?:uri|Uri\.create\()?\(?\s*["']?([^\s"']+)["']?[^})]*[)}]""",
MAVEN_URL_REGEX = re.compile(r"""\smaven\s*(?:{.*?(?:setUrl|url)|\(\s*(?:url)?)\s*=?\s*(?:uri|URI|Uri\.create)?\(?\s*["']?([^\s"']+)["']?[^})]*[)}]""",
re.DOTALL)
@ -62,13 +60,14 @@ class ExitCode(IntEnum):
def get_gradle_compile_commands(build):
compileCommands = ['compile',
'provided',
compileCommands = ['api',
'apk',
'implementation',
'classpath',
'api',
'compile',
'compileOnly',
'id',
'implementation',
'provided',
'runtimeOnly']
buildTypes = ['', 'release']
flavors = ['']
@ -332,8 +331,9 @@ class ScannerTool:
self.scanner_data_lookup()
config = common.get_config()
if (options and options.refresh_scanner) or config.get('refresh_scanner'):
options = common.get_options()
options_refresh_scanner = options and options.refresh_scanner
if options_refresh_scanner or common.get_config().get('refresh_scanner'):
self.refresh()
self.load()
@ -589,6 +589,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None):
-------
0 if the problem was ignored/deleted/is only a warning, 1 otherwise
"""
options = common.get_options()
if toignore(path_in_build_dir):
return ignoreproblem(what, path_in_build_dir, json_per_build)
if todelete(path_in_build_dir):
@ -776,9 +777,6 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None):
def main():
global options
# Parse command line...
parser = ArgumentParser(
usage="%(prog)s [options] [(APPID[:VERCODE] | path/to.apk) ...]"
)
@ -793,7 +791,7 @@ def main():
parser.add_argument("-e", "--exit-code", action="store_true", default=False,
help=_("Exit with a non-zero code if problems were found"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
json_output = dict()
@ -804,7 +802,7 @@ def main():
logging.getLogger().setLevel(logging.ERROR)
# initialize/load configuration values
common.get_config(opts=options)
common.get_config()
probcount = 0

View File

@ -103,9 +103,8 @@ def main():
"APK", nargs='*', help=_("signed APK, either a file-path or HTTPS URL.")
)
parser.add_argument("--no-check-https", action="store_true", default=False)
options = parser.parse_args()
# Read config.py...
common.read_config(options)
options = common.parse_args(parser)
common.set_console_logging(options.verbose)
common.read_config()
extract(options)

View File

@ -29,7 +29,6 @@ from . import metadata
from .exception import FDroidException
config = None
options = None
start_timestamp = time.gmtime()
@ -175,13 +174,13 @@ def status_update_json(signed):
def main():
global config, options
global config
parser = ArgumentParser()
common.setup_global_opts(parser)
options = parser.parse_args()
common.parse_args(parser)
config = common.read_config(options)
config = common.read_config()
if 'jarsigner' not in config:
raise FDroidException(

View File

@ -34,6 +34,7 @@ import json
import time
import yaml
import copy
import asn1crypto.cms
import defusedxml.ElementTree as ElementTree
from datetime import datetime, timezone
from argparse import ArgumentParser
@ -544,25 +545,105 @@ def version_string_to_int(version):
return major * 10**12 + minor * 10**6 + patch
# iOS app permissions, source:
# https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources
IPA_PERMISSIONS = [
"NSBluetoothAlwaysUsageDescription",
"NSBluetoothPeripheralUsageDescription",
"NSCalendarsFullAccessUsageDescription",
"NSCalendarsWriteOnlyAccessUsageDescription",
"NSRemindersFullAccessUsageDescription",
"NSCameraUsageDescription",
"NSMicrophoneUsageDescription",
"NSContactsUsageDescription",
"NSFaceIDUsageDescription",
"NSDesktopFolderUsageDescription",
"NSDocumentsFolderUsageDescription",
"NSDownloadsFolderUsageDescription",
"NSNetworkVolumesUsageDescription",
"NSNetworkVolumesUsageDescription",
"NSRemovableVolumesUsageDescription",
"NSRemovableVolumesUsageDescription",
"NSFileProviderDomainUsageDescription",
"NSGKFriendListUsageDescription",
"NSHealthClinicalHealthRecordsShareUsageDescription",
"NSHealthShareUsageDescription",
"NSHealthUpdateUsageDescription",
"NSHomeKitUsageDescription",
"NSLocationAlwaysAndWhenInUseUsageDescription",
"NSLocationUsageDescription",
"NSLocationWhenInUseUsageDescription",
"NSLocationAlwaysUsageDescription",
"NSAppleMusicUsageDescription",
"NSMotionUsageDescription",
"NSFallDetectionUsageDescription",
"NSLocalNetworkUsageDescription",
"NSNearbyInteractionUsageDescription",
"NSNearbyInteractionAllowOnceUsageDescription",
"NFCReaderUsageDescription",
"NSPhotoLibraryAddUsageDescription",
"NSPhotoLibraryUsageDescription",
"NSAppDataUsageDescription",
"NSUserTrackingUsageDescription",
"NSAppleEventsUsageDescription",
"NSSystemAdministrationUsageDescription",
"NSSensorKitUsageDescription",
"NSSiriUsageDescription",
"NSSpeechRecognitionUsageDescription",
"NSVideoSubscriberAccountUsageDescription",
"NSWorldSensingUsageDescription",
"NSHandsTrackingUsageDescription",
"NSIdentityUsageDescription",
"NSCalendarsUsageDescription",
"NSRemindersUsageDescription",
]
def parse_ipa(ipa_path, file_size, sha256):
from biplist import readPlist
import biplist
ipa = {
"apkName": os.path.basename(ipa_path),
"hash": sha256,
"hashType": "sha256",
"size": file_size,
"ipa_entitlements": set(),
"ipa_permissions": {},
}
with zipfile.ZipFile(ipa_path) as ipa_zip:
for info in ipa_zip.infolist():
if re.match("Payload/[^/]*.app/Info.plist", info.filename):
with ipa_zip.open(info) as plist_file:
plist = readPlist(plist_file)
plist = biplist.readPlist(plist_file)
ipa["name"] = plist['CFBundleName']
ipa["packageName"] = plist["CFBundleIdentifier"]
# https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
ipa["versionCode"] = version_string_to_int(plist["CFBundleShortVersionString"])
ipa["versionName"] = plist["CFBundleShortVersionString"]
ipa["ipa_MinimumOSVersion"] = plist['MinimumOSVersion']
ipa["ipa_DTPlatformVersion"] = plist['DTPlatformVersion']
for ipap in IPA_PERMISSIONS:
if ipap in plist:
ipa["ipa_permissions"][ipap] = str(plist[ipap])
if info.filename.endswith("/embedded.mobileprovision"):
print("parsing", info.filename)
with ipa_zip.open(info) as mopro_file:
mopro_content_info = asn1crypto.cms.ContentInfo.load(
mopro_file.read()
)
mopro_payload_info = mopro_content_info['content']
mopro_payload = mopro_payload_info['encap_content_info'][
'content'
].native
mopro = biplist.readPlistFromString(mopro_payload)
# https://faq.altstore.io/distribute-your-apps/make-a-source#entitlements-array-of-strings
for entitlement in mopro.get('Entitlements', {}).keys():
if entitlement not in [
"com.app.developer.team-identifier",
'application-identifier'
]:
ipa["ipa_entitlements"].add(entitlement)
return ipa
@ -592,8 +673,7 @@ def scan_repo_for_ipas(apkcache, repodir, knownapks):
file_size = os.stat(ipa_path).st_size
if file_size == 0:
raise FDroidException(_('{path} is zero size!')
.format(path=ipa_path))
raise FDroidException(_('{path} is zero size!').format(path=ipa_path))
sha256 = common.sha256sum(ipa_path)
ipa = apkcache.get(ipa_name, {})
@ -855,7 +935,15 @@ def insert_funding_yml_donation_links(apps):
if 'open_collective' in data:
del data['open_collective']
# this tuple provides a preference ordering
for k in ('custom', 'github', 'patreon', 'community_bridge', 'ko_fi', 'issuehunt'):
for k in (
'custom',
'github',
'patreon',
'community_bridge',
'ko_fi',
'issuehunt',
'buy_me_a_coffee'
):
v = data.get(k)
if not v:
continue
@ -864,10 +952,10 @@ def insert_funding_yml_donation_links(apps):
if s:
app['Donate'] = s
break
elif k == 'community_bridge':
elif k in ('community_bridge', 'lfx_crowdfunding'):
s = sanitize_funding_yml_name(v)
if s:
app['Donate'] = 'https://funding.communitybridge.org/projects/' + s
app['Donate'] = 'https://crowdfunding.lfx.linuxfoundation.org/projects/' + s
break
elif k == 'github':
s = sanitize_funding_yml_name(v)
@ -889,6 +977,16 @@ def insert_funding_yml_donation_links(apps):
if s:
app['Donate'] = 'https://patreon.com/' + s
break
elif k == 'buy_me_a_coffee':
s = sanitize_funding_yml_name(v)
if s:
app['Donate'] = 'https://www.buymeacoffee.com/' + s
break
elif k == 'polar':
s = sanitize_funding_yml_name(v)
if s:
app['Donate'] = 'https://polar.sh/' + s
break
def copy_triple_t_store_metadata(apps):
@ -1136,6 +1234,9 @@ def insert_localized_app_metadata(apps):
if base not in apps[packageName] or not isinstance(apps[packageName][base], collections.OrderedDict):
apps[packageName][base] = collections.OrderedDict()
apps[packageName][base][locale] = common.file_entry(dst)
# copy screenshots from local source code checkout into wellknown
# location in repo directory
for d in dirs:
if d in SCREENSHOT_DIRS:
if locale == 'images':
@ -1148,6 +1249,8 @@ def insert_localized_app_metadata(apps):
os.makedirs(screenshotdestdir, mode=0o755, exist_ok=True)
_strip_and_copy_image(f, screenshotdestdir)
def ingest_screenshots_from_repo_dir(apps):
repodirs = sorted(glob.glob(os.path.join('repo', '[A-Za-z]*', '[a-z][a-z]*')))
for d in repodirs:
if not os.path.isdir(d):
@ -1208,6 +1311,144 @@ def insert_localized_app_metadata(apps):
logging.warning(_('Unsupported graphics file found: {path}').format(path=f))
LANG_CODE = re.compile(r'^[a-z]{2}([-_][A-Z][a-zA-Z]{1,3})?$')
FASTLANE_IOS_MAP = {
"name.txt": 'name',
"subtitle.txt": 'summary',
"description.txt": 'description',
}
def parse_ios_screenshot_name(path):
"""
Infer type and categorization info from screenshot file name.
This is not really an exact algorithm, it's based on filenames observed in
the wild.
"""
s = path.stem.split('@')
if len(s) >= 2:
if "iphone" in s[0].lower():
return ("phoneScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip())
elif "ipad" in s[0].lower():
return ("tenInchScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip())
else:
fragments = path.stem.lower().split("_")
device = "unknown"
os = "unknown"
screenshot_type = "phoneScreenshots"
for f in fragments:
if "iphone" in f:
device = f
continue
if "ipad" in f:
screenshot_type = "tenInchScreenshots"
device = f
if "ios" in f:
os = f
return (screenshot_type, device, os)
return ("phoneScreenshots", 'unknown', 'unknown')
def discover_ios_screenshots(fastlane_dir):
"""Traverse git checkouts in build dir, search for fastlane-screenshots and put findings into a dict."""
fastlane_screenshot_dir = fastlane_dir / 'screenshots'
screenshots = {}
if fastlane_screenshot_dir.is_dir():
for lang_sdir in fastlane_screenshot_dir.iterdir():
locale = lang_sdir.name
m = LANG_CODE.match(locale)
if m:
screenshots[locale] = {}
fifo_idevice = {}
fifo_ios = {}
for screenshot in lang_sdir.iterdir():
if screenshot.suffix[1:] in ALLOWED_EXTENSIONS:
screenshot_type, idevice_name, ios_name = parse_ios_screenshot_name(screenshot)
# since there is no easy mapping here, we're just
# resorting to fifo here, so ieg. if there's 2
# screenshots categorized for more than one
# iPhone/iOS combinations we just remember the
# first combination, use them as screenshots in
# F-Droid and ignore all other screenshots, for
# this screenshot type
if not fifo_idevice.get(screenshot_type):
fifo_idevice[screenshot_type] = idevice_name
fifo_ios[screenshot_type] = ios_name
if fifo_idevice[screenshot_type] == idevice_name and fifo_ios[screenshot_type] == ios_name:
if screenshot_type not in screenshots[locale]:
screenshots[locale][screenshot_type] = []
screenshots[locale][screenshot_type].append(screenshot)
# sort all found screenshots alphanumerically
for locale, translated_screenshots in screenshots.items():
for device in translated_screenshots.keys():
translated_screenshots[device].sort()
return screenshots
def copy_ios_screenshots_to_repo(screenshots, package_name):
for locale, translated_screenshots in screenshots.items():
for device, translated_device_screenshots in translated_screenshots.items():
dest_dir = Path('repo') / package_name / locale / device
dest_dir.mkdir(mode=0o755, parents=True, exist_ok=True)
for path in translated_device_screenshots:
dest = dest_dir / (path.name.replace(" ", "_").replace("\t", "_"))
fdroidserver.update._strip_and_copy_image(str(path), str(dest))
def insert_localized_ios_app_metadata(apps_with_packages):
if not any(Path('repo').glob('*.ipa')):
# no IPA files present in repo, nothing to do here, exiting early
return
for package_name, app in apps_with_packages.items():
if not any(Path('repo').glob(f'{package_name}*.ipa')):
# couldn't find any IPA files for this package_name
# so we don't have to look for fastlane data
continue
fastlane_dir = Path('build', package_name, 'fastlane')
fastlane_meta_dir = (fastlane_dir / "metadata")
if fastlane_meta_dir.is_dir():
for lang_dir in fastlane_meta_dir.iterdir():
locale = lang_dir.name
m = LANG_CODE.match(locale)
if m:
for metadata_file in (lang_dir).iterdir():
key = FASTLANE_IOS_MAP.get(metadata_file.name)
if key:
fdroidserver.update._set_localized_text_entry(
app, locale, key, metadata_file
)
screenshots = fdroidserver.update.discover_ios_screenshots(fastlane_dir)
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_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,
}
}
if not icon_dest.exists():
icon_dest.parent.mkdir(parents=True, exist_ok=True)
shutil.copy(icon_path, icon_dest)
def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False):
"""Scan a repo for all files with an extension except APK/OBB/IPA.
@ -1404,6 +1645,60 @@ def _get_apk_icons_src(apkfile, icon_name):
return icons_src
def _get_ipa_icon(src_dir):
"""Search source directory of an IPA project for the app icon."""
# parse app icon name from project config file
src_dir = Path(src_dir)
prj = next(src_dir.glob("**/project.pbxproj"), None)
if not prj or not prj.exists():
return
icon_name = _parse_from_pbxproj(prj, 'ASSETCATALOG_COMPILER_APPICON_NAME')
if not icon_name:
return
icon_dir = next(src_dir.glob(f'**/{icon_name}.appiconset'), None)
if not icon_dir:
return
with open(icon_dir / "Contents.json") as f:
cntnt = json.load(f)
fname = None
fsize = 0
for image in cntnt['images']:
s = float(image.get("size", "0x0").split("x")[0])
if image.get('scale') == "1x" and s > fsize and s <= 128:
fname = image['filename']
fsize = s
return str(icon_dir / fname)
def _parse_from_pbxproj(pbxproj_path, key):
"""Parse values from apple project files.
This is a naive regex based parser. Should this proofe to unreliable we
might want to consider using a dedicated pbxproj parser:
https://pypi.org/project/pbxproj/
e.g. when looking for key 'ASSETCATALOG_COMPILER_APPICON_NAME'
This function will extract 'MyIcon' from if the provided file
contains this line:
ASSETCATALOG_COMPILER_APPICON_NAME = MyIcon;
returns None if parsing for that value didn't yield anything
"""
r = re.compile(f"\\s*{key}\\s*=\\s*(?P<value>[a-zA-Z0-9-_]+)\\s*;\\s*")
with open(pbxproj_path, 'r', encoding='utf-8') as f:
for line in f.readlines():
m = r.match(line)
if m:
return m.group("value")
return None
def _sanitize_sdk_version(value):
"""Sanitize the raw values from androguard to handle bad values.
@ -1427,8 +1722,7 @@ def _sanitize_sdk_version(value):
def scan_apk_androguard(apk, apkfile):
try:
from androguard.core.bytecodes.apk import APK
apkobject = APK(apkfile)
apkobject = common.get_androguard_APK(apkfile)
if apkobject.is_valid_APK():
arsc = apkobject.get_android_resources()
else:
@ -1444,7 +1738,7 @@ def scan_apk_androguard(apk, apkfile):
logging.error(_("Failed to get APK information, skipping {path}")
.format(path=apkfile))
raise BuildException(_("Invalid APK"))
except (FileNotFoundError, zipfile.BadZipFile) as e:
except (FileNotFoundError, ValueError, zipfile.BadZipFile) as e:
logging.error(_("Could not open APK {path} for analysis: ").format(path=apkfile)
+ str(e))
raise BuildException(_("Invalid APK")) from e
@ -1484,7 +1778,7 @@ def scan_apk_androguard(apk, apkfile):
if maxSdkVersion is not None:
apk['maxSdkVersion'] = maxSdkVersion
icon_id_str = apkobject.get_element("application", "icon")
icon_id_str = apkobject.get_attribute_value("application", "icon")
if icon_id_str:
try:
icon_id = int(icon_id_str.replace("@", "0x"), 16)
@ -1616,8 +1910,10 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal
return True, None, False
# Check for debuggable apks...
if common.is_apk_and_debuggable(apkfile):
logging.warning('{0} is set to android:debuggable="true"'.format(apkfile))
if common.is_debuggable_or_testOnly(apkfile):
logging.warning(
"%s: debuggable or testOnly set in AndroidManifest.xml" % apkfile
)
if options.rename_apks:
n = apk['packageName'] + '_' + str(apk['versionCode']) + '.apk'
@ -2238,6 +2534,8 @@ def prepare_apps(apps, apks, repodir):
translate_per_build_anti_features(apps_with_packages, apks)
if repodir == 'repo':
insert_localized_app_metadata(apps_with_packages)
insert_localized_ios_app_metadata(apps_with_packages)
ingest_screenshots_from_repo_dir(apps_with_packages)
insert_missing_app_names_from_apks(apps_with_packages, apks)
return apps_with_packages
@ -2276,13 +2574,12 @@ def main():
parser.add_argument("--allow-disabled-algorithms", action="store_true", default=False,
help=_("Include APKs that are signed with disabled algorithms like MD5"))
metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = common.parse_args(parser)
metadata.warnings_action = options.W
config = common.read_config(options)
config = common.read_config()
common.setup_status_output(start_timestamp)
common.use_androguard()
if not (('jarsigner' in config or 'apksigner' in config)
and 'keytool' in config):
raise FDroidException(_('Java JDK not found! Install in standard location or set java_paths!'))

View File

@ -30,7 +30,6 @@ from . import common
from . import net
from .exception import FDroidException
options = None
config = None
@ -146,7 +145,7 @@ def write_json_report(url, remote_apk, unsigned_apk, compare_result):
def main():
global options, config
global config
# Parse command line...
parser = ArgumentParser(
@ -170,9 +169,9 @@ def main():
default=False,
help=_("Output JSON report to file named after APK."),
)
options = parser.parse_args()
options = common.parse_args(parser)
config = common.read_config(options)
config = common.read_config()
tmp_dir = 'tmp'
if not os.path.isdir(tmp_dir):

View File

@ -199,6 +199,7 @@ get_sha() {
'8.4') echo '3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae' ;;
'8.5') echo '9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026' ;;
'8.6') echo '9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c' ;;
'8.7') echo '544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d' ;;
*) exit 1
esac
}
@ -215,11 +216,11 @@ contains() {
# (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.4 8.3 8.2 8.1 8.0 7.4 7.3 7.2.0 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 1.5 1.3 1.2 1.1 1.0 0.14 0.13 0.12 0.11 0.10 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2)
d_gradle_plugin_ver_k=(8.4 8.3 8.2 8.1 8.0 7.4 7.3 7.2.0 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.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 2.4 2.4 2.3 2.2.1 2.2.1 2.1 2.1 1.12 1.12 1.12 1.11 1.10 1.9 1.8 1.6 1.6 1.4 1.4)
# All gradle versions we know about
plugin_v=(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.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)
plugin_v=(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.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[@]}

View File

@ -1790,7 +1790,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-05-26 19:39+0000\n"
"Last-Translator: Mehrab Poladov <thepoladov@protonmail.com>\n"
"Language-Team: Azerbaijani <https://hosted.weblate.org/projects/f-droid/fdroidserver/az/>\n"
@ -90,6 +90,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: xəta: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -209,6 +214,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -286,6 +296,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -382,6 +396,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -548,6 +567,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -614,6 +643,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -780,6 +814,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -844,6 +882,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1049,6 +1091,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1186,6 +1232,10 @@ msgstr ""
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 ""
@ -1344,6 +1394,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1377,6 +1431,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1626,6 +1684,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1787,6 +1849,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1819,6 +1885,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1848,6 +1918,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1905,6 +1979,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2054,6 +2132,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2228,6 +2310,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2385,6 +2472,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2399,6 +2491,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2603,6 +2699,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2613,6 +2734,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1789,7 +1789,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 2.1b0\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@ -89,6 +89,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -208,6 +213,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -285,6 +295,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -381,6 +395,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -547,6 +566,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -613,6 +642,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -779,6 +813,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -843,6 +881,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1048,6 +1090,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1185,6 +1231,10 @@ msgstr ""
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 ""
@ -1343,6 +1393,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1376,6 +1430,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1625,6 +1683,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1786,6 +1848,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1818,6 +1884,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1847,6 +1917,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1904,6 +1978,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2053,6 +2131,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2227,6 +2309,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2384,6 +2471,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2398,6 +2490,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2602,6 +2698,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2612,6 +2733,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-02-12 09:48+0000\n"
"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n"
"Language-Team: Bengali <https://hosted.weblate.org/projects/f-droid/fdroidserver/bn/>\n"
@ -90,6 +90,11 @@ msgstr[1] ""
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -209,6 +214,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -286,6 +296,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -382,6 +396,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -548,6 +567,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -614,6 +643,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -780,6 +814,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -844,6 +882,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1049,6 +1091,10 @@ msgstr "{apkfilename} প্রক্রিয়ারত"
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1186,6 +1232,10 @@ msgstr ""
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 ""
@ -1344,6 +1394,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1377,6 +1431,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1626,6 +1684,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1787,6 +1849,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1819,6 +1885,10 @@ msgstr "ব্যবহার"
msgid "Usage: %s\n"
msgstr "ব্যবহার: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1848,6 +1918,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1905,6 +1979,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2054,6 +2132,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2228,6 +2310,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Tibetan <https://hosted.weblate.org/projects/f-droid/fdroidserver/bo/>\n"
"Language: bo\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.14.1-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
#, fuzzy
@ -94,6 +94,11 @@ msgstr[0] "%(option)s གདམ་ཀ་དགོས་ %(number)d རྩོད
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -191,9 +196,9 @@ msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}"
msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུག{field} འདི་ནང་ {appid}. Regex འགྲོ་ལུགས་: {pattern}"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "'{value}' is not a valid {field}, should be {pattern}"
msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུག{field} འདི་ནང་ {appid}. Regex འགྲོ་ལུགས་: {pattern}"
msgstr ""
#: ../fdroidserver/checkupdates.py
#, python-brace-format
@ -214,6 +219,11 @@ msgstr "/གནས་དོན་བོར་བརླག་སོང་འད
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "{path}མིང་རྟགས་བཀོད་པའི་ཆོག་མཆན་ལག་ཁྱེར་འདིའི་ནང་རྙེད་མ་སོང་།"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "PGP གྱི་མིང་རྟགས་དེ་རེ་པོ་ཐུམ་སྒྲིལ་ནང་GnuPG ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག"
@ -291,6 +301,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -386,6 +400,11 @@ msgstr "སྡེ་ཚན་'%s' ཁུངས་ལྡན་མ་རེད།"
msgid "Categories are not set"
msgstr "སྡེ་ཚན་རྣམས་སྒྲིག་མེད།"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "མཉེན་ཆས་རྣམས་གསར་བསྒྱུར་བྱས་མིན་གཟིགས་ཞིབ་གནང་དང་།"
@ -556,6 +575,16 @@ msgstr "འགྲེལ་བཤད་འདི་ལ་ཐོ་གཞུང་
msgid "Description of length {length} is over the {limit} char limit"
msgstr "རིང་ཐུང་གི་འགྲེལ་བཤད་ {length} {limit} ལས་བརྒལ་འདུག char limit"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -622,6 +651,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr "'{field}'ནང་གི་ངོ་བཤུས་སྦྲེལ་མཐུད།: {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -792,6 +826,11 @@ msgstr "མཉེན་ཆས་ཁ་ཤས་ཀྱི་ཁུངས་ལྡ
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "{path}ནང་ལ་སྣ་མང་མིང་རྟགས་ཆོག་མཆན་ལག་ཁྱེར་རྙེད་སོང་།"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "མཛོད་ཁང་ཆེད་དུ་་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་མང་པོ་རྙེད་འདུག."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -857,6 +896,11 @@ msgstr ""
msgid "Git reset failed"
msgstr "གིཊ་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་།"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་གསར་བསྒྱུར་ཐུབ་མ་སོང་།"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "གིཊ་རྒྱ་ཁྱོན་མཉམ་བསྲེ་ཐུབ་མ་སོང་།"
@ -1062,6 +1106,10 @@ msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བ
msgid "Keystore for signing key:\t"
msgstr "མིང་རྟགས་བཀོད་པའི་ལྡེ་མིག་ཆེད་དུ་སྟོན་པའི་ལྡེ་མིག་གསོག་ཉར་ཁང་གི་ལམ།\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, fuzzy, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1147,7 +1195,7 @@ msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།."
#: ../fdroidserver/checkupdates.py
#, fuzzy
msgid "No matching tags found"
msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།."
msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།"
#: ../fdroidserver/update.py
#, python-brace-format
@ -1204,6 +1252,11 @@ msgstr "ཟུར་སྣོན་ཡོ་བྱད་རྙེད་མ་ས
msgid "No unsigned directory - nothing to do"
msgstr "མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་དེབ་མིན་འདུག-བྱ་རྒྱུ་གང་ཡང་མེད།"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr ""
@ -1363,6 +1416,10 @@ msgstr "ཐོ་གཞུད་འདི་གིཊ་ཐག་རིང་ག
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}"
@ -1396,6 +1453,10 @@ msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བ
msgid "Reading {apkfilename} from cache"
msgstr "སྦས་ཁུང་ནས་ {apkfilename}ཀློག་བཞིན་པ།"
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "དམིགས་སྟོན་བྱས་པའི་ཡིག་ཆ་རྣམས་མེད་པ་བཟོ་བཞིན་པ།"
@ -1470,9 +1531,9 @@ msgid "Scan the source code of a package"
msgstr "ཐུམ་སྒྲིལ་བྱས་པའི་འབྱུང་ཁུངས་ཨང་རྟགས་འཚག་རྒྱབ"
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "Scanner found {count} problems in {apk}"
msgstr "འཚག་རྒྱབ་ལ་སྐྱོན་རྙེད་པ།"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -1644,6 +1705,10 @@ msgstr "ལྡེ་མིག་གཞན་ལ་སྐྱོན་ཆ་འད
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 ""
#: ../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 ""
@ -1806,6 +1871,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1839,6 +1908,11 @@ msgstr "བེད་སྤྱོད།"
msgid "Usage: %s\n"
msgstr "བེད་སྤྱོད།:%s 1\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "བེད་སྤྱོད།/HEAD གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "བེད་སྤྱོད།/HEAD གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།"
@ -1868,6 +1942,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1925,6 +2003,10 @@ msgstr "བརྡ་སྟོན་པའི་མིང་རྟགས་དེ
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'ཁྱད་པར་ཅན་གྱི་མིང་' ལྡེ་མིག་བཟོས་པའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།"
@ -2076,6 +2158,10 @@ msgstr "ཚིག་སྒྲུབ་ཀྱི་གདམ་ཀའི་རྙ
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2166,7 +2252,7 @@ msgstr "གཡེང་ཚེག"
#: ../fdroidserver/metadata.py
#, fuzzy
msgid "force metadata errors (default) to be warnings, or to be ignored."
msgstr "སྐྱོན་ཤོར་བ་ལ་ཉེན་བརྡ་ངེས་པར་དུ་གཏོང་དགོས་པ་དང་། ཡང་ན་ཡ་མ་བྱེད།"
msgstr "སྐྱོན་ཤོར་བ་ལ་ཉེན་བརྡ་ངེས་པར་དུ་གཏོང་དགོས་པ་དང་། ཡང་ན་ཡ་མ་བྱེད།."
#: ../fdroidserver/common.py
#, fuzzy
@ -2254,6 +2340,11 @@ msgstr "local_copy_dir ངེས་པར་ཕྱོགས་དེབ་ཡི
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "མེ་ལོང་། '%s 1' 'fdroid'དང་མཉམ་དུ་མཇུག་སྐྱོང་མི་ཐུབ།!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2288,7 +2379,7 @@ msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བས
#: ../fdroidserver/checkupdates.py
#, fuzzy
msgid "no version information found"
msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།!"
msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
@ -2413,6 +2504,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2427,6 +2523,11 @@ msgstr "s3cmd sync ཕྱོགས་སྟོན།{path}1 དེ་ནས {url
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir \"fdroid\"གིས་མཇུག་སྐྱོང་མིན་འདུག་ : \"{path}1\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2630,6 +2731,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' འདི་ 'config.yml' ནང་སྒྲིག་ཐུབ་མ་སོང་།!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2640,6 +2766,11 @@ msgstr "{path} ལ་ཆེ་ཆུང་མེད།!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, fuzzy, python-brace-format
msgid "{path}: {error}"

View File

@ -1788,7 +1788,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -5,20 +5,22 @@
# Fjuro <fjuro@seznam.cz>, 2022.
# Filip Klopec <filipklopec@gmail.com>, 2022.
# Fjuro <ifjuro@proton.me>, 2022, 2023.
# Daniel Hejduk <jellymail@protonmail.com>, 2023.
# Fjuro <fjuro@alius.cz>, 2024.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-05-26 19:39+0000\n"
"Last-Translator: Fjuro <ifjuro@proton.me>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-23 10:07+0000\n"
"Last-Translator: Fjuro <fjuro@alius.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 4.18-dev\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -99,6 +101,11 @@ msgstr[2] "možnost %(option)s vyžaduje %(number)d argumentů"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: chyba: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -218,6 +225,11 @@ msgstr "/issues chybí"
msgid "A URL is required as an argument!"
msgstr "Jako argument je vyžadována adresa URL!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nenalezeny žádné podpisové certifikáty v {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Přidejte podpisy PGP pomocí GnuPG pro balíčky v repo"
@ -295,6 +307,11 @@ msgstr "Aplikace má binární soubory, ale nemá odpovídající AllowedAPKSign
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Aplikace má NoSourceSince nebo ArchivePolicy \"0 versions\", ale AutoUpdateMode nebo UpdateCheckMode nejsou None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Aplikace má NoSourceSince nebo ArchivePolicy \"0 versions\", ale AutoUpdateMode nebo UpdateCheckMode nejsou None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -392,6 +409,11 @@ msgstr "Kategorie „%s“ není platná"
msgid "Categories are not set"
msgstr "Kategorie nejsou nastavené"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Zkontrolujte aktualizace aplikací"
@ -558,6 +580,16 @@ msgstr "Popis má seznam (%s) ale není opatřen odrážkami (*) ani očíslová
msgid "Description of length {length} is over the {limit} char limit"
msgstr "Popis délky {length} přesahuje limit {limit} znaků"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Nepřidávat disable: k vygenerovaným položkám sestavení"
@ -624,6 +656,11 @@ msgstr "Duplicitní záznam \"%s\" v konfiguraci zrcadel!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Duplicitní odkaz v '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "CHYBA: Podpříkaz „server“ byl odebrán, použijte „deploy“!"
@ -794,6 +831,11 @@ msgstr "U některých aplikací nalezeny neplatné versionCodes"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "V {path} nalezeno několik podpisových bloků JAR"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Nalezeno více podpisových certifikátů pro repozitář."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -858,6 +900,11 @@ msgstr "Git remote set-head se nezdařil: „%s“"
msgid "Git reset failed"
msgstr "Git reset se nezdařil"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git submodule update se nezdařil"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git submodule sync se nezdařil"
@ -1063,6 +1110,10 @@ msgstr "Uchovávání neúspěšného sestavení „{apkfilename}“"
msgid "Keystore for signing key:\t"
msgstr "Úložiště klíčů pro podpisový klíč:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1070,7 +1121,7 @@ msgstr "Poslední použitá revize {commit} vypadá jako značka, ale Upda
#: ../fdroidserver/lint.py
msgid "Liberapay donation methods belong in the Liberapay: field"
msgstr "Darovací metody Liberapay patří do pole Liberapay:"
msgstr "Darovací metody Liberapay patří do pole Liberapay: pole"
#: ../fdroidserver/rewritemeta.py
msgid "List files that would be reformatted (dry run)"
@ -1200,6 +1251,11 @@ msgstr "Nebyly nalezeny žádné značky"
msgid "No unsigned directory - nothing to do"
msgstr "Žádný nepodepsaný adresář - není co dělat"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "nenalezeny informace o verzi"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Neplatná definice velikosti: \"{}\""
@ -1250,7 +1306,7 @@ msgstr "Zpracovat pouze aplikace s automatickými aktualizacemi"
#: ../fdroidserver/lint.py
msgid "OpenCollective donation methods belong in the OpenCollective: field"
msgstr "Darovací metody OpenCollective patří do pole OpenCollective:"
msgstr "Darovací metody OpenCollective patří do pole OpenCollective: pole"
#: /usr/lib/python3.11/optparse.py
msgid "Options"
@ -1358,6 +1414,11 @@ msgstr "Odeslat protokol do tohoto vzdáleného git repozitáře"
msgid "Pushing binary transparency log to {url}"
msgstr "Odeslání protokolu binární průhlednosti do {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head se nezdařil: „%s“"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1391,6 +1452,11 @@ msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK nepatné:
msgid "Reading {apkfilename} from cache"
msgstr "Čtení {apkfilename} z mezipaměti"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "stáhnout nejnovější verzi podpisů z webu"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Odebírání určených souborů"
@ -1641,6 +1707,13 @@ msgstr "Došlo ke kolizi keyalias publikování zastaveno"
msgid "These are the apps that have been archived from the main repo."
msgstr "Aplikace, které byly archivovány z hlavního repozitáře."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"CHYBA: tento příkaz by nikdy neměl být použit k zrcadlení f-droid.org!\n"
"Celý mirror f-droid.org vyžaduje více než 200GB."
#: ../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 "Toto je repozitář aplikací, který lze používat s aplikací F-Droid. Aplikace v tomto repozitáři jsou buď oficiální binární soubory sestavené původními vývojáři aplikací, nebo binární soubory sestavené ze zdrojových kódů správcem f-droid.org pomocí nástrojů na adrese https://gitlab.com/fdroid."
@ -1809,10 +1882,15 @@ msgstr "UpdateCheckData musí používat HTTPS URL: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData není platná URL: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode je nastaven, ale vypadá to, že akce checkupdates ještě nebyla spuštěna."
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode je nastaven, ale vypadá to, že checkupdates ještě nebylo spuštěno"
msgstr "UpdateCheckMode je nastaven, ale vypadá to, že akce checkupdates ještě nebyla spuštěna."
#: ../fdroidserver/lint.py
msgid "UpdateCheckName is set to the known application ID, it can be removed"
@ -1841,6 +1919,11 @@ msgstr "Použití"
msgid "Usage: %s\n"
msgstr "Použití: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Použijte /HEAD místo /master k ukázání na soubor ve výchozí větvi"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Použijte /HEAD místo /master k ukázání na soubor ve výchozí větvi"
@ -1870,6 +1953,11 @@ msgstr "Používám APK Signature v2"
msgid "Using APK Signature v3"
msgstr "Používám APK Signature v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Používám APK Signature v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Používám jarsigner Javy, není doporučeno pro ověřování APK! Použijte apksigner"
@ -1927,6 +2015,10 @@ msgstr "Pokud jsou nakonfigurovány podepsané indexy, vytvořit v této fázi p
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Při lintingu celého úložiště je yamllint ve výchozím nastavení zakázán. Tato volba vynucuje yamllint bez ohledu na to."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distinguished Name' používané při generování klíčů"
@ -2077,6 +2169,11 @@ msgstr "konfliktní subparser: %s"
msgid "could not parse '{path}'"
msgstr "nepodařilo se parsovat '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "nepodařilo se parsovat srclib spec (není určen ref): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "nepodařilo se parsovat srclib spec (není určen ref): '{}'"
@ -2252,6 +2349,11 @@ msgstr "local_copy_dir musí být adresář, ne soubor!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "mirror '%s' nekončí s 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Nyní nastavte následující v config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2409,6 +2511,11 @@ msgstr "repo_icon \"repo/icons/%s\" neexistuje, generování placeholderu."
msgid "repo_url needs to end with /repo"
msgstr "repo_url musí končit na /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml není nainstalován, nelze zapisovat metadata."
@ -2423,6 +2530,11 @@ msgstr "s3cmd sync indexes {path} do {url} a odstranit"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "mezipaměť skeneru je poškozena! Můžete ji vymazat pomocí: {clear}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir nekončí s \"fdroid\", možná jste měli na mysli: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "sdílená knihovna"
@ -2628,6 +2740,31 @@ msgstr "{path} neexistuje! Vytvořte ji spuštěním:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} má nesprávný podpis balíčku \"{pattern}\", možný exploit Janus!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' není nastaven v souboru config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2638,6 +2775,11 @@ msgstr "{path} má nulovou velikost!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} více než 200 MB, ruční nahrání: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-01-16 21:23+0000\n"
"Last-Translator: Aled Powell <aled@aledpowell.cymru>\n"
"Language-Team: Welsh <https://hosted.weblate.org/projects/f-droid/fdroidserver/cy/>\n"
@ -94,6 +94,11 @@ msgstr[5] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -213,6 +218,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -290,6 +300,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -390,6 +404,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Gwirio am ddiweddariadau i apiau"
@ -556,6 +575,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -622,6 +651,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -788,6 +822,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -852,6 +890,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1057,6 +1099,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1194,6 +1240,10 @@ msgstr ""
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 ""
@ -1352,6 +1402,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1385,6 +1439,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1638,6 +1696,10 @@ msgstr ""
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 ""
#: ../fdroidserver/common.py
#, fuzzy
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."
@ -1806,6 +1868,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1838,6 +1904,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr "Defndd: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1867,6 +1937,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1924,6 +1998,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2077,6 +2155,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2255,6 +2337,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2413,6 +2500,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2427,6 +2519,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2635,6 +2731,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2645,6 +2766,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -20,20 +20,21 @@
# Follpvosten <wolfi@karpador.xyz>, 2021.
# ssantos <ssantos@web.de>, 2022, 2023.
# "C. Rüdinger" <Mail-an-CR@web.de>, 2023.
# VfBFan <VfBFan@users.noreply.hosted.weblate.org>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-06-23 14:52+0000\n"
"Last-Translator: \"C. Rüdinger\" <Mail-an-CR@web.de>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-03-12 12:37+0000\n"
"Last-Translator: VfBFan <VfBFan@users.noreply.hosted.weblate.org>\n"
"Language-Team: German <https://hosted.weblate.org/projects/f-droid/fdroidserver/de/>\n"
"Language: de\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 4.18.1\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -113,6 +114,11 @@ msgstr[1] "Option %(option)s benötigt %(number)d Argumente"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: Fehler: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -232,6 +238,11 @@ msgstr "/issues fehlt"
msgid "A URL is required as an argument!"
msgstr "Als Argument wird eine URL benötigt!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Keine Signaturzertifikate in {path} gefunden"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "GnuPG PGP-Signaturen für Programmpakete in der Paketquelle hinzufügen"
@ -309,6 +320,11 @@ msgstr "App besitzt Binärdateien aber keine entsprechenden AllowedAPKSigningKey
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "App hat NoSourceSince oder ArchivePolicy \"0 Versionen\", aber AutoUpdateMode oder UpdateCheckMode sind nicht None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "App hat NoSourceSince oder ArchivePolicy \"0 Versionen\", aber AutoUpdateMode oder UpdateCheckMode sind nicht None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -405,6 +421,11 @@ msgstr "Kategorie »%s« ist nicht gültig"
msgid "Categories are not set"
msgstr "Kategorien sind nicht festgelegt"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Auf Aktualisierungen für Anwendungen prüfen"
@ -571,6 +592,16 @@ msgstr "Beschreibung enthält eine Liste (%s), ist aber weder aufgezählt (*) no
msgid "Description of length {length} is over the {limit} char limit"
msgstr "Länge der Beschreibung {length} übersteigt die zulässige Zeichenzahl {limit}"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Nicht 'disable:' zu den erzeugten Erstellungseinträgen hinzufügen"
@ -637,6 +668,11 @@ msgstr "Doppelter „%s“-Eintrag in Spiegelserver-Konfiguration!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Link in „{field}” duplizieren: {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "FEHLER: Der \"server\"-Unterbefehl wurde entfernt, verwende \"deploy\"!"
@ -807,6 +843,11 @@ msgstr "Ungültige versionCodes für einige Apps gefunden"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Mehrere JAR-Signaturzertifikate in {path} gefunden"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Mehrere Signaturzertifikate für das Repository gefunden."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -871,6 +912,11 @@ msgstr "Git remote set-head fehlgeschlagen: \"%s\""
msgid "Git reset failed"
msgstr "Git reset fehlgeschlagen"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git submodule update fehlgeschlagen"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git submodule sync fehlgeschlagen"
@ -918,7 +964,7 @@ msgstr "Ignoriere veraltete Cachedaten für {apkfilename}"
#: ../fdroidserver/update.py
msgid "Include APKs that are signed with disabled algorithms like MD5"
msgstr "APKs einschließen, die mit deaktivierten Algorithmen wie MD5 signiert sind"
msgstr "APKs einschließen, die mit untauglichen Algorithmen wie MD5 signiert sind"
#: ../fdroidserver/mirror.py
msgid "Include the PGP signature .asc files in the mirror"
@ -1076,6 +1122,10 @@ msgstr "Fehlgeschlagener Build \"{apkfilename}\" behalten"
msgid "Keystore for signing key:\t"
msgstr "Schlüsselspeicher für den Signierschlüssel:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1166,7 +1216,7 @@ msgstr "Keine Mindest-SDK-Version in {0} gefunden, Standard (3) verwendet."
#: ../fdroidserver/lint.py
msgid "No need to specify that the app is Free Software"
msgstr "Sie müssen nicht angeben, dass die App freie Software ist"
msgstr "Sie müssen nicht angeben, dass die App Freie Software ist"
#: ../fdroidserver/lint.py
msgid "No need to specify that the app is for Android"
@ -1213,6 +1263,11 @@ msgstr "Keine Tags gefunden"
msgid "No unsigned directory - nothing to do"
msgstr "Kein unsigniertes Verzeichnis - nichts zu tun"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "keine Versionsinformation gefunden"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Keine gültige Größendefinition: \"{}\""
@ -1371,6 +1426,11 @@ msgstr "Anmeldung an diesem Git-Repository durchführen"
msgid "Pushing binary transparency log to {url}"
msgstr "Binäres Transparenz-Log nach {url} pushen"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head fehlgeschlagen: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1404,6 +1464,11 @@ msgstr "Lesen von packageName/versionCode/versionName fehlgeschlagen,APK ungült
msgid "Reading {apkfilename} from cache"
msgstr "Lese {apkfilename} aus dem Cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "Abrufen der neuesten Version von Signaturen aus dem Web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Entferne angegebene Dateien"
@ -1653,6 +1718,13 @@ msgstr "Es gibt eine Keyalias-Kollision - Veröffentlichung gestoppt"
msgid "These are the apps that have been archived from the main repo."
msgstr "Dies sind die Apps, die aus dem Hauptrepository archiviert wurden."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"FEHLER: Dieser Befehl sollte niemals verwendet werden, um f-droid.org zu spiegeln!\n"
"Ein vollständiger Spiegel von f-droid.org erfordert mehr als 200 GB."
#: ../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 "Dies ist eine Paketquelle für Anwendungen, die für die Benutzung zusammen mit F-Droid gedacht ist. Die darin enthaltenen Anwendungen sind entweder offizielle von den Entwicklern erstellte Binärdateien oder werden von f-droid.org mithilfe des Werkzeugs auf https://gitlab.com/fdroid aus dem Quellcode erstellt."
@ -1821,8 +1893,13 @@ msgstr "UpdateCheckData muss HTTPS-URL verwenden: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData hat eine ungültige URL: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode ist gesetzt, aber likecheckupdates wurde vermutlich noch nicht ausgeführt"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode ist gesetzt, aber likecheckupdates wurde vermutlich noch nicht ausgeführt"
@ -1853,6 +1930,11 @@ msgstr "Syntax"
msgid "Usage: %s\n"
msgstr "Syntax: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Verwenden Sie /HEAD anstelle von /master, um auf eine Datei im Hauptzweig zu verweisen"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Verwenden Sie /HEAD anstelle von /master, um auf eine Datei im Hauptzweig zu verweisen"
@ -1882,6 +1964,11 @@ msgstr "Verwende APK-Signatur v2"
msgid "Using APK Signature v3"
msgstr "Verwende APK-Signatur v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Verwende APK-Signatur v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Von Java jarsigner zur Verifikation von APKs wird abgeraten! Verwenden Sie apksigner"
@ -1939,6 +2026,10 @@ msgstr "Bei einer Konfiguration mit signierten Indizes, in dieser Phase nur unsi
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Beim Linting des gesamten Repositoriums wird yamllint standardmäßig deaktiviert. Diese Option erzwingt yamllint ungeachtet dessen."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distinguished Name' zum Erzeugen von Schlüsseln"
@ -2088,6 +2179,11 @@ msgstr "widersprüchlicher Subparser: %s"
msgid "could not parse '{path}'"
msgstr "konnte '{path}' nicht parsen"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "konnte srclib-Spezifikation nicht parsen (keine ref angegeben): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "konnte srclib-Spezifikation nicht parsen (keine ref angegeben): '{}'"
@ -2262,6 +2358,11 @@ msgstr "local_copy_dir muß ein Verzeichnis sein, keine Datei!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "Spiegelserver '%s' ended nicht mit 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Legen Sie diese nun in der config.yml fest:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2419,6 +2520,11 @@ msgstr "repo_icon \"repo/icons/%s\" existiert nicht, erzeuge Platzhalter."
msgid "repo_url needs to end with /repo"
msgstr "repo_url muss mit /repo enden"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml ist nicht installiert, kann Metadaten nicht schreiben."
@ -2433,6 +2539,11 @@ msgstr "s3cmd-Sync {path} indizieren auf {url} und dann löschen"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "Der Scanner-Cache ist fehlerhaft! Sie können ihn löschen mit: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir endet nicht auf \"fdroid\", meinten Sie stattdessen: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "dynamische Bibliothek"
@ -2637,6 +2748,31 @@ msgstr "{path} existiert nicht! Erstellen Sie es durch Ausführen von:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} hat die schlechte Dateisignatur \"{pattern}\", möglicher Janus-Exploit!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "Kein 'sdk_path' in 'config.yml' festgelegt!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2647,6 +2783,11 @@ msgstr "{path} hat Dateigröße Null!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} ist größer als 200MB und muss manuell auf {url} hochgeladen werden"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1795,7 +1795,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -12,13 +12,13 @@
# Iago <iagrivmoa@gmail.com>, 2022.
# Iago <translate@delthia.com>, 2022.
# Jaime Marquínez Ferrándiz <weblate@jregistros.fastmail.net>, 2022.
# gallegonovato <fran-carro@hotmail.es>, 2022, 2023.
# gallegonovato <fran-carro@hotmail.es>, 2022, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-08-01 21:07+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 18:44+0000\n"
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/f-droid/fdroidserver/es/>\n"
"Language: es\n"
@ -26,7 +26,7 @@ msgstr ""
"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.0-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -106,6 +106,11 @@ msgstr[1] "la opción %(option)s requiere %(number)d argumentos"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: error: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -225,6 +230,11 @@ msgstr "no se encuentra /issues"
msgid "A URL is required as an argument!"
msgstr "¡Se requiere una URL como argumento!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "No se ha encontrado ningún certificado de firma en {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Añadir las firmas PGP para los paquetes en el repositorio usando GnuPG"
@ -302,6 +312,11 @@ msgstr "La aplicación tiene archivos binarios, pero no las AllowedAPKSigningKey
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "La aplicación tiene NoSourceSince o ArchivePolicy \"0 versiones\", pero AutoUpdateMode o UpdateCheckMode no es Ninguno"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "La aplicación tiene NoSourceSince o ArchivePolicy \"0 versiones\", pero AutoUpdateMode o UpdateCheckMode no es Ninguno"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -398,6 +413,11 @@ msgstr "La categoría '%s' no es válida"
msgid "Categories are not set"
msgstr "No se han establecido categorías"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Buscar actualizaciones de aplicaciones"
@ -564,6 +584,16 @@ msgstr "La descripción tiene una lista (%s) pero no está estructurada (*) ni n
msgid "Description of length {length} is over the {limit} char limit"
msgstr "La descripción de longitud {length} supera el límite de caracteres, {limit}"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "No agregar 'disable:' a las entradas de compilaciones generadas"
@ -630,6 +660,11 @@ msgstr "¡Entrada duplicada \"%s\"en la configuración de los espejos!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Enlace duplicado en '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERROR: ¡El subcomando \"server\" se ha eliminado. Use \"deploy\"!"
@ -800,6 +835,11 @@ msgstr "Se encontraron códigos de versión (versionCodes) inválidos para algun
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Encontrados varios ficheros de bloque de firma JAR en {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Encontrados varios certificados de firma para el repositorio."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -864,6 +904,11 @@ msgstr "Git remote set-head falló: \"%s\""
msgid "Git reset failed"
msgstr "Git reset falló"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "La actualización del submodulo de Git falló"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "La sincronización del submodulo de Git falló"
@ -1069,6 +1114,10 @@ msgstr "Mantener la compilación fallida \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Depósito de claves para la clave de firma de repositorio:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1206,6 +1255,11 @@ msgstr "No se encontró ninguna etiqueta"
msgid "No unsigned directory - nothing to do"
msgstr "No hay directorio sin firma - nada que hacer"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "no se encontró información de la versión"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "No es una definición válida del tamaño: \"{}\""
@ -1364,6 +1418,11 @@ msgstr "Pulse el registro a este repositorio remoto Git"
msgid "Pushing binary transparency log to {url}"
msgstr "Publicar el registro de transparencia binario en {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head falló: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1397,6 +1456,11 @@ msgstr "Error al leer packageName/versionCode/versionName,APK inválido: '{apkfi
msgid "Reading {apkfilename} from cache"
msgstr "Leyendo {apkfilename} desde caché"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "obtener la última versión de las firmas de la web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Removiendo archivos especificados"
@ -1646,6 +1710,13 @@ msgstr "Hay una colisión de keyalias - publicación detenida"
msgid "These are the apps that have been archived from the main repo."
msgstr "Estas son aplicaciones del repositorio principal que se han archivado."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERROR: ¡esta orden no se debería usar nunca para replicar f-droid.org!\n"
"Una réplica completa de f-droid.org requiere más de 200GB."
#: ../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 "Este es un repositorio de aplicaciones para usar con F-Droid. Las aplicaciones en este repositorio son binarios oficiales construidos por los desarrolladores originales de la aplicación, o son binarios creados a partir de su código fuente por f-droid.org utilizando las herramientas de https://gitlab.com/fdroid."
@ -1814,14 +1885,19 @@ msgstr "UpdateCheckData tiene que usar una URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData tiene una URL no válida: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode está configurado pero parece que aún no se han ejecutado las actualizaciones."
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode está configurado pero parece que checkupdates aún no se ha ejecutado"
msgstr "UpdateCheckMode está configurado pero parece que aún no se han ejecutado las actualizaciones."
#: ../fdroidserver/lint.py
msgid "UpdateCheckName is set to the known application ID, it can be removed"
msgstr "El nombre de verificación de actualización (UpdateCheckName) es el identificador (ID) conocido de la aplicación. Se puede borrar"
msgstr "UpdateCheckName está configurado con el ID de la aplicación conocida, se puede eliminar"
#: ../fdroidserver/deploy.py
#, python-brace-format
@ -1846,6 +1922,11 @@ msgstr "Utilización"
msgid "Usage: %s\n"
msgstr "Uso: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Use /HEAD en vez de /master para apuntar a un fichero en la rama por omisión"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Use /HEAD en vez de /master para apuntar a un fichero en la rama por omisión"
@ -1875,6 +1956,11 @@ msgstr "Utilizando Firma APK v2"
msgid "Using APK Signature v3"
msgstr "Utilizando firma APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Utilizando Firma APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "¡Usando jarsigner de Java. No recomendado para verificar APKs! Use apksigner"
@ -1932,6 +2018,10 @@ msgstr "Cuando está configurado para índices firmados, crear solo índices sin
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Cuando se limpia el repositorio completo yamllint está deshabilitado por defecto. Esta opción fuerza yamllint a pesar de todo."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Nombre Distintivo' (DN) usado al generar claves"
@ -2081,6 +2171,11 @@ msgstr "subanalizador del conflictivo:%s"
msgid "could not parse '{path}'"
msgstr "no se pudo procesar '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "no se pudo procesar especificación srclib (sin especificar ref): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "no se pudo procesar especificación srclib (sin especificar ref): '{}'"
@ -2255,6 +2350,11 @@ msgstr "¡local_copy_dir tiene que ser un directorio, no un fichero!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "¡el espejo '%s' no termina en 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Ahora establezca lo siguiente en config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2412,6 +2512,11 @@ msgstr "repo_icon \"repo/icons/%s\" no existe, generando placeholder."
msgid "repo_url needs to end with /repo"
msgstr "repo_url debe terminar con /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml no instalado. No se pueden escribir metadatos."
@ -2426,6 +2531,11 @@ msgstr "s3cmd sync indexa {path} a {url} y elimina"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "¡El escaner de la cache está mal realizado! Puedes borrarlo con: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir no termina en \"fdroid\", tal vez quisiste decir: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "biblioteca compartida"
@ -2630,6 +2740,31 @@ msgstr "¡{path} no existe! Créela ejecutando:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "¡{path} tiene una firma de fichero \"{pattern}\" mala, posible exploit Janus!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "¡'sdk_path' no establecido en 'config.yml'!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2640,6 +2775,11 @@ msgstr "¡{path} está vacío!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} mayor de 200MB, subir manualmente: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-04-10 21:26+0000\n"
"Last-Translator: Germe the fur star <FOSSgerme.deb@tuta.io>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/f-droid/fdroidserver/es_AR/>\n"
@ -95,6 +95,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: error: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -214,6 +219,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "Add PGP signatures using GnuPG for packages in repo"
@ -294,6 +304,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -390,6 +404,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Buscar actualizaciones de las aplicaciones"
@ -560,6 +579,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -626,6 +655,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -792,6 +826,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -856,6 +894,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1062,6 +1104,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr "Ruta al almacén de claves para la llave de firmado del repositorio"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1200,6 +1246,11 @@ msgstr ""
msgid "No unsigned directory - nothing to do"
msgstr ""
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "¡Se encontró una excepción desconocida!"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr ""
@ -1360,6 +1411,10 @@ msgstr "Subir el registro al repositorio remoto de git"
msgid "Pushing binary transparency log to {url}"
msgstr "Actualizar el registro de transparencia binario de {url}"
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1393,6 +1448,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1642,6 +1701,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1803,6 +1866,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1835,6 +1902,10 @@ msgstr "Uso"
msgid "Usage: %s\n"
msgstr "Uso: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1864,6 +1935,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1921,6 +1996,10 @@ msgstr "Si está configurado para índices firmados, crear sólo índices sin fi
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
#, fuzzy
msgid "X.509 'Distinguished Name' used when generating keys"
@ -2073,6 +2152,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2249,6 +2332,11 @@ msgstr "directorio_copia_local tiene que ser un directorio, ¡no un archivo!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2409,6 +2497,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2423,6 +2516,11 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir no termina en \"fdroid\", quizá quiso escribir: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "librería compartida"
@ -2627,6 +2725,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2637,6 +2760,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2020-04-29 12:49+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Spanish (Mexico) <https://hosted.weblate.org/projects/f-droid/fdroidserver/es_MX/>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: error: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -553,6 +572,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -619,6 +648,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -785,6 +819,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -849,6 +887,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1054,6 +1096,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1191,6 +1237,10 @@ msgstr ""
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 ""
@ -1349,6 +1399,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1382,6 +1436,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1631,6 +1689,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1792,6 +1854,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1824,6 +1890,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1853,6 +1923,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1910,6 +1984,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2059,6 +2137,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2233,6 +2315,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2391,6 +2478,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2405,6 +2497,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2609,6 +2705,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2619,6 +2740,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@ -89,6 +89,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -208,6 +213,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -285,6 +295,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -381,6 +395,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -547,6 +566,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -613,6 +642,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -779,6 +813,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -843,6 +881,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1048,6 +1090,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1185,6 +1231,10 @@ msgstr ""
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 ""
@ -1343,6 +1393,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1376,6 +1430,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1625,6 +1683,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1786,6 +1848,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1818,6 +1884,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1847,6 +1917,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1904,6 +1978,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2053,6 +2131,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2227,6 +2309,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2384,6 +2471,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2398,6 +2490,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2602,6 +2698,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2612,6 +2733,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1792,7 +1792,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n"
"Project-Id-Version: fdroidserver 2.3a1\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,10 @@ msgstr ""
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 ""
@ -1345,6 +1395,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1432,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1627,6 +1685,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1788,6 +1850,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1820,6 +1886,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1849,6 +1919,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1906,6 +1980,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2055,6 +2133,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2311,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -6,7 +6,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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-08-23 01:29+0000\n"
"Last-Translator: Kaantaja <ufdbvgoljrjkrkyyub@ianvvn.com>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/f-droid/fdroidserver/fi/>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,10 @@ msgstr ""
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 ""
@ -1345,6 +1395,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1432,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1627,6 +1685,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1788,6 +1850,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1820,6 +1886,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1849,6 +1919,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1906,6 +1980,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2055,6 +2133,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2311,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -2,7 +2,7 @@
# Copyright (C) YEAR Free Software Foundation, Inc.
# Julien Gontier <emeuraudeman@protonmail.com>, 2020.
# anonymous <noreply@weblate.org>, 2020.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2024.
# Jeannette L <j.lavoie@net-c.ca>, 2020.
# Nathan <bonnemainsnathan@gmail.com>, 2020.
# Virgile L. <virgilelefevre313@gmail.com>, 2020.
@ -39,16 +39,16 @@ msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-07-31 20:06+0000\n"
"Last-Translator: Translator <kvb@tuta.io>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: French <https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/>\n"
"Language: fr\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.0-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -128,6 +128,11 @@ msgstr[1] "L'option %(option)s requiert %(number)d arguments"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: erreur: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -247,6 +252,11 @@ msgstr "/issues est manquant"
msgid "A URL is required as an argument!"
msgstr "Une URL est requise en argument !"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Aucun certificat signé trouvé dans {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Ajouter des signatures PGP avec GnuPG pour les paquets dans le dépôt"
@ -324,6 +334,11 @@ msgstr "Lapplication possède des fichiers binaires mais n'a pas les AllowedA
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "L'application a NoSourceSince ou ArchivePolicy « 0 version » mais AutoUpdateMode ou UpdateCheckMode ne valent pas None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "L'application a NoSourceSince ou ArchivePolicy « 0 version » mais AutoUpdateMode ou UpdateCheckMode ne valent pas None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -420,6 +435,11 @@ msgstr "Catégories « %s » invalides"
msgid "Categories are not set"
msgstr "Catégories non définies"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Vérifier les mises à jour pour les applications"
@ -586,6 +606,16 @@ msgstr "La description contient une liste (%s) mais ce n'est ni une liste à puc
msgid "Description of length {length} is over the {limit} char limit"
msgstr "La longueur de la description {length} dépasser la limite du nombre de caractères autorisés {limit}"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Ne pas ajouter \"disable:\" aux entrées générées"
@ -652,6 +682,11 @@ msgstr "Entrée doublon \"%s\" dans le paramétrage des miroirs !"
msgid "Duplicate link in '{field}': {url}"
msgstr "Lien dupliqué dans « {field} » : {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERREUR: La sous-commande \"server\" a été supprimée, utilisez plutôt \"deploy\"!"
@ -822,6 +857,11 @@ msgstr "Code de version invalide trouvée pour certaines application"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Plusieurs fichiers de bloc de signature JAR trouvé à {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Plusieurs certificats de signature ont étés trouvés pour le référentiel."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -886,6 +926,11 @@ msgstr "Impossible de définir la branche par défaut du Git distant : \"%s\""
msgid "Git reset failed"
msgstr "Reset de Git échouée"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Échec de la mise à jour du sous-module Git"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Synchronisation du submodule Git échoué"
@ -1054,7 +1099,7 @@ msgstr "Métadonnée de scrlib invalide : la clé '{key}' est inconnue dans '{fi
#: ../fdroidserver/common.py
#, python-brace-format
msgid "JAR signature failed to verify: {path}"
msgstr "La signature JAR n'a pas pu vérifier:{path}"
msgstr "La signature JAR n'a pas pu vérifier:{path}"
#: ../fdroidserver/common.py
#, python-brace-format
@ -1091,6 +1136,10 @@ msgstr "Conserver la version ayant échoué « {apkfilename} »"
msgid "Keystore for signing key:\t"
msgstr "Stockage des clés signée:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1228,6 +1277,11 @@ msgstr "Aucune étiquette trouvée"
msgid "No unsigned directory - nothing to do"
msgstr "Aucun dossier non signé — il n'y a rien à faire"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "aucune information sur la version na été trouvée"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Définition de la taille invalide : \"{}\""
@ -1386,6 +1440,11 @@ msgstr "Envoyer les logs dans ce dépôt git distant"
msgid "Pushing binary transparency log to {url}"
msgstr "Envoyer les logs de transparence de la compilation vers {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Impossible de définir la branche par défaut du Git distant : \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1419,6 +1478,11 @@ msgstr "La lecture de packageName/versionCode/versionName a échoué, APK invali
msgid "Reading {apkfilename} from cache"
msgstr "Lecture de {apkfilename} à partir du cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "recupération de la dernière version des signatures depuis le web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Suppression des fichiers spécifiés"
@ -1668,6 +1732,13 @@ msgstr "Il y a une collision de keyalias — publication interrompue"
msgid "These are the apps that have been archived from the main repo."
msgstr "Voici les applications qui ont été archivées à partir du dépôt principal."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERREUR : cette commande ne devrait jamais être utilisée pour copier f-droid.org !\n"
"Une copie de f-droid.org occupe plus de 200GB."
#: ../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 "Ceci est un dépôt dapplications à utiliser avec FDroid. Les applications publiées dans ce dépôt sont soit les binaires officiels compilés par les développeurs de ces applications, soit celles compilées par f-droid.org à partir des sources en utilisant les outils disponibles sur https://gitlab.com/fdroid."
@ -1838,8 +1909,13 @@ msgstr "UpdateCheckData doit utiliser une URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData URL non valide : {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode est configuré mais on dirait que checkupdates n'a pas encore été lancé"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode est configuré mais on dirait que checkupdates n'a pas encore été lancé"
@ -1870,6 +1946,11 @@ msgstr "Usage"
msgid "Usage: %s\n"
msgstr "Usage : %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Utiliser /HEAD plutôt que /master pour pointer un fichier dans la branche par défaut"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Utiliser /HEAD plutôt que /master pour pointer un fichier dans la branche par défaut"
@ -1899,6 +1980,11 @@ msgstr "Utilisation de la signature d'APK v2"
msgid "Using APK Signature v3"
msgstr "Utilisation de la signature d'APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Utilisation de la signature d'APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "L'utilisation de l'utilitaire jarsigner de Java n'est pas recommandé pour vérifier les APKs ! Utiliser apksigner"
@ -1956,6 +2042,10 @@ msgstr "Lorsqu'il est configuré pour les index signés, ne créez que des index
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Lors du linting, tout le dépôt yamllint est désactivé par défaut. Cette option force yamllint malgré tout."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Nom distingué' utilisé lors de la génération des clés"
@ -1990,7 +2080,7 @@ msgstr "option ambiguë : %(option)s peut correspondre à %(matches)s"
#: /usr/lib/python3.11/optparse.py
#, python-format
msgid "ambiguous option: %s (%s?)"
msgstr "option ambiguë : %s (%s?)"
msgstr "option ambiguë: %s (%s?)"
#: ../fdroidserver/common.py
msgid "apksigner not found! Cannot sign or verify modern APKs"
@ -2105,6 +2195,11 @@ msgstr "conflit de subparser : %s"
msgid "could not parse '{path}'"
msgstr "impossible de lire '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "impossible d'analyser la spécification srclib (pas de référence spécifiée): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "impossible d'analyser la spécification srclib (pas de référence spécifiée): '{}'"
@ -2279,6 +2374,11 @@ msgstr "local_copy_dir doit être un dossier et non un fichier !"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "le miroir «%s» ne se termine pas par «fdroid» !"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Maintenant, définissez-les dans config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2436,6 +2536,11 @@ msgstr "repo_icon \"repo/icons/%s\" n'existe pas, génération d'une icône de s
msgid "repo_url needs to end with /repo"
msgstr "repo_url doit se terminer par /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml nest pas installé, impossible décrire les métadonnées."
@ -2450,6 +2555,11 @@ msgstr "s3cmd synchroniser les index de {path} vers {url} et les supprimer"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "l'analyse du cache est mal formée ! Vous pouvez le nettoyer avec : '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir ne semble pas se terminer avec \"fdroid\", peut être voulez-vous dire: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "bibliothèque partagée"
@ -2654,6 +2764,31 @@ msgstr "{path} nexiste pas ! Créez-le en exécutant :"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} a une mauvaise signature de fichier \"{pattern}\", possibilité d'une faille Janus !"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' n'est pas configuré dans 'config.yml' !"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2664,6 +2799,11 @@ msgstr "{path} a une taille nulle !"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} supérieur à 200MB, envoi manuel : {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-07-01 15:29+0000\n"
"Last-Translator: Vancha March <tjipkevdh@gmail.com>\n"
"Language-Team: Frisian <https://hosted.weblate.org/projects/f-droid/fdroidserver/fy/>\n"
@ -90,6 +90,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: flater: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -209,6 +214,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -286,6 +296,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -382,6 +396,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Kontrolearje op fernijingen fan applikaasjes"
@ -548,6 +567,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -614,6 +643,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -780,6 +814,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -844,6 +882,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1049,6 +1091,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1186,6 +1232,10 @@ msgstr ""
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 ""
@ -1344,6 +1394,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1377,6 +1431,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1626,6 +1684,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1787,6 +1849,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1819,6 +1885,10 @@ msgstr "Gebrûk"
msgid "Usage: %s\n"
msgstr "Gebrûk: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1848,6 +1918,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1905,6 +1979,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2054,6 +2132,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2228,6 +2310,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-09-21 08:05+0000\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/f-droid/fdroidserver/he/>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "איתור עדכונים ליישומונים"
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,10 @@ msgstr ""
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 ""
@ -1345,6 +1395,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1432,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1627,6 +1685,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1788,6 +1850,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1820,6 +1886,10 @@ msgstr "שימוש"
msgid "Usage: %s\n"
msgstr "שימוש: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1849,6 +1919,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1906,6 +1980,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2055,6 +2133,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2311,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-02-22 11:24+0000\n"
"Last-Translator: Saurmandal <saurmandal@protonmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/f-droid/fdroidserver/hi/>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "अनुप्रयोगों के अपडेट के लिए जाँच करें"
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,10 @@ msgstr ""
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 ""
@ -1345,6 +1395,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1432,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1627,6 +1685,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1788,6 +1850,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1820,6 +1886,10 @@ msgstr "प्रयोग"
msgid "Usage: %s\n"
msgstr "प्रयोग: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1849,6 +1919,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1906,6 +1980,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2055,6 +2133,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2311,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2387,6 +2474,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2401,6 +2493,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2605,6 +2701,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2615,6 +2736,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1,22 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# This file is put in the public domain.
# Balázs Meskó <meskobalazs@mailbox.org>, 2020, 2021.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
# KissPandur <zoltankiss.web@gmail.com>, 2022.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2022-10-05 06:16+0000\n"
"Last-Translator: KissPandur <zoltankiss.web@gmail.com>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/>\n"
"Language: hu\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 4.14.1\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -96,6 +96,11 @@ msgstr[1] "A(z) %(option)s kapcsoló %(number)d argumentumot igényel"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: hiba: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -194,7 +199,7 @@ msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex mi
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
msgid "'{value}' is not a valid {field}, should be {pattern}"
msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex minta: {pattern}"
msgstr "A(z) „{value}” nem érvényes {field} érték itt: minta: {pattern}"
#: ../fdroidserver/checkupdates.py
#, python-brace-format
@ -215,6 +220,11 @@ msgstr "a /issues hiányzik"
msgid "A URL is required as an argument!"
msgstr "Az URL argumentumként megadása szükséges."
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nem található aláíró-tanúsítvány itt: {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "PGP aláírások hozzáadása GnuPG segítségével a tároló csomagjaihoz"
@ -292,6 +302,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -388,6 +402,11 @@ msgstr "A(z) „%s” kategória érvénytelen"
msgid "Categories are not set"
msgstr "A kategóriák nincsenek megadva"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Alkalmazásfrissítések keresése"
@ -555,6 +574,16 @@ msgstr "A leírás listát (%s) tartalmaz, de nem pontozott (*) vagy számozott
msgid "Description of length {length} is over the {limit} char limit"
msgstr "A leírás {length} karakteres hossza több, mint a {limit} karakteres korlát"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Ne adja a hozzá a „disable:” szöveget az előállított összeállítási elemekhez"
@ -621,6 +650,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr "Ismételt hivatkozás a(z) „{field}” mezőben: {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "HIBA: A „server” alparancs eltávolításra került, használja ezt: „deploy”!"
@ -792,6 +826,11 @@ msgstr "Egyes alkalmazásoknál érvénytelen versionCode paraméterek találhat
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Több JAR aláírásblokkfájl található itt: {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Több aláíró-tanúsítvány található a tárolóhoz."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -818,7 +857,7 @@ msgstr "{apkfilename} található itt: {url}"
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
msgid "Found {count} problems in {filename}"
msgstr "Az átvizsgáló {count} problémát talált a(z) „{appid}” alkalmazásban:"
msgstr "Az átvizsgáló {count} problémát talált a(z) „{filename}” alkalmazásban"
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -857,6 +896,11 @@ msgstr "A git távoli fej beállítás sikertelen: „%s”"
msgid "Git reset failed"
msgstr "A git helyreállítás sikertelen"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "A git almodul frissítése sikertelen"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "A git almodul szinkronizációs sikertelen"
@ -976,7 +1020,7 @@ msgstr "Érvénytelen VercodeOperation: {field}"
#: ../fdroidserver/lint.py
#, fuzzy, python-brace-format
msgid "Invalid VercodeOperation: {invalid_ops}"
msgstr "Érvénytelen VercodeOperation: {field}"
msgstr "Érvénytelen VercodeOperation: {invalid_ops}"
#: ../fdroidserver/common.py
#, python-brace-format
@ -1062,6 +1106,10 @@ msgstr "A minSdkVersion olvasása sikertelen: „{apkfilename}”"
msgid "Keystore for signing key:\t"
msgstr "Kulcstároló az aláírókulcshoz:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1201,6 +1249,11 @@ msgstr "Nem található csatolt eszköz"
msgid "No unsigned directory - nothing to do"
msgstr "Nincs aláíratlan könyvtár nincs teendő"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "Nem található információ."
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Nem érvényes méretmegadás: „{}”"
@ -1359,6 +1412,11 @@ msgstr "A napló beküldése ebbe a távoli git tárolóba"
msgid "Pushing binary transparency log to {url}"
msgstr "A bináris átláthatósági napló beküldése ide: {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "A git távoli fej beállítás sikertelen: „%s”"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1392,6 +1450,10 @@ msgstr "A packageName/versionCode/versionName olvasása sikertelen, az APK érv
msgid "Reading {apkfilename} from cache"
msgstr "A(z) {apkfilename} olvasása gyorsítótárból"
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Megadott fájlok eltávolítása"
@ -1468,7 +1530,7 @@ msgstr "A csomag forráskódjának átvizsgálása"
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
msgid "Scanner found {count} problems in {apk}"
msgstr "Az átvizsgáló {count} problémát talált a(z) „{appid}” alkalmazásban:"
msgstr "Az átvizsgáló {count} problémát talált a(z) „{apk}” alkalmazásban"
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -1642,6 +1704,13 @@ msgstr ""
msgid "These are the apps that have been archived from the main repo."
msgstr ""
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"HIBA: a parancsot sose használja az f-droid.org tükrözéséhez.\n"
"Az f-droid.org teljes tükrözéséhez több mint 200 GB tárhely szükséges."
#: ../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 ""
@ -1803,6 +1872,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1835,6 +1908,10 @@ msgstr "Használat"
msgid "Usage: %s\n"
msgstr "Használat: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1864,6 +1941,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1921,6 +2002,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2070,6 +2155,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2182,7 +2271,7 @@ msgstr "az index-v1-nek kell legyen aláírása, használja az „fdroid signind
#: ../fdroidserver/index.py
#, fuzzy
msgid "index-v2 must have a signature, use `fdroid signindex` to create it!"
msgstr "az index-v1-nek kell legyen aláírása, használja az „fdroid signindex” parancsot a létrehozásához."
msgstr "az index-v1-nek kell legyen aláírása, használja az `fdroid signindex` parancsot a létrehozásához!"
#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py
@ -2245,6 +2334,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Most adja meg ezeket a config.yml fájlban:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2403,6 +2497,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2417,6 +2516,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2621,6 +2724,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "Az „sdk_path” nincs megadva a „config.yml” fájlban."
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2631,6 +2759,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, fuzzy, python-brace-format
msgid "{path}: {error}"

View File

@ -7,7 +7,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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-06-23 23:32+0000\n"
"Last-Translator: whenwesober <naomi16i_1298q@cikuh.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/f-droid/fdroidserver/id/>\n"
@ -95,6 +95,11 @@ msgstr[0] "opsi %(option)s memerlukan argumen sebanyak %(number)d"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: galat: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -214,6 +219,11 @@ msgstr "/issues tidak ada"
msgid "A URL is required as an argument!"
msgstr "URL diperlukan sebagai argumen!"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Tambah tanda tangan PGP menggunakan GnuPG untuk paket di repo"
@ -291,6 +301,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -386,6 +400,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Periksa pembaruan pada aplikasi"
@ -552,6 +571,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -618,6 +647,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -784,6 +818,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -848,6 +886,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1053,6 +1095,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1190,6 +1236,10 @@ msgstr ""
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 ""
@ -1348,6 +1398,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1381,6 +1435,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1629,6 +1687,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1790,6 +1852,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1822,6 +1888,10 @@ msgstr "Penggunaan"
msgid "Usage: %s\n"
msgstr "Penggunaan: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1851,6 +1921,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1908,6 +1982,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2056,6 +2134,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2311,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2387,6 +2474,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2401,6 +2493,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' belum diatur di config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -16,13 +16,13 @@
# Davide Neri <davnerix@gmail.com>, 2023.
# Mirko Di <mirko@mirkodi.eu>, 2023.
# coronabond <coronabond@airmail.cc>, 2023.
# Random <random-r@users.noreply.hosted.weblate.org>, 2023.
# Random <random-r@users.noreply.hosted.weblate.org>, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-09-06 17:31+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-13 17:01+0000\n"
"Last-Translator: Random <random-r@users.noreply.hosted.weblate.org>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/f-droid/fdroidserver/it/>\n"
"Language: it\n"
@ -30,7 +30,7 @@ msgstr ""
"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.0.1-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -110,6 +110,11 @@ msgstr[1] "l'opzione %(option)s richiede gli argomenti %(number)d"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: errore: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -229,6 +234,11 @@ msgstr "/issues è mancante"
msgid "A URL is required as an argument!"
msgstr "È richiesto un URL come argomento!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nessun certificato di firma trovato in {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Aggiungi firme PGP con GnuPG per i pacchetti in un repository"
@ -306,6 +316,11 @@ msgstr "L'app ha Binaries ma non ha AllowedAPKSigningKeys corrispondente per fis
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "L'app ha NoSourceSince o ArchivePolicy \"0 versioni\" ma AutoUpdateMode o UpdateCheckMode non sono None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "L'app ha NoSourceSince o ArchivePolicy \"0 versioni\" ma AutoUpdateMode o UpdateCheckMode non sono None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -402,6 +417,11 @@ msgstr "La categoria \"%s\" non è valida"
msgid "Categories are not set"
msgstr "Le categorie non sono impostate"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Cerca gli aggiornamenti delle applicazioni"
@ -568,6 +588,16 @@ msgstr "La descrizione ha un elenco (%s) ma non è puntato (*) né numerato (#)"
msgid "Description of length {length} is over the {limit} char limit"
msgstr "La descrizione di lunghezza {length} supera il limite di {limit} caratteri"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Non aggiungere 'disable:' alle voci di compilazione generate"
@ -634,6 +664,11 @@ msgstr "Voce \"%s\" duplicata nella configurazione dei mirror!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Link duplicato in '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERRORE: il sottocomando \"server\" è stato rimosso, usa \"deploy\"!"
@ -804,6 +839,11 @@ msgstr "Trovati codici di versione non validi per alcune app"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Trovati più file di blocco della firma JAR in {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Trovati più certificati di firma per il repository."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -868,6 +908,11 @@ msgstr "Set-head remoto Git non riuscito: \"%s\""
msgid "Git reset failed"
msgstr "Ripristino Git non riuscito"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Aggiornamento del sottomodulo Git non riuscito"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Sincronizzazione del sottomodulo Git non riuscita"
@ -1073,6 +1118,10 @@ msgstr "Mantenimento della build fallita \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Keystore per la firma della chiave:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1210,6 +1259,11 @@ msgstr "Nessuna etichetta trovata"
msgid "No unsigned directory - nothing to do"
msgstr "Nessuna directory non firmata - niente da fare"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "nessuna informazione sulla versione trovata"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Definizione di dimensione non valida: \"{}\""
@ -1368,6 +1422,11 @@ msgstr "Esegui il push del log in questo repository git remoto"
msgid "Pushing binary transparency log to {url}"
msgstr "Invio del log di trasparenza binaria su {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Set-head remoto Git non riuscito: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1401,6 +1460,11 @@ msgstr "Lettura di packageName/versionCode/versionName non riuscita, APK non val
msgid "Reading {apkfilename} from cache"
msgstr "Lettura di {apkfilename} dalla cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "recupera l'ultima versione delle firme dal web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Rimozione dei file specificati"
@ -1650,6 +1714,13 @@ msgstr "C'è una collisione keyalias - pubblicazione interrotta"
msgid "These are the apps that have been archived from the main repo."
msgstr "Queste sono le applicazioni che sono state archiviate dal repo principale."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERRORE: questo comando non deve mai essere utilizzato per il mirror f-droid.org!\n"
"Lintero mirror di f-droid.org richiede più di 200GB."
#: ../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 "Questo è un repository di applicazioni da utilizzare con F-Droid. Le applicazioni in questo repository sono o binari ufficiali compilati dagli sviluppatori dell'applicazione originale, o sono binari compilati dai sorgenti dall'amministratore di f-droid.org usando gli strumenti su https://gitlab.com/fdroid."
@ -1818,10 +1889,15 @@ msgstr "UpdateCheckData deve usare l'URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData non è un URL valido: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito."
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito"
msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito."
#: ../fdroidserver/lint.py
msgid "UpdateCheckName is set to the known application ID, it can be removed"
@ -1850,6 +1926,11 @@ msgstr "Uso"
msgid "Usage: %s\n"
msgstr "Utilizzo: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Usare /HEAD invece di /master per puntare a un file nel ramo predefinito"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Usare /HEAD invece di /master per puntare a un file nel ramo predefinito"
@ -1879,6 +1960,11 @@ msgstr "Usare la firma APK v2"
msgid "Using APK Signature v3"
msgstr "Usare la firma APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Usare la firma APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Utilizzando jarsigner di Java, non raccomandato per verificare APK! Utilizzare apksigner"
@ -1936,6 +2022,10 @@ msgstr "Se configurato per indici firmati, crea solo indici senza segno in quest
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Quando linting l'intero repository yamllint è disabilitato per impostazione predefinita. Questa opzione costringe yamllint a prescindere."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distinguished Name' usato quando si generano le chiavi"
@ -2085,6 +2175,11 @@ msgstr "subparser in conflitto: %s"
msgid "could not parse '{path}'"
msgstr "non ha potuto analizzare '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'"
@ -2259,6 +2354,11 @@ msgstr "local_copy_dir deve essere una cartella, non un file!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "il mirror '%s' non finisce con 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Ora imposta i seguenti campi in config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2416,6 +2516,11 @@ msgstr "repo_icon \"repo/icons/%s\" non esiste, genera un segnaposto."
msgid "repo_url needs to end with /repo"
msgstr "Il repo_url deve terminare con /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml non installato, non può scrivere metadati."
@ -2430,6 +2535,11 @@ msgstr "s3cmd sincronizza gli indici {path} con {url} e cancella"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "la cache dello scanner è malformata! Puoi svuotarla con: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir not finisce con \"fdroid\", forse intendevi: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "libreria condivisa"
@ -2634,6 +2744,31 @@ msgstr "{path} non esiste! Crealo eseguendo:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} ha una cattiva firma di file \"{pattern}\", possibile exploit di Janus!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "\"sdk_path\" non impostato in config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2644,6 +2779,11 @@ msgstr "{path} è di dimensioni zero!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} più di 200MB, caricare manualmente: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1786,7 +1786,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2021-01-15 13:25+0000\n"
"Last-Translator: R_SACI <rgebbid@gmail.com>\n"
"Language-Team: Kabyle <https://hosted.weblate.org/projects/f-droid/fdroidserver/kab/>\n"
@ -92,6 +92,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: tuccḍa: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -211,6 +216,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -288,6 +298,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -384,6 +398,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -551,6 +570,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -617,6 +646,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -783,6 +817,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -848,6 +886,11 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Asfaḍ Git yecceḍ"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1053,6 +1096,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1190,6 +1237,10 @@ msgstr ""
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 ""
@ -1348,6 +1399,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1381,6 +1436,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1630,6 +1689,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1791,6 +1854,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1823,6 +1890,10 @@ msgstr "Aseqdec"
msgid "Usage: %s\n"
msgstr "Aseqdec: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1852,6 +1923,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1909,6 +1984,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2058,6 +2137,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2232,6 +2315,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2390,6 +2478,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2404,6 +2497,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2608,6 +2705,31 @@ msgstr "{path} ur yelli ara! Rnu-t s uselkem:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' ur yettwasbadu ara 'config.yml'!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2618,6 +2740,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1,13 +1,13 @@
# SOME DESCRIPTIVE TITLE.
# This file is put in the public domain.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
# Myeongjin Lee <aranet100@gmail.com>, 2021.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/>\n"
"Language: ko\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.14.1-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -94,6 +94,11 @@ msgstr[0] "%(option)s 옵션은 %(number)d 인자가 필요합니다"
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -192,7 +197,7 @@ msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
msgid "'{value}' is not a valid {field}, should be {pattern}"
msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}"
msgstr "'{value}'에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}"
#: ../fdroidserver/checkupdates.py
#, python-brace-format
@ -213,6 +218,11 @@ msgstr "/이슈가 없습니다"
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 ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "저장소의 패키지를 위해 GnuPG를 사용하여 PGP 서명을 추가합니다"
@ -290,6 +300,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -385,6 +399,11 @@ msgstr "카테고리 '%s'는 올바르지 않습니다"
msgid "Categories are not set"
msgstr "카테고리가 설정되어 있지 않습니다"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "애플리케이션으로의 업데이트를 확인합니다"
@ -551,6 +570,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -617,6 +646,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -783,6 +817,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -848,6 +886,11 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "git svn 복제에 실패됨"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -967,7 +1010,7 @@ msgstr "잘못된 Vercode연산: {field}"
#: ../fdroidserver/lint.py
#, fuzzy, python-brace-format
msgid "Invalid VercodeOperation: {invalid_ops}"
msgstr "잘못된 Vercode연산: {field}"
msgstr "잘못된 VercodeOperation연산: {invalid_ops}"
#: ../fdroidserver/common.py
#, python-brace-format
@ -1053,6 +1096,10 @@ msgstr "삭제 중: repo/{apkfilename}"
msgid "Keystore for signing key:\t"
msgstr "서명 키를 위한 키저장소:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1190,6 +1237,11 @@ msgstr ""
msgid "No unsigned directory - nothing to do"
msgstr ""
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "버전 정보를 찾지 못했습니다"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr ""
@ -1348,6 +1400,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1381,6 +1437,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1629,6 +1689,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1790,6 +1854,10 @@ msgstr "UpdateCheckData는 HTTPS URL을 사용해야 합니다: {url}"
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 ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1822,6 +1890,10 @@ msgstr "사용법"
msgid "Usage: %s\n"
msgstr "사용법: %s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1851,6 +1923,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Java의 jarsigner를 사용하여, APK를 검증하는 것은 권장되지 않습니다! apksigner를 사용하세요"
@ -1908,6 +1984,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2056,6 +2136,10 @@ msgstr "충돌하는 옵션 문자열: %s"
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2230,6 +2314,11 @@ msgstr "local_copy_dir는 파일이 아니라, 디렉터리여야 합니다!"
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 ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2388,6 +2477,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2402,6 +2496,10 @@ msgstr "s3cmd 동기화는 {url}로 {path}를 색인하고 삭제합나다"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2605,6 +2703,31 @@ msgstr "{path}는 존재하지 않습니다! 실행하여 그것을 만드세
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path'가 config.yml에서 설정되어 있지 않습니다!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2615,6 +2738,11 @@ msgstr "{path}는 영 크기입니다!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-06-23 14:52+0000\n"
"Last-Translator: abe1242 <abmdn1242@gmail.com>\n"
"Language-Team: Malayalam <https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/>\n"
@ -95,6 +95,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -214,6 +219,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -291,6 +301,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -387,6 +401,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -553,6 +572,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -619,6 +648,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -785,6 +819,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -849,6 +887,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1054,6 +1096,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1191,6 +1237,10 @@ msgstr ""
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 ""
@ -1349,6 +1399,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1382,6 +1436,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1631,6 +1689,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1795,6 +1857,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1827,6 +1893,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1856,6 +1926,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1913,6 +1987,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2062,6 +2140,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2236,6 +2318,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2393,6 +2480,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2407,6 +2499,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2611,6 +2707,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2621,6 +2742,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/>\n"
@ -97,6 +97,11 @@ msgstr[1] "%(option)s-valget krever %(number)d argumenter"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: feil: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -219,6 +224,11 @@ msgstr "/issues mangler"
msgid "A URL is required as an argument!"
msgstr "valg -%s krever et argument"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Ingen signeringssertifikater funnet i {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Legg til PGP-signaturer for pakker i pakkebrønnen ved bruk av GnuPG"
@ -297,6 +307,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -395,6 +409,11 @@ msgstr "Kategorien '%s' er ikke gyldig"
msgid "Categories are not set"
msgstr "Kategoreier ikke satt"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Se etter programoppdateringer"
@ -568,6 +587,16 @@ msgstr "Beskrivelsen har en liste (%s), men er ikke punktvis (*) eller nummerert
msgid "Description of length {length} is over the {limit} char limit"
msgstr "Beskrivelse av lengde {length} overstiger {limit} tegngrensen"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Ikke legg til «deaktivert:» blant genererte bygg"
@ -636,6 +665,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr "Dobbeltlenke i \"{field}\": {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
@ -814,6 +848,11 @@ msgstr "Noen programmer ble funnet å ha ugldige versionCodes"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Fant flere signeringssertifikater i {path}."
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Fant flere signeringssertifikater for pakkebrønn."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -880,6 +919,11 @@ msgstr "Git set-head annensteds hen mislyktes: «%s»"
msgid "Git reset failed"
msgstr "Git-tilbakestilling mislyktes"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git-oppdatering av undermodul mislyktes"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git-synkronisering av undermodul mislyktes"
@ -1093,6 +1137,10 @@ msgstr "Kunne ikke lese minSdkVersion: \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Nøkkellager for signeringsnøkkel:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, fuzzy, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1238,6 +1286,11 @@ msgstr "Fant ingen tilknyttede enheter"
msgid "No unsigned directory - nothing to do"
msgstr "Ingen usignert mappe - ingenting å gjøre"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "ingen versjonsinfo funnet!"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Ikke en gyldig størrelsesdefinisjon: «{}»"
@ -1404,6 +1457,11 @@ msgstr "Dytt loggen til denne Git-pakkebrønnen annensteds hen"
msgid "Pushing binary transparency log to {url}"
msgstr "Dytter binærgjennomsiktighetslogg til {url}."
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git set-head annensteds hen mislyktes: «%s»"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1437,6 +1495,10 @@ msgstr "Kunne ikke lese packageName/versionCode/versionName, APK ugyldig: \"{apk
msgid "Reading {apkfilename} from cache"
msgstr "Behandler {apkfilename}"
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Fjerner angitte filer"
@ -1694,6 +1756,13 @@ msgstr "Nøkkelaliaskollisjon - offentliggjøring stanset"
msgid "These are the apps that have been archived from the main repo."
msgstr ""
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"Feil: Denne kommandoen bør aldri brukes til å speile f-droid.org.\n"
"Et helt speil av f-droid.org krever mer enn 200GB."
#: ../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 ""
@ -1859,6 +1928,10 @@ msgstr "UpdateCheckData må bruke HTTPS-nettadresse: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData er ikke en gyldig nettadresse: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1892,6 +1965,11 @@ msgstr "Bruk"
msgid "Usage: %s\n"
msgstr "Bruk: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Bruk /HEAD istedenfor /master for å peke til en fil i forvalgt forgrening"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Bruk /HEAD istedenfor /master for å peke til en fil i forvalgt forgrening"
@ -1923,6 +2001,11 @@ msgstr "Bruker APK Signature v2"
msgid "Using APK Signature v3"
msgstr "Bruker APK Signature v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Bruker APK Signature v2"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
@ -1982,6 +2065,10 @@ msgstr "Når oppsatt for signerte indekser, vil kun usignerte indekser bli oppre
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 \"Entydig navn\" (DN) brukt ved generering av nøkler."
@ -2138,6 +2225,10 @@ msgstr "konflikterende valgstreng: %s"
msgid "could not parse '{path}'"
msgstr "kunne ikke tolke'{path}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2320,6 +2411,11 @@ msgstr "local_copy_dir må være ei mappe, ikke ei fil!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "speilet \"%s\" slutter ikke med \"fdroid\"."
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Nå må du sette disse i config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2480,6 +2576,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
#, fuzzy
msgid "ruamel.yaml not installed, can not write metadata."
@ -2495,6 +2596,11 @@ msgstr "s3cmd synkroniserer indekser {path} til {url} og sletter"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir slutter ikke med \"fdroid\", kanskje du mente: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "delt bibliotek"
@ -2702,6 +2808,31 @@ msgstr "{path} finnes ikke. Opprett den ved å kjøre:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} har feilaktig filsignatur \"{pattern}\", mulig Janus-utnyttelse."
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' ble ikke funnet i config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2712,6 +2843,11 @@ msgstr "{path} er null størrelse."
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} er mer enn 200MB, last opp manuelt: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, fuzzy, python-brace-format
msgid "{path}: {error}"

View File

@ -1791,7 +1791,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -4,21 +4,21 @@
# Michal L <michalrmsmi@wp.pl>, 2020, 2021.
# mondstern <mondstern@snopyta.org>, 2021.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2021.
# Agnieszka C <aga_04@o2.pl>, 2021, 2022, 2023.
# Agnieszka C <aga_04@o2.pl>, 2021, 2022, 2023, 2024.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-05-26 19:39+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 18:44+0000\n"
"Last-Translator: Agnieszka C <aga_04@o2.pl>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.18-dev\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -99,6 +99,11 @@ msgstr[2] "%(option)s opcje wymagają %(number)d argumentów"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: błąd: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -218,6 +223,11 @@ msgstr "/nie ma problemów"
msgid "A URL is required as an argument!"
msgstr "Adres URL jest wymagany jako argument!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nie znaleziono certyfikatów do podpisu w {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Dodaj podpisy PGP za pomocą GnuPG dla pakietów w repozytorium"
@ -295,6 +305,11 @@ msgstr "Aplikacja ma Binaries, ale nie ma odpowiednich kluczy AllowedAPKSingKeys
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Aplikacja ma NoSourceSince lub ArchivePolicy „0 versions”, ale AutoUpdateMode lub UpdateCheckMode nie są None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Aplikacja ma NoSourceSince lub ArchivePolicy „0 versions”, ale AutoUpdateMode lub UpdateCheckMode nie są None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -392,6 +407,11 @@ msgstr "Kategorie '%s' są nieprawidłowe"
msgid "Categories are not set"
msgstr "Kategorie nie są ustawione"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Sprawdź aktualizacje aplikacji"
@ -558,6 +578,16 @@ msgstr "Opis ma listę (%s), ale nie jest wypunktowana (*) ani ponumerowana (#)"
msgid "Description of length {length} is over the {limit} char limit"
msgstr "Opis długości {length} przekracza limit {limit} char"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Nie dodawaj „wyłącz:” do wygenerowanych wpisów kompilacji"
@ -624,6 +654,11 @@ msgstr "Zduplikowany wpis „%s” w konfiguracji serwerów lustrzanych!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Zduplikowany link w '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "BŁĄD: podkomenda „serwer” została usunięta, użyj polecenia „deploy”!"
@ -794,6 +829,11 @@ msgstr "Znaleziono nieprawidłowe kody wersji dla niektórych aplikacji"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Znaleziono wiele plików bloków podpisów JAR w {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Znaleziono wiele certyfikatów do podpisywania dla repozytorium."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -858,6 +898,11 @@ msgstr "Błąd zdalnego ustawiania Git: \"%s\""
msgid "Git reset failed"
msgstr "Resetowanie Git nie powiodło się"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Aktualizacja submodułu Git nie powiodła się"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Nie udało się zsynchronizować modułu submodule Git"
@ -1063,6 +1108,10 @@ msgstr "Utrzymywanie nieudanej kompilacji „{apkfilename}”"
msgid "Keystore for signing key:\t"
msgstr "Magazyn kluczy do podpisywania klucza:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1200,6 +1249,11 @@ msgstr "Nie znaleziono tagów"
msgid "No unsigned directory - nothing to do"
msgstr "Brak katalogu bez podpisu - nic nie można zrobić"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "nie znaleziono informacji o wersji"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Nieprawidłowa definicja rozmiaru: \"{}\""
@ -1358,6 +1412,11 @@ msgstr "Przepchnij dziennik do tego zdalnego repozytorium git"
msgid "Pushing binary transparency log to {url}"
msgstr "Przesyłanie dziennika przejrzystości plików binarnych do {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Błąd zdalnego ustawiania Git: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1391,6 +1450,11 @@ msgstr "Nie udało się odczytać packageName/versionCode/versionName, nieprawid
msgid "Reading {apkfilename} from cache"
msgstr "Czytanie {apkfilename} z pamięci podręcznej"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "pobierz najnowszą wersję sygnatur z sieci"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Usuwanie określonych plików"
@ -1641,6 +1705,13 @@ msgstr "Istnieje kolizja keyalias - wstrzymano publikowanie"
msgid "These are the apps that have been archived from the main repo."
msgstr "To są aplikacje, które zostały zarchiwizowane w głównym repozytorium."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"BŁĄD: tego polecenia nigdy nie należy używać do zwierciadlania f-droid.org!\n"
"Pełne lustro f-droid.org wymaga ponad 200 GB."
#: ../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 "To jest repozytorium aplikacji używanych z F-Droid. Aplikacje w tym repozytorium są albo oficjalnymi plikami binarnymi utworzonymi przez oryginalnych programistów aplikacji, albo plikami binarnymi utworzonymi ze źródła przez administratora f-droid.org przy użyciu narzędzi na https://gitlab.com/fdroid."
@ -1809,8 +1880,13 @@ msgstr "UpdateCheckData musi używać adresu URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData nie jest prawidłowym adresem URL: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode jest ustawiony, ale wygląda na to, że checkupdates nie został jeszcze uruchomiony"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode jest ustawiony, ale wygląda na to, że checkupdates nie został jeszcze uruchomiony"
@ -1841,6 +1917,11 @@ msgstr "Zastosowanie"
msgid "Usage: %s\n"
msgstr "Użycie: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Użyj /HEAD zamiast/ master, aby wskazać plik w domyślnej gałęzi"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Użyj /HEAD zamiast/ master, aby wskazać plik w domyślnej gałęzi"
@ -1870,6 +1951,11 @@ msgstr "Używając APK Signature v2"
msgid "Using APK Signature v3"
msgstr "Używając APK Signature v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Używając APK Signature v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Korzystanie z jarsignera Java nie jest zalecane do weryfikacji plików APK! Użyj apksigner"
@ -1927,6 +2013,10 @@ msgstr "Po skonfigurowaniu dla indeksów podpisanych utwórz na tym etapie tylko
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Podczas linkowania całego repozytorium yamllint jest domyślnie wyłączony. Ta opcja wymusza yamllint niezależnie od tego."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distinguished Name' używana podczas generowania kluczy"
@ -2077,6 +2167,11 @@ msgstr "kolidujący subparser: %s"
msgid "could not parse '{path}'"
msgstr "nie można przeanalizować '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "could not parse srclib spec (no ref specified):' {}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "could not parse srclib spec (no ref specified):' {}'"
@ -2252,6 +2347,11 @@ msgstr "local_copy_dir musi być katalogiem, a nie plikiem!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "mirror '%s'nie kończy się na 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Teraz ustaw je w config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2409,6 +2509,11 @@ msgstr "repo_icon \"repo / icons / %s\" nie istnieje, generuje symbol zastępczy
msgid "repo_url needs to end with /repo"
msgstr "repo_url musi kończyć się na /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "nie zainstalowano ruamel.yaml, nie można zapisać metadanych."
@ -2423,6 +2528,11 @@ msgstr "s3cmd zsynchronizuj indeksy {path} do {url} i usuń"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "pamięć podręczna skanera jest zniszczona! Możesz to wyczyścić poleceniem: „{clear}”"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir nie kończy się na \"fdroid\", może masz na myśli: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "biblioteka współdzielona"
@ -2628,6 +2738,31 @@ msgstr "{path} nie istnieje! Utwórz go, uruchamiając:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} ma zły podpis pliku \"{pattern}\", możliwe wykorzystanie Janusa!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' nie jest ustawiony w config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2638,6 +2773,11 @@ msgstr "{path} ma zerowy rozmiar!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} więcej niż 200MB, przesłane ręcznie: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-07-02 15:51+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/>\n"
@ -97,6 +97,11 @@ msgstr[1] "A opção %(option)s requer os argumentos %(number)d"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: erro: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -216,6 +221,11 @@ msgstr "está faltando o /issues"
msgid "A URL is required as an argument!"
msgstr "Uma URL é necessária como um argumento!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nenhum certificado de assinatura encontrado em {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório"
@ -293,6 +303,11 @@ msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -389,6 +404,11 @@ msgstr "As categorias '%s' não são válidas"
msgid "Categories are not set"
msgstr "As categorias não são definidas"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Verificação de actualizações das aplicações"
@ -555,6 +575,16 @@ msgstr "A descrição tem a lista (%s), mas não tem marcadores (*), nem é nume
msgid "Description of length {length} is over the {limit} char limit"
msgstr "A descrição de comprimento {length} é sobre o limite de char {limit}"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Não adicionar 'disable:' às entradas de compilação geradas"
@ -621,6 +651,11 @@ msgstr "Entrada \"%s\" duplicada na configuração de espelhos!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Ligação duplicada em '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!"
@ -791,6 +826,11 @@ msgstr "versionCodes inválidos encontrados para algumas apps"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Vários ficheiros de blocos de assinaturas JAR foram encontrados em {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Vários certificados de assinatura encontrados para o repositório."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -855,6 +895,11 @@ msgstr "Git remote set-head falhou: \"%s\""
msgid "Git reset failed"
msgstr "Git reset falhou"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git submodule update falhou"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git submodule sync falhou"
@ -1060,6 +1105,10 @@ msgstr "Mantendo a compilação com falha \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Armazenamento de chaves de assinatura:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1197,6 +1246,11 @@ msgstr "Nenhuma etiqueta encontrada"
msgid "No unsigned directory - nothing to do"
msgstr "Nenhum diretório não assinado - nada a fazer"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "nenhuma informação de versão encontrada"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Não é uma definição de tamanho válida: \"{}\""
@ -1355,6 +1409,11 @@ msgstr "Submeter o registo de eventos para este repositório git remoto"
msgid "Pushing binary transparency log to {url}"
msgstr "A submeter o registo de transparência de binário para {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head falhou: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1388,6 +1447,11 @@ msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfi
msgid "Reading {apkfilename} from cache"
msgstr "Lendo {apkfilename} do cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "buscar a versão de assinaturas mais recente da Web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Apagando ficheiros especificados"
@ -1637,6 +1701,13 @@ msgstr "Há uma colisão do keyalias - publicação parada"
msgid "These are the apps that have been archived from the main repo."
msgstr "Estas são as aplicações que foram arquivadas do repositório principal."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERRO: este comando nunca deve ser usado para espelhar f-Droid.org!\n"
"Um espelho completo de f-Droid.org requer mais de 200GB."
#: ../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 "Este é um repositório de apps a serem usados com o F-Droid. Aplicações neste repositório são binários oficiais compilados pelos programadores da aplicação original ou são binários compilados da fonte por f-droid.org a usar as ferramentas em https://gitlab.com/fdroid."
@ -1805,8 +1876,13 @@ msgstr "UpdateCheckData deve usar um URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData não é uma URL válida: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
@ -1837,6 +1913,11 @@ msgstr "Utilização"
msgid "Usage: %s\n"
msgstr "Utilização: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Use /HEAD em vez de /master para apontar num ficheiro na ramificação predefinida"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Use /HEAD em vez de /master para apontar num ficheiro na ramificação predefinida"
@ -1866,6 +1947,11 @@ msgstr "A usar a assinatura APK v2"
msgid "Using APK Signature v3"
msgstr "A usar a assinatura APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "A usar a assinatura APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner"
@ -1923,6 +2009,10 @@ msgstr "Quando configurado para índices assinados, crie apenas índices não as
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição. Esta opção força o yamllint independentemente."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distiguished Name' usado na geração de chaves"
@ -2072,6 +2162,11 @@ msgstr "subanalisador conflitante: %s"
msgid "could not parse '{path}'"
msgstr "não foi possível analisar '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'"
@ -2246,6 +2341,11 @@ msgstr "local_copy_dir deve ser directory, não um ficheiro!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "espelho '%s' não termina com 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Agora configure estes em config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2403,6 +2503,11 @@ msgstr "repo_icon \"repo/icons/%s\" não existe, a gerar um espaço reservado."
msgid "repo_url needs to end with /repo"
msgstr "repo_url precisa de terminar com /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "o ruamel.yaml não está instalado, não é possível escrever metadados."
@ -2417,6 +2522,11 @@ msgstr "s3cmd sincroniza índices {path} para {url} e apaga"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "o cache do scanner está malformado! Pode limpá-lo com: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir não termina com \"fdroid\", talvez quis: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "biblioteca compartilhada"
@ -2621,6 +2731,31 @@ msgstr "{path} não existe! Crie-o executando:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração Janus é possível!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' não definido em 'config.yml'!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2631,6 +2766,11 @@ msgstr "{path} tem um tamanho de zero!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} mais de 200MB, enviar manualmente: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-08-18 15:51+0000\n"
"Last-Translator: The Cats <philosoph@danwin1210.de>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/>\n"
@ -102,6 +102,11 @@ msgstr[1] "opção %(option)s necessita %(number)d argumentos"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: erro: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -221,6 +226,11 @@ msgstr "está faltando o /issues"
msgid "A URL is required as an argument!"
msgstr "Uma URL é necessária como um argumento!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nenhum certificado de assinatura encontrado em {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório"
@ -298,6 +308,11 @@ msgstr "O aplicativo tem binários, mas não tem AllowedAPKSigningKeys correspon
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "O aplicativo tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "O aplicativo tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -394,6 +409,11 @@ msgstr "Categorias '%s' não são válidas"
msgid "Categories are not set"
msgstr "As categorias não estão definidas"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Verifica se existem atualizações para os aplicativos"
@ -560,6 +580,16 @@ msgstr "Descrição tem uma lista (%s), mas não é com marcadores (*) nem numer
msgid "Description of length {length} is over the {limit} char limit"
msgstr "A descrição de tamanho {length} está acima do limite de {limit} caracteres"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Não adicione \"disable:\" para as entradas de compilação geradas"
@ -626,6 +656,11 @@ msgstr "Entrada \"%s\" duplicada na configuração de espelhos!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Link duplicado em '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!"
@ -796,6 +831,11 @@ msgstr "Encontrado versões de códigos inválidas para alguns aplicativos"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Encontrados vários arquivos de bloqueio de assinatura JAR em {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Encontrado vários certificados de assinatura para o repositório."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -860,6 +900,11 @@ msgstr "Git remote set-head falhou: \"%s\""
msgid "Git reset failed"
msgstr "Falha no 'reset' do Git"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Falha na atualização do submódulo Git"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Falha na sincronização do submódulo Git"
@ -1065,6 +1110,10 @@ msgstr "Mantendo a compilação com falha \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Armazenamento de chaves de assinatura:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1202,6 +1251,11 @@ msgstr "Nenhuma etiqueta encontrada"
msgid "No unsigned directory - nothing to do"
msgstr "Nenhum diretório não assinado - nada a fazer"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "nenhuma informação de versão encontrada"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Não é uma definição de tamanho válida: \"{}\""
@ -1360,6 +1414,11 @@ msgstr "Mandar o registro de mudanças para este repositório git remoto"
msgid "Pushing binary transparency log to {url}"
msgstr "Atualizar o log de transparência de um binário para {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head falhou: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1393,6 +1452,11 @@ msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfi
msgid "Reading {apkfilename} from cache"
msgstr "Lendo {apkfilename} do cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "obter a versão de assinaturas mais recente da Web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Removendo arquivos especificados"
@ -1642,6 +1706,13 @@ msgstr "Há uma colisão do keyalias - publicação parada"
msgid "These are the apps that have been archived from the main repo."
msgstr "Estas são as aplicações que foram arquivadas a partir do repositório principal."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERRO: este comando nunca deve ser usado para espelhar o f-droid.org!\n"
"Um espelho completo de f-droid.org requer mais de 200 GB."
#: ../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 "Este é um repositório de aplicativos a serem usados com o F-Droid. Os aplicativos neste repositório são binários oficiais compilados pelos desenvolvedores do aplicativo original ou são binários compilados a partir da fonte por f-droid.org usando as ferramentas em https://gitlab.com/fdroid."
@ -1810,8 +1881,13 @@ msgstr "UpdateCheckData deve usar um URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData não é uma URL válida: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
@ -1842,6 +1918,11 @@ msgstr "Uso"
msgid "Usage: %s\n"
msgstr "Uso: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Use /HEAD em vez de /master para apontar em um arquivo na ramificação predefinida"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Use /HEAD em vez de /master para apontar em um arquivo na ramificação predefinida"
@ -1871,6 +1952,11 @@ msgstr "Usando a Assinatura APK v2"
msgid "Using APK Signature v3"
msgstr "Usando a Assinatura APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Usando a Assinatura APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner"
@ -1928,6 +2014,10 @@ msgstr "Quando configurado para índices assinados, crie apenas índices não as
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Ao cotar todo o repositório, o yamllint é desativado por padrão. Independente de qualquer coisa esta opção impõem o uso do yamllint."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distiguished Name' usado na geração de chaves"
@ -2077,6 +2167,11 @@ msgstr "subanalizador conflitante: %s"
msgid "could not parse '{path}'"
msgstr "não foi possível analisar '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "não foi possível analisar a especificação srclib (referência sem especificação): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "não foi possível analisar a especificação srclib (referência sem especificação): '{}'"
@ -2251,6 +2346,11 @@ msgstr "local_copy_dir deve ser um diretório, não um arquivo!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "espelho '%s' não termina com 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Agora defina estes em config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2408,6 +2508,11 @@ msgstr "repo_icon \"repo/icons/%s\" não existe, gerando um espaço reservado."
msgid "repo_url needs to end with /repo"
msgstr "repo_url precisa terminar com /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "o ruamel.yaml não está instalado, não é possível escrever os metadados."
@ -2422,6 +2527,11 @@ msgstr "s3cmd sincroniza índices {path} para {url} e exclui"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "o cache do scanner está malformado! Você pode limpá-lo com: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir não termina com \"fdroid\", talvez você quis: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "biblioteca compartilhada"
@ -2626,6 +2736,31 @@ msgstr "{path} não existe! Crie-o executando:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} tem uma má assinatura de arquivo \"{pattern}\", um exploração Janus é possível!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "\"sdk_path\" não definido em config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2636,6 +2771,11 @@ msgstr "{path} tem um tamanho de zero!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "o {path} tem mais de 200MB, upload manual: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-07-02 15:51+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/>\n"
@ -98,6 +98,11 @@ msgstr[1] "A opção %(option)s requer os argumentos %(number)d"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: erro: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -217,6 +222,11 @@ msgstr "está faltando o /issues"
msgid "A URL is required as an argument!"
msgstr "Uma URL é necessária como um argumento!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nenhum certificado de assinatura encontrado em {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório"
@ -294,6 +304,11 @@ msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -390,6 +405,11 @@ msgstr "As categorias '%s' não são válidas"
msgid "Categories are not set"
msgstr "As categorias não são definidas"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Verificação de actualizações das aplicações"
@ -556,6 +576,16 @@ msgstr "A descrição tem a lista (%s), mas não tem marcadores (*), nem é nume
msgid "Description of length {length} is over the {limit} char limit"
msgstr "A descrição de comprimento {length} é sobre o limite de char {limit}"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Não adicionar 'disable:' às entradas de compilação geradas"
@ -622,6 +652,11 @@ msgstr "Entrada \"%s\" duplicada na configuração de espelhos!"
msgid "Duplicate link in '{field}': {url}"
msgstr "Ligação duplicada em '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!"
@ -792,6 +827,11 @@ msgstr "versionCodes inválidos encontrados para algumas apps"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Vários ficheiros de blocos de assinaturas JAR foram encontrados em {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Vários certificados de assinatura encontrados para o repositório."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -856,6 +896,11 @@ msgstr "Git remote set-head falhou: \"%s\""
msgid "Git reset failed"
msgstr "Git reset falhou"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git submodule update falhou"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git submodule sync falhou"
@ -1061,6 +1106,10 @@ msgstr "Mantendo a compilação com falha \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Armazenamento de chaves de assinatura:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1198,6 +1247,11 @@ msgstr "Nenhuma etiqueta encontrada"
msgid "No unsigned directory - nothing to do"
msgstr "Nenhum diretório não assinado - nada a fazer"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "não há informações de versão encontrada"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Não é uma definição de tamanho válida: \"{}\""
@ -1356,6 +1410,11 @@ msgstr "Submeter o registo de eventos para este repositório git remoto"
msgid "Pushing binary transparency log to {url}"
msgstr "A submeter o registo de transparência de binário para {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head falhou: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1389,6 +1448,11 @@ msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfi
msgid "Reading {apkfilename} from cache"
msgstr "Lendo {apkfilename} do cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "buscar a versão de assinaturas mais recente da Web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Apagando ficheiros especificados"
@ -1638,6 +1702,13 @@ msgstr "Há uma colisão do keyalias - publicação parada"
msgid "These are the apps that have been archived from the main repo."
msgstr "Estas são as aplicações que foram arquivadas do repositório principal."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERRO: este comando nunca deve ser usado para espelhar f-Droid.org!\n"
"Um espelho completo de f-Droid.org requer mais de 200GB."
#: ../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 "Este é um repositório de apps a serem usados com o F-Droid. Aplicações neste repositório são binários oficiais compilados pelos programadores da aplicação original ou são binários compilados da fonte por f-droid.org a usar as ferramentas em https://gitlab.com/fdroid."
@ -1806,8 +1877,13 @@ msgstr "UpdateCheckData deve usar um URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData não é uma URL válida: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
@ -1838,6 +1914,11 @@ msgstr "Utilização"
msgid "Usage: %s\n"
msgstr "Utilização: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Use /HEAD em vez de /master para apontar num ficheiro na ramificação predefinida"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Use /HEAD em vez de /master para apontar num ficheiro na ramificação predefinida"
@ -1867,6 +1948,11 @@ msgstr "A usar a assinatura APK v2"
msgid "Using APK Signature v3"
msgstr "A usar a assinatura APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "A usar a assinatura APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner"
@ -1924,6 +2010,10 @@ msgstr "Quando configurado para índices assinados, crie apenas índices não as
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição. Esta opção força o yamllint independentemente."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distiguished Name' usado na geração de chaves"
@ -2073,6 +2163,11 @@ msgstr "subanalisador conflitante: %s"
msgid "could not parse '{path}'"
msgstr "não foi possível analisar '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'"
@ -2247,6 +2342,11 @@ msgstr "local_copy_dir deve ser directory, não um ficheiro!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "espelho '%s' não termina com 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Agora configure estes em config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2404,6 +2504,11 @@ msgstr "repo_icon \"repo/icons/%s\" não existe, a gerar um espaço reservado."
msgid "repo_url needs to end with /repo"
msgstr "repo_url precisa de terminar com /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "o ruamel.yaml não está instalado, não é possível escrever metadados."
@ -2418,6 +2523,11 @@ msgstr "s3cmd sincroniza índices {path} para {url} e exclui"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "o cache do scanner está malformado! Pode limpá-lo com: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir não termina com \"fdroid\", talvez quis: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "biblioteca compartilhada"
@ -2622,6 +2732,31 @@ msgstr "{path} não existe! Crie-o executando:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração Janus é possível!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' não definido em 'config.yml'!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2632,6 +2767,11 @@ msgstr "{path} tem um tamanho de zero!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} mais de 200MB, enviar manualmente: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -2,22 +2,23 @@
# This file is put in the public domain.
# Daniel Șerbănescu <daniel@serbanescu.dk>, 2021.
# Christian Eichert <c@zp1.net>, 2021.
# Simona Iacob <s@zp1.net>, 2021, 2022, 2023.
# Licaon Kter <licaon.kter@protonmail.com>, 2021, 2022.
# Simona Iacob <s@zp1.net>, 2021, 2022, 2023, 2024.
# Licaon Kter <licaon.kter@protonmail.com>, 2021, 2022, 2023.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2024.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-08-10 18:46+0000\n"
"Last-Translator: Simona Iacob <s@zp1.net>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.0-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -74,7 +75,7 @@ msgstr "\"{path}\" nu este un format de fișier acceptat (utilizați: metadata/*
#: ../fdroidserver/update.py
#, python-brace-format
msgid "\"{path}\" is signed by a key that is not allowed:"
msgstr "\"{path}\" \"{path}\" este semnat de o cheie care nu este permisă:"
msgstr "\"{path}\" este semnat de o cheie care nu este permisă:"
#: ../fdroidserver/import_subcommand.py
#, python-brace-format
@ -98,6 +99,11 @@ msgstr[2] "Opțiunea %(option)s necesită %(number)d argumente"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: eroare: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -217,6 +223,11 @@ msgstr "/problemele lipsesc"
msgid "A URL is required as an argument!"
msgstr "Un URL este necesar ca argument!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Nu s-au găsit certificate de semnare în {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Adăugați semnături PGP folosind GnuPG pentru pachetele din depozit"
@ -294,6 +305,11 @@ msgstr "Aplicația are binare, dar nu are AllowedAPKSigningKeys corespunzătoare
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "App are NoSourceSince sau ArchivePolicy \"0 versions\" dar AutoUpdateMode sau UpdateCheckMode nu sunt None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "App are NoSourceSince sau ArchivePolicy \"0 versions\" dar AutoUpdateMode sau UpdateCheckMode nu sunt None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -314,12 +330,12 @@ msgstr "Arhivare {apkfilename} cu semnătură invalidă!"
#: ../fdroidserver/lint.py
msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern."
msgstr ""
msgstr "AutoUpdateMode cu UpdateCheckMode: HTTP trebuie să aivă un format."
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}"
msgstr ""
msgstr "Intrare de tip \"{mirrortype}\" greșită în configurația oglinzilor: {mirror}"
#: ../fdroidserver/mirror.py
msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint="
@ -391,6 +407,11 @@ msgstr "Categoriile \"%s\" nu sunt valabile"
msgid "Categories are not set"
msgstr "Categoriile nu sunt setate"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Verificați dacă există actualizări ale aplicațiilor"
@ -420,7 +441,7 @@ msgstr "Efectuați modificări"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Conflicting \"{field}\" definitions between .yml and localized files:"
msgstr ""
msgstr "Definiții \"{field}\" contradictorii între fișierele .yml și cele localizate:"
#: ../fdroidserver/__main__.py
msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time."
@ -557,6 +578,16 @@ msgstr "Descrierea are o listă (%s), dar nu este punctată (*) și nici numerot
msgid "Description of length {length} is over the {limit} char limit"
msgstr "Descrierea lungimii {length} este peste limita {limit} limitei de caractere"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Nu adăugați \"disable:\" la intrările de construcție generate"
@ -611,18 +642,23 @@ msgstr "Descărcarea {url} a eșuat. {error}"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Duplicate Anti-Feature declaration at {path} was ignored!"
msgstr ""
msgstr "Declarația duplicată Anti-Feature la {path} a fost ignorată!"
#: ../fdroidserver/index.py
#, python-format
msgid "Duplicate entry \"%s\" in mirrors config!"
msgstr ""
msgstr "Intrare duplicată \"%s\" în oglinzile config!"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Duplicate link in '{field}': {url}"
msgstr "Legătură duplicată în \"{field}\": {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ERROR: Subcomanda \"server\" a fost eliminată, utilizați \"deploy\"!"
@ -669,7 +705,7 @@ msgstr "Eroare la obținerea adresei repo"
#: ../fdroidserver/scanner.py
msgid "Exit with a non-zero code if problems were found"
msgstr ""
msgstr "Ieșiți cu un cod diferit de zero dacă au fost găsite probleme"
#: ../fdroidserver/__main__.py
msgid "Extract application metadata from a source repository"
@ -793,6 +829,11 @@ msgstr "Am găsit coduri de versiune invalide pentru unele aplicații"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Am găsit mai multe fișiere JAR Signature Block în {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "S-au găsit mai multe certificate de semnare pentru depozit."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -817,9 +858,9 @@ msgid "Found {apkfilename} at {url}"
msgstr "Am găsit {apkfilename} la {url}"
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "Found {count} problems in {filename}"
msgstr "Scanerul a găsit {count} probleme în {appid}:"
msgstr "Am găsit {count} probleme în {filename}"
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -857,6 +898,11 @@ msgstr "Git remote set-head a eșuat: \"%s\""
msgid "Git reset failed"
msgstr "Resetarea Git a eșuat"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Actualizarea submodulelor Git a eșuat"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Sincronizarea submodulelor Git a eșuat"
@ -1062,6 +1108,10 @@ msgstr "Nu a reușit să construiască \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Keystore pentru cheia de semnare:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1199,6 +1249,11 @@ msgstr "Nu s-au găsit etichete"
msgid "No unsigned directory - nothing to do"
msgstr "Niciun director nesemnat - nimic de făcut"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "nu s-au găsit informații despre versiune"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Nu este o definiție valabilă a dimensiunii: \"{}\""
@ -1357,6 +1412,11 @@ msgstr "Împingeți jurnalul în acest depozit de la distanță git"
msgid "Pushing binary transparency log to {url}"
msgstr "Trimiterea jurnalului de transparență binară la {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head a eșuat: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1381,7 +1441,7 @@ msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfil
msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apkfilename}'"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'"
msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apkfilename}'"
@ -1390,6 +1450,11 @@ msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apk
msgid "Reading {apkfilename} from cache"
msgstr "Citirea {apkfilename} din memoria cache"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "extrage cea mai recentă versiune de semnături de pe web"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Eliminarea fișierelor specificate"
@ -1453,7 +1518,7 @@ msgstr "Rularea wget în {path}"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "SHA-256 of {url} does not match entry!"
msgstr ""
msgstr "SHA-256 din {url} nu se potrivește cu intrarea!"
#: ../fdroidserver/build.py
msgid "Scan the resulting APK(s) for known non-free classes."
@ -1464,9 +1529,9 @@ msgid "Scan the source code of a package"
msgstr "Scanarea codului sursă al unui pachet"
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "Scanner found {count} problems in {apk}"
msgstr "Scanerul a găsit {count} probleme în {appid}:"
msgstr "Scanerul a găsit {count} probleme în {apk}"
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -1640,6 +1705,13 @@ msgstr "Există o coliziune keyalias - publicarea a fost oprită"
msgid "These are the apps that have been archived from the main repo."
msgstr "Acestea sunt aplicațiile care au fost arhivate din depozitul principal."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ERROR: această comandă nu ar trebui să fie folosită niciodată pentru a oglindi f-droid.org!\n"
"O oglindă completă a f-droid.org necesită mai mult de 200GB."
#: ../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 "Acesta este un depozit de aplicații care pot fi utilizate cu F-Droid. Aplicațiile din acest depozit sunt fie binare oficiale construite de către dezvoltatorii aplicațiilor originale, fie binare construite din sursă de către administratorul f-droid.org folosind instrumentele de pe https://gitlab.com/fdroid."
@ -1796,7 +1868,7 @@ msgstr "UpdateCheckData are un URL invalid: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}"
msgstr ""
msgstr "UpdateCheckData trebuie să corespundă codului versiunii ca număr întreg (\\d sau [0-9]): {codeex}"
#: ../fdroidserver/lint.py
#, python-brace-format
@ -1808,10 +1880,15 @@ msgstr "UpdateCheckData trebuie să utilizeze un URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData nu este un URL valid: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode este setat, dar se pare că checkupdates nu a fost încă rulat."
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr ""
msgstr "UpdateCheckMode este setat, dar se pare că checkupdates nu a fost încă rulat."
#: ../fdroidserver/lint.py
msgid "UpdateCheckName is set to the known application ID, it can be removed"
@ -1840,6 +1917,11 @@ msgstr "Utilizare"
msgid "Usage: %s\n"
msgstr "Utilizare: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Folosiți /HEAD în loc de /master pentru a indica un fișier din ramura implicită"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Folosiți /HEAD în loc de /master pentru a indica un fișier din ramura implicită"
@ -1869,6 +1951,11 @@ msgstr "Folosind APK Signature v2"
msgid "Using APK Signature v3"
msgstr "Folosind APK Signature v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Folosind APK Signature v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Folosind jarsigner de la Java, nu este recomandat pentru verificarea APK-urilor! Utilizați apksigner"
@ -1881,7 +1968,7 @@ msgstr "Folosind androguard din \"{path}\""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Using blank dictionary instead of contents of {path}!"
msgstr ""
msgstr "Utilizarea dicționarului gol în loc de conținutul lui {path}!"
#: ../fdroidserver/init.py
#, python-brace-format
@ -1926,6 +2013,10 @@ msgstr "Atunci când este configurat pentru indici cu semnătură, creați numai
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Atunci când se face linting pentru întregul depozit, yamllint este dezactivat în mod implicit. Această opțiune forțează yamllint indiferent de aceasta."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 \"Distinguished Name\" utilizat la generarea cheilor"
@ -1995,7 +2086,7 @@ msgstr "argumentul \"-\" cu modul %r"
#: /usr/lib/python3.11/argparse.py
#, python-format
msgid "argument %(argument_name)s: %(message)s"
msgstr ""
msgstr "argument %(argument_name)s: %(message)s"
#: ../fdroidserver/nightly.py
msgid "attempting bare SSH connection to test deploy key:"
@ -2012,7 +2103,7 @@ msgstr "nu se poate deschide '%(filename)s': %(error)s"
#: ../fdroidserver/scanner.py
msgid "can't open non-https url: '{};"
msgstr ""
msgstr "nu se poate deschide un URL non-https: '{};"
#: ../fdroidserver/build.py
#, python-brace-format
@ -2062,12 +2153,12 @@ msgstr[1] "șiruri de opțiuni conflictuale: %s"
msgstr[2] "șiruri de opțiuni conflictuale: %s"
#: /usr/lib/python3.11/argparse.py
#, fuzzy, python-format
#, python-format
msgid "conflicting subparser alias: %s"
msgstr "șir de opțiuni conflictuale: %s"
msgstr "șir de alias conflictual: %s"
#: /usr/lib/python3.11/argparse.py
#, fuzzy, python-format
#, python-format
msgid "conflicting subparser: %s"
msgstr "șir de opțiuni conflictuale: %s"
@ -2076,6 +2167,11 @@ msgstr "șir de opțiuni conflictuale: %s"
msgid "could not parse '{path}'"
msgstr "nu s-a putut analiza '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun ref): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun ref): '{}'"
@ -2112,14 +2208,12 @@ msgid "dest= is required for options like %r"
msgstr "dest= este necesar pentru opțiuni precum %r"
#: ../fdroidserver/scanner.py
#, fuzzy
msgid "downloading '{}'"
msgstr "Descărcare %s"
msgstr "descărcare '{}'"
#: ../fdroidserver/scanner.py
#, fuzzy
msgid "downloading scanner signatures from '{}' failed"
msgstr "Eliminarea semnăturii misterioase din {apkfilename}"
msgstr "descărcarea semnăturilor de scaner de la '{}' a eșuat"
#: ../fdroidserver/scanner.py
msgid "executable binary, possibly code"
@ -2159,7 +2253,7 @@ msgstr "fdroid [<comandă>] [-h|--help|--version|<args>]"
#: ../fdroidserver/scanner.py
msgid "fetch the latest version of signatures from the web"
msgstr ""
msgstr "extrage cea mai recentă versiune de semnături de pe web"
#: /usr/lib/python3.11/optparse.py
msgid "floating-point"
@ -2228,7 +2322,7 @@ msgstr "șir de opțiuni invalid %(option)r: trebuie să înceapă cu un caracte
#: ../fdroidserver/common.py
msgid "ipfs_cid not found, skipping CIDv1 generation"
msgstr ""
msgstr "ipfs_cid nu a fost găsit, sărind peste generarea CIDv1"
#: ../fdroidserver/checkupdates.py
#, python-brace-format
@ -2253,6 +2347,11 @@ msgstr "local_copy_dir trebuie să fie un director, nu un fișier!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "oglinda '%s' nu se termină cu 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Acum setați-le în config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2262,7 +2361,7 @@ msgstr "argumentele care se exclud reciproc trebuie să fie opționale"
#: ../fdroidserver/scanner.py
#, python-brace-format
msgid "next {name} cache update due in {time}"
msgstr ""
msgstr "următoarea actualizare a memoriei cache {name} va fi efectuată în {time}"
#: ../fdroidserver/mirror.py
#, python-brace-format
@ -2373,9 +2472,8 @@ msgid "optional arguments"
msgstr "argumente opționale"
#: /usr/lib/python3.11/argparse.py
#, fuzzy
msgid "options"
msgstr "Opțiuni"
msgstr "opțiuni"
#: ../fdroidserver/nightly.py
#, python-brace-format
@ -2395,7 +2493,7 @@ msgstr "jurnalul procesului deploy {path} la {dest} a eșuat!"
#: ../fdroidserver/build.py
msgid "reference binary missing signature"
msgstr ""
msgstr "referință binară semnătură lipsă"
#: ../fdroidserver/signatures.py
#, python-brace-format
@ -2411,6 +2509,11 @@ msgstr "repo_icon \"repo/icons/%s\" nu există, se generează un înlocuitor."
msgid "repo_url needs to end with /repo"
msgstr "repo_url trebuie să se termine cu /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml nu este instalat, nu poate scrie metadatele."
@ -2423,7 +2526,12 @@ msgstr "s3cmd sincronizează indexurile {path} cu {url} și șterge"
#: ../fdroidserver/scanner.py
#, python-brace-format
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
msgstr "cache-ul scanerului este deformat! Puteți să o ștergeți cu: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir nu se termină cu \"fdroid\", poate ai vrut să spui: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
@ -2471,7 +2579,7 @@ msgstr "bibliotecă statică"
#: ../fdroidserver/build.py
#, python-brace-format
msgid "supplied reference binary has allowed signer {signer}"
msgstr ""
msgstr "binare de referință furnizate au permis semnatarului {signer}"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
@ -2596,7 +2704,7 @@ msgid "{build_flag} must be an integer, found: {value}"
msgstr "{build_flag} trebuie să fie un număr întreg, găsit: {value}"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "{build_flag} must be list or string, found: {value}"
msgstr "{build_flag} trebuie să fie un număr întreg, găsit: {value}"
@ -2630,6 +2738,31 @@ msgstr "{path} nu există! Creați-l prin rularea:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} are o semnătură proastă a fișierului \"{pattern}\", posibil exploit Janus!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' nu este setat în 'config.yml'!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2640,6 +2773,11 @@ msgstr "{path} este de dimensiune zero!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} mai mult de 200MB, încărcați manual: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -12,20 +12,21 @@
# Чтабс <chtabs2k19@gmail.com>, 2021.
# Andrei Stepanov <adem4ik@gmail.com>, 2022.
# Макар Разин <makarrazin14@gmail.com>, 2023.
# Alexander Ivanov <saiv46.dev@gmail.com>, 2024.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-05-28 07:54+0000\n"
"Last-Translator: Andrey <andrey@mailbox.org>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-02-23 12:59+0000\n"
"Last-Translator: Alexander Ivanov <saiv46.dev@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.18-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -42,7 +43,7 @@ msgid ""
"{path} encoded for the DEBUG_KEYSTORE secret variable:"
msgstr ""
"\n"
"зашифрованный путь {path}, который будет присвоен скрытой переменной DEBUG_KEYSTORE:"
"{path} закодирован в скрытую переменную DEBUG_KEYSTORE:"
#: ../fdroidserver/lint.py
#, python-format
@ -106,10 +107,15 @@ msgstr[2] "Параметр %(option)s требует %(number)d аргумен
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
msgstr "найдено %d ошибок"
msgstr "%d ошибок найдено"
#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py
@ -156,15 +162,15 @@ msgstr "Значение 'keystore` — NONE, но 'smartcardoptions' не за
#: ../fdroidserver/common.py
msgid "'keystore' not found in config.yml!"
msgstr "В config.yml нет переменной 'keystore'!"
msgstr "'keystore' не найден в config.yml!"
#: ../fdroidserver/common.py
msgid "'keystorepass' not found in config.yml!"
msgstr "В config.yml нет переменной 'keystorepass'!"
msgstr "'keystorepass' не найден в config.yml!"
#: ../fdroidserver/common.py
msgid "'repo_keyalias' not found in config.yml!"
msgstr "В config.yml нет переменной 'repo_ keyalias'!"
msgstr "'repo_keyalias' не найден в config.yml!"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
@ -225,6 +231,11 @@ msgstr "Не хватает /issues"
msgid "A URL is required as an argument!"
msgstr "В качестве аргумента нужен URL-адрес!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "В {path} не обнаружены сертификаты для подписывания"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Добавить PGP подписи для пакетов в репозитории с помощью GnuPG"
@ -302,6 +313,11 @@ msgstr "Приложение имеет двоичные файлы, но не
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Приложение имеет NoSourceSince или ArchivePolicy \"0 версий\", но AutoUpdateMode или UpdateCheckMode не равны None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Приложение имеет NoSourceSince или ArchivePolicy \"0 версий\", но AutoUpdateMode или UpdateCheckMode не равны None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -399,6 +415,11 @@ msgstr "Неправильные категории: '%s'"
msgid "Categories are not set"
msgstr "Категории не выбраны"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Проверить обновления для приложений"
@ -529,7 +550,7 @@ msgstr "Переменная DEBUG_KEYSTORE пустая или заполнен
#: ../fdroidserver/update.py
msgid "Delete APKs and/or OBBs without metadata from the repo"
msgstr "Удалить из репозитория APK и/или OBB файлы без метаданных"
msgstr "Удалить APK и/или OBB без метаданных из репозитория"
#: ../fdroidserver/deploy.py
#, python-brace-format
@ -565,6 +586,16 @@ msgstr "В описании есть неразмеченный список (%s
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 ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Не добавлять 'disable:' к сгенерированным данным сборки"
@ -631,6 +662,11 @@ msgstr "Дублирующаяся запись \"%s\" в конфигураци
msgid "Duplicate link in '{field}': {url}"
msgstr "Точная копия ссылки в '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ОШИБКА: подкоманда \"server\" была удалена, используйте \"deploy\"!"
@ -801,6 +837,11 @@ msgstr "Для некоторых приложений обнаружены не
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "В {path} обнаружено несколько сертификатов (JAR Signature Block File)"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Для этого репозитория обнаружено несколько ключей для подписывания."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -865,6 +906,11 @@ msgstr "Не удалось настроить HEAD для удаленного
msgid "Git reset failed"
msgstr "Не удалось отменить изменения (git reset)"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Не удалось обновить модули Git (git submodules update)"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Не удалось синхронизировать модули Git (git submodules sync)"
@ -1070,6 +1116,10 @@ msgstr "Сохранение неудачной сборки \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Хранилище ключа для подписывания:→\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1207,6 +1257,11 @@ msgstr "Теги не найдены"
msgid "No unsigned directory - nothing to do"
msgstr "Директории с неподписанными данными не существует. До новых встреч"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "информация о версии не найдена"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Неверное определение размера: \"{}\""
@ -1365,6 +1420,11 @@ msgstr "Отправить лог в удаленный репозиторий g
msgid "Pushing binary transparency log to {url}"
msgstr "Публикация лога прозрачности кода в {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Не удалось настроить HEAD для удаленного репозитория (git remote set-head): \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1372,7 +1432,7 @@ msgstr "Публикация в {url}"
#: ../fdroidserver/__main__.py
msgid "Quickly start a new repository"
msgstr "Создать новый репозиторий (укороченная процедура)"
msgstr "Быстро создать новый репозиторий"
#: ../fdroidserver/__main__.py
msgid "Read all the metadata files and exit"
@ -1398,6 +1458,11 @@ msgstr "Не удалось прочитать packageName/versionCode/versionNa
msgid "Reading {apkfilename} from cache"
msgstr "Чтение {apkfilename} из кеша"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "получить последнюю версию подписей из интернета"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Удаление выбранных файлов"
@ -1534,7 +1599,7 @@ msgstr "Подписать пакеты и поместить в репозит
#: ../fdroidserver/__main__.py
msgid "Sign indexes created using update --nosign"
msgstr "Подписать индексы, созданные с флагом \"update --nosign\""
msgstr "Подписать индексы созданные с \"update --nosign\""
#: ../fdroidserver/build.py
msgid "Skip scanning the source code for binaries and other problems"
@ -1648,6 +1713,13 @@ msgstr "Есть расхождения в алиасах ключей для п
msgid "These are the apps that have been archived from the main repo."
msgstr "Это те приложения, которые были заархивированы из основного репозитория."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ОШИБКА: эту команду ни в коем случае нельзя использовать для создания зеркала f-droid.org!\n"
"Оно занимает больше 200 Гб."
#: ../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 "Это репозиторий приложений, предназначенных для использования в FDroid. Приложения в этом репозитории являются либо официальными бинарными файлами, созданными разработчиками оригинального приложения, либо бинарными файлами, созданными f-droid.org из исходного кода с помощью инструментов на https://gitlab.com/fdroid."
@ -1816,8 +1888,13 @@ msgstr "URL-адрес в UpdateCheckData должен начинаться с H
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/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode настроен, но похоже, что команда checkupdates еще не была запущена"
@ -1848,6 +1925,11 @@ msgstr "Использование"
msgid "Usage: %s\n"
msgstr "Использование: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Указывайте /HEAD, а не /master, ссылаясь на файл в ветке по умолчанию"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Указывайте /HEAD, а не /master, ссылаясь на файл в ветке по умолчанию"
@ -1877,6 +1959,11 @@ msgstr "Используется схема подписи APK v2"
msgid "Using APK Signature v3"
msgstr "Используется схема подписи APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Используется схема подписи APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Проверка APK с помощью Java jarsigner. Так делать не следует! Пользуйтесь для этого apksigner"
@ -1911,7 +1998,7 @@ msgstr "Сверяться с закешированной копией вмес
#: ../fdroidserver/__main__.py
msgid "Verify the integrity of downloaded packages"
msgstr "Проверить загруженные пакеты на повреждения"
msgstr "Проверить целостность загруженных пакетов"
#: ../fdroidserver/index.py
msgid "Verifying index signature:"
@ -1934,6 +2021,10 @@ msgstr "Даже если в конфигурации сборки задано
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/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "При генерации ключей использовалось различимое имя (Distinguished Name) стандарта X.509"
@ -2084,6 +2175,11 @@ msgstr "конфликтный субпарсер:%s"
msgid "could not parse '{path}'"
msgstr "не удалось разобрать '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "не удалось разобрать спецификацию scrlib (не задана ссылка): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "не удалось разобрать спецификацию scrlib (не задана ссылка): '{}'"
@ -2259,6 +2355,11 @@ msgstr "local_copy_dir должна быть директорией, а не ф
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "адрес зеркала '%s' должен заканчиваться 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Определите эти переменные в config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2416,6 +2517,11 @@ msgstr "значок репозитория (repo_icon) 'repo/icons/%s' не с
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 ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml не установлен, не получается записать метаданные."
@ -2430,6 +2536,11 @@ msgstr "s3cmd синхронизировать индексы из {path} в {ur
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "кэш сканера поврежден! Вы можете очистить его с помощью: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir должна заканчиваться на \"fdroid\". Возможно, имелось в виду \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "разделяемая библиотека"
@ -2635,6 +2746,31 @@ msgstr "{path} не существует! Создайте, выполнив к
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path}: неверная подпись \"{pattern}\". Выглядит подозрительно и похоже на попытку нарушения безопасности (Janus exploit)!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' не найден в config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2645,6 +2781,11 @@ msgstr "размер {path} равен нулю!"
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 ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@ -90,6 +90,11 @@ msgstr[2] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -209,6 +214,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -286,6 +296,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,10 @@ msgstr ""
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 ""
@ -1345,6 +1395,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1432,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1628,6 +1686,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1789,6 +1851,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1821,6 +1887,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1850,6 +1920,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1907,6 +1981,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2057,6 +2135,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2232,6 +2314,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2389,6 +2476,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2403,6 +2495,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2608,6 +2704,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2618,6 +2739,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1,13 +1,13 @@
# SOME DESCRIPTIVE TITLE.
# This file is put in the public domain.
# Besnik Bleta <besnik@programeshqip.org>, 2020, 2021, 2022, 2023.
# Besnik Bleta <besnik@programeshqip.org>, 2020, 2021, 2022, 2023, 2024.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021.
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: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-02-25 12:43+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-02-20 18:58+0000\n"
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
"Language-Team: Albanian <https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/>\n"
"Language: sq\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.16-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -95,6 +95,11 @@ msgstr[1] "Mundësi %(option)s lyp %(number)d argumente"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: gabim: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -116,7 +121,7 @@ msgstr "%r smund të thirret"
#: ../fdroidserver/signindex.py
#, python-format
msgid "%s did not produce a dict!"
msgstr ""
msgstr "%s sprodhoi një “dict”!"
#: ../fdroidserver/signindex.py
#, python-format
@ -183,7 +188,7 @@ msgstr "Su arrit të përmbushet '{path}'!"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "'{path}' has invalid format, it should be a dictionary!"
msgstr ""
msgstr "'{path}' ka format të pavlefshëm, duhet të jetë një fjalor!"
#: ../fdroidserver/metadata.py ../fdroidserver/lint.py
#, python-brace-format
@ -191,9 +196,9 @@ msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}"
msgstr "'{value}' sështë një {field} e vlefshme te {appid}. Rregullsi shprehjeje të rregullt: {pattern}"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "'{value}' is not a valid {field}, should be {pattern}"
msgstr "'{value}' sështë një {field} e vlefshme te {appid}. Rregullsi shprehjeje të rregullt: {pattern}"
msgstr "'{value}' sështë një {field} e vlefshme, duhet të jetë {pattern}"
#: ../fdroidserver/checkupdates.py
#, python-brace-format
@ -214,6 +219,11 @@ msgstr "/issues mungon"
msgid "A URL is required as an argument!"
msgstr "Lypset një URL si argument!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "Su gjetën dëshmi nënshkrimi te {path}"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Shtoni për paketa në depo nënshkrime PGP duke përdorur GnuPG-në"
@ -285,12 +295,17 @@ msgstr "Su gjet {cmd} mjeti SDK-je Android!"
#: ../fdroidserver/lint.py
msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate."
msgstr ""
msgstr "Aplikacioni ka Dyorë, por ska AllowedAPKSigningKeys përkatës për të fiksuar dëshmi."
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Aplikacioni ka NoSourceSince ose ArchivePolicy “0 versione”, por AutoUpdateMode ose UpdateCheckMode janë vënë si “Asnjë”"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Aplikacioni ka NoSourceSince ose ArchivePolicy “0 versione”, por AutoUpdateMode ose UpdateCheckMode janë vënë si “Asnjë”"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -298,7 +313,7 @@ msgstr "Aplikacioni gjendet në '{repo}' por ka një lidhje te {url}"
#: ../fdroidserver/lint.py
msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate."
msgstr ""
msgstr "Aplikacioni ka dyor, por ska AllowedAPKSigningKeys përkatës për të fiksuar dëshmi."
#: ../fdroidserver/lint.py
msgid "Appending .git is not necessary"
@ -316,7 +331,7 @@ msgstr "AutoUpdateMode me UpdateCheckMode: HTTP duhet të ketë një rregullsi."
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}"
msgstr ""
msgstr "Lloj i gabuar zëri “{mirrortype}” në formësim pasqyrash: {mirror}"
#: ../fdroidserver/mirror.py
msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint="
@ -387,6 +402,11 @@ msgstr "Kategoritë '%s' sjanë të vlefshme"
msgid "Categories are not set"
msgstr "Sjanë ujdisur kategori"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Kontrollo për përditësime aplikacionesh"
@ -416,7 +436,7 @@ msgstr "Depozito ndryshimet"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Conflicting \"{field}\" definitions between .yml and localized files:"
msgstr ""
msgstr "Përkufizime “{field}” me përplasje, mes kartelash .yml dhe të përkthyerash:"
#: ../fdroidserver/__main__.py
msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time."
@ -553,6 +573,16 @@ msgstr "Përshkrimi ka një listë (%s), por kjo sështë as me toptha (*), a
msgid "Description of length {length} is over the {limit} char limit"
msgstr "Përshkrimi me gjatësi {length} është mbi kufirin prej {limit} shenjash"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Mos shtoni 'disable:' te zëra të prodhuar të montimit"
@ -612,13 +642,18 @@ msgstr ""
#: ../fdroidserver/index.py
#, python-format
msgid "Duplicate entry \"%s\" in mirrors config!"
msgstr ""
msgstr "Zë i përsëdytur “%s” në formësim pasqyrash!"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Duplicate link in '{field}': {url}"
msgstr "Lidhje e përsëdytur te '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "GABIM: Nënurdhri “server” është hequr, përdorni “deploy”!"
@ -665,7 +700,7 @@ msgstr "Gabim teksa merrej adresë depoje"
#: ../fdroidserver/scanner.py
msgid "Exit with a non-zero code if problems were found"
msgstr ""
msgstr "Dil me një kod jozero, nëse gjenden probleme"
#: ../fdroidserver/__main__.py
msgid "Extract application metadata from a source repository"
@ -789,6 +824,11 @@ msgstr "U gjetën versionCodes të pavlefshëm për disa aplikacione"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Te {path} u gjetën Kartela të shumta JAR Blloqesh Nënshkrimi"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "U gjetën dëshmi të shumta nënshkrimi për depon."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -853,6 +893,11 @@ msgstr "Veprimi “git remote set-head” dështoi: “%s”"
msgid "Git reset failed"
msgstr "Veprimi “git reset” dështoi"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Veprimi “git submodule update” dështoi"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Veprimi “git submodule sync” dështoi"
@ -887,7 +932,7 @@ msgstr "Po shpërfillen zëra FUNDING.yml më të gjatë se 2048: %s"
#: ../fdroidserver/update.py
#, python-format
msgid "Ignoring bad element in manifest: %s"
msgstr ""
msgstr "Po shpërfillet element i gabuar në manifest: %s"
#: ../fdroidserver/index.py
msgid "Ignoring package without metadata: "
@ -1058,6 +1103,10 @@ msgstr "Po mbahet montim i dështuar “{apkfilename}”"
msgid "Keystore for signing key:\t"
msgstr "Depo kyçesh për kyç nënshkrimi:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1090,7 +1139,7 @@ msgstr "Rresht serverwebroot i keqformuar:"
#: ../fdroidserver/scanner.py
#, python-format
msgid "Max recursion depth in ZIP file reached: %s"
msgstr ""
msgstr "U mbërrit në thellësi maksimum rekursive te kartelë ZIP: %s"
#: ../fdroidserver/mirror.py
msgid "Mirror the full repo and archive, all file types."
@ -1102,7 +1151,7 @@ msgstr "Mungon drejtori përfundimesh"
#: ../fdroidserver/metadata.py
msgid "Moving Anti-Features declarations to localized files:"
msgstr ""
msgstr "Po kalohen pohime Anti-Features te kartela të përkthyera:"
#: ../fdroidserver/index.py
msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml"
@ -1195,6 +1244,11 @@ msgstr "Su gjetën etiketa"
msgid "No unsigned directory - nothing to do"
msgstr "Ska drejtori të panënshkruar - ska çbëhet"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "su gjetën hollësi versioni"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Përkufizim jo i vlefshëm për madhësinë: “{}”"
@ -1353,6 +1407,11 @@ msgstr "Kryej <em>push</em> të regjistrit te kjo depo e largët git"
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Veprimi “git remote set-head” dështoi: “%s”"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1386,6 +1445,11 @@ msgstr "Leximi i packageName/versionCode/versionName dështoi, APK e pavlefshme:
msgid "Reading {apkfilename} from cache"
msgstr "Po lexohet {apkfilename} prej fshehtine"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "sill nga interneti versionin më të ri të nënshkrimeve"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Po hiqen kartelat e treguara"
@ -1635,6 +1699,13 @@ msgstr "Ka një përplasje keyalias-i - botimi u ndal"
msgid "These are the apps that have been archived from the main repo."
msgstr "Këto janë aplikacionet që janë arkivuar nga depoja kryesore."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"GABIM: ky urdhër sduhet përdorur kurrë për krijimin e një pasqyre të f-droid.org!\n"
"Një pasqyrë e plotë e f-droid.org lyp më tepër se 200GB."
#: ../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 "Kjo është një depo aplikacionesh për tu përdorur me F-Droid. Aplikacionet në këtë depo ose janë dyorë zyrtarë të montuar nga zhvilluesit e aplikacionit origjinal, ose janë dyorë të montuar nga burimi prej f-droid.org duke përdorur mjetet në https://gitlab.com/fdroid."
@ -1804,8 +1875,13 @@ msgstr "UpdateCheckData duhet të përdorë URL HTTPS: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData sështë URL e vlefshme: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode është ujdisur, por duket sikur checkupdates sështë xhiruar ende"
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode është ujdisur, por duket sikur checkupdates sështë xhiruar ende"
@ -1836,6 +1912,11 @@ msgstr "Përdorim"
msgid "Usage: %s\n"
msgstr "Përdorim: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Për të treguar një kartelë te dega parazgjedhje, përdorni /HEAD, në vend se /master"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Për të treguar një kartelë te dega parazgjedhje, përdorni /HEAD, në vend se /master"
@ -1865,6 +1946,11 @@ msgstr "Po përdoret Nënshkrimi APK-je v2"
msgid "Using APK Signature v3"
msgstr "Po përdoret Nënshkrimi APK-je v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Po përdoret Nënshkrimi APK-je v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Po përdoret jarsigner Java, srekomandohet për verifikim APK-sh! Përdorni apksigner"
@ -1877,7 +1963,7 @@ msgstr "Po përdoret androguard prej “{path}”"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Using blank dictionary instead of contents of {path}!"
msgstr ""
msgstr "Po përdoret fjalor i zbrazët, në vend se lënda e {path}!"
#: ../fdroidserver/init.py
#, python-brace-format
@ -1922,6 +2008,10 @@ msgstr "Kur është formësuar për tregues të nënshkruar, në këtë fazë kr
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distinguished Name' i përdorur teksa prodhoheshin kyçe"
@ -2045,7 +2135,7 @@ msgstr "urdhra prej modulesh shtojce:"
#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py
#: /usr/lib/python3.11/optparse.py
msgid "complex"
msgstr "kompleksë"
msgstr "kompleks"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
@ -2057,20 +2147,25 @@ msgstr[0] "varg mundësie me përplasje: %s"
msgstr[1] "vargje mundësish me përplasje: %s"
#: /usr/lib/python3.11/argparse.py
#, fuzzy, python-format
#, python-format
msgid "conflicting subparser alias: %s"
msgstr "varg mundësie me përplasje: %s"
msgstr ""
#: /usr/lib/python3.11/argparse.py
#, fuzzy, python-format
#, python-format
msgid "conflicting subparser: %s"
msgstr "varg mundësie me përplasje: %s"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "could not parse '{path}'"
msgstr "su përtyp dot '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "su përtyp dot specifikim scrlib (su dha referencë): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "su përtyp dot specifikim scrlib (su dha referencë): '{}'"
@ -2245,6 +2340,11 @@ msgstr "local_copy_dir duhet të jetë një drejtori, jo një kartelë!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "pasqyra '%s' spërfundon me 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Tani, ujdisini këto te config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2402,6 +2502,11 @@ msgstr "repo_icon “repo/icons/%s” sekziston, po prodhohet vendmbajtëse."
msgid "repo_url needs to end with /repo"
msgstr "repo_url lypset të përfundojë me /repo"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml sështë i instaluar, smund të shkruhen tejtëdhëna."
@ -2416,6 +2521,11 @@ msgstr "s3cmd sync indexes {path} to {url} and delete"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "fshehtina e kontrollorit është e keqformuar! Mund ta spastroni me: “{clear}”"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir does smbaron me “fdroid”, ndoshta kishit në mendje: “{path}”"
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "librari e përbashkët"
@ -2586,9 +2696,9 @@ msgid "{build_flag} must be an integer, found: {value}"
msgstr "{build_flag} duhet të jetë numër i plotë, u gjet: {value}"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "{build_flag} must be list or string, found: {value}"
msgstr "{build_flag} duhet të jetë numër i plotë, u gjet: {value}"
msgstr "{build_flag} duhet të jetë listë, ose varg, u gjet: {value}"
#: ../fdroidserver/metadata.py
#, python-brace-format
@ -2620,6 +2730,31 @@ msgstr "{path} sekziston! Krijojeni duke xhiruar:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} ka “{pattern}” të gabuar nënshkrimi kartele, ka gjasa të jetë rreng Janus!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' te 'config.yml' sështë ujdisur!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2630,6 +2765,11 @@ msgstr "{path} është me madhësi zero!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} më tepër se 200MB, ngarkojeni dorazi: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2022-11-28 13:20+0000\n"
"Last-Translator: Đorđe Vasiljević <djordje.vasiljevich@gmail.com>\n"
"Language-Team: Serbian <https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,10 @@ msgstr ""
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 ""
@ -1345,6 +1395,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1432,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1627,6 +1685,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1788,6 +1850,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1820,6 +1886,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1849,6 +1919,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1906,6 +1980,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2055,6 +2133,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2311,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -1792,7 +1792,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -1789,7 +1789,7 @@ msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#: ../fdroidserver/lint.py

View File

@ -2,22 +2,22 @@
# Copyright (C) YEAR Free Software Foundation, Inc.
# Oğuz Ersen <oguzersen@protonmail.com>, 2020, 2021, 2022.
# Orhan <orya@pm.me>, 2021.
# Oğuz Ersen <oguz@ersen.moe>, 2022, 2023.
# Oğuz Ersen <oguz@ersen.moe>, 2022, 2023, 2024.
# Bai <batuhanakkurt000@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-09-09 10:53+0000\n"
"Last-Translator: Bai <batuhanakkurt000@gmail.com>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-11 20:02+0000\n"
"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/>\n"
"Language: tr\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.0.1-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -97,6 +97,11 @@ msgstr[1] "%(option)s seçeneği %(number)d argüman gerektirir"
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: hata: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -216,6 +221,11 @@ msgstr "/issues eksik"
msgid "A URL is required as an argument!"
msgstr "Bir URL, argüman olarak gereklidir!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "{path} içinde imzalama sertifikaları bulunamadı"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Depodaki paketler için GnuPG ile PGP imzaları ekle"
@ -293,6 +303,11 @@ msgstr "Uygulama İkili Dosyalara sahip ancak sertifikayı sabitlemek için kar
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Uygulamanın NoSourceSince veya ArchivePolicy \"0 sürümü\" var ancak AutoUpdateMode veya UpdateCheckMode Yok değil"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Uygulamanın NoSourceSince veya ArchivePolicy \"0 sürümü\" var ancak AutoUpdateMode veya UpdateCheckMode Yok değil"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -389,6 +404,11 @@ msgstr "'%s' kategorileri geçersiz"
msgid "Categories are not set"
msgstr "Kategoriler ayarlı değil"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Uygulama güncellemelerini denetle"
@ -555,6 +575,16 @@ msgstr "Açıklamanın bir listesi (%s) var fakat madde imli (*) veya numaralı(
msgid "Description of length {length} is over the {limit} char limit"
msgstr "{length} uzunluğundaki açıklama, {limit} karakter sınırının üstünde"
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Oluşturulan derleme girdilerine 'disable:' ekleme"
@ -621,6 +651,11 @@ msgstr "Aynalar yapılandırmasında yinelenen \"%s\" girişi!"
msgid "Duplicate link in '{field}': {url}"
msgstr "'{field}' içinde yinelenen bağlantı: {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "HATA: \"server\" alt komutu kaldırıldı, \"deploy\" kullanın!"
@ -791,6 +826,11 @@ msgstr "Bazı uygulamalar için geçersiz versionCodes bulundu"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "{path} içinde birden fazla JAR İmza Blok Dosyası bulundu"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Depo için birden çok imzalama sertifikası bulundu."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -855,6 +895,11 @@ msgstr "Git remote set-head başarısız: \"%s\""
msgid "Git reset failed"
msgstr "Git reset başarısız"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git alt modülü güncellemesi başarısız oldu"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git alt modülü eşzamanlaması başarısız oldu"
@ -1060,6 +1105,10 @@ msgstr "Başarısız yapı \"{apkfilename}\" tutuluyor"
msgid "Keystore for signing key:\t"
msgstr "İmzalama için anahtar deposu:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1197,6 +1246,11 @@ msgstr "Etiket bulunamadı"
msgid "No unsigned directory - nothing to do"
msgstr "İmzalanmamış dizin yok - yapılacak işlem yok"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "sürüm bilgisi bulunamadı"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Geçerli bir boyut tanımı değil: \"{}\""
@ -1355,6 +1409,11 @@ msgstr "Günlüğü bu git uzak deposuna it"
msgid "Pushing binary transparency log to {url}"
msgstr "İkili şeffaflık günlüğü {url} konumuna gönderiliyor"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head başarısız: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1388,6 +1447,11 @@ msgstr "packageName/versionCode/versionName okuma başarısız, APK geçersiz: '
msgid "Reading {apkfilename} from cache"
msgstr "{apkfilename} önbellekten okunuyor"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "imzaların en son sürümünü internetten al"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Belirtilen dosyalar kaldırılıyor"
@ -1637,6 +1701,13 @@ msgstr "Bir keyalias çakışması var - yayımlama durdu"
msgid "These are the apps that have been archived from the main repo."
msgstr "Bunlar ana depodan arşivlenmiş uygulamalardır."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"HATA: bu komut asla f-droid.org'u yansıtmak için kullanılmamalıdır!\n"
"f-droid.org'un tam bir yansıması 200GB'tan çok yer gerektirir."
#: ../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 "Bu, F-Droid ile kullanılacak uygulamaların bir deposudur. Bu depodaki uygulamalar ya gerçek uygulama geliştiricileri tarafından oluşturulan resmi ikili dosyalardır ya da https://gitlab.com/fdroid adresindeki araçlar kullanılarak f-droid.org yöneticisi tarafından kaynaktan oluşturulan ikili dosyalardır."
@ -1805,10 +1876,15 @@ msgstr "UpdateCheckData, HTTPS URL'sini kullanmalıdır: {url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData geçerli bir URL değil: {url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor."
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor"
msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor."
#: ../fdroidserver/lint.py
msgid "UpdateCheckName is set to the known application ID, it can be removed"
@ -1837,6 +1913,11 @@ msgstr "Kullanım"
msgid "Usage: %s\n"
msgstr "Kullanım: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Öntanımlı daldaki bir dosyaya işaret etmek için /master yerine /HEAD kullanın"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Öntanımlı daldaki bir dosyaya işaret etmek için /master yerine /HEAD kullanın"
@ -1866,6 +1947,11 @@ msgstr "APK İmza v2 kullanılıyor"
msgid "Using APK Signature v3"
msgstr "APK İmza v3 kullanılıyor"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "APK İmza v2 kullanılıyor"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Java'nın jarsigner'ı kullanılıyor, APK'ları doğrulamak için önerilmez! apksigner'ı kullanın"
@ -1923,6 +2009,10 @@ msgstr "İmzalı indeksler için yapılandırıldığında, bu aşamada sadece i
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "Tüm depo denetlenirken yamllint öntanımlı olarak devre dışı bırakılır. Bu seçenek, yamllint kullanımını ne olursa olsun zorlar."
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "Anahtarlar üretilirken X.509 'Distinguished Name' kullanılır"
@ -2072,6 +2162,11 @@ msgstr "çakışan alt ayrıştırıcı: %s"
msgid "could not parse '{path}'"
msgstr "'{path}' ayrıştırılamadı"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "srclib belirtimi ayrıştırılamadı (referans belirtilmedi): '{}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr "srclib belirtimi ayrıştırılamadı (referans belirtilmedi): '{}'"
@ -2246,6 +2341,11 @@ msgstr "local_copy_dir bir dizin olmalı, dosya değil!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "Yansıma '%s' 'fdroid' ile bitmiyor!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Şimdi bunları config.yml içinde ayarlayın:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2403,6 +2503,11 @@ msgstr "repo_icon \"repo/icons/%s\" yok, yer tutucu oluşturuyor."
msgid "repo_url needs to end with /repo"
msgstr "repo_url'nin /repo ile bitmesi gerekiyor"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml kurulu değil, üst veriler yazılamıyor."
@ -2417,6 +2522,11 @@ msgstr "s3cmd sync {path} konumunu {url} adresine indeksler ve siler"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "tarayıcı önbelleği bozuk! Şu şekilde temizleyebilirsiniz: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir \"fdroid\" ile sonlanmıyor, belki de \"{path}\" demek istediniz"
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "paylaşımlı kütüphane"
@ -2621,6 +2731,31 @@ msgstr "{path} yok! Şunu çalıştırarak oluşturun:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path} konumunun bozuk imzası \"{pattern}\" var, olası Janus istismarı!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' config.yml içinde ayarlı değil!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2631,6 +2766,11 @@ msgstr "{path} boyutu sıfır!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} 200MB'den fazla, elle yükleyin: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2020-10-29 08:32+0000\n"
"Last-Translator: Hakim Oubouali <hakim.oubouali.skr@gmail.com>\n"
"Language-Team: Central Atlas Tamazight <https://hosted.weblate.org/projects/f-droid/fdroidserver/tzm/>\n"
@ -90,6 +90,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr "%(prog)s: tazgalt: %(message)s\n"
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -209,6 +214,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -286,6 +296,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -382,6 +396,11 @@ msgstr ""
msgid "Categories are not set"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -548,6 +567,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -614,6 +643,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -780,6 +814,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -844,6 +882,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1049,6 +1091,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1186,6 +1232,10 @@ msgstr ""
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 ""
@ -1344,6 +1394,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1377,6 +1431,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1626,6 +1684,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1787,6 +1849,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1819,6 +1885,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1848,6 +1918,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1905,6 +1979,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2054,6 +2132,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2228,6 +2310,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2386,6 +2473,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2400,6 +2492,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2604,6 +2700,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2614,6 +2735,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -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: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2018-06-08 03:44+0000\n"
"Last-Translator: ۋولقان <nureliosman@gmail.com>\n"
"Language-Team: Uyghur <https://hosted.weblate.org/projects/f-droid/fdroidserver/ug/>\n"
@ -91,6 +91,11 @@ msgstr[1] ""
msgid "%(prog)s: error: %(message)s\n"
msgstr ""
#: ../fdroidserver/publish.py
#, python-format
msgid "%d APKs failed to be signed or verified!"
msgstr ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -210,6 +215,11 @@ msgstr ""
msgid "A URL is required as an argument!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr ""
@ -287,6 +297,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -383,6 +397,11 @@ msgstr "تۈرلەر قۇرۇلمىغان '%s'"
msgid "Categories are not set"
msgstr "تۈرلەر قۇرۇلمىغان"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr ""
@ -549,6 +568,16 @@ msgstr ""
msgid "Description of length {length} is over the {limit} char limit"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Did you mean config/{name}.yml?"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr ""
@ -615,6 +644,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr ""
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr ""
@ -781,6 +815,10 @@ msgstr ""
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr ""
#: ../fdroidserver/common.py
msgid "Found multiple Signer Certificates!"
msgstr ""
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -845,6 +883,10 @@ msgstr ""
msgid "Git reset failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule deinit failed"
msgstr ""
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr ""
@ -1050,6 +1092,10 @@ msgstr ""
msgid "Keystore for signing key:\t"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1187,6 +1233,11 @@ msgstr ""
msgid "No unsigned directory - nothing to do"
msgstr ""
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "نەشىر ئۇچۇرى تېپىلمىدى!"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr ""
@ -1345,6 +1396,10 @@ msgstr ""
msgid "Pushing binary transparency log to {url}"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "Pushing to remote server failed!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1378,6 +1433,10 @@ msgstr ""
msgid "Reading {apkfilename} from cache"
msgstr ""
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr ""
@ -1627,6 +1686,10 @@ msgstr ""
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 ""
#: ../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 ""
@ -1788,6 +1851,10 @@ msgstr ""
msgid "UpdateCheckData not a valid URL: {url}"
msgstr ""
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1820,6 +1887,10 @@ msgstr ""
msgid "Usage: %s\n"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1849,6 +1920,10 @@ msgstr ""
msgid "Using APK Signature v3"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using JAR Signature"
msgstr ""
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr ""
@ -1906,6 +1981,10 @@ msgstr ""
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr ""
@ -2055,6 +2134,10 @@ msgstr ""
msgid "could not parse '{path}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2229,6 +2312,11 @@ msgstr ""
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr ""
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2387,6 +2475,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2401,6 +2494,10 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr ""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2605,6 +2702,31 @@ msgstr ""
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not a standard config file!"
msgstr ""
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2615,6 +2737,11 @@ msgstr ""
msgid "{path} more than 200MB, manually upload: {url}"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2023-05-28 07:54+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/>\n"
@ -102,6 +102,11 @@ msgstr[2] "%(option)s параметр вимагає %(number)d аргумен
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -221,6 +226,11 @@ msgstr "/issues відсутній"
msgid "A URL is required as an argument!"
msgstr "URL потребується як аргумент!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "У {path} не знайдено сертифікатів для підписання"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "Додати підписи GnuPG для пакунків у репозиторії"
@ -298,6 +308,11 @@ msgstr "Програма має двійкові файли, але не має
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Застосунок має NoSourceSince або ArchivePolicy «0 версій», але AutoUpdateMode або UpdateCheckMode не дорівнюють None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "Застосунок має NoSourceSince або ArchivePolicy «0 версій», але AutoUpdateMode або UpdateCheckMode не дорівнюють None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -395,6 +410,11 @@ msgstr "Категорія '%s' неприпустима"
msgid "Categories are not set"
msgstr "Категорії не встановлено"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "Перевірте наявність оновлень для застосунків"
@ -561,6 +581,16 @@ msgstr "Опис містить список (%s) але не маркірова
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 ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "Не додавайте 'disable:' до створених записів збірки"
@ -627,6 +657,11 @@ msgstr "Дубльований запис \"%s\" у конфігурації д
msgid "Duplicate link in '{field}': {url}"
msgstr "Дублікат посилання в '{field}': {url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "ПОМИЛКА: Підкоманду \"server\" вилучено, використовуйте \"deploy\"!"
@ -797,6 +832,11 @@ msgstr "Знайдено недійсні версії коду для деяк
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "Знайдено кілька файлів блоку підписів JAR у {path}"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "Знайдено кілька сертифікатів підписування для репозиторію."
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -861,6 +901,11 @@ msgstr "Помилка налаштування remote set-head для Git: «%s
msgid "Git reset failed"
msgstr "Скидання Git не вдалося"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Не вдалося оновити підмодуль Git"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Не вдалося синхронізувати підмодуль Git"
@ -1066,6 +1111,10 @@ msgstr "Зберігання невдалої збірки \"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "Шлях до сховища ключів для ключа підпису сховища\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1203,6 +1252,11 @@ msgstr "Теги не знайдено"
msgid "No unsigned directory - nothing to do"
msgstr "Немає непідписаної теки — нічого виконувати"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "не знайдено відомостей про версію"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "Недійсне визначення розміру: \"{}\""
@ -1361,6 +1415,11 @@ msgstr "Надіслати журнал цього віддаленого реп
msgid "Pushing binary transparency log to {url}"
msgstr "Оновити двійковий журнал прозорості для {url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Помилка налаштування remote set-head для Git: «%s»"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1394,6 +1453,11 @@ msgstr "Не вдалося прочитати packageName/versionCode/versionNa
msgid "Reading {apkfilename} from cache"
msgstr "Читання {apkfilename} з кешу"
#: ../fdroidserver/build.py
#, fuzzy
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr "отримати останню версію підписів з інтернету"
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "Вилучення вказаних файлів"
@ -1644,6 +1708,13 @@ msgstr "Відбулося зіткнення keyalias ключів - припи
msgid "These are the apps that have been archived from the main repo."
msgstr "Ці застосунки, заархівовано з основного репозиторію."
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"ПОМИЛКА: ця команда ніколи не повинна використовуватися для створення дзеркала f-droid.org!\n"
"Повне дзеркало f-droid.org вимагає понад 200GB."
#: ../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 "Цей репозиторій застосунків для використання з FDroid. Застосунки в цьому репозиторії — це або офіційні двійкові файли, побудовані розробниками оригінального застосунку, або двійкові файли, побудовані з джерела f-droid.org за допомогою інструментів з https://gitlab.com/fdroid."
@ -1812,8 +1883,13 @@ msgstr "UpdateCheckData має використовувати URL-адресу H
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/studio/build/application-id
#: ../fdroidserver/lint.py
#, fuzzy
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
msgstr "UpdateCheckMode налаштовано, але схоже, що команду checkupdates ще не було запущено"
@ -1844,6 +1920,11 @@ msgstr "Використання"
msgid "Usage: %s\n"
msgstr "Використання: %s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "Використовуйте /HEAD замість /master для вказання на файл типовій гілці"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "Використовуйте /HEAD замість /master для вказання на файл типовій гілці"
@ -1873,6 +1954,11 @@ msgstr "Використання підпису APK v2"
msgid "Using APK Signature v3"
msgstr "Використання підпису APK v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "Використання підпису APK v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "Не варто перевіряти APK за допомогою jarsigner Java! Користуйтеся apksigner"
@ -1930,6 +2016,10 @@ msgstr "Коли налаштовано для підписаних індекс
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/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "X.509 'Distiguished Name' використовується під час створення ключів"
@ -2080,6 +2170,11 @@ msgstr "конфліктний субпарсер: %s"
msgid "could not parse '{path}'"
msgstr "не вдалося проаналізувати '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
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 (посилання не вказано): '{}'"
@ -2255,6 +2350,11 @@ msgstr "local_copy_dir мусить бути текою, не файлом!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "дзеркало '%s' не закінчується на 'fdroid'!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "Тепер встановіть їх у config.yml:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2412,6 +2512,11 @@ msgstr "repo_icon \"repo/icons/%s\" не існує, створення запо
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 ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr "ruamel.yaml не встановлено, не вдається записати метадані."
@ -2426,6 +2531,11 @@ msgstr "s3cmd синхронізувати індекси з {path} до {url}
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr "кеш сканера пошкоджено! Ви можете очистити його за допомогою: '{clear}'"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir мусить закінчуватися на \"fdroid\", ймовірно, малося на увазі: \"{path}\""
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr "спільна бібліотека"
@ -2631,6 +2741,31 @@ msgstr "{path} не існує! Створіть його, запустивши:
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr "{path}: недійсний підпис \"{pattern}\". Виглядає підозріло і схоже на спробу порушення безпеки Janus exploit!"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'sdk_path' не встановлено в config.yml!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2641,6 +2776,11 @@ msgstr "{path} не має розміру!"
msgid "{path} more than 200MB, manually upload: {url}"
msgstr "{path} понад 200 МБ, вивантажити власноруч: {url}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path}: {error}"

View File

@ -28,20 +28,22 @@
# Max Xie <monyxie@gmail.com>, 2023.
# Kingo Bingo <bingokingosoft@gmail.com>, 2023.
# zhiqi <lzqlzq21@gmail.com>, 2023.
# David Jiang <david.jiang2024@gmail.com>, 2023.
# ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2023-09-11 17:39+0000\n"
"Last-Translator: Xiang Heng Wei <yylteam@hotmail.com>\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-13 17:01+0000\n"
"Last-Translator: ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/>\n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.0.1-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -120,6 +122,11 @@ msgstr[0] "%(option)s 选项需要 %(number)d 个参数"
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -239,6 +246,11 @@ msgstr "路径缺少 /issues ( 译者注: 此处仅支持 github 或 gitlab 之
msgid "A URL is required as an argument!"
msgstr "需要有一个链接作为参数!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "在 {path} 中找不到签名证书"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "使用 GnuPG 为存储库之软件包添加 PGP 签名"
@ -316,6 +328,11 @@ msgstr "应用程序具有二进制文件但没有相应的AllowedAPKSigningK
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "应用的 NoSourceSince 或 ArchivePolicy 为 “0 versions” 但 AutoUpdateMode 或 UpdateCheckMode 不是 None"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr "应用的 NoSourceSince 或 ArchivePolicy 为 “0 versions” 但 AutoUpdateMode 或 UpdateCheckMode 不是 None"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -411,6 +428,11 @@ msgstr "类别 '%s' 无效"
msgid "Categories are not set"
msgstr "没有设置类别"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "检查应用的更新"
@ -577,6 +599,16 @@ msgstr "简介中带有列表(%s但它既不是子弹*)形列表也
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 ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
msgid "Do not add 'disable:' to the generated build entries"
msgstr "不要给生成的构建项添加 'disable:'"
@ -643,6 +675,11 @@ msgstr "镜像配置中的重复条目“%s”"
msgid "Duplicate link in '{field}': {url}"
msgstr "“{field}”中有重复的链接:{url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
msgstr "错误:\"server\" 子命令已被删除,请使用 \"deploy\""
@ -813,6 +850,11 @@ msgstr "发现某些应用的版本代码无效"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "在{path}中发现多个JAR签名块文件"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "发现存储库的多个签名证书。"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -877,6 +919,11 @@ msgstr "Git remote set-head 失败:\"%s\""
msgid "Git reset failed"
msgstr "Git reset 失败"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git 子模块更新失败"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git 子模块同步失败"
@ -1082,6 +1129,10 @@ msgstr "保持失败的生成“{apkfilename}”"
msgid "Keystore for signing key:\t"
msgstr "签名密钥的密钥库:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1219,6 +1270,11 @@ msgstr "未找到标签"
msgid "No unsigned directory - nothing to do"
msgstr "没有未签名的目录 - 无操作"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "没有找到版本信息"
#: ../fdroidserver/common.py
msgid "Not a valid size definition: \"{}\""
msgstr "不是有效的大小定义:“{}”"
@ -1377,6 +1433,11 @@ msgstr "拖送日志至 git 远程资源库"
msgid "Pushing binary transparency log to {url}"
msgstr "正推送二进制文件透明日志到{url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git remote set-head 失败:\"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1410,6 +1471,10 @@ msgstr "读取 packageName/versionCode/versionName 失败APK 无效:'{apkfi
msgid "Reading {apkfilename} from cache"
msgstr "从缓存读取 {apkfilename}"
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "删除指定文件"
@ -1658,6 +1723,13 @@ msgstr "存在密钥别名冲突 - 发布已停止"
msgid "These are the apps that have been archived from the main repo."
msgstr "这些是已从主存储库存档的应用。"
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"错误:请不要使用此命令来镜像 f-droid.org\n"
"对 f-droid.org 进行完整镜像至少需要超过 200GB 的储存空间。"
#: ../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 上的工具从源代码构建而来的二进制文件。"
@ -1826,6 +1898,10 @@ msgstr "UpdateCheckData必须使用HTTPS URL:{url}"
msgid "UpdateCheckData not a valid URL: {url}"
msgstr "UpdateCheckData 不是有效的网址:{url}"
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
msgstr ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1838,12 +1914,12 @@ msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Uploading {apkfilename} to androidobservatory.org"
msgstr ""
msgstr "上传 {apkfilename} 到 androidobservatory.org"
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Uploading {apkfilename} to virustotal"
msgstr ""
msgstr "上传 {apkfilename} 到 virustotal"
#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py
@ -1858,6 +1934,10 @@ msgstr "使用"
msgid "Usage: %s\n"
msgstr "用法:%s\n"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr ""
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr ""
@ -1881,11 +1961,16 @@ msgstr ""
#: ../fdroidserver/common.py
msgid "Using APK Signature v2"
msgstr ""
msgstr "使用 APK 签名 v2"
#: ../fdroidserver/common.py
msgid "Using APK Signature v3"
msgstr ""
msgstr "使用 APK 签名 v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "使用 APK 签名 v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
@ -1894,7 +1979,7 @@ msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "Using androguard from \"{path}\""
msgstr ""
msgstr "使用 {path} 中的 androguard"
#: ../fdroidserver/metadata.py
#, python-brace-format
@ -1944,6 +2029,10 @@ msgstr "如果已配置为使用签名索引,该阶段仅创建未签名索引
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr ""
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "生成密钥时使用了X.509 ‘可识别名’"
@ -2092,6 +2181,10 @@ msgstr "有冲突的子解析器:%s"
msgid "could not parse '{path}'"
msgstr "无法解析 '{path}'"
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr ""
#: ../fdroidserver/common.py
msgid "could not parse srclib spec (no ref specified): '{}'"
msgstr ""
@ -2265,6 +2358,11 @@ msgstr "local_copy_dir必须是目录不能是文件"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr ""
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "现在在 config.yml 中设置这些:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2422,6 +2520,11 @@ msgstr ""
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
msgid "ruamel.yaml not installed, can not write metadata."
msgstr ""
@ -2436,6 +2539,11 @@ msgstr ""
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir未以“ fdroid”结尾也许你指的是“ {path}”"
#: ../fdroidserver/scanner.py
msgid "shared library"
msgstr ""
@ -2561,12 +2669,12 @@ msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{appid} from {path} is not a valid Android application ID!"
msgstr ""
msgstr "{appid}来自{path}不是一个有效的Android应用ID"
#: ../fdroidserver/metadata.py ../fdroidserver/update.py
#, python-brace-format
msgid "{appid} from {path} is not a valid Java Package Name!"
msgstr ""
msgstr "{appid}来自{path}不是一个有效的Java安装包名称"
#: ../fdroidserver/update.py
#, python-brace-format
@ -2576,7 +2684,7 @@ msgstr ""
#: ../fdroidserver/mirror.py
#, python-brace-format
msgid "{appid} is missing {name}"
msgstr ""
msgstr "{appid}缺失了{name}"
#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname
#: ../fdroidserver/lint.py
@ -2592,12 +2700,12 @@ msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'"
msgstr ""
msgstr "{appid}{field}必须为‘{type}’,但它是‘{fieldtype}"
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!"
msgstr ""
msgstr "{appid}{field}必须为‘{type}’,但它是‘{fieldtype}"
#: ../fdroidserver/metadata.py
#, python-brace-format
@ -2639,14 +2747,44 @@ msgstr "{path} 不存在!通过运行以下命令创建它:"
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "{path} has been flagged by virustotal {count} times:"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "未在 config.yml 中设置 'sdk_path'!"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
msgstr ""
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 ""
#: ../fdroidserver/update.py
@ -2657,12 +2795,12 @@ msgstr "{path}{error}"
#: ../fdroidserver/mirror.py
#, python-brace-format
msgid "{url} does not end with \"fdroid\", check the URL path!"
msgstr ""
msgstr "{url}不是以“fdroid”结尾的请检查链接路径"
#: ../fdroidserver/import_subcommand.py
#, python-brace-format
msgid "{url} does not start with \"http\"!"
msgstr ""
msgstr "{url}不是以“http”为开头"
#: ../fdroidserver/build.py
msgid "{} build failed"

View File

@ -1,7 +1,7 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# Jeff Huang <s8321414@gmail.com>, 2020.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
# NightFeather <ss900328@gmail.com>, 2020.
# ifurther <i.further.5.4@gmail.com>, 2021.
# Stiffen <wchen01@fisher.edu>, 2021.
@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fdroidserver 0.9\n"
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/>\n"
"Language: zh_Hant\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.14.1-dev\n"
"X-Generator: Weblate 5.5-dev\n"
#: ../fdroidserver/nightly.py
msgid ""
@ -73,9 +73,9 @@ msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)"
msgstr "\"{path}\" 不是可接受的格式,轉換成: metadata/*.yml"
#: ../fdroidserver/update.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "\"{path}\" is signed by a key that is not allowed:"
msgstr "有 \"{path}\" 存在,但是沒有安裝 s3cmd"
msgstr ""
#: ../fdroidserver/import_subcommand.py
#, python-brace-format
@ -97,6 +97,11 @@ msgstr[0] "%(option)s 的選項需要 %(number)d 參數"
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 ""
#: ../fdroidserver/scanner.py
#, python-format
msgid "%d problems found"
@ -195,9 +200,9 @@ msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}"
msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "'{value}' is not a valid {field}, should be {pattern}"
msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}"
msgstr ""
#: ../fdroidserver/checkupdates.py
#, python-brace-format
@ -218,6 +223,11 @@ msgstr "/issues 有遺漏"
msgid "A URL is required as an argument!"
msgstr "需要 URL 作為參數!"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "APK signatures have different certificates in {path}:"
msgstr "{path} 找不到簽署證書"
#: ../fdroidserver/__main__.py
msgid "Add PGP signatures using GnuPG for packages in repo"
msgstr "在軟體庫中加入使用 GnuPG 套件包的 gpg 簽署"
@ -298,6 +308,10 @@ msgstr ""
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
msgstr ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "App is in '{repo}' but has a link to {url}"
@ -393,6 +407,11 @@ msgstr "'%s' 類別無效"
msgid "Categories are not set"
msgstr "類別未設定"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "Category \"{category}\" defined but not used for any apps!"
msgstr ""
#: ../fdroidserver/__main__.py
msgid "Check for updates to applications"
msgstr "檢查應用程式更新"
@ -564,6 +583,16 @@ msgstr "描述中有一個列表 (%s) 但它並未被編排 (*) 或作編號 (#)
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 ""
#: ../fdroidserver/lint.py
#, python-brace-format
msgid "Did you mean {code}?"
msgstr ""
#: ../fdroidserver/import_subcommand.py
#, fuzzy
msgid "Do not add 'disable:' to the generated build entries"
@ -631,6 +660,11 @@ msgstr ""
msgid "Duplicate link in '{field}': {url}"
msgstr "'{field}' 有重複的連結:{url}"
#: ../fdroidserver/common.py
#, python-format
msgid "ERROR: %(message)s"
msgstr ""
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
@ -750,7 +784,7 @@ msgstr "抓取 '{apkfilename}' 的簽署資料 -> '{sigdir}'"
#: ../fdroidserver/update.py
#, fuzzy, python-brace-format
msgid "File disappeared while processing it: {path}"
msgstr "檔案 「路徑: {path}」在處理過程中消失了"
msgstr "檔案 「{path}」在處理過程中消失了"
#: ../fdroidserver/build.py ../fdroidserver/install.py
#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py
@ -805,6 +839,11 @@ msgstr "有些應用的版本代號無效"
msgid "Found multiple JAR Signature Block Files in {path}"
msgstr "{path} 找到多筆簽名證書"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Found multiple Signer Certificates!"
msgstr "軟體庫找到多份簽署證書。"
#: ../fdroidserver/metadata.py
#, python-brace-format
msgid "Found multiple metadata files for {appid}"
@ -824,14 +863,14 @@ msgid "Found non-file at %s"
msgstr "%s 中找到 non-file"
#: ../fdroidserver/deploy.py
#, fuzzy, python-brace-format
#, python-brace-format
msgid "Found {apkfilename} at {url}"
msgstr "在鏈接 {url} 找到了Android軟體程式包 {apkfilename} 。"
msgstr ""
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
msgid "Found {count} problems in {filename}"
msgstr "掃瞄器在 {appid} 發現{count} 個問題:"
msgstr "在 {filename} 發現{count} 個問題"
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -870,6 +909,11 @@ msgstr "Git 遠端 set-head 失敗: \"%s\""
msgid "Git reset failed"
msgstr "Git 重置失敗"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Git submodule deinit failed"
msgstr "Git 子模組更新失敗"
#: ../fdroidserver/common.py
msgid "Git submodule sync failed"
msgstr "Git 子模組同步失敗"
@ -885,12 +929,12 @@ msgstr "HTTPS 必須與 Subversion 網址一起使用!"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "If a git mirror gets to big, allow the archive to be deleted"
msgstr "如果一個 git mirror 變得太大, 允許刪除該 git mirror 的檔案"
msgstr "如果一個 git mirror 變得太大, 允許刪除該 git mirror 的檔案"
#: ../fdroidserver/deploy.py
#, fuzzy, python-brace-format
msgid "If this upload fails, try manually uploading to {url}"
msgstr "如果本次上傳失敗, 嘗試手動上傳至 {url}"
msgstr "如果本次上傳失敗, 嘗試手動上傳至 {url}"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
@ -898,9 +942,9 @@ msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated."
msgstr "忽略 '{metapath}' 中的 '{field}' 因為它已經過時了。"
#: ../fdroidserver/update.py
#, fuzzy, python-format
#, python-format
msgid "Ignoring FUNDING.yml entry longer than 2048: %s"
msgstr "忽略文檔 FUNDING.yml 文檔大小超過 2048: %s"
msgstr "忽略文檔 FUNDING.yml 文檔大小超過 2048: %s"
#: ../fdroidserver/update.py
#, python-format
@ -923,17 +967,17 @@ msgstr "包含 APKs 其簽名為有弱點的演算法,如 MD5"
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "Include the PGP signature .asc files in the mirror"
msgstr "在鏡像中加入 PGP 簽名和 .asc 文檔"
msgstr "在鏡像中加入 PGP 簽名和 .asc 文檔"
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "Include the build logs in the mirror"
msgstr "在鏡像中加入編譯紀錄"
msgstr "在鏡像中加入編譯紀錄"
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "Include the source tarballs in the mirror"
msgstr "在鏡像中加入軟體的源代碼包"
msgstr "在鏡像中加入軟體的源代碼包"
#: ../fdroidserver/metadata.py
#, python-format
@ -993,12 +1037,12 @@ msgstr "無效的 VercodeOperation{field}"
#: ../fdroidserver/lint.py
#, fuzzy, python-brace-format
msgid "Invalid VercodeOperation: {invalid_ops}"
msgstr "無效的 VercodeOperation{field}"
msgstr "無效的 VercodeOperation{invalid_ops}"
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "Invalid application ID {appid}"
msgstr "無效的 application ID {appid}"
msgstr "無效的 application ID {appid}"
#: ../fdroidserver/metadata.py
#, python-format
@ -1027,17 +1071,17 @@ msgstr "無效的重新導向到非 HTTPS{before}->{after}。 "
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
msgid "Invalid scrlib metadata: '{file}' does not exist"
msgstr "無效的 scrlib metadata: 檔案 '{file}' 不存在"
msgstr "無效的 scrlib metadata: 檔案 '{file}' 不存在"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
msgid "Invalid srclib metadata: could not parse '{file}'"
msgstr "無效的 scrlib metadata: 無法解析檔案 '{file}'"
msgstr "無效的 scrlib metadata: 無法解析檔案 '{file}'"
#: ../fdroidserver/metadata.py
#, fuzzy, python-brace-format
msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'"
msgstr "無效的 scrlib metadata: 檔案 '{file}' 裡有未知的密鑰 '{key}'"
msgstr "無效的 scrlib metadata: 檔案 '{file}' 裡有未知的密鑰 '{key}'"
#: ../fdroidserver/common.py
#, python-brace-format
@ -1081,6 +1125,10 @@ msgstr "讀取 minSdkVersion 失敗:\"{apkfilename}\""
msgid "Keystore for signing key:\t"
msgstr "金鑰庫的簽署金鑰:\t"
#: ../fdroidserver/lint.py
msgid "Known debug key is used in AllowedAPKSigningKeys: "
msgstr ""
#: ../fdroidserver/lint.py
#, fuzzy, python-brace-format
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
@ -1167,7 +1215,7 @@ msgstr "查無資訊。"
#: ../fdroidserver/checkupdates.py
#, fuzzy
msgid "No matching tags found"
msgstr "查無資訊"
msgstr "查無資訊"
#: ../fdroidserver/update.py
#, python-brace-format
@ -1224,6 +1272,11 @@ msgstr "查無附加的設備"
msgid "No unsigned directory - nothing to do"
msgstr "無未簽署目錄 - 無須採取行動"
#: ../fdroidserver/__main__.py
#, fuzzy
msgid "No version information could be found."
msgstr "未發現版本資訊"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Not a valid size definition: \"{}\""
@ -1298,7 +1351,7 @@ msgstr "輸出 JSON 到 stdout 。"
#: ../fdroidserver/update.py
#, fuzzy
msgid "Outputting JSON"
msgstr "正在導出 JSON 中 ..."
msgstr "正在導出 JSON 中"
#: ../fdroidserver/import_subcommand.py
msgid "Overall license of the project."
@ -1388,6 +1441,11 @@ msgstr "將日誌推送到 git 遠端軟體庫"
msgid "Pushing binary transparency log to {url}"
msgstr "推二進制的透明日誌到{url}"
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "Pushing to remote server failed!"
msgstr "Git 遠端 set-head 失敗: \"%s\""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "Pushing to {url}"
@ -1421,6 +1479,10 @@ msgstr "讀取套件名稱/版本代碼/版本名稱 失敗APK 無效:'{apk
msgid "Reading {apkfilename} from cache"
msgstr "從緩存讀取 {apkfilename}"
#: ../fdroidserver/build.py
msgid "Refresh and cache scanner rules and signatures from the network"
msgstr ""
#: ../fdroidserver/common.py
msgid "Removing specified files"
msgstr "移除指定檔案"
@ -1498,7 +1560,7 @@ msgstr "掃描套件包的原始碼"
#: ../fdroidserver/scanner.py
#, fuzzy, python-brace-format
msgid "Scanner found {count} problems in {apk}"
msgstr "掃瞄器在 {appid} 發現{count} 個問題:"
msgstr "掃瞄器在 {apk} 發現{count} 個問題"
#: ../fdroidserver/scanner.py
#, python-brace-format
@ -1532,7 +1594,7 @@ msgstr "設定時鐘到那時使用:"
#: ../fdroidserver/nightly.py
#, fuzzy
msgid "Set maximum releases in repo before older ones are archived"
msgstr "先設置軟體庫的軟體最大釋出數, 再將舊軟體歸檔"
msgstr "先設置軟體庫的軟體最大釋出數, 再將舊軟體歸檔"
#: ../fdroidserver/build.py
#, python-brace-format
@ -1673,6 +1735,13 @@ msgstr "發生主要別名衝突 - 發佈中止"
msgid "These are the apps that have been archived from the main repo."
msgstr "這些是從主軟體庫中歸檔的軟體。"
#: ../fdroidserver/mirror.py
#, fuzzy
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
msgstr ""
"錯誤:此命令絕不該用於鏡像 f-droid.org\n"
"完整的 f-droid.org 鏡像需要超過 200GB。"
#: ../fdroidserver/common.py
#, fuzzy
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."
@ -1721,7 +1790,7 @@ msgstr "這個許可證標籤不符合預期 \"{}\" 只能使用 https://spdx
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file"
msgstr "這個許可證標籤不符合預期 \"{}\" 只能使用你的配置文檔裡面配置好的許可證標籤啦"
msgstr "這個許可證標籤不符合預期 \"{}\" 只能使用你的配置文檔裡面配置好的許可證標籤啦"
#: ../fdroidserver/common.py
#, python-brace-format
@ -1838,6 +1907,10 @@ msgstr "UpdateCheckData 必須使用 HTTPS URL{url}"
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 ""
#. Translators: https://developer.android.com/studio/build/application-id
#: ../fdroidserver/lint.py
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
@ -1851,12 +1924,12 @@ msgstr "UpdateCheckName 已經被設定成已知的 application id - 它可以
#: ../fdroidserver/deploy.py
#, fuzzy, python-brace-format
msgid "Uploading {apkfilename} to androidobservatory.org"
msgstr "正在將軟體檔案 {apkfilename} 上傳到 androidobservatory.org"
msgstr "正在將軟體檔案 {apkfilename} 上傳到 androidobservatory.org"
#: ../fdroidserver/deploy.py
#, fuzzy, python-brace-format
msgid "Uploading {apkfilename} to virustotal"
msgstr "正在將軟體檔案 {apkfilename} 上傳到 virustotal"
msgstr "正在將軟體檔案 {apkfilename} 上傳到 virustotal"
#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py
@ -1871,6 +1944,11 @@ msgstr "使用方法"
msgid "Usage: %s\n"
msgstr "使用方法:%s\n"
#: ../fdroidserver/lint.py
#, fuzzy
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
msgstr "使用 /HEAD 取代 /master 來指向默認分支的一個檔案"
#: ../fdroidserver/lint.py
msgid "Use /HEAD instead of /master to point at a file in the default branch"
msgstr "使用 /HEAD 取代 /master 來指向默認分支的一個檔案"
@ -1902,6 +1980,11 @@ msgstr "使用 APK Signature v2"
msgid "Using APK Signature v3"
msgstr "使用 APK Signature v3"
#: ../fdroidserver/common.py
#, fuzzy
msgid "Using JAR Signature"
msgstr "使用 APK Signature v2"
#: ../fdroidserver/common.py
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
msgstr "使用 Java 的 jarsigner這並不建議用於驗證 APK使用 apksigner"
@ -1960,6 +2043,10 @@ msgstr "當已組態為簽名的索引時,只能在此階段建立無簽名的
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
msgstr "在默認情況下, 檢查整個軟體庫中的可疑代碼時不會檢查 yaml 檔案 yamllint 。 使用本選項將會忽略默認選項,在檢查整個軟體庫中的可疑代碼時強制檢查 yaml 檔案 yamllint 。"
#: ../fdroidserver/publish.py
msgid "When signing or verifying fails, exit with an error code."
msgstr ""
#: ../fdroidserver/init.py
msgid "X.509 'Distinguished Name' used when generating keys"
msgstr "產生金鑰時使用 X.509 的'專有名稱'"
@ -2116,6 +2203,11 @@ msgstr "相衝突的選項字串:%s"
msgid "could not parse '{path}'"
msgstr "無法解析 '{path}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no name specified): '{}'"
msgstr "無法解析 scrlib spec (沒有指定參考文獻): '{}'"
#: ../fdroidserver/common.py
#, fuzzy
msgid "could not parse srclib spec (no ref specified): '{}'"
@ -2295,6 +2387,11 @@ msgstr "local_copy_dir 為目錄,不是檔案!"
msgid "mirror '%s' does not end with 'fdroid'!"
msgstr "鏡像 '%s' 並不是以 'fdroid' 作結尾!"
#: ../fdroidserver/index.py
#, fuzzy, python-brace-format
msgid "mirrors set twice, in config.yml and {path}!"
msgstr "現在設定這些在 config.yml 中:"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
#: /usr/lib/python3.11/argparse.py
@ -2329,7 +2426,7 @@ msgstr "未發現版本資訊!"
#: ../fdroidserver/checkupdates.py
#, fuzzy
msgid "no version information found"
msgstr "未發現版本資訊"
msgstr "未發現版本資訊"
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
@ -2454,6 +2551,11 @@ msgstr "軟體庫圖標 repo_icon\"repo/icons/%s\" 不存在, 正在生
msgid "repo_url needs to end with /repo"
msgstr ""
#: ../fdroidserver/deploy.py
#, python-brace-format
msgid "rsync is missing or broken: {error}"
msgstr ""
#: ../fdroidserver/metadata.py
#, fuzzy
msgid "ruamel.yaml not installed, can not write metadata."
@ -2469,6 +2571,11 @@ msgstr "s3cmd 同步索引 {path} 到 {url} 並刪除"
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
msgstr ""
#: ../fdroidserver/deploy.py
#, fuzzy
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
msgstr "local_copy_dir 未以 \"fdroid\"結尾,也許你指示的是: \"{path}\""
#: ../fdroidserver/scanner.py
#, fuzzy
msgid "shared library"
@ -2658,7 +2765,7 @@ msgstr "{name} \"{section}/icons/{path}\" 不存在! 請檢查 \"config.yml\"."
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{oldfile} is deprecated, use {newfile}"
msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile}"
msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile}"
#: ../fdroidserver/import_subcommand.py
#, fuzzy, python-brace-format
@ -2675,6 +2782,31 @@ msgstr "\"{path}\" 不存在!經由執行建立它:"
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 ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, fuzzy, python-brace-format
msgid "{path} is not a standard config file!"
msgstr "'config.yml' 未設定 'sdk_path'"
#: ../fdroidserver/index.py
#, python-brace-format
msgid "{path} is not list, but a {datatype}!"
msgstr ""
#: ../fdroidserver/common.py
#, python-brace-format
msgid "{path} is not {expected_type}, but a {datatype}!"
msgstr ""
#: ../fdroidserver/update.py
#, python-brace-format
msgid "{path} is zero size!"
@ -2685,6 +2817,11 @@ msgstr "{path} 為零尺寸!"
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 ""
#: ../fdroidserver/update.py
#, fuzzy, python-brace-format
msgid "{path}: {error}"

View File

@ -47,35 +47,22 @@ logging.basicConfig(format=logformat, level=loglevel)
tail = None
BASEBOX_DEFAULT = 'fdroid/bullseye64'
BASEBOX_VERSION_DEFAULT = "11.20221010.1"
BASEBOX_DEFAULT = 'debian/bookworm64'
BASEBOX_VERSION_DEFAULT = "12.20231211.1"
BASEBOX_CHECKSUMS = {
"11.20221010.1": {
"12.20231211.1": {
"libvirt": {
"box.img": "c2114aa276c176fa65b8072f5dcd1e8a6ab9f7d15fd5da791727a0164fd43254",
"box.img": "80b048312c423b7fbbbac934c348f9a29bdf2f98fae96dd13b3af70ddfe7f12a",
"Vagrantfile": "f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47",
"metadata.json": "42b96a01106c25f3a222ddad0baead0b811cc64926f924fb836bbfa43580e646",
"metadata.json": "9d717678c19bb81d077e4e7eeb3602c168b6568cc38fee8fd3aa9d8f3cfe639b",
},
"virtualbox": {
"box.ovf": "5e4de5f1f4b481b2c1917c0b2f6e6334f4741cc18c5b278e3bafb094535ff2cb",
"box.vmdk": "737053bc886037ae76bb38a1776eba2a5579d49423de990e93ef4a3f0cab4f1c",
"box.ovf": "8ad49ba600fbd1027e35c8fd41d37383c04bad30fdbafa860a29911d207a3e7b",
"box.vmdk": "57602a776860805e82bd3f61cdca9711f39781011db0f8f1dee9b2a614b2c889",
"Vagrantfile": "0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d",
"metadata.json": "ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a",
}
},
'11.20220317.1': {
'libvirt': {
'box.img': 'fbde152a2f61d191983be9d1dbeae2591af32cca1ec27daa342485d97187515e',
'metadata.json': '42b96a01106c25f3a222ddad0baead0b811cc64926f924fb836bbfa43580e646',
'Vagrantfile': 'f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47',
},
'virtualbox': {
'box.ovf': 'becd5cea2666d42e12def13a91766aa0d4b0e8e6f53102486c2a6cdb4e401b08',
'box.vmdk': '49c96a58a3ee99681d348075864a290c60a8d334fddd21be453c825fcee75eda',
'metadata.json': 'ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a',
'Vagrantfile': '0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d',
}
},
}
configfile = 'buildserver/Vagrantfile.yaml'

View File

@ -38,10 +38,8 @@ force-exclude = '''(
| fdroidserver/build\.py
| fdroidserver/checkupdates\.py
| fdroidserver/common\.py
| fdroidserver/deploy\.py
| fdroidserver/import_subcommand\.py
| fdroidserver/index\.py
| fdroidserver/install\.py
| fdroidserver/metadata\.py
| fdroidserver/nightly\.py
| fdroidserver/publish\.py
@ -53,7 +51,6 @@ force-exclude = '''(
| tests/extra/manual-vmtools-test\.py
| tests/gradle-release-checksums\.py
| tests/openssl-version-check-test\.py
| tests/testcommon\.py
| tests/valid-package-names/test\.py
| tests/checkupdates\.TestCase
| tests/common\.TestCase

View File

@ -71,7 +71,7 @@ with open("README.md", "r") as fh:
setup(
name='fdroidserver',
version='2.3a0',
version='2.3a1',
description='F-Droid Server Tools',
long_description=long_description,
long_description_content_type='text/markdown',
@ -91,15 +91,16 @@ setup(
'babel',
],
install_requires=[
'androguard >= 3.1.0, != 3.3.0, != 3.3.1, != 3.3.2, <4',
'appdirs',
'androguard >= 3.3.5',
'asn1crypto',
'clint',
'defusedxml',
'GitPython',
'oscrypto',
'paramiko',
'Pillow',
'apache-libcloud >= 0.14.1',
'pyasn1 >=0.4.1, < 0.5.0',
'pyasn1-modules >= 0.2.1, < 0.3',
'python-vagrant',
'PyYAML',
'qrcode',

BIN
tests/SANAPPSI.RSA Normal file

Binary file not shown.

2044
tests/SANAPPSI.SF Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,6 @@
import inspect
import logging
import optparse
import os
import shutil
import sys
@ -29,7 +28,7 @@ import fdroidserver.common
import fdroidserver.metadata
import fdroidserver.scanner
import fdroidserver.vmtools
from testcommon import mkdtemp
from testcommon import mkdtemp, parse_args_for_test
class FakeProcess:
@ -49,8 +48,6 @@ class BuildTest(unittest.TestCase):
def setUp(self):
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('androguard.axml')
logger.setLevel(logging.INFO) # tame the axml debug messages
self.basedir = os.path.join(localmodule, 'tests')
os.chdir(self.basedir)
fdroidserver.common.config = None
@ -221,7 +218,7 @@ class BuildTest(unittest.TestCase):
@mock.patch('fdroidserver.common.get_apk_id')
@mock.patch('fdroidserver.build.FDroidPopen')
@mock.patch('fdroidserver.common.is_apk_and_debuggable', lambda f: False)
@mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda f: False)
@mock.patch('fdroidserver.common.get_native_code', lambda f: 'x86')
def test_build_local_maven(self, fake_FDroidPopen, fake_get_apk_id):
"""Test build_local() with a maven project"""
@ -342,7 +339,8 @@ class BuildTest(unittest.TestCase):
'fdroidserver.common.sha256sum',
return_value='ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
) as _ignored, mock.patch(
'fdroidserver.common.is_apk_and_debuggable', return_value=False
'fdroidserver.common.is_debuggable_or_testOnly',
return_value=False,
) as _ignored, mock.patch(
'fdroidserver.build.FDroidPopen', FakeProcess
) as _ignored, mock.patch(
@ -394,7 +392,7 @@ class BuildTest(unittest.TestCase):
@mock.patch('sdkmanager.build_package_list', lambda use_net: None)
@mock.patch('fdroidserver.build.FDroidPopen', FakeProcess)
@mock.patch('fdroidserver.common.get_native_code', lambda _ignored: 'x86')
@mock.patch('fdroidserver.common.is_apk_and_debuggable', lambda _ignored: False)
@mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda _ignored: False)
@mock.patch(
'fdroidserver.common.sha256sum',
lambda f: 'ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
@ -531,7 +529,8 @@ class BuildTest(unittest.TestCase):
return_value=(app.id, build.versionCode, build.versionName),
):
with mock.patch(
'fdroidserver.common.is_apk_and_debuggable', return_value=False
'fdroidserver.common.is_debuggable_or_testOnly',
return_value=False,
):
fdroidserver.build.build_local(
app,
@ -562,7 +561,7 @@ class BuildTest(unittest.TestCase):
os.chdir(self.testdir)
os.mkdir("build")
config = fdroidserver.common.get_config()
config = fdroidserver.common.read_config()
config['sdk_path'] = os.getenv('ANDROID_HOME')
config['ndk_paths'] = {'r10d': os.getenv('ANDROID_NDK_HOME')}
fdroidserver.common.config = config
@ -1104,15 +1103,17 @@ class BuildTest(unittest.TestCase):
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
parser = optparse.OptionParser()
parser.add_option(
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
parse_args_for_test(parser, sys.argv)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(BuildTest))

View File

@ -3,7 +3,6 @@
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
import logging
import optparse
import os
import sys
import unittest
@ -30,8 +29,6 @@ class CheckupdatesTest(unittest.TestCase):
os.chdir(self.basedir)
def test_autoupdatemode_no_suffix(self):
fdroidserver.checkupdates.options = mock.Mock()
fdroidserver.checkupdates.options.auto = 'bleh'
fdroidserver.checkupdates.config = {}
app = fdroidserver.metadata.App()
@ -52,7 +49,7 @@ class CheckupdatesTest(unittest.TestCase):
):
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
with mock.patch('subprocess.call', lambda cmd: 0):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
build = app['Builds'][-1]
self.assertEqual(build.versionName, '1.1.9')
@ -64,15 +61,13 @@ class CheckupdatesTest(unittest.TestCase):
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
with mock.patch('subprocess.call', lambda cmd: 0):
with self.assertRaises(FDroidException):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
build = app['Builds'][-1]
self.assertEqual(build.versionName, '1.1.9')
self.assertEqual(build.commit, '1.1.9')
def test_autoupdatemode_suffix(self):
fdroidserver.checkupdates.options = mock.Mock()
fdroidserver.checkupdates.options.auto = 'bleh'
fdroidserver.checkupdates.config = {}
app = fdroidserver.metadata.App()
@ -93,15 +88,13 @@ class CheckupdatesTest(unittest.TestCase):
):
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
with mock.patch('subprocess.call', lambda cmd: 0):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
build = app['Builds'][-1]
self.assertEqual(build.versionName, '1.1.9.10109-fdroid')
self.assertEqual(build.commit, 'v1.1.9_10109')
def test_autoupdate_multi_variants(self):
fdroidserver.checkupdates.options = mock.Mock()
fdroidserver.checkupdates.options.auto = 'bleh'
fdroidserver.checkupdates.config = {}
app = fdroidserver.metadata.App()
@ -134,7 +127,7 @@ class CheckupdatesTest(unittest.TestCase):
):
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
with mock.patch('subprocess.call', lambda cmd: 0):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
build = app['Builds'][-2]
self.assertEqual(build.versionName, '1.1.9')
@ -150,8 +143,6 @@ class CheckupdatesTest(unittest.TestCase):
self.assertEqual(app.CurrentVersionCode, 101093)
def test_checkupdates_app_http(self):
fdroidserver.checkupdates.options = mock.Mock()
fdroidserver.checkupdates.options.auto = 'bleh'
fdroidserver.checkupdates.config = {}
app = fdroidserver.metadata.App()
@ -165,7 +156,7 @@ class CheckupdatesTest(unittest.TestCase):
'fdroidserver.checkupdates.check_http', lambda app: (None, 'bla')
):
with self.assertRaises(FDroidException):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
with mock.patch(
'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109)
@ -174,12 +165,10 @@ class CheckupdatesTest(unittest.TestCase):
'fdroidserver.metadata.write_metadata', mock.Mock()
) as wrmock:
with mock.patch('subprocess.call', lambda cmd: 0):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
wrmock.assert_called_with(app.metadatapath, app)
def test_checkupdates_app_tags(self):
fdroidserver.checkupdates.options = mock.Mock()
fdroidserver.checkupdates.options.auto = 'bleh'
fdroidserver.checkupdates.config = {}
app = fdroidserver.metadata.App()
@ -200,7 +189,7 @@ class CheckupdatesTest(unittest.TestCase):
lambda app, pattern: (None, 'bla', None),
):
with self.assertRaises(FDroidException):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
with mock.patch(
'fdroidserver.checkupdates.check_tags',
@ -208,15 +197,13 @@ class CheckupdatesTest(unittest.TestCase):
):
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
with mock.patch('subprocess.call', lambda cmd: 0):
fdroidserver.checkupdates.checkupdates_app(app)
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
build = app['Builds'][-1]
self.assertEqual(build.versionName, '1.1.9')
self.assertEqual(build.commit, 'v1.1.9')
def test_check_http(self):
fdroidserver.checkupdates.options = mock.Mock()
app = fdroidserver.metadata.App()
app.id = 'loop.starts.shooting'
app.metadatapath = 'metadata/' + app.id + '.yml'
@ -243,8 +230,6 @@ class CheckupdatesTest(unittest.TestCase):
fdroidserver.checkupdates.check_http(app)
def test_check_http_ignore(self):
fdroidserver.checkupdates.options = mock.Mock()
app = fdroidserver.metadata.App()
app.id = 'loop.starts.shooting'
app.metadatapath = 'metadata/' + app.id + '.yml'
@ -260,8 +245,6 @@ class CheckupdatesTest(unittest.TestCase):
self.assertEqual(vername, None)
def test_check_tags_data(self):
fdroidserver.checkupdates.options = mock.Mock()
app = fdroidserver.metadata.App()
app.id = 'loop.starts.shooting'
app.metadatapath = 'metadata/' + app.id + '.yml'
@ -336,15 +319,18 @@ class CheckupdatesTest(unittest.TestCase):
if __name__ == "__main__":
parser = optparse.OptionParser()
parser.add_option(
import argparse
from testcommon import parse_args_for_test
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
parse_args_for_test(parser, sys.argv)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(CheckupdatesTest))

View File

@ -9,9 +9,9 @@ import importlib
import inspect
import json
import logging
import optparse
import os
import re
import ruamel.yaml
import shutil
import subprocess
import sys
@ -21,6 +21,7 @@ import unittest
import textwrap
import yaml
import gzip
from argparse import ArgumentParser
from zipfile import BadZipFile, ZipFile
from unittest import mock
from pathlib import Path
@ -37,13 +38,19 @@ import fdroidserver.index
import fdroidserver.signindex
import fdroidserver.common
import fdroidserver.metadata
from testcommon import TmpCwd, mkdtemp
from testcommon import TmpCwd, mkdtemp, parse_args_for_test
from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME
from fdroidserver.exception import FDroidException, VCSException,\
MetaDataException, VerificationException
from fdroidserver.looseversion import LooseVersion
def _mock_common_module_options_instance():
"""Helper method to deal with difficult visibility of the module-level options."""
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.verbose = False
class CommonTest(unittest.TestCase):
'''fdroidserver/common.py'''
@ -56,17 +63,22 @@ class CommonTest(unittest.TestCase):
if not os.path.exists(self.tmpdir):
os.makedirs(self.tmpdir)
os.chdir(self.basedir)
# these are declared as None at the top of the module file
fdroidserver.common.config = None
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.verbose = False
fdroidserver.common.options = None
fdroidserver.metadata.srclibs = None
self._td = mkdtemp()
self.testdir = self._td.name
def tearDown(self):
fdroidserver.common.config = None
fdroidserver.common.options = None
os.chdir(self.basedir)
self._td.cleanup()
shutil.rmtree(self.tmpdir)
if os.path.exists(self.tmpdir):
shutil.rmtree(self.tmpdir)
def test_parse_human_readable_size(self):
for k, v in (
@ -184,7 +196,7 @@ class CommonTest(unittest.TestCase):
fdroidserver.common._add_java_paths_to_config(pathlist, config)
self.assertEqual(config['java_paths']['8'], choice[1:])
def test_is_apk_and_debuggable(self):
def test_is_debuggable_or_testOnly(self):
config = dict()
fdroidserver.common.fill_config_defaults(config)
fdroidserver.common.config = config
@ -196,7 +208,7 @@ class CommonTest(unittest.TestCase):
testfiles.append(os.path.join(self.basedir, 'urzip-badcert.apk'))
for apkfile in testfiles:
self.assertTrue(
fdroidserver.common.is_apk_and_debuggable(apkfile),
fdroidserver.common.is_debuggable_or_testOnly(apkfile),
"debuggable APK state was not properly parsed!",
)
@ -207,7 +219,7 @@ class CommonTest(unittest.TestCase):
testfiles.append(os.path.join(self.basedir, 'v2.only.sig_2.apk'))
for apkfile in testfiles:
self.assertFalse(
fdroidserver.common.is_apk_and_debuggable(apkfile),
fdroidserver.common.is_debuggable_or_testOnly(apkfile),
"debuggable APK state was not properly parsed!",
)
@ -355,6 +367,7 @@ class CommonTest(unittest.TestCase):
config = dict()
fdroidserver.common.fill_config_defaults(config)
fdroidserver.common.config = config
_mock_common_module_options_instance()
srclibname = 'FakeSrcLib'
srclib_testdir = os.path.join(self.testdir, 'build', 'srclib')
@ -396,6 +409,7 @@ class CommonTest(unittest.TestCase):
onserver=True, refresh=False) # do not clone in this test
def test_prepare_sources_refresh(self):
_mock_common_module_options_instance()
packageName = 'org.fdroid.ci.test.app'
os.chdir(self.tmpdir)
os.mkdir('build')
@ -466,6 +480,7 @@ class CommonTest(unittest.TestCase):
config = dict()
fdroidserver.common.fill_config_defaults(config)
fdroidserver.common.config = config
_mock_common_module_options_instance()
commands = ['sh', '-c', 'echo stdout message && echo stderr message 1>&2']
@ -476,7 +491,8 @@ class CommonTest(unittest.TestCase):
self.assertEqual(p.output, 'stdout message\n')
def test_signjar(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
fdroidserver.common.config = config
fdroidserver.signindex.config = config
@ -496,7 +512,8 @@ class CommonTest(unittest.TestCase):
)
def test_verify_apk_signature(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
fdroidserver.common.config = config
self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
@ -518,7 +535,8 @@ class CommonTest(unittest.TestCase):
self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-release-unsigned.apk'))
def test_verify_old_apk_signature(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
fdroidserver.common.config = config
@ -539,7 +557,7 @@ class CommonTest(unittest.TestCase):
def test_verify_jar_signature(self):
"""Sign entry.jar and make sure it validates"""
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
config['keystore'] = os.path.join(self.basedir, 'keystore.jks')
config['repo_keyalias'] = 'sova'
@ -557,7 +575,7 @@ class CommonTest(unittest.TestCase):
def test_verify_jar_signature_fails(self):
"""Test verify_jar_signature fails on unsigned and deprecated algorithms"""
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
fdroidserver.common.config = config
source_dir = os.path.join(self.basedir, 'signindex')
@ -567,7 +585,7 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.verify_jar_signature(testfile)
def test_verify_deprecated_jar_signature(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
fdroidserver.common.config = config
source_dir = os.path.join(self.basedir, 'signindex')
@ -580,8 +598,9 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.verify_deprecated_jar_signature(testfile)
def test_verify_apks(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
fdroidserver.common.config = config
_mock_common_module_options_instance()
sourceapk = os.path.join(self.basedir, 'urzip.apk')
@ -614,6 +633,27 @@ class CommonTest(unittest.TestCase):
self.assertFalse(fdroidserver.common.verify_apk_signature(twosigapk))
self.assertIsNone(fdroidserver.common.verify_apks(sourceapk, twosigapk, self.tmpdir))
def test_get_certificate_with_chain_sandisk(self):
"""Test that APK signatures with a cert chain are parsed like apksigner.
SanDisk signs their APKs with a X.509 certificate chain of
trust, so there are actually three certificates
included. apksigner only cares about the certificate in the
chain that actually signs the manifest.
The correct value comes from:
apksigner verify --print-certs 883cbdae7aeb2e4b122e8ee8d89966c7062d0d49107a130235fa220a5b994a79.apk
"""
cert = fdroidserver.common.get_certificate(
signature_block_file=Path('SANAPPSI.RSA').read_bytes(),
signature_file=Path('SANAPPSI.SF').read_bytes(),
)
self.assertEqual(
'ea0abbf2a142e4b167405d516b2cc408c4af4b29cd50ba281aa4470d4aab3e53',
fdroidserver.common.signer_fingerprint(cert),
)
def test_write_to_config(self):
with tempfile.TemporaryDirectory() as tmpPath:
cfgPath = os.path.join(tmpPath, 'config.py')
@ -867,7 +907,8 @@ class CommonTest(unittest.TestCase):
)
def test_sign_apk(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
if 'apksigner' not in config:
self.skipTest('SKIPPING test_sign_apk, apksigner not installed!')
@ -901,7 +942,7 @@ class CommonTest(unittest.TestCase):
self.assertTrue(os.path.isfile(signed))
self.assertFalse(os.path.isfile(unsigned))
self.assertTrue(fdroidserver.common.verify_apk_signature(signed))
self.assertEqual('18', fdroidserver.common._get_androguard_APK(signed).get_min_sdk_version())
self.assertEqual('18', fdroidserver.common.get_androguard_APK(signed).get_min_sdk_version())
shutil.copy(os.path.join(self.basedir, 'minimal_targetsdk_30_unsigned.apk'), self.testdir)
unsigned = os.path.join(self.testdir, 'minimal_targetsdk_30_unsigned.apk')
@ -914,7 +955,7 @@ class CommonTest(unittest.TestCase):
self.assertFalse(os.path.isfile(unsigned))
self.assertTrue(fdroidserver.common.verify_apk_signature(signed))
# verify it has a v2 signature
self.assertTrue(fdroidserver.common._get_androguard_APK(signed).is_signed_v2())
self.assertTrue(fdroidserver.common.get_androguard_APK(signed).is_signed_v2())
shutil.copy(os.path.join(self.basedir, 'no_targetsdk_minsdk30_unsigned.apk'), self.testdir)
unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk30_unsigned.apk')
@ -922,7 +963,7 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.sign_apk(unsigned, signed, config['keyalias'])
self.assertTrue(fdroidserver.common.verify_apk_signature(signed))
self.assertTrue(fdroidserver.common._get_androguard_APK(signed).is_signed_v2())
self.assertTrue(fdroidserver.common.get_androguard_APK(signed).is_signed_v2())
shutil.copy(os.path.join(self.basedir, 'no_targetsdk_minsdk1_unsigned.apk'), self.testdir)
unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk1_unsigned.apk')
@ -937,7 +978,8 @@ class CommonTest(unittest.TestCase):
@unittest.skipIf(os.getuid() == 0, 'This is meaningless when run as root')
def test_sign_apk_fail(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
if 'apksigner' not in config:
self.skipTest('SKIPPING test_sign_apk_fail, apksigner not installed!')
@ -960,7 +1002,8 @@ class CommonTest(unittest.TestCase):
self.assertFalse(os.path.isfile(signed))
def test_sign_apk_corrupt(self):
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
if 'apksigner' not in config:
self.skipTest('SKIPPING test_sign_apk_corrupt, apksigner not installed!')
@ -986,7 +1029,8 @@ class CommonTest(unittest.TestCase):
)
def test_resign_apk(self):
"""When using apksigner, it should resign signed APKs"""
config = fdroidserver.common.read_config(fdroidserver.common.options)
_mock_common_module_options_instance()
config = fdroidserver.common.read_config()
if 'apksigner' not in config:
self.skipTest('SKIPPING test_resign_apk, apksigner not installed!')
@ -1038,6 +1082,11 @@ class CommonTest(unittest.TestCase):
('org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror', 3, '1.0.2'),
('org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.bitbucket.tickytacky.mirrormirror', 4, '1.0.3'),
('org.dyndns.fules.ck_20.apk', 'org.dyndns.fules.ck', 20, 'v1.6pre2'),
('issue-1128-min-sdk-30-poc.apk', 'org.fdroid.ci', 1, '1.0'),
('issue-1128-poc1.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
('issue-1128-poc2.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
('issue-1128-poc3a.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
('issue-1128-poc3b.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
('urzip.apk', 'info.guardianproject.urzip', 100, '0.1'),
('urzip-badcert.apk', 'info.guardianproject.urzip', 100, '0.1'),
('urzip-badsig.apk', 'info.guardianproject.urzip', 100, '0.1'),
@ -1145,14 +1194,19 @@ class CommonTest(unittest.TestCase):
"""This is a sanity test that androguard isn't broken"""
def get_minSdkVersion(apkfile):
apk = fdroidserver.common._get_androguard_APK(apkfile)
apk = fdroidserver.common.get_androguard_APK(apkfile)
return fdroidserver.common.get_min_sdk_version(apk)
def get_targetSdkVersion(apkfile):
apk = fdroidserver.common._get_androguard_APK(apkfile)
apk = fdroidserver.common.get_androguard_APK(apkfile)
return apk.get_effective_target_sdk_version()
self.assertEqual(4, get_minSdkVersion('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
self.assertEqual(30, get_minSdkVersion('issue-1128-min-sdk-30-poc.apk'))
self.assertEqual(29, get_minSdkVersion('issue-1128-poc1.apk'))
self.assertEqual(29, get_minSdkVersion('issue-1128-poc2.apk'))
self.assertEqual(23, get_minSdkVersion('issue-1128-poc3a.apk'))
self.assertEqual(23, get_minSdkVersion('issue-1128-poc3b.apk'))
self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_1.apk'))
self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_2.apk'))
self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_3.apk'))
@ -1163,6 +1217,7 @@ class CommonTest(unittest.TestCase):
self.assertEqual(4, get_minSdkVersion('urzip-badsig.apk'))
self.assertEqual(4, get_minSdkVersion('urzip-release.apk'))
self.assertEqual(4, get_minSdkVersion('urzip-release-unsigned.apk'))
self.assertEqual(27, get_minSdkVersion('v2.only.sig_2.apk'))
self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_3.apk'))
self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_4.apk'))
self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_5.apk'))
@ -1881,7 +1936,7 @@ class CommonTest(unittest.TestCase):
os.chdir(self.tmpdir)
self.assertFalse(os.path.exists('config.yml'))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertFalse(config.get('update_stats'))
self.assertIsNotNone(config.get('char_limits'))
@ -1891,7 +1946,7 @@ class CommonTest(unittest.TestCase):
open('config.yml', 'w').close()
self.assertTrue(os.path.exists('config.yml'))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertFalse(config.get('update_stats'))
self.assertIsNotNone(config.get('char_limits'))
@ -1902,7 +1957,7 @@ class CommonTest(unittest.TestCase):
fp.write('apksigner: yml')
self.assertTrue(os.path.exists('config.yml'))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual('yml', config.get('apksigner'))
def test_with_config_yml_utf8(self):
@ -1913,7 +1968,7 @@ class CommonTest(unittest.TestCase):
fp.write('apksigner: ' + teststr)
self.assertTrue(os.path.exists('config.yml'))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual(teststr, config.get('apksigner'))
def test_with_config_yml_utf8_as_ascii(self):
@ -1924,7 +1979,7 @@ class CommonTest(unittest.TestCase):
yaml.dump({'apksigner': teststr}, fp)
self.assertTrue(os.path.exists('config.yml'))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual(teststr, config.get('apksigner'))
def test_with_config_yml_with_env_var(self):
@ -1936,20 +1991,20 @@ class CommonTest(unittest.TestCase):
fp.write("""keypass: {'env': 'SECRET'}""")
self.assertTrue(os.path.exists('config.yml'))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual(os.getenv('SECRET', 'fail'), config.get('keypass'))
def test_with_config_yml_is_dict(self):
os.chdir(self.tmpdir)
Path('config.yml').write_text('apksigner = /placeholder/path')
with self.assertRaises(TypeError):
fdroidserver.common.read_config(fdroidserver.common.options)
fdroidserver.common.read_config()
def test_with_config_yml_is_not_mixed_type(self):
os.chdir(self.tmpdir)
Path('config.yml').write_text('k: v\napksigner = /placeholder/path')
with self.assertRaises(yaml.scanner.ScannerError):
fdroidserver.common.read_config(fdroidserver.common.options)
fdroidserver.common.read_config()
def test_with_config_py(self):
"""Make sure it is still possible to use config.py alone."""
@ -1958,7 +2013,7 @@ class CommonTest(unittest.TestCase):
fp.write('apksigner = "py"')
self.assertFalse(os.path.exists('config.yml'))
self.assertTrue(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual("py", config.get('apksigner'))
def test_config_perm_warning(self):
@ -1968,7 +2023,7 @@ class CommonTest(unittest.TestCase):
fp.write('keystore: foo.jks')
self.assertTrue(os.path.exists(fp.name))
os.chmod(fp.name, 0o666)
fdroidserver.common.read_config(fdroidserver.common.options)
fdroidserver.common.read_config()
os.remove(fp.name)
fdroidserver.common.config = None
@ -1976,7 +2031,7 @@ class CommonTest(unittest.TestCase):
fp.write('keystore = "foo.jks"')
self.assertTrue(os.path.exists(fp.name))
os.chmod(fp.name, 0o666)
fdroidserver.common.read_config(fdroidserver.common.options)
fdroidserver.common.read_config()
def test_with_both_config_yml_py(self):
"""If config.yml and config.py are present, config.py should be ignored."""
@ -1987,7 +2042,7 @@ class CommonTest(unittest.TestCase):
fp.write('apksigner = "py"')
self.assertTrue(os.path.exists('config.yml'))
self.assertTrue(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual('yml', config.get('apksigner'))
def test_config_repo_url(self):
@ -2038,14 +2093,14 @@ class CommonTest(unittest.TestCase):
fp.write('apksigner: yml')
self.assertTrue(os.path.exists(fp.name))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertFalse('keypass' in config)
self.assertEqual('yml', config.get('apksigner'))
fdroidserver.common.write_to_config(config, 'keypass', 'mysecretpassword')
with open(fp.name) as fp:
print(fp.read())
fdroidserver.common.config = None
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual('mysecretpassword', config['keypass'])
def test_write_to_config_py(self):
@ -2054,12 +2109,12 @@ class CommonTest(unittest.TestCase):
fp.write('apksigner = "py"')
self.assertTrue(os.path.exists(fp.name))
self.assertFalse(os.path.exists('config.yml'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertFalse('keypass' in config)
self.assertEqual('py', config.get('apksigner'))
fdroidserver.common.write_to_config(config, 'keypass', 'mysecretpassword')
fdroidserver.common.config = None
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual('mysecretpassword', config['keypass'])
def test_config_dict_with_int_keys(self):
@ -2068,7 +2123,7 @@ class CommonTest(unittest.TestCase):
fp.write('java_paths:\n 8: /usr/lib/jvm/java-8-openjdk\n')
self.assertTrue(os.path.exists(fp.name))
self.assertFalse(os.path.exists('config.py'))
config = fdroidserver.common.read_config(fdroidserver.common.options)
config = fdroidserver.common.read_config()
self.assertEqual('/usr/lib/jvm/java-8-openjdk', config.get('java_paths', {}).get('8'))
@mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True)
@ -2146,7 +2201,7 @@ class CommonTest(unittest.TestCase):
shutil.copy(os.path.join(self.basedir, '..', 'buildserver', 'config.buildserver.yml'),
'config.yml')
self.assertFalse(os.path.exists('config.py'))
fdroidserver.common.read_config(fdroidserver.common.options)
fdroidserver.common.read_config()
def test_setup_status_output(self):
os.chdir(self.tmpdir)
@ -2499,6 +2554,7 @@ class CommonTest(unittest.TestCase):
@mock.patch.dict(os.environ, clear=True)
def test_FDroidPopen_envs_paths_can_be_pathlib(self):
_mock_common_module_options_instance()
os.environ['PATH'] = '/usr/bin:/usr/sbin'
envs = {'PATHLIB': Path('/pathlib/path'), 'STRING': '/string/path'}
p = fdroidserver.common.FDroidPopen(['/bin/sh', '-c', 'export'], envs=envs)
@ -2892,19 +2948,394 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.read_config()['serverwebroot'],
)
def test_parse_mirrors_config_str(self):
s = 'foo@example.com:/var/www'
mirrors = ruamel.yaml.YAML(typ='safe').load("""'%s'""" % s)
self.assertEqual(
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
)
def test_parse_mirrors_config_list(self):
s = 'foo@example.com:/var/www'
mirrors = ruamel.yaml.YAML(typ='safe').load("""- '%s'""" % s)
self.assertEqual(
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
)
def test_parse_mirrors_config_dict(self):
s = 'foo@example.com:/var/www'
mirrors = ruamel.yaml.YAML(typ='safe').load("""- url: '%s'""" % s)
self.assertEqual(
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
)
APKS_WITH_JAR_SIGNATURES = (
(
'SpeedoMeterApp.main_1.apk',
'2e6b3126fb7e0db6a9d4c2a06df690620655454d6e152cf244cc9efe9787a77d',
),
(
'apk.embedded_1.apk',
'764f0eaac0cdcde35023658eea865c4383ab580f9827c62fdd3daf9e654199ee',
),
(
'bad-unicode-πÇÇ现代通用字-български-عربي1.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'issue-1128-poc3a.apk',
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
),
(
'issue-1128-poc3b.apk',
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
),
(
'janus.apk',
'ebb0fedf1942a099b287c3db00ff732162152481abb2b6c7cbcdb2ba5894a768',
),
(
'org.bitbucket.tickytacky.mirrormirror_1.apk',
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
),
(
'org.bitbucket.tickytacky.mirrormirror_2.apk',
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
),
(
'org.bitbucket.tickytacky.mirrormirror_3.apk',
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
),
(
'org.bitbucket.tickytacky.mirrormirror_4.apk',
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
),
(
'org.dyndns.fules.ck_20.apk',
'9326a2cc1a2f148202bc7837a0af3b81200bd37fd359c9e13a2296a71d342056',
),
(
'org.sajeg.fallingblocks_3.apk',
'033389681f4288fdb3e72a28058c8506233ca50de75452ab6c9c76ea1ca2d70f',
),
(
'repo/com.example.test.helloworld_1.apk',
'c3a5ca5465a7585a1bda30218ae4017083605e3576867aa897d724208d99696c',
),
(
'repo/com.politedroid_3.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/com.politedroid_4.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/com.politedroid_5.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/com.politedroid_6.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/duplicate.permisssions_9999999.apk',
'659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84',
),
(
'repo/info.zwanenburg.caffeinetile_4.apk',
'51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e',
),
(
'repo/no.min.target.sdk_987.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/obb.main.oldversion_1444412523.apk',
'818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1',
),
(
'repo/obb.main.twoversions_1101613.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/obb.main.twoversions_1101615.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/obb.main.twoversions_1101617.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/obb.mainpatch.current_1619.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/obb.mainpatch.current_1619_another-release-key.apk',
'ce9e200667f02d96d49891a2e08a3c178870e91853d61bdd33ef5f0b54701aa5',
),
(
'repo/souch.smsbypass_9.apk',
'd3aec784b1fd71549fc22c999789122e3639895db6bd585da5835fbe3db6985c',
),
(
'repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'repo/v1.v2.sig_1020.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'urzip-release.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
(
'urzip.apk',
'7eabd8c15de883d1e82b5df2fd4f7f769e498078e9ad6dc901f0e96db77ceac3',
),
)
APKS_WITHOUT_JAR_SIGNATURES = (
(
'issue-1128-poc1.apk', # APK v3 Signature only
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
),
(
'issue-1128-poc2.apk', # APK v3 Signature only
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
),
(
'issue-1128-min-sdk-30-poc.apk', # APK v3 Signature only
'09350d5f3460a8a0ea5cf6b68ccd296a58754f7e683ba6aa08c19be8353504f3',
),
(
'v2.only.sig_2.apk',
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
),
)
class SignerExtractionTest(unittest.TestCase):
"""Test extraction of the signer certificate from JARs and APKs
These fingerprints can be confirmed with:
apksigner verify --print-certs foo.apk | grep SHA-256
keytool -printcert -file ____.RSA
"""
def setUp(self):
os.chdir(os.path.join(localmodule, 'tests'))
self._td = mkdtemp()
self.testdir = self._td.name
self.apksigner = shutil.which('apksigner')
self.keytool = shutil.which('keytool')
def tearDown(self):
self._td.cleanup()
def test_get_first_signer_certificate_with_jars(self):
for jar in (
'signindex/guardianproject-v1.jar',
'signindex/guardianproject.jar',
'signindex/testy.jar',
):
outdir = os.path.join(self.testdir, jar[:-4].replace('/', '_'))
os.mkdir(outdir)
fdroidserver.common.apk_extract_signatures(jar, outdir)
certs = glob.glob(os.path.join(outdir, '*.RSA'))
with open(certs[0], 'rb') as fp:
self.assertEqual(
fdroidserver.common.get_certificate(fp.read()),
fdroidserver.common.get_first_signer_certificate(jar),
)
@unittest.skip("slow and only needed when adding to APKS_WITH_JAR_SIGNATURES")
def test_vs_keytool(self):
unittest.skipUnless(self.keytool, 'requires keytool to run')
pat = re.compile(r'[0-9A-F:]{95}')
cmd = [self.keytool, '-printcert', '-jarfile']
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES:
o = subprocess.check_output(cmd + [apk], text=True)
try:
self.assertEqual(
fingerprint,
pat.search(o).group().replace(':', '').lower(),
)
except AttributeError as e:
print(e, o)
@unittest.skip("slow and only needed when adding to APKS_WITH_JAR_SIGNATURES")
def test_vs_apksigner(self):
unittest.skipUnless(self.apksigner, 'requires apksigner to run')
pat = re.compile(r'\s[0-9a-f]{64}\s')
cmd = [self.apksigner, 'verify', '--print-certs']
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES + APKS_WITHOUT_JAR_SIGNATURES:
output = subprocess.check_output(cmd + [apk], text=True)
self.assertEqual(
fingerprint,
pat.search(output).group().strip(),
apk + " should have matching signer fingerprints",
)
def test_apk_signer_fingerprint_with_v1_apks(self):
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES:
self.assertEqual(
fingerprint,
fdroidserver.common.apk_signer_fingerprint(apk),
f'apk_signer_fingerprint should match stored fingerprint for {apk}',
)
def test_apk_signer_fingerprint_without_v1_apks(self):
for apk, fingerprint in APKS_WITHOUT_JAR_SIGNATURES:
self.assertEqual(
fingerprint,
fdroidserver.common.apk_signer_fingerprint(apk),
f'apk_signer_fingerprint should match stored fingerprint for {apk}',
)
def test_get_first_signer_certificate_with_unsigned_jar(self):
self.assertIsNone(
fdroidserver.common.get_first_signer_certificate('signindex/unsigned.jar')
)
def test_apk_extract_fingerprint(self):
"""Test extraction of JAR signatures (does not cover APK v2+ extraction)."""
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES:
outdir = os.path.join(self.testdir, apk[:-4].replace('/', '_'))
os.mkdir(outdir)
try:
fdroidserver.common.apk_extract_signatures(apk, outdir)
except fdroidserver.apksigcopier.APKSigCopierError:
# nothing to test here when this error is thrown
continue
v1_certs = [str(cert) for cert in Path(outdir).glob('*.[DR]SA')]
cert = fdroidserver.common.get_certificate(
signature_block_file=Path(v1_certs[0]).read_bytes(),
signature_file=Path(v1_certs[0][:-4] + '.SF').read_bytes(),
)
self.assertEqual(
fingerprint,
fdroidserver.common.signer_fingerprint(cert),
)
apkobject = fdroidserver.common.get_androguard_APK(apk, skip_analysis=True)
v2_certs = apkobject.get_certificates_der_v2()
if v2_certs:
if v1_certs:
self.assertEqual(len(v1_certs), len(v2_certs))
self.assertEqual(
fingerprint,
fdroidserver.common.signer_fingerprint(v2_certs[0]),
)
v3_certs = apkobject.get_certificates_der_v3()
if v3_certs:
if v2_certs:
self.assertEqual(len(v2_certs), len(v3_certs))
self.assertEqual(
fingerprint,
fdroidserver.common.signer_fingerprint(v3_certs[0]),
)
class ConfigOptionsScopeTest(unittest.TestCase):
"""Test assumptions about variable scope for "config" and "options".
The ancient architecture of config and options in fdroidserver has
weird issues around unexpected scope, like there are cases where
the global config is not the same as the module-level config, and
more.
This is about describing what is happening, it is not about
documenting behaviors that are good design. The config and options
handling should really be refactored into a well-known, workable
Pythonic pattern.
"""
def setUp(self):
# these are declared as None at the top of the module file
fdroidserver.common.config = None
fdroidserver.common.options = None
def tearDown(self):
fdroidserver.common.config = None
fdroidserver.common.options = None
if 'config' in globals():
global config
del config
if 'options' in globals():
global options
del options
def test_parse_args(self):
"""Test that options is properly set up at the module-level and not global."""
self.assertFalse('options' in globals())
self.assertIsNone(fdroidserver.common.options)
parser = ArgumentParser()
fdroidserver.common.setup_global_opts(parser)
with mock.patch('sys.argv', ['$0']):
o = fdroidserver.common.parse_args(parser)
self.assertEqual(o, fdroidserver.common.options)
# No function should set options as a global, and the global
# keyword does not create the variable.
global options
with self.assertRaises(NameError):
options
self.assertFalse('options' in globals())
def test_parse_args_without_args(self):
"""Test that the parsing function works fine when there are no args."""
parser = ArgumentParser()
fdroidserver.common.setup_global_opts(parser)
with mock.patch('sys.argv', ['$0']):
o = fdroidserver.common.parse_args(parser)
self.assertFalse(o.verbose)
def test_parse_args_with_args(self):
parser = ArgumentParser()
fdroidserver.common.setup_global_opts(parser)
with mock.patch('sys.argv', ['$0', '-v']):
o = fdroidserver.common.parse_args(parser)
self.assertTrue(o.verbose)
def test_get_config(self):
"""Show how the module-level variables are initialized."""
self.assertTrue('config' not in vars() and 'config' not in globals())
self.assertIsNone(fdroidserver.common.config)
config = fdroidserver.common.read_config()
self.assertIsNotNone(fdroidserver.common.config)
self.assertEqual(dict, type(config))
self.assertEqual(config, fdroidserver.common.config)
def test_get_config_global(self):
"""Test assumptions about variable scope using global keyword."""
global config
self.assertTrue('config' not in vars() and 'config' not in globals())
self.assertIsNone(fdroidserver.common.config)
c = fdroidserver.common.read_config()
self.assertIsNotNone(fdroidserver.common.config)
self.assertEqual(dict, type(c))
self.assertEqual(c, fdroidserver.common.config)
self.assertTrue(
'config' not in vars() and 'config' not in globals(),
"The config should not be set in the global context, only module-level.",
)
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
parser = optparse.OptionParser()
parser.add_option(
parser = ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
parse_args_for_test(parser, sys.argv)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(CommonTest))

View File

@ -1,9 +1,10 @@
#!/usr/bin/env python3
import configparser
import inspect
import logging
import optparse
import os
import shutil
import sys
import tempfile
import unittest
@ -21,7 +22,12 @@ if localmodule not in sys.path:
import fdroidserver.common
import fdroidserver.deploy
from fdroidserver.exception import FDroidException
from testcommon import TmpCwd, mkdtemp
from testcommon import TmpCwd, mkdtemp, parse_args_for_test
class Options:
quiet = False
verbose = False
class DeployTest(unittest.TestCase):
@ -34,6 +40,10 @@ class DeployTest(unittest.TestCase):
self._td = mkdtemp()
self.testdir = self._td.name
fdroidserver.common.options = mock.Mock()
fdroidserver.deploy.config = {}
fdroidserver.deploy.USER_RCLONE_CONF = False
def tearDown(self):
self._td.cleanup()
@ -63,7 +73,7 @@ class DeployTest(unittest.TestCase):
url1.mkdir(parents=True)
# setup parameters for this test run
fdroidserver.deploy.options.identity_file = None
fdroidserver.common.options.identity_file = None
fdroidserver.deploy.config['make_current_version_link'] = False
dest_apk0 = url0 / fake_apk
@ -94,6 +104,96 @@ class DeployTest(unittest.TestCase):
with self.assertRaises(SystemExit):
fdroidserver.deploy.update_serverwebroots([{'url': 'ssh://nope'}], 'repo')
@unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone')
def test_update_remote_storage_with_rclone(self):
os.chdir(self.testdir)
repo = Path('repo')
repo.mkdir(parents=True, exist_ok=True)
fake_apk = repo / 'another_fake.apk'
with fake_apk.open('w') as fp:
fp.write('not an APK, but has the right filename')
fake_index = repo / fdroidserver.deploy.INDEX_FILES[0]
with fake_index.open('w') as fp:
fp.write('not an index, but has the right filename')
# write out rclone config for test use
rclone_config = configparser.ConfigParser()
rclone_config.add_section("test-local-config")
rclone_config.set("test-local-config", "type", "local")
rclone_config_path = Path('rclone_config_path')
rclone_config_path.mkdir(parents=True, exist_ok=True)
rclone_file = rclone_config_path / 'rclone.conf'
with open(rclone_file, 'w') as configfile:
rclone_config.write(configfile)
# setup parameters for this test run
fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder'
fdroidserver.deploy.config['rclone'] = True
fdroidserver.deploy.config['rclone_config'] = 'test-local-config'
fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file)
fdroidserver.common.options = Options
# write out destination path
destination = Path('some_bucket_folder/fdroid')
destination.mkdir(parents=True, exist_ok=True)
dest_apk = Path(destination) / fake_apk
dest_index = Path(destination) / fake_index
self.assertFalse(dest_apk.is_file())
self.assertFalse(dest_index.is_file())
repo_section = str(repo)
# fdroidserver.deploy.USER_RCLONE_CONF = str(rclone_file)
fdroidserver.deploy.update_remote_storage_with_rclone(repo_section)
self.assertTrue(dest_apk.is_file())
self.assertTrue(dest_index.is_file())
@unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone')
def test_update_remote_storage_with_rclone_in_index_only_mode(self):
os.chdir(self.testdir)
repo = Path('repo')
repo.mkdir(parents=True, exist_ok=True)
fake_apk = repo / 'another_fake.apk'
with fake_apk.open('w') as fp:
fp.write('not an APK, but has the right filename')
fake_index = repo / fdroidserver.deploy.INDEX_FILES[0]
with fake_index.open('w') as fp:
fp.write('not an index, but has the right filename')
# write out rclone config for test use
rclone_config = configparser.ConfigParser()
rclone_config.add_section("test-local-config")
rclone_config.set("test-local-config", "type", "local")
rclone_config_path = Path('rclone_config_path')
rclone_config_path.mkdir(parents=True, exist_ok=True)
rclone_file = rclone_config_path / 'rclone.conf'
with open(rclone_file, 'w') as configfile:
rclone_config.write(configfile)
# setup parameters for this test run
fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder'
fdroidserver.deploy.config['rclone'] = True
fdroidserver.deploy.config['rclone_config'] = 'test-local-config'
fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file)
fdroidserver.common.options = Options
# write out destination path
destination = Path('some_bucket_folder/fdroid')
destination.mkdir(parents=True, exist_ok=True)
dest_apk = Path(destination) / fake_apk
dest_index = Path(destination) / fake_index
self.assertFalse(dest_apk.is_file())
self.assertFalse(dest_index.is_file())
repo_section = str(repo)
# fdroidserver.deploy.USER_RCLONE_CONF = str(rclone_file)
fdroidserver.deploy.update_remote_storage_with_rclone(
repo_section, is_index_only=True
)
self.assertFalse(dest_apk.is_file())
self.assertTrue(dest_index.is_file())
def test_update_serverwebroot(self):
"""rsync works with file paths, so this test uses paths for the URLs"""
os.chdir(self.testdir)
@ -109,7 +209,9 @@ class DeployTest(unittest.TestCase):
url.mkdir()
# setup parameters for this test run
fdroidserver.deploy.options.identity_file = None
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.identity_file = None
fdroidserver.deploy.config['make_current_version_link'] = False
dest_apk = Path(url) / fake_apk
@ -128,16 +230,15 @@ class DeployTest(unittest.TestCase):
fake_apk = repo / 'fake.apk'
with fake_apk.open('w') as fp:
fp.write('not an APK, but has the right filename')
for i in fdroidserver.deploy.INDEX_FILES:
fake_index = repo / i
with fake_index.open('w') as fp:
fp.write('not an index, but has the right filename')
fake_index = repo / fdroidserver.deploy.INDEX_FILES[0]
with fake_index.open('w') as fp:
fp.write('not an index, but has the right filename')
url = Path('url')
url.mkdir()
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.identity_file = None
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.identity_file = None
fdroidserver.deploy.config['make_current_version_link'] = False
dest_apk = Path(url) / fake_apk
@ -159,14 +260,16 @@ class DeployTest(unittest.TestCase):
fdroidserver.deploy.update_serverwebroot('serverwebroot', 'repo')
def test_update_serverwebroot_make_cur_version_link(self):
self.maxDiff = None
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.config['make_current_version_link'] = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
fdroidserver.common.options.index_only = False
fdroidserver.deploy.config = {'make_current_version_link': True}
url = "example.com:/var/www/fdroid"
repo_section = 'repo'
@ -185,6 +288,8 @@ class DeployTest(unittest.TestCase):
'--safe-links',
'--quiet',
'--exclude',
'repo/altstore-index.json',
'--exclude',
'repo/entry.jar',
'--exclude',
'repo/entry.json',
@ -252,12 +357,12 @@ class DeployTest(unittest.TestCase):
def test_update_serverwebroot_make_cur_version_link_in_index_only_mode(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.deploy.options.identity_file = None
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
fdroidserver.common.options.identity_file = None
fdroidserver.deploy.config['make_current_version_link'] = True
url = "example.com:/var/www/fdroid"
repo_section = 'repo'
@ -276,6 +381,7 @@ class DeployTest(unittest.TestCase):
'--delete-after',
'--safe-links',
'--quiet',
'repo/altstore-index.json',
'repo/entry.jar',
'repo/entry.json',
'repo/entry.json.asc',
@ -335,14 +441,14 @@ class DeployTest(unittest.TestCase):
def test_update_serverwebroot_with_id_file(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.verbose = True
fdroidserver.deploy.options.quiet = False
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.config['identity_file'] = './id_rsa'
fdroidserver.deploy.config['make_current_version_link'] = False
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.verbose = True
fdroidserver.common.options.quiet = False
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.index_only = False
fdroidserver.deploy.config = {'identity_file': './id_rsa'}
url = "example.com:/var/www/fdroid"
repo_section = 'archive'
@ -364,6 +470,8 @@ class DeployTest(unittest.TestCase):
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i '
+ fdroidserver.deploy.config['identity_file'],
'--exclude',
'archive/altstore-index.json',
'--exclude',
'archive/entry.jar',
'--exclude',
'archive/entry.json',
@ -414,11 +522,11 @@ class DeployTest(unittest.TestCase):
def test_update_serverwebroot_with_id_file_in_index_only_mode(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_chcksum = False
fdroidserver.deploy.options.verbose = True
fdroidserver.deploy.options.quiet = False
fdroidserver.deploy.options.identity_file = None
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_chcksum = False
fdroidserver.common.options.verbose = True
fdroidserver.common.options.quiet = False
fdroidserver.common.options.identity_file = None
fdroidserver.deploy.config['identity_file'] = './id_rsa'
fdroidserver.deploy.config['make_current_version_link'] = False
url = "example.com:/var/www/fdroid"
@ -441,6 +549,7 @@ class DeployTest(unittest.TestCase):
'-e',
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i '
+ fdroidserver.deploy.config['identity_file'],
'archive/altstore-index.json',
'archive/entry.jar',
'archive/entry.json',
'archive/entry.json.asc',
@ -484,8 +593,8 @@ class DeployTest(unittest.TestCase):
not os.getenv('VIRUSTOTAL_API_KEY'), 'VIRUSTOTAL_API_KEY is not set'
)
def test_upload_to_virustotal(self):
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.verbose = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.verbose = True
virustotal_apikey = os.getenv('VIRUSTOTAL_API_KEY')
fdroidserver.deploy.upload_to_virustotal('repo', virustotal_apikey)
@ -503,10 +612,10 @@ class DeployTest(unittest.TestCase):
def test_update_awsbucket_s3cmd(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -543,6 +652,8 @@ class DeployTest(unittest.TestCase):
'--acl-public',
'--quiet',
'--exclude',
'repo/altstore-index.json',
'--exclude',
'repo/entry.jar',
'--exclude',
'repo/entry.json',
@ -578,6 +689,8 @@ class DeployTest(unittest.TestCase):
'--acl-public',
'--quiet',
'--exclude',
'repo/altstore-index.json',
'--exclude',
'repo/entry.jar',
'--exclude',
'repo/entry.json',
@ -634,10 +747,10 @@ class DeployTest(unittest.TestCase):
def test_update_awsbucket_s3cmd_in_index_only_mode(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -674,6 +787,8 @@ class DeployTest(unittest.TestCase):
'--acl-public',
'--quiet',
'--include',
'repo/altstore-index.json',
'--include',
'repo/entry.jar',
'--include',
'repo/entry.json',
@ -712,7 +827,7 @@ class DeployTest(unittest.TestCase):
os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig')
with mock.patch('subprocess.call', side_effect=update_awsbucket_s3cmd_call):
fdroidserver.deploy.update_awsbucket_s3cmd(
repo_section, index_only=True
repo_section, is_index_only=True
)
self.assertEqual(call_iteration, 2, 'expected 2 invocations of subprocess.call')
@ -720,10 +835,10 @@ class DeployTest(unittest.TestCase):
from libcloud.storage.base import Container
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -764,7 +879,10 @@ class DeployTest(unittest.TestCase):
container_name=fdroidserver.deploy.config["awsbucket"]
)
mock_container.list_objects.assert_called_once_with()
files_to_upload = ['fdroid/repo/Sym.apk', 'fdroid/repo/entry.jar']
files_to_upload = [
'fdroid/repo/Sym.apk',
f"fdroid/repo/{fdroidserver.deploy.INDEX_FILES[0]}",
]
calls = [
mock.call(
iterator=mock.ANY,
@ -781,10 +899,10 @@ class DeployTest(unittest.TestCase):
from libcloud.storage.base import Container
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.no_checksum = True
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.no_checksum = True
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -819,13 +937,15 @@ class DeployTest(unittest.TestCase):
mock_driver.get_container.return_value = mock_container
mock_driver.upload_object_via_stream.return_value = None
fdroidserver.deploy.update_awsbucket_libcloud(repo_section, index_only=True)
fdroidserver.deploy.update_awsbucket_libcloud(
repo_section, is_index_only=True
)
mock_driver.get_container.assert_called_once_with(
container_name=fdroidserver.deploy.config["awsbucket"]
)
mock_container.list_objects.assert_called_once_with()
files_to_upload = ['fdroid/repo/entry.jar']
files_to_upload = [f"fdroid/repo/{fdroidserver.deploy.INDEX_FILES[0]}"]
calls = [
mock.call(
iterator=mock.ANY,
@ -843,11 +963,11 @@ class DeployTest(unittest.TestCase):
def test_update_servergitmirrors(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.options.no_keep_git_mirror_archive = False
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.no_keep_git_mirror_archive = False
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -894,11 +1014,11 @@ class DeployTest(unittest.TestCase):
def test_update_servergitmirrors_in_index_only_mode(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.options.no_keep_git_mirror_archive = False
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.no_keep_git_mirror_archive = False
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -954,12 +1074,12 @@ class DeployTest(unittest.TestCase):
def test_upload_to_servergitmirror_in_index_only_mode(self):
# setup parameters for this test run
fdroidserver.deploy.options = mock.Mock()
fdroidserver.deploy.options.identity_file = None
fdroidserver.deploy.options.no_keep_git_mirror_archive = False
fdroidserver.deploy.options.verbose = False
fdroidserver.deploy.options.quiet = True
fdroidserver.deploy.options.identity_file = None
fdroidserver.common.options = mock.Mock()
fdroidserver.common.options.identity_file = None
fdroidserver.common.options.no_keep_git_mirror_archive = False
fdroidserver.common.options.verbose = False
fdroidserver.common.options.quiet = True
fdroidserver.common.options.identity_file = None
config = {}
fdroidserver.common.fill_config_defaults(config)
@ -1030,15 +1150,17 @@ class DeployTest(unittest.TestCase):
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
parser = optparse.OptionParser()
parser.add_option(
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
parse_args_for_test(parser, sys.argv)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(DeployTest))

View File

@ -56,9 +56,9 @@ def _build_yaml_representer(dumper, data):
parser = ArgumentParser()
fdroidserver.common.setup_global_opts(parser)
fdroidserver.metadata.add_metadata_arguments(parser)
options = parser.parse_args()
options = fdroidserver.common.parse_args(parser)
fdroidserver.metadata.warnings_action = options.W
fdroidserver.common.read_config(None)
fdroidserver.common.read_config()
if not os.path.isdir('metadata'):
print("This script must be run in an F-Droid data folder with a 'metadata' subdir!")

View File

@ -3,7 +3,6 @@
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
import inspect
import optparse
import os
import sys
import unittest
@ -57,16 +56,18 @@ class ExceptionTest(unittest.TestCase):
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
parser = optparse.OptionParser()
parser.add_option(
import argparse
from testcommon import parse_args_for_test
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.exception.options, args) = parser.parse_args(['--verbose'])
fdroidserver.common.options = fdroidserver.exception.options
parse_args_for_test(parser, sys.argv)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(ExceptionTest))

View File

@ -3,7 +3,6 @@
import inspect
import json
import logging
import optparse
import os
import shutil
import sys
@ -33,7 +32,7 @@ class GpgsignTest(unittest.TestCase):
self.repodir.mkdir()
gpgsign.config = None
config = common.read_config(common.options)
config = common.read_config()
config['verbose'] = True
config['gpghome'] = str((self.basedir / 'gnupghome').resolve())
config['gpgkey'] = '1DBA2E89'
@ -75,15 +74,17 @@ class GpgsignTest(unittest.TestCase):
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
parser = optparse.OptionParser()
parser.add_option(
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(common.options, args) = parser.parse_args(['--verbose'])
common.parse_args(parser)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(GpgsignTest))

View File

@ -759,6 +759,7 @@
- ' maven { url ''libs'' }'
- ' maven { url = uri("https://jitpack.io") }'
- ' maven { url = uri("https://maven.fabric.io/public") }'
- ' maven { url = URI("https://jitpack.io") }'
- ' maven { url MAVEN_REPO_CACHE }'
- ' maven { url(''http://releases.marmeladburk.fidesmo.com/'') }'
- ' maven {url "http://dl.bintray.com/tbruyelle/tbruyelle" }'
@ -778,3 +779,5 @@
- ' maven{url "https://plugins.gradle.org/m2/"}'
- ' maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")'
- ' maven(url = "https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")'
- ' maven ( url = "https://jitpack.io")'
- ' maven( url = "https://oss.sonatype.org/content/repositories/snapshots/" )'

View File

@ -4,7 +4,6 @@
import git
import logging
import optparse
import os
import shutil
import sys
@ -15,7 +14,6 @@ from unittest import mock
from pathlib import Path
import requests
from testcommon import TmpCwd, mkdtemp
localmodule = Path(__file__).resolve().parent.parent
print('localmodule: ' + str(localmodule))
@ -26,6 +24,7 @@ import fdroidserver.common
import fdroidserver.import_subcommand
import fdroidserver.metadata
from fdroidserver.exception import FDroidException
from testcommon import TmpCwd, mkdtemp, parse_args_for_test
class ImportTest(unittest.TestCase):
@ -34,8 +33,6 @@ class ImportTest(unittest.TestCase):
def setUp(self):
logging.basicConfig(level=logging.DEBUG)
self.basedir = localmodule / 'tests'
fdroidserver.import_subcommand.options = mock.Mock()
fdroidserver.import_subcommand.options.rev = None
os.chdir(self.basedir)
self._td = mkdtemp()
self.testdir = self._td.name
@ -146,7 +143,9 @@ class ImportTest(unittest.TestCase):
fdroidserver.import_subcommand.main()
@mock.patch('sys.argv', ['fdroid import', '-u', 'https://fake/git/url.git'])
@mock.patch('fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a: Path('td'))
@mock.patch(
'fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a, r: Path('td')
)
def test_main_local_git(self):
os.chdir(self.testdir)
git.Repo.init('td')
@ -161,15 +160,17 @@ class ImportTest(unittest.TestCase):
if __name__ == "__main__":
parser = optparse.OptionParser()
parser.add_option(
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
parse_args_for_test(parser, sys.argv)
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(ImportTest))

Some files were not shown because too many files have changed in this diff Show More