parallel: --tmux needs LC_CTYPE set.

parallel: '--halt done'.
This commit is contained in:
Ole Tange 2017-04-22 22:42:11 +02:00
parent 426ea9b372
commit 77da672741
15 changed files with 1505 additions and 778 deletions

View file

@ -195,7 +195,7 @@ to:parallel@gnu.org, bug-parallel@gnu.org
Subject: GNU Parallel 20170422 ('Санкт-Петербу́рг') released <<[stable]>>
GNU Parallel 20170422 ('Stockholm/London/Санкт-Петербу́рг') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
GNU Parallel 20170422 ('Paris/Stockholm/London/Санкт-Петербу́рг') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
<<No new functionality was introduced so this is a good candidate for a stable release.>>
@ -218,6 +218,9 @@ https://128.84.21.199/pdf/1703.09026.pdf
https://wiki.ncsa.illinois.edu/display/ROGER/Using+GNU+Parallel
https://github.com/lucascbeyeler/zmbackup
http://helpful.knobs-dials.com/index.php/Find_and_xargs_and_parallel#Parallel
https://github.com/mlangill/microbiome_helper/wiki/Quick-Introduction-to-GNU-Parallel
http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0174575

View file

@ -182,84 +182,6 @@ env_parallel() {
fi
}
_parset() {
# $1 = variable NAME
# If ${"$1"} is an array: Then put the output into variables with those names
# else put the output into an array named ${"$1"}
# e.g.:
# # Create array named myvar
# parset myvar echo ::: {1..10}
# echo ${myvar[5]}
#
# # Put output into $var_a $var_b $var_c
# varnames=(var_a var_b var_c)
# parset -a varnames echo ::: {1..3}
# echo $var_c
#
# # Put output into $var_a2 $var_b2 $var_c2
# varname=var_a2,var_b2,var_c2
# parset -a varname echo ::: {1..3}
# echo $var_c2
#
# # Put output into $var_a3 $var_b3 $var_c3
# varname="var_a3 var_b3 var_c3"
# parset -a varname echo ::: {1..3}
# echo $var_c3
# Variable name to store in
local _parset_vname
local _parset_vnames
# Array to fetch names from
local _parset_aname
_parset_vname="$1"
_parset_aname="_nO_sUch_vAr"
shift
if [[ "-a" == "$_parset_vname" ]] ; then
# Option -a given
echo '-a given'
_parset_vname="$1"
_parset_aname="$1"
shift
if [[ "$(declare -p $_parset_vname 2>/dev/null)" =~ "declare -a" ]]; then
# OK
true
else
# error
echo "$_parset_vname" must be an array
return 1
fi
else
local _parset_splitable
_parset_splitable="$(eval echo '$'$_parset_vname)"
if echo "$_parset_splitable" | grep -E ',| ' >/dev/null ; then
# Split on , and space
_parset_vnames=( $(perl -e 'print map { s/,| /\n/g; $_ } @ARGV' "$_parset_splitable" ) )
_parset_aname="_parset_vnames"
echo first ${_parset_vnames[0]}
else
# _parset_vname should be used as an array
true
fi
fi
if [[ "$(declare -p $_parset_aname 2>/dev/null)" =~ "declare -a" ]]; then
# vname refers to an array
# The array elements refers to variable names to put output into
eval $(
parallel --files "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\"\n"' |
parallel echo {2}={1} :::: - :::+ $(eval echo '${'$_parset_aname'[@]}')
)
unset _parset_aname
else
# Put output into array ${$_parset_vname}
eval $_parset_vname="( $( parallel --files "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi
}
parset() {
# If $1 contains ',' or space:
# Split on , to get the destination variable names
@ -286,7 +208,7 @@ parset() {
# Split on , or space to get the names
eval "$(
# Compute results into files
parallel --files "$@" |
parallel --files -k "$@" |
# var1=`cat tmpfile1; rm tmpfile1`
# var2=`cat tmpfile2; rm tmpfile2`
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
@ -297,7 +219,7 @@ parset() {
else
# $1 contains no space or ,
# => $1 is the name of the array to put data into
eval $_parset_name="( $( parallel --files "$@" |
eval $_parset_name="( $( parallel --files -k "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi
}

View file

@ -279,7 +279,8 @@ sub pipe_tee_setup {
# cat t4 | grep 4
# cat t5 | grep 5
# Remove the tmpfifo as soon as it is open
@Global::cat_prepends = map { "(rm $_;cat) < $_" } @fifos;
# 'exec' saves a process
@Global::cat_prepends = map { "(rm $_; exec cat) < $_" } @fifos;
}
sub pipe_part_files {
@ -1474,6 +1475,8 @@ sub parse_halt {
$Global::halt_fail = 1;
} elsif($fail_success eq "success") {
$Global::halt_success = 1;
} elsif($fail_success eq "done") {
$Global::halt_done = 1;
} else {
::error("--halt $when must be followed by ,success or ,fail.");
::wait_and_exit(255);
@ -3812,7 +3815,7 @@ sub reaper {
# Free the jobslot
$job->free_slot();
if($opt::timeout and not $job->exitstatus()) {
# Update average runtime for timeout
# Update average runtime for timeout only for successful jobs
$Global::timeoutq->update_median_runtime($job->runtime());
}
if($opt::keeporder) {
@ -4224,7 +4227,10 @@ sub qqx {
# that /bin/sh does not understand
my $PATH = $ENV{'PATH'};
my %env;
my @keep = qw(PATH SSH_AUTH_SOCK SSH_AGENT_PID);
# ssh with ssh-agent needs PATH SSH_AUTH_SOCK SSH_AGENT_PID
# ssh with Kerberos needs KRB5CCNAME
# tmux needs LC_CTYPE
my @keep = qw(PATH SSH_AUTH_SOCK SSH_AGENT_PID KRB5CCNAME LC_CTYPE);
@env{@keep} = @ENV{@keep};
local(%ENV);
%ENV = %env;
@ -8774,13 +8780,7 @@ sub set_exitsignal {
# Should we halt? Immediately? Gracefully?
# Returns: N/A
my $job = shift;
# --halt # => 1..100 (number of jobs failed, 101 means > 100)
# --halt % => 1..100 (pct of jobs failed)
if($Global::halt_pct and not $Global::halt_count) {
$total_jobs ||= $Global::JobQueue->total_jobs();
# From the pct compute the number of jobs that must fail/succeed
$Global::halt_count = $total_jobs * $Global::halt_pct;
}
my $limit;
if($job->exitstatus() or $job->exitsignal()) {
# Job failed
$Global::exitstatus++;
@ -8788,57 +8788,65 @@ sub set_exitsignal {
if($Global::halt_fail) {
::status("$Global::progname: This job failed:",
$job->replaced());
if($Global::halt_count <= $Global::total_failed) {
# At least N jobs had failed
if(not defined $Global::halt_exitstatus) {
if($Global::halt_pct) {
# --halt now,fail=X% or soon,fail=X%
$Global::halt_exitstatus =
::ceil($Global::total_failed / $total_jobs * 100);
} elsif($Global::halt_count) {
# --halt now,fail=X or soon,fail=X
$Global::halt_exitstatus = ::min($Global::total_failed,101);
}
if($Global::halt_count and $Global::halt_count == 1) {
# --halt now,fail=1 or soon,fail=1
$Global::halt_exitstatus = $job->exitstatus();
}
}
::debug("halt","Pct: ",$Global::halt_pct,
" count: ",$Global::halt_count,"\n");
if($Global::halt_when eq "soon"
and scalar(keys %Global::running) > 0) {
::status
("$Global::progname: Starting no more jobs. ".
"Waiting for ". (keys %Global::running).
" jobs to finish.");
$Global::start_no_new_jobs ||= 1;
}
return($Global::halt_when);
}
$limit = $Global::total_failed;
}
} else {
if($Global::halt_success) {
::debug("halt","Pct: ",$Global::halt_pct,"<=",
} elsif($Global::halt_success) {
::status("$Global::progname: This job succeeded:",
$job->replaced());
$limit = $Global::total_completed-$Global::total_failed;
}
if($Global::halt_done) {
::status("$Global::progname: This job finished:",
$job->replaced());
$limit = $Global::total_completed;
}
if(not defined $limit) {
return ""
}
# --halt # => 1..100 (number of jobs failed, 101 means > 100)
# --halt % => 1..100 (pct of jobs failed)
if($Global::halt_pct and not $Global::halt_count) {
$total_jobs ||= $Global::JobQueue->total_jobs();
# From the pct compute the number of jobs that must fail/succeed
$Global::halt_count = $total_jobs * $Global::halt_pct;
}
if($limit >= $Global::halt_count) {
# At least N jobs have failed/succeded/completed
# or at least N% have failed/succeded/completed
# So we should prepare for exit
if($Global::halt_fail or $Global::halt_done) {
# Set exit status
if(not defined $Global::halt_exitstatus) {
if($Global::halt_pct) {
# --halt now,fail=X% or soon,fail=X%
# --halt now,done=X% or soon,done=X%
$Global::halt_exitstatus =
::ceil($Global::total_failed / $total_jobs * 100);
} elsif($Global::halt_count) {
# --halt now,fail=X or soon,fail=X
# --halt now,done=X or soon,done=X
$Global::halt_exitstatus = ::min($Global::total_failed,101);
}
if($Global::halt_count and $Global::halt_count == 1) {
# --halt now,fail=1 or soon,fail=1
# --halt now,done=1 or soon,done=1
$Global::halt_exitstatus = $job->exitstatus();
}
}
::debug("halt","Pct: ",$Global::halt_pct,
" count: ",$Global::halt_count,"\n");
::status("$Global::progname: This job succeeded:",
$job->replaced());
if($Global::halt_count <=
$Global::total_completed-$Global::total_failed) {
# At least N jobs had success
# or at least N% had success
$Global::halt_exitstatus = 0;
if($Global::halt_when eq "soon"
and scalar(keys %Global::running) > 0) {
::status
("$Global::progname: Starting no more jobs. ".
"Waiting for ". (keys %Global::running).
" jobs to finish.");
$Global::start_no_new_jobs ||= 1;
}
return($Global::halt_when);
}
} elsif($Global::halt_success) {
$Global::halt_exitstatus = 0;
}
if($Global::halt_when eq "soon"
and scalar(keys %Global::running) > 0) {
::status
("$Global::progname: Starting no more jobs. ".
"Waiting for ". (keys %Global::running).
" jobs to finish.");
$Global::start_no_new_jobs ||= 1;
}
return($Global::halt_when);
}
return "";
}

View file

@ -760,10 +760,10 @@ I<when> can be 'now' which means kill all running jobs and halt
immediately, or it can be 'soon' which means wait for all running jobs
to complete, but start no new jobs.
I<why> can be 'fail=X', 'fail=Y%', 'success=X', or 'success=Y%' where
X is the number of jobs that has to fail or succeed before halting,
and Y is the percentage of jobs that has to fail or succeed before
halting.
I<why> can be 'fail=X', 'fail=Y%', 'success=X', 'success=Y%',
'done=X', or 'done=Y%' where X is the number of jobs that has to fail,
succeed, or be done before halting, and Y is the percentage of jobs
that has to fail, succeed, or be done before halting.
Example:
@ -793,6 +793,18 @@ exit when 3 jobs succeeds, but wait for running jobs to complete.
exit when 3% of the jobs have succeeded. Kill running jobs.
=item Z<> --halt now,done=1
exit when one of the jobs finishes. Kill running jobs.
=item Z<> --halt soon,done=3
exit when 3 jobs finishes, but wait for running jobs to complete.
=item Z<> --halt now,done=3%
exit when 3% of the jobs have finished. Kill running jobs.
=back
For backwards compability these also work:
@ -2281,8 +2293,8 @@ Time out for command. If the command runs for longer than I<secs>
seconds it will get killed as per B<--termseq>.
If I<secs> is followed by a % then the timeout will dynamically be
computed as a percentage of the median average runtime. Only values
> 100% will make sense.
computed as a percentage of the median average runtime of successful
jobs. Only values > 100% will make sense.
=item B<--verbose>

View file

@ -685,7 +685,7 @@ par_tagstring_pipe() {
par_link_files_as_only_arg() {
echo 'bug #50685: single ::::+ does not work'
parallel echo ::::+ <(seq 10) <(seq 3) <(seq 4)
parallel -k echo ::::+ <(seq 10) <(seq 3) <(seq 4)
}
export -f $(compgen -A function | grep par_)

View file

@ -16,17 +16,18 @@ par_retries_unreachable() {
}
par_outside_file_handle_limit() {
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) |
stdout parallel -uj 0 | egrep -v 'processes took|adjusting' |
perl -pe 's/\d\d\d/999/'
ulimit -n 1024
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) |
stdout parallel -uj 0 | egrep -v 'processes took|adjusting' |
perl -pe 's/\d\d\d/999/'
}
par_over_4GB() {
echo '### Test if we can deal with output > 4 GB'
echo |
nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' |
nice md5sum
echo '### Test if we can deal with output > 4 GB'
echo |
nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' |
nice md5sum
}

View file

@ -201,32 +201,33 @@ par_parset() {
. `which env_parallel.bash`
echo 'Put output into $myarray'
parset myarray seq 10 ::: 14 15 16
parset myarray -k seq 10 ::: 14 15 16
echo "${myarray[1]}"
echo 'Put output into vars "$seq, $pwd, $ls"'
parset "seq pwd ls" ::: "seq 10" pwd ls
parset "seq pwd ls" -k ::: "seq 10" pwd ls
echo "$seq"
echo 'Put output into vars ($seq, $pwd, $ls)':
into_vars=(seq pwd ls)
parset "${into_vars[*]}" ::: "seq 5" pwd ls
parset "${into_vars[*]}" -k ::: "seq 5" pwd ls
echo "$seq"
echo 'The commands to run can be an array'
cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd")
parset data ::: "${cmd[@]}"
parset data -k ::: "${cmd[@]}"
echo "${data[0]}"
echo "${data[1]}"
echo 'You cannot pipe into parset, but must use a tempfile'
seq 10 > parallel_input
parset res echo :::: parallel_input
seq 10 > /tmp/parset_input_$$
parset res -k echo :::: /tmp/parset_input_$$
echo "${res[0]}"
echo "${res[9]}"
rm /tmp/parset_input_$$
echo 'Commands with newline require -0'
parset var -0 ::: 'echo "line1
parset var -k -0 ::: 'echo "line1
line2"' 'echo "command2"'
echo "${var[0]}"
}

View file

@ -4,12 +4,13 @@ par_print_before_halt_on_error() {
echo '### What is printed before the jobs are killed'
mytest() {
HALT=$1
(echo 0;
echo 3;
(echo 0.1;
echo 3.2;
seq 0 7;
echo 0;
echo 0.3;
echo 8) |
parallel --tag -j10 -kq --halt $HALT perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; '$HALT' > 0 ? exit shift : exit not shift;';
parallel --tag --delay 0.1 -j4 -kq --halt $HALT \
perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; '$HALT' > 0 ? exit shift : exit not shift;' {};
echo exit code $?
}
export -f mytest
@ -20,21 +21,22 @@ par_testhalt() {
testhalt_false() {
echo '### testhalt --halt '$1;
(yes 0 | head -n 10; seq 10) |
stdout parallel -kj4 --halt $1 \
'sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
stdout parallel -kj4 --delay 0.23 --halt $1 \
'echo job {#}; sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
}
testhalt_true() {
echo '### testhalt --halt '$1;
(seq 10; yes 0 | head -n 10) |
stdout parallel -kj4 --halt $1 \
'sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
stdout parallel -kj4 --delay 0.17 --halt $1 \
'echo job {#}; sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
};
export -f testhalt_false;
export -f testhalt_true;
stdout parallel -kj0 testhalt_{4} {1},{2}={3} \
::: now soon ::: fail success ::: 0 1 2 30% 70% ::: true false |
# Remove lines that only show up now and then
perl -ne '/Starting no more jobs./ or print'
stdout parallel -kj0 --delay 0.11 --tag testhalt_{4} {1},{2}={3} \
::: now soon ::: fail success done ::: 0 1 2 30% 70% ::: true false |
# Remove lines that only show up now and then
perl -ne '/Starting no more jobs./ or print'
}
export -f $(compgen -A function | grep par_)

View file

@ -950,7 +950,7 @@ par_bash_environment_too_big() {
env_parallel -S lo echo ::: OK
bigvar=u
eval 'bigfunc() { a="'"$(yes a| head -c 118k)"'"; };'
eval 'bigfunc() { a="'"$(yes a| head -c 120k)"'"; };'
env_parallel echo ::: OK
env_parallel -S lo echo ::: OK
@ -963,7 +963,7 @@ par_bash_environment_too_big() {
env_parallel -S lo echo ::: fail
bigvar=u
eval 'bigfunc() { a="'"$(yes a| head -c 119k)"'"; };'
eval 'bigfunc() { a="'"$(yes a| head -c 121k)"'"; };'
env_parallel echo ::: fail
env_parallel -S lo echo ::: fail
_EOF

View file

@ -111,5 +111,5 @@ echo '### Test bug #35820: sem breaks if $HOME is not writable'
rm -rf /tmp/.parallel;
HOME=/tmp sem echo OK;
HOME=/tmp sem --wait;
HOME=/usr/this/should/fail stdout sem echo should fail
ssh lo 'HOME=/usr/this/should/fail stdout sem echo should fail'
EOF

View file

@ -7,26 +7,6 @@ test -d "parallel-00000000" || mkdir "parallel-00000000"
(cd src && make top_distdir=../parallel-00000000 distdir=../parallel-00000000/src \
am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
make[0]: Entering directory '~/privat/parallel/src'
pod2man --release='00000000' --center='parallel' \
--section=1 ./parset > ./parset.1n \
&& mv ./parset.1n ./parset.1 \
|| echo "Warning: pod2man not found. Using old parset.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parset.1
pod2html --title "GNU parset" ./parset > ./parset.htmln \
&& mv ./parset.htmln ./parset.html \
|| echo "Warning: pod2html not found. Using old parset.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parset.html
rm -f ./pod2htm*
pod2texi --output=./parset.texi ./parset \
|| echo "Warning: pod2texi not found. Using old parset.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parset.texi
pod2pdf --output-file ./parset.pdf ./parset --title "GNU parset" \
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parset.pdf
make[0]: Leaving directory '~/privat/parallel/src'
test -n "" \
|| find "parallel-00000000" -type d ! -perm -755 \
@ -101,12 +81,6 @@ pod2man --release='00000000' --center='parallel' \
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_alternatives.7
pod2man --release='00000000' --center='parallel' \
--section=1 ./parset > ./parset.1n \
&& mv ./parset.1n ./parset.1 \
|| echo "Warning: pod2man not found. Using old parset.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parset.1
pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \
&& mv ./parallel.htmln ./parallel.html \
|| echo "Warning: pod2html not found. Using old parallel.html"
@ -187,10 +161,6 @@ pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_alternatives.texi
pod2texi --output=./parset.texi ./parset \
|| echo "Warning: pod2texi not found. Using old parset.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parset.texi
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
/bin/bash: pod2pdf: command not found
@ -223,10 +193,6 @@ pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
pod2pdf --output-file ./parset.pdf ./parset --title "GNU parset" \
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parset.pdf
make[0]: Entering directory '/tmp/parallel-00000000/src'
/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c parallel sql niceload parcat env_parallel env_parallel.ash env_parallel.bash env_parallel.csh env_parallel.dash env_parallel.fish env_parallel.ksh env_parallel.pdksh env_parallel.sh env_parallel.tcsh env_parallel.zsh '/usr/local/bin'
@ -315,10 +281,6 @@ pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_alternatives.texi
pod2texi --output=./parset.texi ./parset \
|| echo "Warning: pod2texi not found. Using old parset.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parset.texi
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
/bin/bash: pod2pdf: command not found
@ -351,10 +313,6 @@ pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
pod2pdf --output-file ./parset.pdf ./parset --title "GNU parset" \
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parset.pdf
/bin/mkdir -p '/usr/local/share/doc/parallel'
/usr/bin/install -c -m 644 parallel.html env_parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel_design.html parallel_alternatives.html parcat.html parallel.texi env_parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel_design.texi parallel_alternatives.texi parcat.texi parset.texi parallel.pdf env_parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_design.pdf parallel_alternatives.pdf parcat.pdf parset.pdf '/usr/local/share/doc/parallel'
pod2man --release='00000000' --center='parallel' \
@ -405,12 +363,6 @@ pod2man --release='00000000' --center='parallel' \
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_alternatives.7
pod2man --release='00000000' --center='parallel' \
--section=1 ./parset > ./parset.1n \
&& mv ./parset.1n ./parset.1 \
|| echo "Warning: pod2man not found. Using old parset.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parset.1
/bin/mkdir -p '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 parallel.1 env_parallel.1 sem.1 sql.1 niceload.1 parcat.1 parset.1 '/usr/local/share/man/man1'
/bin/mkdir -p '/usr/local/share/man/man7'

View file

@ -1,9 +1,9 @@
make[1]: Entering directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
make[1]: Entering directory '~/privat/parallel/testsuite'
# || true - because this should not fail if the VM is not running
VBoxManage controlvm CentOS3-root:centos3 savestate || true
VBoxManage controlvm RedHat9-root:redhat9 savestate || true
VBoxManage controlvm OracleXE savestate || true
make[1]: Leaving directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
make[1]: Leaving directory '~/privat/parallel/testsuite'
echo '### bug #44358: 2 GB records cause problems for -N'
### bug #44358: 2 GB records cause problems for -N
echo '5 GB version: Eats 12.5 GB'
@ -52,7 +52,7 @@ Eats 4.7 GB
parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1.
echo '**'
**
make[1]: Entering directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
make[1]: Entering directory '~/privat/parallel/testsuite'
# Make sure we can reach the virtual machines
#sudo ifconfig wlp13s0:0 192.168.1.72 || sudo ifconfig wlan0:0 192.168.1.72
sudo ifconfig enp14s0:0 192.168.1.72 || sudo ifconfig eth0:0 192.168.1.72
@ -64,4 +64,4 @@ VBoxManage startvm RedHat9-root:redhat9 || VBoxManage controlvm RedHat9-root:red
Waiting for VM "RedHat9-root:redhat9" to power on...
VM "RedHat9-root:redhat9" has been successfully started.
parallel 'ping {} | read' ::: redhat9.tange.dk centos3.tange.dk
make[1]: Leaving directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
make[1]: Leaving directory '~/privat/parallel/testsuite'

File diff suppressed because it is too large Load diff

View file

@ -237,7 +237,7 @@ echo a b | wc -w
2
echo '### Test bug #35820: sem breaks if $HOME is not writable'
### Test bug #35820: sem breaks if $HOME is not writable
echo 'Workaround: use another writable dir'; rm -rf /tmp/.parallel; HOME=/tmp sem echo OK; HOME=/tmp sem --wait; HOME=/usr/this/should/fail stdout sem echo should fail
echo 'Workaround: use another writable dir'; rm -rf /tmp/.parallel; HOME=/tmp sem echo OK; HOME=/tmp sem --wait; ssh lo 'HOME=/usr/this/should/fail stdout sem echo should fail'
Workaround: use another writable dir
OK
parallel: Error: Cannot change into non-executable dir /usr/this/should/fail/.parallel: No such file or directory
parallel: Error: Cannot change into non-executable dir /usr/this/should/fail/.parallel/semaphores: No such file or directory

View file

@ -699,9 +699,12 @@ Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
9
9
9
9
parallel: This job failed:
echo X; exit X
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
parallel: This job failed:
echo X; exit X
parallel -j2 --halt now,fail=1 echo {}\; exit {} ::: 0 0 1 2 3
9
9
@ -726,6 +729,8 @@ echo X; exit X
9
9
9
9
9
parallel: This job succeeded:
echo X; exit X
parallel -k --retries 3 \