[Piuparts-commits] [SCM] piuparts git repository branch, master, updated. eda668423fa87898c59d1075118693714aa5a053

Holger Levsen holger at layer-acht.org
Fri Dec 23 10:27:27 UTC 2011


The following commit has been merged in the master branch:
commit 46241f93d473d24229cf0b4f287aee313d6e5fa9
Merge: a5a7d4c81eef9efcdb595ba12d26cbd2926f3e78 74dacdfe5d86c73ceb11af5166704e28a2c0fbfe
Author: Holger Levsen <holger at layer-acht.org>
Date:   Sun Nov 27 23:17:55 2011 +0100

    Merge branch 'feature/improve-custom-scripts' into develop

diff --combined piuparts.py
index 19247e5,193c22e..a35d998
--- a/piuparts.py
+++ b/piuparts.py
@@@ -131,7 -131,7 +131,7 @@@ class Settings
      def __init__(self):
          self.defaults = None
          self.tmpdir = None
-         self.scriptsdir = None
+         self.scriptsdirs = []
          self.keep_tmpdir = False
          self.single_changes_list = False
          # limit output of logfiles to the last megabyte:
@@@ -734,15 -734,17 +734,17 @@@ class Chroot
              self.run(["apt-get", "-yf", "upgrade"])
          self.minimize()
  
-         #copy scripts dir into the chroot
-         if settings.scriptsdir is not None:
+         # Copy scripts dirs into the chroot, merging all dirs together,
+         # later files overwriting earlier ones.
+         if settings.scriptsdirs:
              dest = self.relative("tmp/scripts/")
              if not os.path.exists(self.relative("tmp/scripts/")):
                  os.mkdir(dest)
-             logging.debug("Copying scriptsdir to %s" % dest)
-             for sfile in os.listdir(settings.scriptsdir):
-                 if (sfile.startswith("post_") or sfile.startswith("pre_")) and os.path.isfile(os.path.join((settings.scriptsdir), sfile)):
-                     shutil.copy(os.path.join((settings.scriptsdir), sfile), dest) 
+             for sdir in settings.scriptsdirs:
+                 logging.debug("Copying scriptsdir %s to %s" % (sdir, dest))
+                 for sfile in os.listdir(sdir):
+                     if (sfile.startswith("post_") or sfile.startswith("pre_")) and os.path.isfile(os.path.join(sdir, sfile)):
+                         shutil.copy(os.path.join(sdir, sfile), dest)
  
          # Run custom scripts after creating the chroot.
          self.run_scripts("post_setup")
@@@ -896,6 -898,7 +898,7 @@@
  
      def configure_chroot(self):
          """Configure a chroot according to current settings"""
+         os.environ["PIUPARTS_DISTRIBUTION"] = settings.debian_distros[0]
          if not settings.keep_sources_list:
              self.create_apt_sources(settings.debian_distros[0])
          self.create_apt_conf()
@@@ -910,11 -913,14 +913,14 @@@
          """Upgrade a chroot installation to each successive distro."""
          for distro in distros:
              logging.debug("Upgrading %s to %s" % (self.name, distro))
+             os.environ["PIUPARTS_DISTRIBUTION_NEXT"] = distro
              self.create_apt_sources(distro)
              # Run custom scripts before upgrade
              self.run_scripts("pre_distupgrade")
              self.run(["apt-get", "update"])
              self.run(["apt-get", "-yf", "dist-upgrade"])
+             os.environ["PIUPARTS_DISTRIBUTION_PREV"] = os.environ["PIUPARTS_DISTRIBUTION"]
+             os.environ["PIUPARTS_DISTRIBUTION"] = distro
              # Sometimes dist-upgrade won't upgrade the packages we want
              # to test because the new version depends on a newer library,
              # and installing that would require removing the old version
@@@ -1022,16 -1028,13 +1028,16 @@@
          added = [ln for ln in post_install_diversions if not ln in pre_install_diversions]
          return (removed, added)
  
 -    def remove_or_purge(self, operation, packages):
 -        """Remove or purge packages in a chroot."""
 -        for name in packages:
 -            self.run(["dpkg", "--" + operation, name], ignore_errors=True)
 -        self.run(["dpkg", "--remove", "--pending"], ignore_errors=True)
 -
 +    def remove_packages(self, packages):
 +        """Remove packages in a chroot."""
 +        if packages:
 +            self.run(["apt-get", "remove"] + packages, ignore_errors=True)
  
 +    def purge_packages(self, packages):
 +        """Purge packages in a chroot."""
 +        if packages:
 +            self.run(["dpkg", "--purge"] + packages, ignore_errors=True)
 + 
      def restore_selections(self, selections, packages):
          """Restore package selections in a chroot to the state in
          'selections'."""
@@@ -1058,8 -1061,8 +1064,8 @@@
          self.run_scripts("pre_remove")
  
          # First remove all packages.
 -        self.remove_or_purge("remove", deps_to_remove + deps_to_purge +
 -                                        nondeps_to_remove + nondeps_to_purge)
 +        self.remove_packages(deps_to_remove + deps_to_purge +
 +                             nondeps_to_remove + nondeps_to_purge)
          # Run custom scripts after removing all packages. 
          self.run_scripts("post_remove")
  
