our $debug = 0;
+open VERBOSE, ">/dev/null" or die $!;
+our $verbose_buffer;
+
while (@ARGV && $ARGV[0] =~ m/^\-/) {
$_ = shift @ARGV;
last if m/^\-\-?$/;
- if (m/^-D$/) {
+ if (m/^-v$/) {
+ open VERBOSE, ">&STDERR" or die $!;
+ } elsif (m/^-D$/) {
$debug = 1;
} else {
die "$_ ?";
sub debug { print STDERR @_ if $debug; }
+sub verbose (@) { $verbose_buffer .= $_ foreach @_; }
+sub verbose_discard () { $verbose_buffer = ''; }
+sub verbose_flush () {
+ print VERBOSE $verbose_buffer or die $!;
+ verbose_discard();
+}
+
sub for_things ($$$$$$$) {
my ($spec, $fn, $ifnone,
$table, $keycol, $basecond, $basecondvals) = @_;
# calls $fn->($jobname, $jobrow);
for_things($jobspec, $fn,
($noneok ? undef : sub {
- die "thing $flight.$jobspec does not exist\n";
+ die "job $flight.$jobspec does not exist\n";
}),
'jobs', 'job',
'flight = ?', [$flight]);
" WHERE flight = ? AND job = ? AND NOT synth");
my $rm_job = sub {
my ($job) = @_;
- $_->execute($dstflight, $job) foreach @job_rm_qs;
+ my $count = 0;
+ $count += $_->execute($dstflight, $job) foreach @job_rm_qs;
+ verbose "$dstflight.$job job deleted\n" if $count;
};
for_jobs($dstflight, $jobs, $rm_job);
for_jobs($srcflight, $jobs, $rm_job);
for_jobs($srcflight, $jobs, sub {
my ($job) = @_;
$_->execute($dstflight, $srcflight, $job) foreach @job_copy_qs;
+ verbose "$dstflight.$job job created from $srcflight.$job\n";
});
}
our $runvar_insert_q = $dbh_tests->prepare
("INSERT INTO runvars VALUES (?, ?, ?, ?, 'f')");
-sub runvar_set ($$$) {
- my ($job, $name, $val) = @_;
+sub runvar_set ($$$;$) {
+ my ($job, $name, $val, $xwhat) = @_;
$runvar_rm_q->execute($dstflight, $job, $name);
$runvar_insert_q->execute($dstflight, $job, $name, $val);
+ verbose "$dstflight.$job $name := \`$val'";
+ verbose $xwhat if defined $xwhat;
+ verbose "\n";
}
sub for_runvars ($$$$) {
for_runvars($jobs, $vars, sub {
my ($job, $name) = @_;
runvar_rm_q->execute($dstflight, $job, $name);
+ verbose "$dstflight.$job $name runvar deleted\n";
}, 'IGNORE');
}
for_runvars($jobs, $vars, sub {
my ($job, $name, $varrow) = @_;
- runvar_set($job, $name, $newval) if $varrow->{val} eq $oldval;
+ runvar_set($job, $name, $newval, " (exactly matches \`$oldval')")
+ if $varrow->{val} eq $oldval;
}, 'IGNORE');
}
-sub perlop_value ($$$) {
+sub perlop_value ($$$$) {
my $job = shift @_;
my $name = shift @_;
+ my $op = shift @_;
local $_ = shift @_;
$@ = '';
- eval $_[1];
- die "$@ executing perlop $_[1]\n" if $@;
+ eval $op;
+ die "$@ executing perlop \`$op'\n" if $@;
return $_;
}
for_runvars($jobs, $vars, sub {
my ($job, $name, $varrow) = @_;
- runvar_set($job, $name, perlop_value($job, $name, $varrow->{Val}));
+ my $oldval = $varrow->{val};
+ my $newval = perlop_value($job, $name, $op, $oldval);
+ runvar_set($job, $name, $newval, " (modified from \`$oldval')");
}, 'IGNORE');
}
" SET intended = ?".
" WHERE flight = ?",
{}, $blessing, $dstflight);
+ verbose "$dstflight blessing set to $blessing\n";
}
sub change__branch {
" SET branch = ?".
" WHERE flight = ?",
{}, $branch, $dstflight);
+ verbose "$dstflight branch set to $branch\n";
}
sub changes () {
if ($dstflightspec =~ m/^\d+$/) {
$dstflight = $dstflightspec;
db_retry($dstflight,'constructing',
- $dbh_tests, [qw(flights)], \&changes);
+ $dbh_tests, [qw(flights)], sub {
+ verbose_discard();
+ changes();
+ });
} elsif ($dstflightspec =~ m/^new:/) {
my $intended = $'; #';
db_retry($dbh_tests, [qw(flights)], sub {
+ verbose_discard();
$dstflight = $mjobdb->flight_create($intended, $c{DefaultBranch});
$mjobdb->dbfl_check($dstflight, 'constructing');
+ verbose "$dstflight flight created, intended blessing $intended\n";
changes();
});
+ verbose_flush();
print "$dstflight\n" or die $!;
} else {
die "$dstflightspec ?";
}
+ verbose_flush();
}
main();