Merge lp:~cprov/launchpad/pubdistro-bug-1290481 into lp:launchpad

Proposed by Celso Providelo
Status: Merged
Approved by: William Grant
Approved revision: no longer in the source branch.
Merged at revision: 16956
Proposed branch: lp:~cprov/launchpad/pubdistro-bug-1290481
Merge into: lp:launchpad
Diff against target: 150 lines (+68/-7)
2 files modified
lib/lp/archivepublisher/scripts/publish_ftpmaster.py (+16/-5)
lib/lp/archivepublisher/tests/test_publish_ftpmaster.py (+52/-2)
To merge this branch: bzr merge lp:~cprov/launchpad/pubdistro-bug-1290481
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+210335@code.launchpad.net

Commit message

Suppress finalize.d parts (mirroring) running when publishing empty security suites. It prevents mirroring of unsigned custom uploads (signing is done in publish.d parts only when there was any publication).

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/archivepublisher/scripts/publish_ftpmaster.py'
--- lib/lp/archivepublisher/scripts/publish_ftpmaster.py 2012-06-22 17:26:53 +0000
+++ lib/lp/archivepublisher/scripts/publish_ftpmaster.py 2014-03-11 03:51:26 +0000
@@ -532,16 +532,20 @@
532 self.runParts(distribution, 'finalize.d', env)532 self.runParts(distribution, 'finalize.d', env)
533533
534 def publishSecurityUploads(self, distribution):534 def publishSecurityUploads(self, distribution):
535 """Quickly process just the pending security uploads."""535 """Quickly process just the pending security uploads.
536
537 Returns True if publications were made, False otherwise.
538 """
536 self.logger.debug("Expediting security uploads.")539 self.logger.debug("Expediting security uploads.")
537 security_suites = self.getDirtySecuritySuites(distribution)540 security_suites = self.getDirtySecuritySuites(distribution)
538 if len(security_suites) == 0:541 if len(security_suites) == 0:
539 self.logger.debug("Nothing to do for security publisher.")542 self.logger.debug("Nothing to do for security publisher.")
540 return543 return False
541544
542 self.publishDistroArchive(545 self.publishDistroArchive(
543 distribution, distribution.main_archive,546 distribution, distribution.main_archive,
544 security_suites=security_suites)547 security_suites=security_suites)
548 return True
545549
546 def publishDistroUploads(self, distribution):550 def publishDistroUploads(self, distribution):
547 """Publish the distro's complete uploads."""551 """Publish the distro's complete uploads."""
@@ -559,12 +563,17 @@
559 updates on the main archive. This is much faster, so it563 updates on the main archive. This is much faster, so it
560 makes sense to do a security-only run before the main564 makes sense to do a security-only run before the main
561 event to expedite critical fixes.565 event to expedite critical fixes.
566 :return has_published: True if any publication was made to the
567 archive.
562 """568 """
569 has_published = False
563 try:570 try:
564 if security_only:571 if security_only:
565 self.publishSecurityUploads(distribution)572 has_published = self.publishSecurityUploads(distribution)
566 else:573 else:
567 self.publishDistroUploads(distribution)574 self.publishDistroUploads(distribution)
575 # Let's assume the main archive is always modified
576 has_published = True
568577
569 # Swizzle the now-updated backup dists and the current dists578 # Swizzle the now-updated backup dists and the current dists
570 # around.579 # around.
@@ -578,6 +587,8 @@
578 self.recoverWorkingDists()587 self.recoverWorkingDists()
579 raise588 raise
580589
590 return has_published
591
581 def prepareFreshSeries(self, distribution):592 def prepareFreshSeries(self, distribution):
582 """If there are any new distroseries, prepare them for publishing.593 """If there are any new distroseries, prepare them for publishing.
583594
@@ -614,8 +625,8 @@
614 self.processAccepted(distribution)625 self.processAccepted(distribution)
615626
616 self.rsyncBackupDists(distribution)627 self.rsyncBackupDists(distribution)
617 self.publish(distribution, security_only=True)628 if self.publish(distribution, security_only=True):
618 self.runFinalizeParts(distribution, security_only=True)629 self.runFinalizeParts(distribution, security_only=True)
619630
620 if not self.options.security_only:631 if not self.options.security_only:
621 self.rsyncBackupDists(distribution)632 self.rsyncBackupDists(distribution)
622633
=== modified file 'lib/lp/archivepublisher/tests/test_publish_ftpmaster.py'
--- lib/lp/archivepublisher/tests/test_publish_ftpmaster.py 2013-07-25 20:25:56 +0000
+++ lib/lp/archivepublisher/tests/test_publish_ftpmaster.py 2014-03-11 03:51:26 +0000
@@ -658,9 +658,23 @@
658 distro = script.distributions[0]658 distro = script.distributions[0]
659 script.setUpDirs()659 script.setUpDirs()
660 script.installDists = FakeMethod()660 script.installDists = FakeMethod()
661 script.publishSecurityUploads(distro)661 has_published = script.publishSecurityUploads(distro)
662 self.assertFalse(has_published)
662 self.assertEqual(0, script.installDists.call_count)663 self.assertEqual(0, script.installDists.call_count)
663664
665 def test_publishSecurityUploads_returns_true_when_publishes(self):
666 distro = self.makeDistroWithPublishDirectory()
667 distroseries = self.factory.makeDistroSeries(distribution=distro)
668 self.factory.makeSourcePackagePublishingHistory(
669 distroseries=distroseries,
670 pocket=PackagePublishingPocket.SECURITY)
671 script = self.makeScript(distro)
672 script.setUp()
673 script.setUpDirs()
674 script.installDists = FakeMethod()
675 has_published = script.publishSecurityUploads(distro)
676 self.assertTrue(has_published)
677
664 def test_publishDistroUploads_publishes_all_distro_archives(self):678 def test_publishDistroUploads_publishes_all_distro_archives(self):
665 distro = self.makeDistroWithPublishDirectory()679 distro = self.makeDistroWithPublishDirectory()
666 distroseries = self.factory.makeDistroSeries(distribution=distro)680 distroseries = self.factory.makeDistroSeries(distribution=distro)
@@ -721,11 +735,21 @@
721735
722 def test_security_run_publishes_only_security_updates(self):736 def test_security_run_publishes_only_security_updates(self):
723 script = self.makeScript(extra_args=['--security-only'])737 script = self.makeScript(extra_args=['--security-only'])
724 script.publish = FakeMethod()738 script.runFinalizeParts = FakeMethod()
739 script.publish = FakeMethod(result=True)
725 script.main()740 script.main()
726 self.assertEqual(1, script.publish.call_count)741 self.assertEqual(1, script.publish.call_count)
727 args, kwargs = script.publish.calls[0]742 args, kwargs = script.publish.calls[0]
728 self.assertEqual({'security_only': True}, kwargs)743 self.assertEqual({'security_only': True}, kwargs)
744 self.assertEqual(1, script.runFinalizeParts.call_count)
745
746 def test_security_run_empty_security_does_not_finalize(self):
747 script = self.makeScript(extra_args=['--security-only'])
748 script.runFinalizeParts = FakeMethod()
749 script.publish = FakeMethod(result=False)
750 script.main()
751 self.assertEqual(1, script.publish.call_count)
752 self.assertEqual(0, script.runFinalizeParts.call_count)
729753
730 def test_publishDistroUploads_processes_all_archives(self):754 def test_publishDistroUploads_processes_all_archives(self):
731 distro = self.makeDistroWithPublishDirectory()755 distro = self.makeDistroWithPublishDirectory()
@@ -786,6 +810,32 @@
786 "Did not find expected marker for %s."810 "Did not find expected marker for %s."
787 % archive.purpose.title)811 % archive.purpose.title)
788812
813 def test_publish_always_returns_true_for_primary(self):
814 script = self.makeScript()
815 script.publishDistroUploads = FakeMethod()
816 script.setUp()
817 script.setUpDirs()
818 result = script.publish(script.distributions[0], security_only=False)
819 self.assertTrue(result)
820
821 def test_publish_returns_true_for_non_empty_security(self):
822 script = self.makeScript(extra_args=['--security-only'])
823 script.setUp()
824 script.setUpDirs()
825 script.installDists = FakeMethod()
826 script.publishSecurityUploads = FakeMethod(result=True)
827 result = script.publish(script.distributions[0], security_only=True)
828 self.assertTrue(result)
829
830 def test_publish_returns_false_for_empty_security(self):
831 script = self.makeScript(extra_args=['--security-only'])
832 script.setUp()
833 script.setUpDirs()
834 script.installDists = FakeMethod()
835 script.publishSecurityUploads = FakeMethod(result=False)
836 result = script.publish(script.distributions[0], security_only=True)
837 self.assertFalse(result)
838
789 def test_publish_reraises_exception(self):839 def test_publish_reraises_exception(self):
790 # If an Exception comes up while publishing, it bubbles up out840 # If an Exception comes up while publishing, it bubbles up out
791 # of the publish method even though the method must intercept841 # of the publish method even though the method must intercept