[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