X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bin%2Fwanna-build;h=64adfaf6fedd2e423c1d1e329c4303c2398135b3;hb=3d23c43104c2ca8f72bad8e4a24997b80f4ca129;hp=525592c20401bc6d00a8a8203f585079047d51a0;hpb=1f779819a6cdcdbae3367cd07bcc2da510d56b5f;p=wannabuild.git diff --git a/bin/wanna-build b/bin/wanna-build index 525592c..64adfaf 100755 --- a/bin/wanna-build +++ b/bin/wanna-build @@ -45,7 +45,7 @@ use WannaBuild; our ($verbose, $mail_logs, $list_order, $list_state, $curr_date, $op_mode, $user, $real_user, $distribution, $fail_reason, $opt_override, $import_from, $export_to, $opt_create_db, - $transactlog, %db, %otherdb, %otherdb_lock, %prioval, %sectval, + %db, %otherdb, %otherdb_lock, %prioval, %sectval, $info_all_dists, $arch, $category, %catval, %short_category, $short_date, $list_min_age, $dbbase, @curr_time, @@ -246,8 +246,6 @@ $list_order = $list_state eq "failed" ? 'fPcpsn' : 'PScpsn' $distribution ||= "unstable"; die "Bad distribution '$distribution'\n" if !isin($distribution, keys %conf::distributions); -$conf::dbbase =~ m#^([^/]+/)#; -$transactlog = "$conf::basedir/$1$conf::transactlog"; if ($verbose) { my $version = '$Revision: db181a534e9d $ $Date: 2008/03/26 06:20:22 $ $Author: rmurray $'; @@ -276,7 +274,6 @@ if (!$fail_reason) { while(!eof(STDIN)) { $line = ; last if $line eq ".\n"; - $line = ".\n" if $line eq "\n"; $fail_reason .= $line; } chomp( $fail_reason ); @@ -332,12 +329,25 @@ lock_db( $distribution ); if ($op_mode eq "start-transaction") { copy ( db_filename_master( $distribution ), db_filename_transaction( $distribution )) or die "Copy failed: $!"; + open LOG, ">", db_transactlog_transaction( $distribution ) + or die "Could not create logfile for transaction: $!"; + close LOG; exit 0; } if ($op_mode eq "commit-transaction") { - move ( db_filename_transaction( $distribution ), db_filename_master( $distribution )) + # we need to copy here to preserve the owner and group of the file + copy ( db_filename_transaction( $distribution ), db_filename_master( $distribution )) or die "Copy failed: $!"; + unlink db_filename_transaction( $distribution ); + open TLOG, "<", db_transactlog_transaction( $distribution ) + or die "Could not open logfile from transaction: $!"; + open LOG, ">>", db_transactlog_master( $distribution ) + or die "Could not open logfile: $!"; + while () { print LOG $_ }; + close TLOG; + close LOG; + unlink db_transactlog_transaction( $distribution ); exit 0; } @@ -1892,7 +1902,7 @@ sub info_packages { my $val = $pkg->{$key}; chomp( $val ); $val = "\n$val" if isin( $key, qw(Failed Old-Failed)); - $val =~ s/\n/\n /g; + $val =~ s/\n/\n /g; printf " %-20s: %s\n", $key, $val; } foreach $key (sort keys %$pkg) { @@ -1900,7 +1910,7 @@ sub info_packages { my $val = $pkg->{$key}; chomp( $val ); $val = "\n$val" if isin( $key, qw(Failed Old-Failed)); - $val =~ s/\n/\n /g; + $val =~ s/\n/\n /g; printf " %-20s: %s\n", $key, $val; } } @@ -1959,7 +1969,7 @@ sub forget_users { sub lock_db { my $dist = shift; my $try = 0; - my $lockfile = db_filename($dist) . ".lock"; + my $lockfile = db_lockfilename($dist); local( *F ); print "Locking $dist database\n" if $verbose >= 2; @@ -2004,7 +2014,7 @@ sub lock_db { sub unlock_db { my $dist = shift; - my $lockfile = db_filename($dist) . ".lock"; + my $lockfile = db_lockfilename($dist); if (!$main::keep_lock{$dist}) { print "Unlocking $dist database\n" if $verbose >= 2; @@ -2013,7 +2023,7 @@ sub unlock_db { } sub create_maintlock { - my $lockfile = db_filename("maintenance") . ".lock"; + my $lockfile = db_lockfilename("maintenance"); my $try = 0; local( *F ); @@ -2052,14 +2062,14 @@ sub create_maintlock { } sub remove_maintlock { - my $lockfile = db_filename("maintenance") . ".lock"; + my $lockfile = db_lockfilename("maintenance"); print "Removing maintenance lock\n" if $verbose >= 2; unlink $lockfile; } sub waitfor_maintlock { - my $lockfile = db_filename("maintenance") . ".lock"; + my $lockfile = db_lockfilename("maintenance"); my $try = 0; local( *F ); @@ -2178,8 +2188,8 @@ sub write_db { if (!defined($ui->{'User'})); foreach $key (keys %{$ui}) { my $val = $ui->{$key}; - chomp($val); - $val =~ s/\n/\n /g; + $val =~ s/^/ /mg; + $val =~ s/^ $/ ./mg; print F "$key: $val\n"; } print F "\n"; @@ -2189,7 +2199,8 @@ sub write_db { foreach $key (keys %{$pkg}) { my $val = $pkg->{$key}; chomp( $val ); - $val =~ s/\n/\n /g; + $val =~ s/^/ /mg; + $val =~ s/^ $/ ./mg; print F "$key: $val\n"; } print F "\n"; @@ -2259,6 +2270,7 @@ sub log_ta { "changed from $prevstate to $pkg->{'State'} ". "by $real_user as $user"; + my $transactlog = db_transactlog( $distribution ); if (!open( LOG, ">>$transactlog" )) { warn "Can't open log file $transactlog: $!\n"; return; @@ -2300,7 +2312,6 @@ sub db_filename { my $dist = shift; return $transactional ? db_filename_transaction($dist) : db_filename_master($dist); } - sub db_filename_master { my $dist = shift; return "$conf::basedir/$conf::dbbase-$dist"; @@ -2310,6 +2321,27 @@ sub db_filename_transaction { return "$conf::basedir/$conf::dbbase-$dist-transaction"; } +sub db_lockfilename { + my $dist = shift; + return db_filename_master($dist) . ".lock"; +} + + +sub db_transactlog { + my $dist = shift; + return $transactional ? db_transactlog_transaction($dist) : db_transactlog_master($dist); +} +sub db_transactlog_master { + my $dist = shift; + $conf::dbbase =~ m#^([^/]+/)#; + return "$conf::basedir/$1$conf::transactlog"; +} +sub db_transactlog_transaction { + my $dist = shift; + $conf::dbbase =~ m#^([^/]+/)#; + return "$conf::basedir/$1$conf::transactlog-$dist-transaction"; +} + # for parsing input to dep-wait sub parse_deplist { my $deps = shift; @@ -2567,6 +2599,9 @@ Options: for some source dependencies to become available --binNMU num: Schedule a re-build of the package with unchanged source, but a new version number (source-version + "+b") + --give-back: Mark a package as ready to build that is in state Building, + Built or Build-Attempted. To give back a package in state Failed, use + --override --merge-quinn: Merge quinn-diff output into database. --merge-packages: Merge Packages files into database. --pretend-avail: Pretend that given packages are available now and give