83 lines
1.7 KiB
Perl
Executable File
83 lines
1.7 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
# This file was preprocessed, do not edit!
|
|
|
|
|
|
use strict;
|
|
use Getopt::Long;
|
|
use Debconf::Log qw{:all};
|
|
use Debconf::Db;
|
|
use Debconf::DbDriver;
|
|
use Debconf::DbDriver::Backup;
|
|
|
|
|
|
sub usage {
|
|
print STDERR <<EOF;
|
|
Usage: debconf-copydb sourcedb destdb [--pattern=pattern] [--owner-pattern=pattern] [--config=Foo:bar]
|
|
EOF
|
|
exit(1);
|
|
}
|
|
|
|
|
|
my $pattern='.*';
|
|
my $owner_pattern;
|
|
|
|
my %config;
|
|
sub config {
|
|
my ($field, $value)=split(/\s*:\s*/, $_[1], 2);
|
|
$field=~tr/-/_/;
|
|
$field=lc($field);
|
|
die "Parse error: \"$_[1]\"" unless defined $field and length $field;
|
|
|
|
if ($field eq 'name') {
|
|
if ($config{name}) {
|
|
Debconf::Db->makedriver(%config);
|
|
}
|
|
elsif (%config) {
|
|
warn "ignoring command line config data before $_[1]";
|
|
}
|
|
%config=();
|
|
}
|
|
|
|
$config{$field}=$value;
|
|
}
|
|
|
|
GetOptions(
|
|
"pattern|p=s" => \$pattern,
|
|
"config|c=s" => \&config,
|
|
"owner-pattern=s" => \$owner_pattern,
|
|
) || usage();
|
|
Debconf::Db->makedriver(%config) if %config;
|
|
|
|
my $srcname=shift || usage();
|
|
my $destname=shift || usage();
|
|
|
|
Debconf::Db->load;
|
|
|
|
my $src=Debconf::DbDriver->driver($srcname);
|
|
die "$0: source database, \"$srcname\" does not exist\n" unless ref $src;
|
|
my $dest=Debconf::DbDriver->driver($destname);
|
|
die "$0: destination database, \"$destname\" does not exist\n" unless ref $dest;
|
|
|
|
my $copier=Debconf::DbDriver::Backup->new(
|
|
db => $src, backupdb => $dest, name => 'copier');
|
|
|
|
my $i=$copier->iterator;
|
|
while (my $item=$i->iterate) {
|
|
next unless $item =~ /$pattern/;
|
|
|
|
if (defined $owner_pattern) {
|
|
my $fit_owner = 0;
|
|
my $owner;
|
|
foreach $owner ($src->owners($item)){
|
|
$fit_owner = 1 if $owner =~ /$owner_pattern/;
|
|
}
|
|
next unless $fit_owner;
|
|
}
|
|
|
|
$copier->copy($item, $src, $dest);
|
|
}
|
|
|
|
$copier->shutdown;
|
|
|
|
|