src/modules/client/publisher.py
changeset 2219 60ad60f7592c
parent 2215 b4355e8c5097
child 2263 42b8af0a12a1
--- 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)