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)