← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~wgrant/launchpad/no-lucilleconfig-distroseries into lp:launchpad

 

William Grant has proposed merging lp:~wgrant/launchpad/no-lucilleconfig-distroseries into lp:launchpad.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)


A continuation of my anti-lucilleconfig tirade from lp:~wgrant/launchpad/no-lucilleconfig-stayofexecution, this branch obsoletes DistroSeries.lucilleconfig entirely.

Formerly used also to determine publishing components, DistroSeries.lucilleconfig now only determines whether a series will be published at all. But this restriction was put in place only to stop the publisher crashing when it couldn't find the series' lucilleconfig, so it is obsolete.

Most of lp.archivepublisher.config.Config has been removed, and the publisher has been adjusted to iterate over the Distribution's serieses, not the Config's. The one remaining use of lp.archivepublisher.tests.util is gone, so I've removed the module.


-- 
https://code.launchpad.net/~wgrant/launchpad/no-lucilleconfig-distroseries/+merge/44178
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~wgrant/launchpad/no-lucilleconfig-distroseries into lp:launchpad.
=== modified file 'lib/lp/archivepublisher/config.py'
--- lib/lp/archivepublisher/config.py	2010-10-17 12:26:56 +0000
+++ lib/lp/archivepublisher/config.py	2010-12-19 23:04:18 +0000
@@ -6,9 +6,7 @@
 # to managing the archive publisher's configuration as stored in the
 # distribution and distroseries tables
 
-from ConfigParser import ConfigParser
 import os
-from StringIO import StringIO
 
 from canonical.config import config
 from lp.soyuz.enums import ArchivePurpose
@@ -24,11 +22,11 @@
     modified according local context, it basically fixes the archive
     paths to cope with non-primary and PPA archives publication workflow.
     """
-    pubconf = Config(archive.distribution)
+    pubconf = Config()
     ppa_config = config.personalpackagearchive
 
     pubconf.temproot = os.path.join(
-        config.archivepublisher.root, '%s-temp' % pubconf.distroName)
+        config.archivepublisher.root, '%s-temp' % archive.distribution.name)
 
     if archive.is_ppa:
         if archive.private:
@@ -95,49 +93,8 @@
     how the database stores configuration then the publisher will not
     need to be re-coded to cope"""
 
-    def __init__(self, distribution):
-        """Initialise the configuration"""
-        self.distroName = distribution.name.encode('utf-8')
-        self._distroseries = {}
-        if not distribution.lucilleconfig:
-            raise LucilleConfigError(
-                'No Lucille config section for %s' % distribution.name)
-
-        for dr in distribution:
-            distroseries_name = dr.name.encode('utf-8')
-            config_segment = {}
-
-            if dr.lucilleconfig:
-                strio = StringIO(dr.lucilleconfig.encode('utf-8'))
-                config_segment["config"] = ConfigParser()
-                config_segment["config"].readfp(strio)
-                strio.close()
-
-                self._distroseries[distroseries_name] = config_segment
-
-        strio = StringIO(distribution.lucilleconfig.encode('utf-8'))
-        self._distroconfig = ConfigParser()
-        self._distroconfig.readfp(strio)
-        strio.close()
-
-    def distroSeriesNames(self):
-        # Because dicts iterate for keys only; this works to get dr names
-        return self._distroseries.keys()
-
-    def series(self, dr):
-        try:
-            return self._distroseries[dr]
-        except KeyError:
-            raise LucilleConfigError(
-                'No Lucille config section for %s in %s' %
-                    (dr, self.distroName))
-
     def setupArchiveDirs(self):
