diff options
author | Joey Hess <joey@kitenet.net> | 2010-11-02 16:24:04 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-11-02 16:24:04 -0400 |
commit | 4c8f8cd25e912508731e3494d3ee303bccf0001e (patch) | |
tree | 28eb1a4ce85f1ecd39a7e86295fb892d41b01fec | |
parent | a9116a731fb4baf4873e5693681c3602bbeee6a3 (diff) | |
download | debhelper-4c8f8cd25e912508731e3494d3ee303bccf0001e.tar.gz |
maintscript files
dh_installdeb: Support debian/package.maintscript files, which can contain
dpkg-maintscript-helper commands. This can be used to automate moving or
removing conffiles, or anything added to dpkg-maintscript-helper later on.
Closes: #574443 (Thanks, Colin Watson)
-rw-r--r-- | autoscripts/maintscript-helper | 1 | ||||
-rw-r--r-- | debian/changelog | 5 | ||||
-rwxr-xr-x | dh_installdeb | 36 | ||||
-rw-r--r-- | t/maintscript | 19 |
4 files changed, 61 insertions, 0 deletions
diff --git a/autoscripts/maintscript-helper b/autoscripts/maintscript-helper new file mode 100644 index 00000000..c7e06c46 --- /dev/null +++ b/autoscripts/maintscript-helper @@ -0,0 +1 @@ +dpkg-maintscript-helper #PARAMS# -- "$@" diff --git a/debian/changelog b/debian/changelog index 26349a7b..188a543e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,11 @@ debhelper (8.1.0) UNRELEASED; urgency=low * Avoid open fd 5 or 6 breaking buildsystem test suite. Closes: #596679 * Large update to Spanish man page translations by Omar Campagne. Closes: #600913 + * dh_installdeb: Support debian/package.maintscript files, + which can contain dpkg-maintscript-helper commands. This can be used + to automate moving or removing conffiles, or anything added to + dpkg-maintscript-helper later on. Closes: #574443 + (Thanks, Colin Watson) -- Joey Hess <joeyh@debian.org> Sat, 07 Aug 2010 11:27:24 -0400 diff --git a/dh_installdeb b/dh_installdeb index 35c9016b..8cfb4b73 100755 --- a/dh_installdeb +++ b/dh_installdeb @@ -50,12 +50,32 @@ In v3 compatibility mode and higher, all files in the etc/ directory in a package will automatically be flagged as conffiles by this program, so there is no need to list them manually here. +=item I<package>.maintscript + +Lines in this file correspond to L<dpkg-maintscript-helper(1)> commands and +parameters. Any shell metacharacters will be escaped, so arbitrary shell +code cannot be inserted here. For example, a line such as C<mv_conffile +/etc/oldconffile /etc/newconffile> will insert maintainer script snippets +into all maintainer scripts sufficient to move that conffile. + +A versioned Pre-Dependency on dpkg is needed to use +L<dpkg-maintscript-helper(1)>. An appropriate Pre-Dependency is +set in ${misc:Pre-Depends} ; you should make sure to put that token into +an appropriate place in your debian/contorl file. + =back =cut init(); +# dpkg-maintscript-helper commands with their associated dpkg pre-dependency +# versions. +my %maintscript_predeps = ( + "rm_conffile" => "1.15.7.2", + "mv_conffile" => "1.15.7.2", +); + foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); @@ -76,6 +96,22 @@ foreach my $package (@{$dh{DOPACKAGES}}) { next; } + my $maintscriptfile=pkgfile($package, "maintscript"); + if ($maintscriptfile) { + foreach my $line (filedoublearray($maintscriptfile)) { + my $cmd=$line->[0]; + error("unknown dpkg-maintscript-helper command: $cmd") + unless exists $maintscript_predeps{$cmd}; + addsubstvar($package, "misc:Pre-Depends", "dpkg", + ">= $maintscript_predeps{$cmd}"); + my $params=escape_shell(@$line); + foreach my $script (qw{postinst preinst prerm postrm}) { + autoscript($package, $script, "maintscript-helper", + "s!#PARAMS#!$params!g"); + } + } + } + # Install debian scripts. foreach my $script (qw{postinst preinst prerm postrm}) { debhelper_script_subst($package, $script); diff --git a/t/maintscript b/t/maintscript new file mode 100644 index 00000000..bf15d445 --- /dev/null +++ b/t/maintscript @@ -0,0 +1,19 @@ +#!/usr/bin/perl +use Test; +plan(tests => 8); + +system("mkdir -p t/tmp/debian"); +system("cp debian/control t/tmp/debian"); +open(OUT, ">", "t/tmp/debian/maintscript") || die "$!"; +print OUT <<EOF; +rm_conffile /etc/1 +mv_conffile /etc/2 /etc/3 1.0-1 +EOF +close OUT; +system("cd t/tmp && DH_COMPAT=7 fakeroot ../../dh_installdeb"); +for my $script (qw{postinst preinst prerm postrm}) { + my @output=`cat t/tmp/debian/debhelper.$script.debhelper`; + ok(grep { m{^dpkg-maintscript-helper rm_conffile /etc/1 -- "\$\@"$} } @output); + ok(grep { m{^dpkg-maintscript-helper mv_conffile /etc/2 /etc/3 1\.0-1 -- "\$\@"$} } @output); +} +system("rm -rf t/tmp"); |