@@@ -1075,13 -1078,13 +1081,13 @@@
          if not settings.skip_logrotatefiles_test and logrotatefiles:
              installed = self.install_logrotate()
              self.check_output_logrotatefiles(logrotatefiles_list)
 -            self.remove_or_purge("purge", installed)
 +            self.purge_packages(installed)
  
          # Then purge all packages being depended on.
 -        self.remove_or_purge("purge", deps_to_purge)
 +        self.purge_packages(deps_to_purge)
  
          # Finally, purge actual packages.
 -        self.remove_or_purge("purge", nondeps_to_purge)
 +        self.purge_packages(nondeps_to_purge)
  
          # Run custom scripts after purge all packages.
          self.run_scripts("post_purge")
@@@ -1333,7 -1336,7 +1339,7 @@@
      def run_scripts (self, step):
          """ Run custom scripts to given step post-install|remove|purge"""
  
-         if settings.scriptsdir is None:
+         if not settings.scriptsdirs:
              return
          logging.info("Running scripts "+ step)
          basepath = self.relative("tmp/scripts/")
@@@ -1868,7 -1871,11 +1874,11 @@@ def install_purge_test(chroot, root_inf
         Assume 'root' is a directory already populated with a working
         chroot, with packages in states given by 'selections'."""
  
+     os.environ["PIUPARTS_TEST"] = "install"
+     chroot.run_scripts("pre_test")
+ 
      # Install packages into the chroot.
+     os.environ["PIUPARTS_PHASE"] = "install"
  
      if settings.warn_on_others:
          # Create a metapackage with dependencies from the given packages
@@@ -1904,7 -1911,7 +1914,7 @@@
          chroot.install_package_files([metapackage])
          # Now remove it
          metapackagename = os.path.basename(metapackage)[:-4]
 -        chroot.remove_or_purge("purge", [metapackagename])
 +        chroot.purge_packages([metapackagename])
          shutil.rmtree(os.path.dirname(metapackage))
  
          # Save the file ownership information so we can tell which
@@@ -1938,15 -1945,18 +1948,18 @@@ def install_upgrade_test(chroot, root_i
      """Install package via apt-get, then upgrade from package files.
      Return True if successful, False if not."""
  
+     os.environ["PIUPARTS_TEST"] = "upgrade"
+     chroot.run_scripts("pre_test")
+ 
      # First install via apt-get.
+     os.environ["PIUPARTS_PHASE"] = "install"
      chroot.install_packages_by_name(packages)
  
-     chroot.run_scripts("pre_upgrade")
- 
      chroot.check_for_no_processes()
      chroot.check_for_broken_symlinks()
  
      # Then from the package files.
+     os.environ["PIUPARTS_PHASE"] = "upgrade"
      chroot.install_package_files(package_files)
  
      chroot.check_for_no_processes()
@@@ -2006,6 -2016,8 +2019,8 @@@ def install_and_upgrade_between_distros
      # a reasonable default behaviour for distro upgrade tests, which are not 
      # done by default anyway.
  
+     os.environ["PIUPARTS_TEST"] = "distupgrade"
+ 
      chroot = get_chroot()
      chroot.create()
      cid = do_on_panic(chroot.remove)
@@@ -2046,16 -2058,22 +2061,22 @@@
  
      chroot.check_for_no_processes()
  
-     chroot.install_packages_by_name(packages)
+     chroot.run_scripts("pre_test")
  
-     chroot.run_scripts("pre_upgrade")
+     os.environ["PIUPARTS_PHASE"] = "install"
+ 
+     chroot.install_packages_by_name(packages)
  
      chroot.check_for_no_processes()
  
+     os.environ["PIUPARTS_PHASE"] = "distupgrade"
+ 
      chroot.upgrade_to_distros(settings.debian_distros[1:], packages)
  
      chroot.check_for_no_processes()
  
+     os.environ["PIUPARTS_PHASE"] = "upgrade"
+ 
      chroot.install_package_files(package_files)
  
      chroot.check_for_no_processes()
@@@ -2276,7 -2294,8 +2297,8 @@@ def parse_command_line()
                        help="Minimize chroot with debfoster. This used to be the default until #539142 was fixed.")
  
      parser.add_option("--scriptsdir", metavar="DIR",
-                       help="Directory where are placed the custom scripts.")
+                       action="append", default=[],
+                       help="Directory where are placed the custom scripts. Can be given multiple times.")
  
      parser.add_option("-t", "--tmpdir", metavar="DIR",
                        help="Use DIR for temporary storage. Default is " +
@@@ -2392,11 -2411,10 +2414,10 @@@
          else:
              settings.tmpdir = "/tmp"
  
-     if opts.scriptsdir is not None:
-         settings.scriptsdir = opts.scriptsdir
-         if not os.path.isdir(settings.scriptsdir):
-             logging.error("Scripts directory is not a directory: %s" % 
-                           settings.scriptsdir)
+     settings.scriptsdirs = opts.scriptsdir
+     for sdir in settings.scriptsdirs:
+         if not os.path.isdir(sdir):
+             logging.error("Scripts directory is not a directory: %s" % sdir)
              panic()
  
      if not settings.debian_distros:

-- 
piuparts git repository



More information about the Piuparts-commits mailing list