mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
Fixed bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken.
This commit is contained in:
parent
210ca9614c
commit
da9043fc65
54
src/parallel
54
src/parallel
|
@ -211,9 +211,6 @@ sub pipe_part_files {
|
||||||
for(my $i=0; $i<$#pos; $i++) {
|
for(my $i=0; $i<$#pos; $i++) {
|
||||||
push @cat_partials, cat_partial($file, 0, length($header), $pos[$i], $pos[$i+1]);
|
push @cat_partials, cat_partial($file, 0, length($header), $pos[$i], $pos[$i+1]);
|
||||||
}
|
}
|
||||||
# Remote exec should look like:
|
|
||||||
# ssh -oLogLevel=quiet lo 'eval `echo $SHELL | grep "/t\{0,1\}csh" > /dev/null && echo setenv PARALLEL_SEQ '$PARALLEL_SEQ'\; setenv PARALLEL_PID '$PARALLEL_PID' || echo PARALLEL_SEQ='$PARALLEL_SEQ'\;export PARALLEL_SEQ\; PARALLEL_PID='$PARALLEL_PID'\;export PARALLEL_PID` ;' tty\ \>/dev/null\ \&\&\ stty\ isig\ -onlcr\ -echo\;echo\ \$SHELL\ \|\ grep\ \"/t\\\{0,1\\\}csh\"\ \>\ /dev/null\ \&\&\ setenv\ FOO\ /tmp/foo\ \|\|\ export\ FOO=/tmp/foo\; \(wc\ -\ \$FOO\)
|
|
||||||
# ssh -tt not allowed. Remote will die due to broken pipe anyway.
|
|
||||||
return @cat_partials;
|
return @cat_partials;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5786,35 +5783,33 @@ sub empty {
|
||||||
sub total_jobs {
|
sub total_jobs {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
if(not defined $self->{'total_jobs'}) {
|
if(not defined $self->{'total_jobs'}) {
|
||||||
my $job;
|
my $record;
|
||||||
my @queue;
|
my @arg_records;
|
||||||
|
my $record_queue = $self->{'commandlinequeue'}{'arg_queue'};
|
||||||
my $start = time;
|
my $start = time;
|
||||||
while($job = $self->get()) {
|
while($record = $record_queue->get()) {
|
||||||
if(time - $start > 10) {
|
if(time - $start > 10) {
|
||||||
::warning("Reading ".scalar(@queue)." arguments took longer than 10 seconds.");
|
::warning("Reading ".scalar(@arg_records)." arguments took longer than 10 seconds.");
|
||||||
$opt::eta && ::warning("Consider removing --eta.");
|
$opt::eta && ::warning("Consider removing --eta.");
|
||||||
$opt::bar && ::warning("Consider removing --bar.");
|
$opt::bar && ::warning("Consider removing --bar.");
|
||||||
$opt::shuf && ::warning("Consider removing --shuf.");
|
$opt::shuf && ::warning("Consider removing --shuf.");
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
push @queue, $job;
|
push @arg_records, $record;
|
||||||
}
|
}
|
||||||
while($job = $self->get()) {
|
while($record = $record_queue->get()) {
|
||||||
push @queue, $job;
|
push @arg_records, $record;
|
||||||
}
|
}
|
||||||
if($opt::shuf) {
|
if($opt::shuf) {
|
||||||
my $i = @queue;
|
my $i = @arg_records;
|
||||||
while (--$i) {
|
while (--$i) {
|
||||||
my $j = int rand($i+1);
|
my $j = int rand($i+1);
|
||||||
@queue[$i,$j] = @queue[$j,$i];
|
@arg_records[$i,$j] = @arg_records[$j,$i];
|
||||||
}
|
|
||||||
my $seq = 1;
|
|
||||||
for my $job (@queue) {
|
|
||||||
$job->{'commandline'}->set_seq($seq++);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$self->unget(@queue);
|
$record_queue->unget(@arg_records);
|
||||||
$self->{'total_jobs'} = $#queue+1;
|
$self->{'total_jobs'} = $#arg_records+1;
|
||||||
|
::debug("init","Total jobs: ".$self->{'total_jobs'}."\n");
|
||||||
}
|
}
|
||||||
return $self->{'total_jobs'};
|
return $self->{'total_jobs'};
|
||||||
}
|
}
|
||||||
|
@ -6480,7 +6475,7 @@ sub wrapped {
|
||||||
if(not defined $self->{'wrapped'}) {
|
if(not defined $self->{'wrapped'}) {
|
||||||
my $command = $self->replaced();
|
my $command = $self->replaced();
|
||||||
if($opt::shellquote) {
|
if($opt::shellquote) {
|
||||||
# Prepend \echo (echo no-\ is wrong in csh)
|
# Prepend /bin/echo (echo no-/bin is wrong in csh)
|
||||||
# and quote twice
|
# and quote twice
|
||||||
$command = "/bin/echo " .
|
$command = "/bin/echo " .
|
||||||
::shell_quote_scalar(::shell_quote_scalar($command));
|
::shell_quote_scalar(::shell_quote_scalar($command));
|
||||||
|
@ -8785,7 +8780,13 @@ sub get {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
if(@{$self->{'unget'}}) {
|
if(@{$self->{'unget'}}) {
|
||||||
$self->{'arg_number'}++;
|
$self->{'arg_number'}++;
|
||||||
return shift @{$self->{'unget'}};
|
# Flush cached computed replacements in Arg-objects
|
||||||
|
# To fix: parallel --bar echo {%} ::: a b c ::: d e f
|
||||||
|
my $ret = shift @{$self->{'unget'}};
|
||||||
|
if($ret) {
|
||||||
|
map { $_->flush_cache() } map { @$_ } $ret;
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
my $ret = $self->{'arg_sub_queue'}->get();
|
my $ret = $self->{'arg_sub_queue'}->get();
|
||||||
if(defined $Global::max_number_of_args
|
if(defined $Global::max_number_of_args
|
||||||
|
@ -8794,6 +8795,11 @@ sub get {
|
||||||
# \0 => nothing (not the empty string)
|
# \0 => nothing (not the empty string)
|
||||||
return [Arg->new("\0")];
|
return [Arg->new("\0")];
|
||||||
} else {
|
} else {
|
||||||
|
# Flush cached computed replacements in Arg-objects
|
||||||
|
# To fix: parallel --bar echo {%} ::: a b c ::: d e f
|
||||||
|
if($ret) {
|
||||||
|
map { $_->flush_cache() } map { @$_ } $ret;
|
||||||
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8904,13 +8910,7 @@ sub get {
|
||||||
if($opt::xapply) {
|
if($opt::xapply) {
|
||||||
return $self->xapply_get();
|
return $self->xapply_get();
|
||||||
} else {
|
} else {
|
||||||
my $arglist = $self->nest_get();
|
return $self->nest_get();
|
||||||
# Flush cached computed values
|
|
||||||
# To fix: parallel echo {%} ::: 1 2 ::: 4 3
|
|
||||||
if($arglist) {
|
|
||||||
map { $_->flush_cache() } @$arglist;
|
|
||||||
}
|
|
||||||
return $arglist;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,9 @@ export SMALLDISK
|
||||||
sudo chmod 777 /mnt/ram
|
sudo chmod 777 /mnt/ram
|
||||||
) >/dev/null 2>/dev/null
|
) >/dev/null 2>/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 -k --joblog /tmp/jl-`basename $0` -L1
|
||||||
echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)';
|
echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)';
|
||||||
seq 10 | parallel --halt now,fail=1 true;
|
seq 10 | parallel --halt now,fail=1 true;
|
||||||
|
@ -229,6 +232,20 @@ parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
|
echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken'
|
||||||
|
parallel --bar -kj2 echo {%} ::: a b ::: c d e 2>/dev/null
|
||||||
|
parallel --halt now,fail=10% -kj2 echo {%} ::: a b ::: c d e
|
||||||
|
parallel --eta -kj2 echo {%} ::: a b ::: c d e 2>/dev/null
|
||||||
|
parallel --shuf -kj2 echo {%} ::: a b ::: c d e 2>/dev/null
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
|
echo 'bug #46231: {%} with --pipepart broken. Should give 1+2'
|
||||||
|
seq 10000 > /tmp/num10000;
|
||||||
|
parallel --pipepart -ka /tmp/num10000 --block 10k -j2 echo {%};
|
||||||
|
rm /tmp/num10000
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
echo '### 1 .par file from --files expected'
|
echo '### 1 .par file from --files expected'
|
||||||
|
|
|
@ -477,5 +477,45 @@ parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK
|
||||||
OK
|
OK
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
|
echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken'
|
||||||
|
bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken
|
||||||
|
parallel --bar -kj2 echo {%} ::: a b ::: c d e 2>/dev/null
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
parallel --halt now,fail=10% -kj2 echo {%} ::: a b ::: c d e
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
parallel --eta -kj2 echo {%} ::: a b ::: c d e 2>/dev/null
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
parallel --shuf -kj2 echo {%} ::: a b ::: c d e 2>/dev/null
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
echo 'bug #46231: {%} with --pipepart broken. Should give 1+2'
|
||||||
|
bug #46231: {%} with --pipepart broken. Should give 1+2
|
||||||
|
seq 10000 > /tmp/num10000; parallel --pipepart -ka /tmp/num10000 --block 10k -j2 echo {%}; rm /tmp/num10000
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
|
2
|
||||||
|
1
|
||||||
### 1 .par file from --files expected
|
### 1 .par file from --files expected
|
||||||
1
|
1
|
||||||
|
|
Loading…
Reference in a new issue