packagekit/backends/apt/pkconffile

87 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

#!/usr/bin/perl
use Debconf::Client::ConfModule ':all';
use Cwd 'abs_path';
use File::Temp qw/ tempfile tempdir /;
use strict;
my $template_fname;
(undef, $template_fname) = tempfile('/tmp/pkconffileXXXXXX', SUFFIX => '.template');
# (1) quit unless we have the correct number of command-line args
if ($#ARGV + 1 != 3) {
print STDERR "Usage: ./pkconffile package original_conf new_conf\n";
exit;
}
## Process template so we can add the diff at the end
## the abs_path will give us the full path where this script is so we can find the template
open (TEMP_NODIFF, abs_path($0).'.nodiff') || die ("could not open the template");
open (TEMPLATE, ">$template_fname");
## Adds the original template
while (<TEMP_NODIFF>) {
print TEMPLATE $_;
}
close (TEMP_NODIFF);
## get the original and new files
my $package = $ARGV[0];
my $forig = $ARGV[1];
my $fnew = $ARGV[2];
## Add the diff to the end of the TEMPLATE
my @diff = `diff -u $forig $fnew`;
foreach (@diff) {
if ($_ =~ /^\$/) {
print TEMPLATE " .\n";
} else {
chomp;
## Add two spaces here so that the extended description
## receives the proper line breaks.
print TEMPLATE " $_\n";
}
}
close (TEMPLATE);
## Force the template to be loaded again
x_loadtemplatefile($template_fname);
## set the package name in the title
subst("pkconffile/title", "package", $package);
settitle("pkconffile/title");
my $state = 1;
while (1) {
if ($state == 1) {
## ask the user what to do with the conf file
fset("pkconffile/what_to_do", "seen", "false");
subst("pkconffile/what_to_do", "forig", $forig);
input("high", "pkconffile/what_to_do");
} else {
## the user whants to see the diff
fset("pkconffile/diff", "seen", "false");
subst("pkconffile/diff", "forig", $forig);
subst("pkconffile/diff", "fnew", $fnew);
input("high", "pkconffile/diff");
}
## get the user answer
if (go() == 0 && $state == 1) {
my @ret = get("pkconffile/what_to_do");
if ($ret[1] =~ "Keep the currently installed version") {
$state = 10;
last;
} elsif ($ret[1] =~ "Install the package maintainer's version") {
$state = 20;
last;
}
$state = 2;
} else {
$state = 1;
}
}
unlink($template_fname);
exit $state;