[entropy.server] decouple list of repository mirrors from packages mirrors, keeping backward compatibility

This commit is contained in:
Fabio Erculiani
2010-07-24 20:19:39 +02:00
parent 9273f21b0b
commit fc923dc850
4 changed files with 91 additions and 32 deletions

View File

@@ -34,6 +34,9 @@ default-repository|sabayonlinux.org
#
# PLEASE NOTE: the first repository listed is going to be considered the
# "base" repository
# PLEASE NOTE (2): you can specify server for repository or packages
# sync only, by prefixing URIs with <p> (for packages only) or <r>
# (for repository only)
#
# example:
# => repository|myserverrepo|My Server Repository|ftp://user:pass@111.111.111.111/ ssh://username@host:~user/path:port|hostname.tld#1026,1027

View File

@@ -465,14 +465,33 @@ class ServerSystemSettingsPlugin(SystemSettingsPlugin):
mydata = {}
mydata['repoid'] = repoid
mydata['description'] = repodesc
mydata['mirrors'] = []
mydata['pkg_mirrors'] = []
mydata['repo_mirrors'] = []
mydata['community'] = False
mydata['service_url'] = service_url
mydata['service_port'] = eapi3_port
mydata['ssl_service_port'] = eapi3_ssl_port
uris = repouris.split()
for uri in uris:
mydata['mirrors'].append(uri)
do_pkg = False
do_repo = False
while True:
if uri.startswith("<p>"):
do_pkg = True
uri = uri[3:]
continue
if uri.startswith("<r>"):
do_repo = True
uri = uri[3:]
continue
break
if not (do_repo and do_pkg):
do_repo = True
do_pkg = True
if do_repo:
mydata['repo_mirrors'].append(uri)
if do_pkg:
mydata['pkg_mirrors'].append(uri)
return repoid, mydata
@@ -630,8 +649,10 @@ class ServerSystemSettingsPlugin(SystemSettingsPlugin):
product = sys_set['repositories']['product'])
if repoid in data['repositories']:
# just update mirrors
data['repositories'][repoid]['mirrors'].extend(
repodata['mirrors'])
data['repositories'][repoid]['pkg_mirrors'].extend(
repodata['pkg_mirrors'])
data['repositories'][repoid]['repo_mirrors'].extend(
repodata['repo_mirrors'])
else:
data['repositories'][repoid] = repodata.copy()
@@ -702,7 +723,8 @@ class ServerSystemSettingsPlugin(SystemSettingsPlugin):
data['repositories'][etpConst['clientserverrepoid']] = {}
mydata = {}
mydata['description'] = "Community Repositories System Database"
mydata['mirrors'] = []
mydata['pkg_mirrors'] = []
mydata['repo_mirrors'] = []
mydata['community'] = False
data['repositories'][etpConst['clientserverrepoid']].update(mydata)
# installed packages repository is now the base repository
@@ -1238,11 +1260,17 @@ class ServerSettingsMixin:
return os.path.join(srv_set['repositories'][repo]['repo_basedir'],
pkg_rel_url)
def get_remote_mirrors(self, repo = None):
def get_remote_repository_mirrors(self, repo = None):
srv_set = self._settings[Server.SYSTEM_SETTINGS_PLG_ID]['server']
if repo is None:
repo = self.default_repository
return srv_set['repositories'][repo]['mirrors'][:]
return srv_set['repositories'][repo]['repo_mirrors'][:]
def get_remote_packages_mirrors(self, repo = None):
srv_set = self._settings[Server.SYSTEM_SETTINGS_PLG_ID]['server']
if repo is None:
repo = self.default_repository
return srv_set['repositories'][repo]['pkg_mirrors'][:]
def get_local_repository_revision(self, repo = None):
@@ -1680,7 +1708,7 @@ class ServerPackagesHandlingMixin:
if rc_question == _("No"):
continue
for uri in self.get_remote_mirrors(repo):
for uri in self.get_remote_packages_mirrors(repo):
crippled_uri = EntropyTransceiver.get_uri_name(uri)
@@ -2437,7 +2465,7 @@ class ServerPackagesHandlingMixin:
not_match = set()
broken_packages = {}
for uri in self.get_remote_mirrors(repo):
for uri in self.get_remote_packages_mirrors(repo):
crippled_uri = EntropyTransceiver.get_uri_name(uri)
self.output(
@@ -3000,7 +3028,7 @@ class ServerPackagesHandlingMixin:
level = "info",
header = " "
)
for uri in self.get_remote_mirrors(repo):
for uri in self.get_remote_packages_mirrors(repo):
if not_downloaded:
mytxt = blue("%s ...") % (
@@ -3713,7 +3741,7 @@ class ServerRepositoryMixin:
header = red(" * "),
back = True
)
for uri in self.get_remote_mirrors(repo):
for uri in self.get_remote_repository_mirrors(repo):
crippled_uri = EntropyTransceiver.get_uri_name(uri)
@@ -3761,11 +3789,14 @@ class ServerRepositoryMixin:
def _init_generic_memory_server_repository(self, repoid, description,
mirrors = None, community_repo = False, service_url = None,
set_as_default = False):
pkg_mirrors = None, repo_mirrors = None, community_repo = False,
service_url = None, set_as_default = False):
if pkg_mirrors is None:
pkg_mirrors = []
if repo_mirrors is None:
repo_mirrors = []
if mirrors is None:
mirrors = []
dbc = self._open_temp_repository(repoid, temp_file = ":memory:")
self._memory_db_srv_instances[repoid] = dbc
@@ -3775,7 +3806,8 @@ class ServerRepositoryMixin:
repodata = {
'repoid': repoid,
'description': description,
'mirrors': mirrors,
'pkg_mirrors': pkg_mirrors,
'repo_mirrors': repo_mirrors,
'community': community_repo,
'service_port': eapi3_port,
'ssl_service_port': eapi3_ssl_port,

View File

@@ -17,7 +17,7 @@ import time
from entropy.exceptions import OnlineMirrorError, ConnectionError, \
EntropyPackageException, TransceiverError
from entropy.output import red, darkgreen, bold, brown, blue, darkred, \
darkblue, purple
darkblue, purple, teal
from entropy.const import etpConst, const_setup_perms, const_setup_file
from entropy.cache import EntropyCacher
from entropy.i18n import _
@@ -38,7 +38,7 @@ class ServerNoticeBoardMixin:
if repo is None:
repo = self._entropy.default_repository
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
rss_path = self._entropy._get_local_database_notice_board_file(repo)
mytmpdir = tempfile.mkdtemp()
@@ -87,7 +87,7 @@ class ServerNoticeBoardMixin:
if repo is None:
repo = self._entropy.default_repository
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
rss_path = self._entropy._get_local_database_notice_board_file(repo)
rss_file = os.path.basename(rss_path)
@@ -142,7 +142,7 @@ class ServerNoticeBoardMixin:
if repo is None:
repo = self._entropy.default_repository
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
rss_path = self._entropy._get_local_database_notice_board_file(repo)
self._entropy.output(
@@ -259,11 +259,20 @@ class Server(ServerNoticeBoardMixin):
level = "info",
header = red(" @@ ")
)
mytxt = _("mirror")
for mirror in self._entropy.get_remote_mirrors(repo = repo):
for mirror in self._entropy.get_remote_repository_mirrors(repo = repo):
mytxt = _("repository mirror")
mirror = EntropyTransceiver.hide_sensible_data(mirror)
self._entropy.output(
blue("%s: %s") % (mytxt, darkgreen(mirror),),
"%s: %s" % (purple(mytxt), darkgreen(mirror),),
importance = 0,
level = "info",
header = brown(" # ")
)
for mirror in self._entropy.get_remote_packages_mirrors(repo = repo):
mytxt = _("packages mirror")
mirror = EntropyTransceiver.hide_sensible_data(mirror)
self._entropy.output(
blue("%s: %s") % (teal(mytxt), darkgreen(mirror),),
importance = 0,
level = "info",
header = brown(" # ")
@@ -272,7 +281,8 @@ class Server(ServerNoticeBoardMixin):
def _read_remote_file_in_branches(self, filename, repo = None,
excluded_branches = None):
"""
Reads a file remotely located in all the available branches.
Reads a file remotely located in all the available branches, in
repository directory.
@param filename: name of the file that should be located inside
repository database directory
@@ -291,7 +301,7 @@ class Server(ServerNoticeBoardMixin):
excluded_branches = []
branch_data = {}
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
for uri in mirrors:
crippled_uri = EntropyTransceiver.get_uri_name(uri)
@@ -359,7 +369,7 @@ class Server(ServerNoticeBoardMixin):
repo = self._entropy.default_repository
if not mirrors:
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
issues = False
for uri in mirrors:
@@ -450,7 +460,7 @@ class Server(ServerNoticeBoardMixin):
repo = self._entropy.default_repository
if not mirrors:
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
issues = False
for uri in mirrors:
@@ -883,7 +893,7 @@ class Server(ServerNoticeBoardMixin):
if repo is None:
repo = self._entropy.default_repository
if not mirrors:
mirrors = self._entropy.get_remote_mirrors(repo)
mirrors = self._entropy.get_remote_repository_mirrors(repo)
data = []
for uri in mirrors:
@@ -908,7 +918,7 @@ class Server(ServerNoticeBoardMixin):
down_lock_file = os.path.join(remote_dir,
etpConst['etpdatabasedownloadlockfile'])
for uri in self._entropy.get_remote_mirrors(repo):
for uri in self._entropy.get_remote_repository_mirrors(repo):
data = [uri, False, False]
# let raise exception if connection is impossible
@@ -2967,7 +2977,7 @@ class Server(ServerNoticeBoardMixin):
mirror_errors = False
mirrors_errors = False
for uri in self._entropy.get_remote_mirrors(repo):
for uri in self._entropy.get_remote_packages_mirrors(repo):
crippled_uri = EntropyTransceiver.get_uri_name(uri)
mirror_errors = False
@@ -3391,7 +3401,7 @@ class Server(ServerNoticeBoardMixin):
obj.append(base_pkg)
obj.append(base_pkg+etpConst['packagesmd5fileext'])
for uri in self._entropy.get_remote_mirrors(repo):
for uri in self._entropy.get_remote_packages_mirrors(repo):
##
# remove remotely

View File

@@ -801,7 +801,7 @@ class Base:
repo_data[repoid] = {}
for uri in Entropy.get_remote_mirrors(repoid):
for uri in Entropy.get_remote_packages_mirrors(repoid):
crippled_uri = EntropyTransceiver.get_uri_name(uri)
@@ -834,6 +834,20 @@ class Base:
'copy': copy,
}
repo_data[repoid][crippled_uri]['database'] = {
'current_revision': 0,
'remote_revision': 0,
'download_latest': (),
'upload_queue': []
}
for uri in Entropy.get_remote_repository_mirrors(repoid):
crippled_uri = EntropyTransceiver.get_uri_name(uri)
if crippled_uri not in repo_data[repoid]:
repo_data[repoid][crippled_uri] = {}
repo_data[repoid][crippled_uri]['packages'] = {}
# now the db
current_revision = Entropy.get_local_repository_revision(
repoid)