[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH OSSTEST v1 5/5] mg-show-flight-runvars: recurse on buildjobs upon request



Ian Campbell writes ("[PATCH OSSTEST v1 5/5] mg-show-flight-runvars: recurse on 
buildjobs upon request"):
> By looping over @rows looking for buildjobs runvars and adding those
> jobs to the output until nothing changes.
...
> Note that synth runvars (if requests) are now sorted in with the
> regular ones, whereas previously they were listed last. Retaining the
> old behaviour would be too complex I feel.

...
> -sub collect ($) {
> -    my ($flight) = @_;
> +    $jobcond //= "TRUE";
...
>      my $q = $dbh_tests->prepare
>       ("SELECT synth, ".(join ',', @cols)." $qfrom ORDER BY synth, name, 
> job");

You probably want to drop the `synth' from the ORDER here, even if you
take my suggestion below.  The sort is still a good idea here because
it ensures that the output is deterministic.

> +    my ($oflight, $ojob) = flight_otherjob($tflight, $row->[2]);
> +    collect($oflight, "job = '$ojob'");

SQL injection vulnerability, I think.  (There are lots of places
where jobs are treated this way, but they come from the command line
or similar, or have been checked against some regexp.)

I think you should use the $jobcond @jobcondparams pattern.


> -foreach my $row (@rows) {
> +# Sort by runvar name, then (flight+)job.
> +foreach my $row (sort { $a->[1] cmp $b->[1]//$a->[0] cmp $b->[1] } @rows) {

If you retain it this way, put spaces round your //.

But maybe you should use a Schwartzian transform instead.

   my $xform = sub { [ ($->[1] =~ m/\~$/)." $_->[1] $_->[0]", $_ ]; };
   foreach my $row (map { $_->[1] } sort { $xform->($a) cmp
       $xform->($b) etc.

This makes the synth sorting easy too.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.