-        """Create missing required directories in archive.
-
-        For PPA publication path are overriden after instantiation
-        and empty locations should not be considered for creation.
-        """
+        """Create missing required directories in archive."""
         required_directories = [
             self.distroroot,
             self.poolroot,

=== modified file 'lib/lp/archivepublisher/ftparchive.py'
--- lib/lp/archivepublisher/ftparchive.py	2010-11-09 08:43:34 +0000
+++ lib/lp/archivepublisher/ftparchive.py	2010-12-19 23:04:18 +0000
@@ -146,14 +146,6 @@
         self._config = config
         self._diskpool = diskpool
         self.distro = distro
-        self.distroseries = []
-        for distroseries in self.distro.series:
-            if not distroseries.name in self._config.distroSeriesNames():
-                self.log.warning("Distroseries %s in %s doesn't have "
-                    "a lucille configuration.", distroseries.name,
-                    self.distro.name)
-            else:
-                self.distroseries.append(distroseries)
         self.publisher = publisher
 
         # We need somewhere to note down where the debian-installer
@@ -195,7 +187,7 @@
         We do this to have Packages or Sources for them even if we lack
         anything in them currently.
         """
-        for distroseries in self.distroseries:
+        for distroseries in self.distro.series:
             components = [
                 comp.name for comp in
                 self.publisher.archive.getComponentsForSeries(distroseries)]
@@ -358,7 +350,7 @@
 
     def generateOverrides(self, fullpublish=False):
         """Collect packages that need overrides, and generate them."""
-        for distroseries in self.distroseries:
+        for distroseries in self.distro.series:
             for pocket in PackagePublishingPocket.items:
                 if not fullpublish:
                     if not self.publisher.isDirty(distroseries, pocket):
@@ -624,7 +616,7 @@
 
     def generateFileLists(self, fullpublish=False):
         """Collect currently published FilePublishings and write filelists."""
-        for distroseries in self.distroseries:
+        for distroseries in self.distro.series:
             for pocket in PackagePublishingPocket.items:
                 if not fullpublish:
                     if not self.publisher.isDirty(distroseries, pocket):
@@ -750,14 +742,13 @@
 
         # confixtext now contains a basic header. Add a dists entry for
         # each of the distroseries we've touched
-        for distroseries_name in self._config.distroSeriesNames():
-            distroseries = self.distro[distroseries_name]
+        for distroseries in self.distro.series:
             for pocket in PackagePublishingPocket.items:
 
                 if not fullpublish:
                     if not self.publisher.isDirty(distroseries, pocket):
                         self.log.debug("Skipping a-f stanza for %s/%s" %
-                                           (distroseries_name, pocket.name))
+                                           (distroseries.name, pocket.name))
                         continue
                     self.publisher.checkDirtySuiteBeforePublishing(
                         distroseries, pocket)

=== modified file 'lib/lp/archivepublisher/tests/apt-data/apt.conf'
--- lib/lp/archivepublisher/tests/apt-data/apt.conf	2010-10-14 23:14:00 +0000
+++ lib/lp/archivepublisher/tests/apt-data/apt.conf	2010-12-19 23:04:18 +0000
@@ -22,81 +22,6 @@
 };
 
 
-tree "dists/breezy-autotest"
-{
-    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest_$(SECTION)_binary-$(ARCH)";
-    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest_$(SECTION)_source";
-    Sections "main restricted universe multiverse";
-    Architectures "source";
-    BinOverride "override.breezy-autotest.$(SECTION)";
-    SrcOverride "override.breezy-autotest.$(SECTION).src";
-    ExtraOverride "override.breezy-autotest.extra.$(SECTION)";
-    Packages::Extensions ".deb";
-    BinCacheDB "packages-$(ARCH).db";
-    Contents " ";
-}
-
-
-tree "dists/breezy-autotest-security"
-{
-    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-security_$(SECTION)_binary-$(ARCH)";
-    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-security_$(SECTION)_source";
-    Sections "main restricted universe multiverse";
-    Architectures "source";
-    BinOverride "override.breezy-autotest-security.$(SECTION)";
-    SrcOverride "override.breezy-autotest-security.$(SECTION).src";
-    ExtraOverride "override.breezy-autotest-security.extra.$(SECTION)";
-    Packages::Extensions ".deb";
-    BinCacheDB "packages-$(ARCH).db";
-    Contents " ";
-}
-
-
-tree "dists/breezy-autotest-updates"
-{
-    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-updates_$(SECTION)_binary-$(ARCH)";
-    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-updates_$(SECTION)_source";
-    Sections "main restricted universe multiverse";
-    Architectures "source";
-    BinOverride "override.breezy-autotest-updates.$(SECTION)";
-    SrcOverride "override.breezy-autotest-updates.$(SECTION).src";
-    ExtraOverride "override.breezy-autotest-updates.extra.$(SECTION)";
-    Packages::Extensions ".deb";
-    BinCacheDB "packages-$(ARCH).db";
-    Contents " ";
-}
-
-
-tree "dists/breezy-autotest-proposed"
-{
-    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-proposed_$(SECTION)_binary-$(ARCH)";
-    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-proposed_$(SECTION)_source";
-    Sections "main restricted universe multiverse";
-    Architectures "source";
-    BinOverride "override.breezy-autotest-proposed.$(SECTION)";
-    SrcOverride "override.breezy-autotest-proposed.$(SECTION).src";
-    ExtraOverride "override.breezy-autotest-proposed.extra.$(SECTION)";
-    Packages::Extensions ".deb";
-    BinCacheDB "packages-$(ARCH).db";
-    Contents " ";
-}
-
-
-tree "dists/breezy-autotest-backports"
-{
-    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-backports_$(SECTION)_binary-$(ARCH)";
-    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-backports_$(SECTION)_source";
-    Sections "main restricted universe multiverse";
-    Architectures "source";
-    BinOverride "override.breezy-autotest-backports.$(SECTION)";
-    SrcOverride "override.breezy-autotest-backports.$(SECTION).src";
-    ExtraOverride "override.breezy-autotest-backports.extra.$(SECTION)";
-    Packages::Extensions ".deb";
-    BinCacheDB "packages-$(ARCH).db";
-    Contents " ";
-}
-
-
 tree "dists/hoary-test"
 {
     FileList "/var/tmp/archive/ubuntutest-overrides/hoary-test_$(SECTION)_binary-$(ARCH)";
@@ -231,3 +156,78 @@
     Contents " ";
 }
 
+
+tree "dists/breezy-autotest"
+{
+    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest_$(SECTION)_binary-$(ARCH)";
+    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest_$(SECTION)_source";
+    Sections "main restricted universe multiverse";
+    Architectures "source";
+    BinOverride "override.breezy-autotest.$(SECTION)";
+    SrcOverride "override.breezy-autotest.$(SECTION).src";
+    ExtraOverride "override.breezy-autotest.extra.$(SECTION)";
+    Packages::Extensions ".deb";
+    BinCacheDB "packages-$(ARCH).db";
+    Contents " ";
+}
+
+
+tree "dists/breezy-autotest-security"
+{
+    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-security_$(SECTION)_binary-$(ARCH)";
+    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-security_$(SECTION)_source";
+    Sections "main restricted universe multiverse";
+    Architectures "source";
+    BinOverride "override.breezy-autotest-security.$(SECTION)";
+    SrcOverride "override.breezy-autotest-security.$(SECTION).src";
+    ExtraOverride "override.breezy-autotest-security.extra.$(SECTION)";
+    Packages::Extensions ".deb";
+    BinCacheDB "packages-$(ARCH).db";
+    Contents " ";
+}
+
+
+tree "dists/breezy-autotest-updates"
+{
+    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-updates_$(SECTION)_binary-$(ARCH)";
+    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-updates_$(SECTION)_source";
+    Sections "main restricted universe multiverse";
+    Architectures "source";
+    BinOverride "override.breezy-autotest-updates.$(SECTION)";
+    SrcOverride "override.breezy-autotest-updates.$(SECTION).src";
+    ExtraOverride "override.breezy-autotest-updates.extra.$(SECTION)";
+    Packages::Extensions ".deb";
+    BinCacheDB "packages-$(ARCH).db";
+    Contents " ";
+}
+
+
+tree "dists/breezy-autotest-proposed"
+{
+    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-proposed_$(SECTION)_binary-$(ARCH)";
+    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-proposed_$(SECTION)_source";
+    Sections "main restricted universe multiverse";
+    Architectures "source";
+    BinOverride "override.breezy-autotest-proposed.$(SECTION)";
+    SrcOverride "override.breezy-autotest-proposed.$(SECTION).src";
+    ExtraOverride "override.breezy-autotest-proposed.extra.$(SECTION)";
+    Packages::Extensions ".deb";
+    BinCacheDB "packages-$(ARCH).db";
+    Contents " ";
+}
+
+
+tree "dists/breezy-autotest-backports"
+{
+    FileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-backports_$(SECTION)_binary-$(ARCH)";
+    SourceFileList "/var/tmp/archive/ubuntutest-overrides/breezy-autotest-backports_$(SECTION)_source";
+    Sections "main restricted universe multiverse";
+    Architectures "source";
+    BinOverride "override.breezy-autotest-backports.$(SECTION)";
+    SrcOverride "override.breezy-autotest-backports.$(SECTION).src";
+    ExtraOverride "override.breezy-autotest-backports.extra.$(SECTION)";
+    Packages::Extensions ".deb";
+    BinCacheDB "packages-$(ARCH).db";
+    Contents " ";
+}
+

=== modified file 'lib/lp/archivepublisher/tests/publisher-config.txt'
--- lib/lp/archivepublisher/tests/publisher-config.txt	2010-10-17 12:26:56 +0000
+++ lib/lp/archivepublisher/tests/publisher-config.txt	2010-12-19 23:04:18 +0000
@@ -20,8 +20,6 @@
     >>> def dump_config(config):
     ...     for attr_name in config_attributes:
     ...         print '%s: %s' % (attr_name, getattr(config, attr_name))
-    ...     for distroseries_name in sorted(config.distroSeriesNames()):
-    ...         print '%s' % distroseries_name
 
 
 == Primary ==
@@ -41,8 +39,6 @@
     cacheroot:       /var/tmp/archive/ubuntutest-cache
     miscroot:        /var/tmp/archive/ubuntutest-misc
     temproot:        /var/tmp/archive/ubuntutest-temp
-    breezy-autotest
-    hoary-test
 
 
 == PPAs ==
@@ -85,8 +81,6 @@
     cacheroot:       None
     miscroot:        None
     temproot:        /var/tmp/archive/ubuntutest-temp
-    breezy-autotest
-    hoary-test
 
 There is a separate location for private PPAs that is used if the
 archive is marked as private:
@@ -115,8 +109,6 @@
     cacheroot:       None
     miscroot:        None
     temproot:        /var/tmp/archive/ubuntutest-temp
-    breezy-autotest
-    hoary-test
 
 
 == Partner ==
@@ -140,8 +132,6 @@
     cacheroot:       None
     miscroot:        None
     temproot:        /var/tmp/archive/ubuntutest-temp
-    breezy-autotest
-    hoary-test
 
 
 == DEBUG ==
@@ -166,8 +156,6 @@
     cacheroot:       None
     miscroot:        None
     temproot:        /var/tmp/archive/ubuntutest-temp
-    breezy-autotest
-    hoary-test
 
 
 == COPY ==
@@ -190,5 +178,3 @@
     cacheroot:       /var/tmp/archive/ubuntutest-rebuildtest99/ubuntutest-cache
     miscroot:        /var/tmp/archive/ubuntutest-rebuildtest99/ubuntutest-misc
     temproot:        /var/tmp/archive/ubuntutest-rebuildtest99/ubuntutest-temp
-    breezy-autotest
-    hoary-test

=== removed file 'lib/lp/archivepublisher/tests/test_config.py'
--- lib/lp/archivepublisher/tests/test_config.py	2010-12-19 03:48:38 +0000
+++ lib/lp/archivepublisher/tests/test_config.py	1970-01-01 00:00:00 +0000
@@ -1,52 +0,0 @@
-# Copyright 2009-2010 Canonical Ltd.  This software is licensed under the
-# GNU Affero General Public License version 3 (see the file LICENSE).
-
-"""Tests for Config.py"""
-
-__metaclass__ = type
-
-from zope.component import getUtility
-
-from canonical.config import config
-from canonical.testing.layers import LaunchpadZopelessLayer
-from lp.archivepublisher.config import (
-    Config,
-    LucilleConfigError,
-    )
-from lp.registry.interfaces.distribution import IDistributionSet
-from lp.testing import TestCaseWithFactory
-
-
-class TestConfig(TestCaseWithFactory):
-    layer = LaunchpadZopelessLayer
-
-    def setUp(self):
-        super(TestConfig, self).setUp()
-        self.layer.switchDbUser(config.archivepublisher.dbuser)
-        self.ubuntutest = getUtility(IDistributionSet)['ubuntutest']
-
-    def testMissingDistroSeries(self):
-        distroseries = self.factory.makeDistroSeries(
-            distribution=self.ubuntutest, name="somename")
-        d = Config(self.ubuntutest)
-        dsns = d.distroSeriesNames()
-        self.assertEquals(len(dsns), 2)
-        self.assertEquals(dsns[0], "breezy-autotest")
-        self.assertEquals(dsns[1], "hoary-test")
-
-    def testInstantiate(self):
-        """Config should instantiate"""
-        d = Config(self.ubuntutest)
-
-    def testDistroName(self):
-        """Config should be able to return the distroName"""
-        d = Config(self.ubuntutest)
-        self.assertEqual(d.distroName, "ubuntutest")
-
-    def testDistroSeriesNames(self):
-        """Config should return two distroseries names"""
-        d = Config(self.ubuntutest)
-        dsns = d.distroSeriesNames()
-        self.assertEquals(len(dsns), 2)
-        self.assertEquals(dsns[0], "breezy-autotest")
-        self.assertEquals(dsns[1], "hoary-test")

=== modified file 'lib/lp/archivepublisher/tests/test_ftparchive.py'
--- lib/lp/archivepublisher/tests/test_ftparchive.py	2010-12-18 00:14:32 +0000
+++ lib/lp/archivepublisher/tests/test_ftparchive.py	2010-12-19 23:04:18 +0000
@@ -125,19 +125,6 @@
             self._publisher)
         return fa
 
-    def test_NoLucilleConfig(self):
-        # Distroseries without a lucille configuration get ignored
-        # and trigger a warning, they don't break the publisher
-        logger = BufferLogger()
-        publisher = Publisher(
-            logger, self._config, self._dp, self._archive)
-        self.factory.makeDistroSeries(self._distribution, name="somename")
-        fa = FTPArchiveHandler(logger, self._config, self._dp,
-                               self._distribution, publisher)
-        fa.createEmptyPocketRequests(fullpublish=True)
-        self.assertEquals("WARNING: Distroseries somename in ubuntutest doesn't "
-            "have a lucille configuration.\n", logger.buffer.getvalue())
-
     def test_getSourcesForOverrides(self):
         # getSourcesForOverrides returns a list of tuples containing:
         # (sourcename, suite, component, section)

=== modified file 'lib/lp/archivepublisher/tests/test_pool.py'
--- lib/lp/archivepublisher/tests/test_pool.py	2010-08-20 20:31:18 +0000
+++ lib/lp/archivepublisher/tests/test_pool.py	2010-12-19 23:04:18 +0000
@@ -11,11 +11,11 @@
 from tempfile import mkdtemp
 import unittest
 
+from canonical.launchpad.scripts.logger import QuietFakeLogger
 from lp.archivepublisher.diskpool import (
     DiskPool,
     poolify,
     )
-from lp.archivepublisher.tests.util import FakeLogger
 
 
 class MockFile:
@@ -82,7 +82,8 @@
     def setUp(self):
         self.pool_path = mkdtemp()
         self.temp_path = mkdtemp()
-        self.pool = DiskPool(self.pool_path, self.temp_path, FakeLogger())
+        self.pool = DiskPool(
+            self.pool_path, self.temp_path, QuietFakeLogger())
 
     def tearDown(self):
         shutil.rmtree(self.pool_path)

=== removed file 'lib/lp/archivepublisher/tests/util.py'
--- lib/lp/archivepublisher/tests/util.py	2010-10-21 04:19:36 +0000
+++ lib/lp/archivepublisher/tests/util.py	1970-01-01 00:00:00 +0000
@@ -1,261 +0,0 @@
-# Copyright 2009 Canonical Ltd.  This software is licensed under the
-# GNU Affero General Public License version 3 (see the file LICENSE).
-
-"""Utilities to aid testing archivepublisher."""
-
-__metaclass__ = type
-
-# Utility functions/classes for testing the archive publisher.
-
-from lp.archivepublisher.tests import datadir
-from lp.registry.interfaces.pocket import PackagePublishingPocket
-from lp.registry.interfaces.series import SeriesStatus
-
-
-__all__ = ['FakeLogger']
-
-
-class FakeLogger:
-
-    def debug(self, *args, **kwargs):
-        pass
-
-    def error(self, *args, **kwargs):
-        pass
-
-
-class FakeDistribution:
-
-    def __init__(self, name, conf):
-        self.name = name.decode('utf-8')
-        self.lucilleconfig = conf.decode('utf-8')
-        self.series = []
-
-    def registerSeries(self, series):
-        self.series.append(series)
-
-    def __getitem__(self, name):
-        for series in self.series:
-            if series.name == name:
-                return series
-        return None
-
-
-class FakeDistroSeries:
-
-    def __init__(self, name, conf, distro):
-        self.name = name.decode('utf-8')
-        self.lucilleconfig = conf.decode('utf-8')
-        self.distribution = distro
-        self.architectures = [FakeDistroArchSeries(self, "i386"),
-                              FakeDistroArchSeries(self, "powerpc")]
-        self.status = SeriesStatus.DEVELOPMENT
-        self.distribution.registerSeries(self)
-
-
-class FakeDistroArchSeries:
-
-    def __init__(self, series, archtag):
-        self.distroseries = series
-        self.architecturetag = archtag
-
-
-class FakeSource:
-
-    def __init__(self, version, status, name=""):
-        self.version = version.decode('utf-8')
-        self.status = status
-        self.datepublished = None
-        self.sourcepackagename = name.decode('utf-8')
-
-    def _deepCopy(self):
-        return FakeSource(
-            self.version.encode('utf-8'),
-            self.status,
-            self.sourcepackagename.encode('utf-8'))
-
-
-class FakeBinary:
-
-    def __init__(self, version, status, name=""):
-        self.version = version.decode('utf-8')
-        self.status = status
-        self.datepublished = None
-        self.packagename = name.decode('utf-8')
-
-    def _deepCopy(self):
-        return FakeBinary(
-            self.version.encode('utf-8'),
-            self.status,
-            self.packagename.encode('utf-8'))
-
-
-class FakeSourcePublishing:
-    """Mocks a SourcePackagePublishingHistory object."""
-    id = 1
-
-    def __init__(self, source, component, alias, section, ds):
-
-        class Dummy:
-            id = 1
-
-        self.sourcepackagerelease = Dummy()
-        self.sourcepackagerelease.name = source
-        self.component = Dummy()
-        self.component.name = component
-        self.libraryfilealias = alias
-        self.section = Dummy()
-        self.section.name = section
-        self.distroseries = Dummy()
-        self.distroseries.name = ds
-        self.pocket = PackagePublishingPocket.RELEASE
-
-    def _deepCopy(self):
-        return FakeSourcePublishing(
-            self.sourcepackage.name,
-            self.component.name,
-            self.libraryfilealias,
-            self.section.name,
-            self.distroseries.name,
-            )
-
-
-class FakeBinaryPublishing:
-    """Mocks a BinaryPackagePublishingHistory object."""
-    id = 1
-
-    def __init__(self, binary, source, component, alias,
-                 section, ds, prio, archtag):
-
-        class Dummy:
-            id = 1
-
-        self.binarypackagerelease = Dummy()
-        self.binarypackagerelease.name = source
-        self.sourcepackagerelease = Dummy()
-        self.sourcepackagerelease.name = source
-        self.binarypackage = Dummy()
-        self.binarypackage.name = source
-        self.component = Dummy()
-        self.component.name = component
-        self.section = Dummy()
-        self.section.name = section
-        self.distroarchseries = Dummy()
-        self.distroarchseries.distroseries = Dummy()
-        self.distroarchseries.distroseries.name = ds
-        self.libraryfilealias = alias
-        self.priority = prio
-        self.architecturetag = archtag
-        self.pocket = PackagePublishingPocket.RELEASE
-
-    def _deepCopy(self):
-        return FakeBinaryPublishing(
-            self.binarypackagerelease.name,
-            self.sourcepackagerelease.name,
-            self.component.name,
-            self.libraryfilealias,
-            self.section.name,
-            self.distroseries.name,
-            self.priority,
-            self.architecturetag,
-            )
-
-
-class FakeSourceFilePublishing:
-    """Mocks a SourcePackageFilePublishing object."""
-
-    def __init__(self, source, component, leafname, alias, section, ds):
-        self.sourcepackagename = source
-        self.componentname = component
-        self.libraryfilealiasfilename = leafname
-        self.libraryfilealias = alias
-        self.sectionname = section
-        self.distroseriesname = ds
-        self.pocket = PackagePublishingPocket.RELEASE
-
-    def _deepCopy(self):
-        return FakeSourceFilePublishing(
-            self.sourcepackagename,
-            self.componentname,
-            self.libraryfilealiasfilename,
-            self.libraryfilealias,
-            self.sectionname,
-            self.distroseriesname,
-            )
-
-
-class FakeBinaryFilePublishing:
-    """Mocks a BinaryPackageFilePublishing object."""
-
-    def __init__(self, source, component, leafname, alias, section,
-                 ds, archtag):
-        self.sourcepackagename = source
-        self.componentname = component
-        self.libraryfilealiasfilename = leafname
-        self.libraryfilealias = alias
-        self.sectionname = section
-        self.distroseriesname = ds
-        self.architecturetag = archtag
-        self.pocket = PackagePublishingPocket.RELEASE
-
-    def _deepCopy(self):
-        return FakeBinaryFilePublishing(
-            self.sourcepackagename,
-            self.componentname,
-            self.libraryfilealiasfilename,
-            self.libraryfilealias,
-            self.sectionname,
-            self.distroseriesname,
-            self.architecturetag,
-            )
-
-sentinel = object()
-
-
-def _deepCopy(thing):
-    if type(thing) == dict:
-        ret = {}
-        for key in thing:
-            ret[key] = _deepCopy(thing[key])
-        return ret
-    if type(thing) == list:
-        ret = []
-        for val in thing:
-            ret.append(_deepCopy(val))
-        return ret
-    if type(thing) == tuple:
-        ret = []
-        for val in thing:
-            ret.append(_deepCopy(val))
-        return tuple(ret)
-    if getattr(thing, "_deepCopy", sentinel) != sentinel:
-        return thing._deepCopy()
-    return thing # Assume we can't copy it deeply
-
-
-# NOTE: If you alter the configs here remember to add tests in test_config.py
-fake_ubuntu = FakeDistribution("ubuntu",
-                        """
-[publishing]
-pendingremovalduration=5
-root=FOO
-archiveroot=FOO/BAR
-poolroot=FOO/BAR/pool
-distsroot=FOO/BAR/dists
-overrideroot=FOO/overrides
-cacheroot=FOO/cache
-miscroot=FOO/misc
-                        """.replace(
-                        "FOO", datadir("distro")).replace("BAR", "ubuntu"))
-
-fake_ubuntu_series = [
-    FakeDistroSeries("warty",
-                      """
-[publishing]
-components = main restricted universe
-                      """, fake_ubuntu),
-    FakeDistroSeries("hoary",
-                      """
-[publishing]
-components = main restricted universe
-                      """, fake_ubuntu)]