ts_get_host_guest ts_check_done
fail broken logm $logm_handle $logm_prefix
- substep_start substep_finish intended_blessing
+ substep_start substep_finish substep_eval
+ intended_blessing
get_filecontents
report_once
: "($flight.$job not marked $newst)");
}
-sub substep_start ($$) {
+sub complete_testid ($) {
+ my ($testidr) = @_;
+ $$testidr =~ s{^(?=/)}{
+ $ENV{OSSTEST_TESTID} // sprintf('SUBSTEP-%s-%s', time, $$)
+ }e;
+}
+
+sub substep_start ($;$) {
my ($testid,$script) = @_;
+ complete_testid(\$testid);
+ if (!defined $script) {
+ $script = $0;
+ $script =~ s{^.*/}{};
+ }
$mjobdb->step_start($testid,$script);
}
sub substep_finish ($$) {
my ($testid,$stepstatus) = @_;
+ complete_testid(\$testid);
$mjobdb->step_finish($testid,$stepstatus);
}
+sub substep_eval ($$;$) {
+ # substep_eval(TESTID, [SCRIPTNAME], sub { ... });
+ my $fn = pop @_;
+ my ($testid,$script) = @_;
+ substep_start($testid,$script);
+ eval { $fn->(); };
+ if (length $@) {
+ logm("substep ($testid) failed: $@");
+ substep_finish($testid,'fail');
+ } else {
+ substep_finish($testid,'pass');
+ }
+}
+
+
sub intended_blessing () {
# must be run outside transaction
my $intended;