Introduces Dispatcher.request_steps_gently() which requests steps if they are not skipped already (i.e. "Unless there is a compelling reason, like a kickstart command, not to run this step, it must be run."). Resolves: rhbz#723798 --- pyanaconda/dispatch.py | 10 ++++++++++ pyanaconda/iw/autopart_type.py | 3 ++- pyanaconda/storage/partitioning.py | 6 +----- tests/pyanaconda_test/dispatch_test.py | 12 ++++++++++++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/pyanaconda/dispatch.py b/pyanaconda/dispatch.py index 3d4b9b2..820a92b 100644 --- a/pyanaconda/dispatch.py +++ b/pyanaconda/dispatch.py @@ -290,6 +290,16 @@ class Dispatcher(object): def request_steps(self, *steps): changes = map(lambda s: self.steps[s].request(self._current_step()), steps) + def request_steps_gently(self, *steps): + """ Requests steps and won't raise an error if it is not possible for + some of them. + """ + for step in steps: + try: + self.request_steps(step) + except errors.DispatchError as e: + log.debug("dispatch: %s" % e) + def run(self): self.anaconda.intf.run(self.anaconda) log.info("dispatch: finished.") diff --git a/pyanaconda/iw/autopart_type.py b/pyanaconda/iw/autopart_type.py index d69b5f9..999c281 100644 --- a/pyanaconda/iw/autopart_type.py +++ b/pyanaconda/iw/autopart_type.py @@ -202,7 +202,8 @@ class PartitionTypeWindow(InstallWindow): if self.reviewButton.get_active(): self.dispatch.request_steps("partition") - self.dispatch.request_steps("bootloader") + # with kickstart bootloader is already scheduled to be skipped: + self.dispatch.request_steps_gently("bootloader") else: self.dispatch.skip_steps("partition") self.dispatch.skip_steps("bootloader") diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py index a594697..ffb4ef4 100644 --- a/pyanaconda/storage/partitioning.py +++ b/pyanaconda/storage/partitioning.py @@ -29,7 +29,6 @@ from pykickstart.constants import * from pyanaconda.constants import * -from pyanaconda.errors import DispatchError from errors import * from deviceaction import * from devices import PartitionDevice, LUKSDevice, devicePathToName @@ -301,10 +300,7 @@ def doAutoPartition(anaconda): if anaconda.ksdata: extra = _("\n\nPress 'OK' to exit the installer.") else: - try: - anaconda.dispatch.request_steps("partition") - except DispatchError: - pass + anaconda.dispatch.request_steps_gently("partition") anaconda.intf.messageWindow(_("Error Partitioning"), _("Could not allocate requested partitions: \n\n" "%(msg)s.%(extra)s") % {'msg': msg, 'extra': extra}, diff --git a/tests/pyanaconda_test/dispatch_test.py b/tests/pyanaconda_test/dispatch_test.py index c84427a..57de692 100644 --- a/tests/pyanaconda_test/dispatch_test.py +++ b/tests/pyanaconda_test/dispatch_test.py @@ -171,6 +171,18 @@ class DispatchTest(mock.TestCase): self.assertFalse(d.step_enabled("complete")) self.assertTrue(d.step_enabled("filtertype")) + def request_steps_gently_test(self): + from pyanaconda.errors import DispatchError + from pyanaconda.dispatch import Step + d = self._getDispatcher() + d.schedule_steps("betanag", "complete") + d.skip_steps("betanag") + self.assertRaises(DispatchError, d.request_steps, "betanag") + d.request_steps_gently("betanag") + d.request_steps_gently("complete") + self.assertEqual(d.steps["betanag"].sched, Step.SCHED_SKIPPED) + self.assertEqual(d.steps["complete"].sched, Step.SCHED_REQUESTED) + def track_scheduling_test(self): from pyanaconda.dispatch import Step d = self._getDispatcher() -- 1.7.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list