--- a/src/modules/client/publisher.py Wed Feb 09 15:25:24 2011 -0800
+++ b/src/modules/client/publisher.py Wed Feb 09 18:43:21 2011 -0800
@@ -762,12 +762,19 @@
# from during __copy__.
_source_object_id = None
- def __init__(self, prefix, alias=None, client_uuid=None, disabled=False,
- meta_root=None, repositories=None, selected_repository=None,
- transport=None, sticky=True, ca_certs=EmptyI,
- intermediate_certs=EmptyI, props=None, revoked_ca_certs=EmptyI,
- approved_ca_certs=EmptyI):
- """Initialize a new publisher object."""
+ def __init__(self, prefix, alias=None, catalog=None, client_uuid=None,
+ disabled=False, meta_root=None, repositories=None,
+ selected_repository=None, transport=None, sticky=True,
+ ca_certs=EmptyI, intermediate_certs=EmptyI, props=None,
+ revoked_ca_certs=EmptyI, approved_ca_certs=EmptyI):
+ """Initialize a new publisher object.
+
+ 'catalog' is an optional Catalog object to use in place of
+ retrieving one from the publisher's meta_root. This option
+ may only be used when meta_root is not provided.
+ """
+
+ assert not (catalog and meta_root)
if client_uuid is None:
self.reset_client_uuid()
@@ -834,6 +841,9 @@
self.__verified_cas = False
self.__bad_ca_certs = set()
+ # Must be done last.
+ self.__catalog = catalog
+
def __cmp__(self, other):
if other is None:
return 1
@@ -1133,6 +1143,8 @@
selected repository, or None if available."""
if not self.meta_root:
+ if self.__catalog:
+ return self.__catalog
return None
if not self.__catalog:
@@ -1498,6 +1510,10 @@
# No refresh needed.
return False
+ if not self.selected_repository.origins:
+ # Nothing to do.
+ return False
+
# Create temporary directory for assembly of catalog pieces.
try:
tempdir = tempfile.mkdtemp(dir=self.catalog_root)