From fc923dc850d7007979915054e4c98decbeabbc08 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sat, 24 Jul 2010 20:19:39 +0200 Subject: [PATCH] [entropy.server] decouple list of repository mirrors from packages mirrors, keeping backward compatibility --- conf/server.conf.example | 3 + libraries/entropy/server/interfaces/main.py | 64 ++++++++++++++----- .../entropy/server/interfaces/mirrors.py | 40 +++++++----- .../entropy/services/system/executors.py | 16 ++++- 4 files changed, 91 insertions(+), 32 deletions(-) diff --git a/conf/server.conf.example b/conf/server.conf.example index da5fc23df..f6e9a7145 100644 --- a/conf/server.conf.example +++ b/conf/server.conf.example @@ -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

(for packages only) or +# (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 diff --git a/libraries/entropy/server/interfaces/main.py b/libraries/entropy/server/interfaces/main.py index b2b8030f7..0d5c2c070 100644 --- a/libraries/entropy/server/interfaces/main.py +++ b/libraries/entropy/server/interfaces/main.py @@ -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("

"): + do_pkg = True + uri = uri[3:] + continue + if uri.startswith(""): + 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, diff --git a/libraries/entropy/server/interfaces/mirrors.py b/libraries/entropy/server/interfaces/mirrors.py index 0a41fce77..6f7c6a714 100644 --- a/libraries/entropy/server/interfaces/mirrors.py +++ b/libraries/entropy/server/interfaces/mirrors.py @@ -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 diff --git a/libraries/entropy/services/system/executors.py b/libraries/entropy/services/system/executors.py index 5cef7d8fd..dac7cca41 100644 --- a/libraries/entropy/services/system/executors.py +++ b/libraries/entropy/services/system/executors.py @@ -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)