changeset 5406:798458797acb

lax-checksum cleanup.
author Jan Nieuwenhuizen <janneke@gnu.org>
date Fri, 24 Jul 2009 17:01:00 +0200
parents 53a9f1d78f1d
children ec5c230fb04e
files gub/buildrunner.py
diffstat 1 files changed, 39 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/gub/buildrunner.py	Fri Jul 24 14:10:44 2009 +0200
+++ b/gub/buildrunner.py	Fri Jul 24 17:01:00 2009 +0200
@@ -203,14 +203,20 @@
             skip += ['clean']
         return skip
     
-    def spec_build (self, spec_name):
-        spec = self.specs[spec_name]
-        
+    def spec_is_installable (self, spec):
+        return misc.forall (self.manager (p.platform ()).is_installable (p.name ())
+                            for p in spec.get_packages ())
+
+    def spec_all_installed (self, spec):
         all_installed = True
         for p in spec.get_packages ():
             all_installed = (all_installed
                              and self.manager (p.platform ()).is_installed (p.name ()))
-        if all_installed:
+        return all_installed
+
+    def spec_build (self, spec_name):
+        spec = self.specs[spec_name]
+        if self.spec_all_installed (spec):
             return
         checksum_fail_reason = self.failed_checksums.get (spec_name, '')
         if ((not checksum_fail_reason or self.options.lax_checksums)
@@ -221,8 +227,6 @@
             rebuild = 'must'
             if self.options.lax_checksums:
                 rebuild = 'should'
-            else:
-                boo
             logger.write_log ('%(rebuild)s rebuild: %(spec_name)s\n' % locals (), 'verbose')
         else:
             logger.write_log ('checksum ok: %(spec_name)s\n' % locals (), 'verbose')
@@ -231,9 +235,9 @@
             logger.write_log ('\n'.join (checksum_fail_reason.split ('\n')[:10]), 'verbose')
         logger.write_log (checksum_fail_reason, 'output')
 
-        is_installable = misc.forall (self.manager (p.platform ()).is_installable (p.name ())
-                                      for p in spec.get_packages ())
-        if (not is_installable or checksum_fail_reason):
+        if ((checksum_fail_reason and not self.options.lax_checksums)
+            or not self.spec_is_installable (spec)):
+            print 'NOT INSTALLABLE', spec_name
             deferred_runner = runner.DeferredRunner (logger)
             spec.connect_command_runner (deferred_runner)
             spec.runner.stage ('building package: %s\n' % spec_name)
@@ -253,7 +257,7 @@
             #spec.set_done ('')
             loggedos.system (logging.default_logger, spec.expand ('rm -f %(stamp_file)s'))
         # Ugh, pkg_install should be stage
-        if spec.install_after_build:
+        if spec.install_after_build and not self.spec_all_installed (spec):
             logger.write_log (spec.stage_message ('pkg_install'), 'stage')
             self.spec_install (spec)
         logging.default_logger.write_log ('\n', 'stage')
@@ -274,33 +278,41 @@
             if (self.manager (pkg.platform ()).is_installed (pkg.name ())):
                 self.manager (pkg.platform ()).uninstall_package (pkg.name ())
 
-    def uninstall_outdated_specs (self, deps):
-        outdated = list (reversed ([name for name in deps
-                                    if self.is_outdated_spec (name)]))
+    def outdated_names (self, deps):
+        return list (reversed ([name for name in deps
+                                    if (self.is_outdated_spec (name)
+                                        and not (self.options.lax_checksums
+                                                 and self.spec_is_installable (self.specs[name])))]))
+
+    def uninstall_specs (self, lst):
+        for name in lst:
+            self.uninstall_spec (self.specs[name])
+
+    def build_source_packages (self, names):
+        deps = [d for d in names if d in self.specs]
+        platform = self.settings.platform
+        outdated = self.outdated_names (deps)
+        # fail_str: keep ordering of names
+        fail_str = (' '.join ([s for s in deps
+#                               if (s in list (self.failed_checksums.keys ())
+                               if s in outdated
+                               ])
+                    .replace (misc.with_platform ('', platform), ''))
+        if not fail_str:
+            fail_str = '<nothing to be done>.'
+        logging.default_logger.write_log ('must rebuild[%(platform)s]: %(fail_str)s\n' % locals (), 'stage')
         if outdated:
             platform = self.settings.platform
             outdated_str = (' '.join (outdated)
                             .replace (misc.with_platform ('', platform), ''))
             logging.default_logger.write_log ('removing outdated[%(platform)s]: %(outdated_str)s\n' % locals (), 'stage')
-            for name in outdated:
-                print 'uninstalling:', spec.name
-                self.uninstall_spec (self.specs[name])
-
-    def build_source_packages (self, names):
-        deps = [d for d in names if d in self.specs]
-        platform = self.settings.platform
-        # fail_str: keep ordering of names
-        fail_str = ' '.join ([s for s in deps if s in list (self.failed_checksums.keys ())]).replace (misc.with_platform ('', platform), '')
-        if not fail_str:
-            fail_str = '<nothing to be done>.'
-        logging.default_logger.write_log ('must rebuild[%(platform)s]: %(fail_str)s\n' % locals (), 'stage')
-        self.uninstall_outdated_specs (deps)
+            self.uninstall_specs (outdated)
         global target
         for spec_name in deps:
             target = spec_name
             self.spec_build (spec_name)
         target = None
-                
+
 target = None
 
 def main ():