our ($verbose, $mail_logs, $list_order, $list_state,
$curr_date, $op_mode, $user, $real_user, $distribution,
- $fail_reason, $opt_override, $import_from, $opt_create_db,
+ $fail_reason, $opt_override, $import_from, $export_to, $opt_create_db,
%prioval, %sectval,
$info_all_dists, $arch,
$category, %catval, %short_category,
$list_min_age *= -1;
} },
# special actions
+ export => { arg => \$export_to, mode => "export" },
import => { arg => \$import_from, mode => "import" },
"manual-edit" => { mode => "manual-edit" },
);
print "wanna-build $version for $distribution on $arch\n";
}
-if (!@ARGV && !isin( $op_mode, qw(list merge-quinn merge-partial-quinn import
+if (!@ARGV && !isin( $op_mode, qw(list merge-quinn merge-partial-quinn import export
merge-packages manual-edit
merge-sources))) {
warn "No packages given.\n";
}
my $schema_suffix = '';
-if (isin( $op_mode, qw(list info)) && $distribution !~ /security/) {
+if (isin( $op_mode, qw(list info)) && $distribution !~ /security/ && !(not -t and $user =~ /-/)) {
$dbh = DBI->connect("DBI:Pg:service=wanna-build") ||
die "FATAL: Cannot open database: $DBI::errstr\n";
$schema_suffix = '_public';
read_db( $import_from );
last SWITCH;
};
+ /^export/ && do {
+ export_db( $export_to );
+ last SWITCH;
+ };
die "Unexpected operation mode $op_mode\n";
}
) );
}
+sub export_db {
+ my $file = shift;
+ my($name,$pkg,$key);
+
+ print "Writing ASCII database to $file..." if $verbose >= 1;
+ open( F, ">$file" ) or
+ die "Can't open export $file: $!\n";
+
+ my $db = get_all_source_info();
+ foreach $name (keys %$db) {
+ next if $name =~ /^_/;
+ my $pkg = $db->{$name};
+ foreach $key (keys %{$pkg}) {
+ my $val = $pkg->{$key};
+ next if !defined($val);
+ $val =~ s/\n*$//;
+ $val =~ s/^/ /mg;
+ $val =~ s/^ +$/ ./mg;
+ print F "$key: $val\n";
+ }
+ print F "\n";
+ }
+ close( F );
+ print "done\n" if $verbose >= 1;
+}
+
sub change_state {
my $pkgr = shift;
my $pkg = $$pkgr;
if -l is missing, set user name to be entered in db; usually
automatically choosen
--import FILE: Import database from a ASCII file FILE
+ --export FILE: Export database to a ASCII file FILE
The remaining arguments (depending on operation) usually start with
"name_version", the trailer is ignored. This allows to pass the names
my $q = 'SELECT * FROM ' . table_name()
. ' WHERE distribution = ? ';
my @args = ($distribution);
- if (uc($options{state}) ne "ALL") {
+ if ($options{state} && uc($options{state}) ne "ALL") {
$q .= ' AND upper(state) = ? ';
push @args, uc($options{state});
}