mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-09 00:40:11 +01:00
establish config/mirrors.yml as a way to set up mirrors
The mirrors: entry in config.yml is great for quick access and shorter mirror lists. Now that we are adding a lot more metadata to the mirrors, including potentially the full text of the privacy policy, having this in its own file should make these cases easier to manage.
This commit is contained in:
parent
7a0dad6dfc
commit
6d541e3ef6
@ -228,6 +228,9 @@
|
|||||||
# countryCode: BA
|
# countryCode: BA
|
||||||
# - url: http://foobarfoobarfoobar.onion/fdroid
|
# - url: http://foobarfoobarfoobar.onion/fdroid
|
||||||
#
|
#
|
||||||
|
# The list of mirrors can also be maintained in config/mirrors.yml, a
|
||||||
|
# standalone YAML file in the optional configuration directory. In
|
||||||
|
# that case, mirrors: should be removed from this file (config.yml).
|
||||||
|
|
||||||
|
|
||||||
# optionally specify which identity file to use when using rsync or git over SSH
|
# optionally specify which identity file to use when using rsync or git over SSH
|
||||||
|
@ -117,11 +117,13 @@ GITLAB_COM_PAGES_MAX_SIZE = 1000000000
|
|||||||
ANTIFEATURES_CONFIG_NAME = 'antiFeatures'
|
ANTIFEATURES_CONFIG_NAME = 'antiFeatures'
|
||||||
CATEGORIES_CONFIG_NAME = 'categories'
|
CATEGORIES_CONFIG_NAME = 'categories'
|
||||||
CONFIG_CONFIG_NAME = 'config'
|
CONFIG_CONFIG_NAME = 'config'
|
||||||
|
MIRRORS_CONFIG_NAME = 'mirrors'
|
||||||
RELEASECHANNELS_CONFIG_NAME = "releaseChannels"
|
RELEASECHANNELS_CONFIG_NAME = "releaseChannels"
|
||||||
CONFIG_NAMES = (
|
CONFIG_NAMES = (
|
||||||
ANTIFEATURES_CONFIG_NAME,
|
ANTIFEATURES_CONFIG_NAME,
|
||||||
CATEGORIES_CONFIG_NAME,
|
CATEGORIES_CONFIG_NAME,
|
||||||
CONFIG_CONFIG_NAME,
|
CONFIG_CONFIG_NAME,
|
||||||
|
MIRRORS_CONFIG_NAME,
|
||||||
RELEASECHANNELS_CONFIG_NAME,
|
RELEASECHANNELS_CONFIG_NAME,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import re
|
|||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
import yaml
|
||||||
import zipfile
|
import zipfile
|
||||||
import calendar
|
import calendar
|
||||||
import qrcode
|
import qrcode
|
||||||
@ -42,7 +43,7 @@ from . import common
|
|||||||
from . import metadata
|
from . import metadata
|
||||||
from . import net
|
from . import net
|
||||||
from . import signindex
|
from . import signindex
|
||||||
from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME, CONFIG_CONFIG_NAME, RELEASECHANNELS_CONFIG_NAME, DEFAULT_LOCALE, FDroidPopen, FDroidPopenBytes, load_stats_fdroid_signing_key_fingerprints
|
from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME, CONFIG_CONFIG_NAME, MIRRORS_CONFIG_NAME, RELEASECHANNELS_CONFIG_NAME, DEFAULT_LOCALE, FDroidPopen, FDroidPopenBytes, load_stats_fdroid_signing_key_fingerprints
|
||||||
from fdroidserver.exception import FDroidException, VerificationException
|
from fdroidserver.exception import FDroidException, VerificationException
|
||||||
|
|
||||||
|
|
||||||
@ -1399,6 +1400,17 @@ def add_mirrors_to_repodict(repo_section, repodict):
|
|||||||
if type(mirrors_config) not in (list, tuple):
|
if type(mirrors_config) not in (list, tuple):
|
||||||
mirrors_config = [mirrors_config]
|
mirrors_config = [mirrors_config]
|
||||||
|
|
||||||
|
mirrors_yml = Path(f'config/{MIRRORS_CONFIG_NAME}.yml')
|
||||||
|
if mirrors_yml.exists():
|
||||||
|
if mirrors_config:
|
||||||
|
raise FDroidException(
|
||||||
|
_('mirrors set twice, in config.yml and {path}!').format(
|
||||||
|
path=mirrors_yml
|
||||||
|
)
|
||||||
|
)
|
||||||
|
with mirrors_yml.open() as fp:
|
||||||
|
mirrors_config = yaml.safe_load(fp)
|
||||||
|
|
||||||
mirrorcheckfailed = False
|
mirrorcheckfailed = False
|
||||||
mirrors = []
|
mirrors = []
|
||||||
urls = set()
|
urls = set()
|
||||||
|
@ -791,6 +791,43 @@ class IndexTest(unittest.TestCase):
|
|||||||
with self.assertRaises(fdroidserver.exception.FDroidException):
|
with self.assertRaises(fdroidserver.exception.FDroidException):
|
||||||
index.add_mirrors_to_repodict('repo', repodict)
|
index.add_mirrors_to_repodict('repo', repodict)
|
||||||
|
|
||||||
|
def test_load_mirrors_config_from_file(self):
|
||||||
|
# empty the dict for *.config, see setUp()
|
||||||
|
for k in sorted(common.config.keys()):
|
||||||
|
del common.config[k]
|
||||||
|
|
||||||
|
os.chdir(self.testdir)
|
||||||
|
os.mkdir('config')
|
||||||
|
primary = 'https://primary.com/fdroid/repo'
|
||||||
|
mirror = 'https://mirror.com/fdroid'
|
||||||
|
with open('config/mirrors.yml', 'w') as fp:
|
||||||
|
yaml.dump([{'url': mirror}], fp)
|
||||||
|
repodict = {'address': primary}
|
||||||
|
index.add_mirrors_to_repodict('repo', repodict)
|
||||||
|
self.assertEqual(
|
||||||
|
repodict['mirrors'],
|
||||||
|
[
|
||||||
|
{'isPrimary': True, 'url': primary},
|
||||||
|
{'url': mirror + '/repo'},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_error_when_load_mirrors_from_config_and_file(self):
|
||||||
|
# empty the dict for *.config, see setUp()
|
||||||
|
for k in sorted(common.config.keys()):
|
||||||
|
del common.config[k]
|
||||||
|
|
||||||
|
os.chdir(self.testdir)
|
||||||
|
os.mkdir('config')
|
||||||
|
with open('config/mirrors.yml', 'w') as fp:
|
||||||
|
yaml.dump([{'url': 'https://foo.com'}], fp)
|
||||||
|
repodict = {
|
||||||
|
'address': 'https://foo.com',
|
||||||
|
'mirrors': {'url': 'http://two/fdroid/repo'},
|
||||||
|
}
|
||||||
|
with self.assertRaises(fdroidserver.exception.FDroidException):
|
||||||
|
index.add_mirrors_to_repodict('repo', repodict)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
os.chdir(os.path.dirname(__file__))
|
os.chdir(os.path.dirname(__file__))
|
||||||
|
Loading…
Reference in New Issue
Block a user