From 83ffe1af131fe995e5d189287994c750fafa077a Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Fri, 23 Nov 2018 00:30:23 +0100 Subject: [PATCH] parallel: Simpler job control flow. --- doc/release_new_version | 12 +- src/niceload | 4 +- src/parallel | 181 +++++++++--------- src/parallel_alternatives.pod | 9 +- src/sql | 2 +- testsuite/tests-to-run/parallel-local-ssh7.sh | 3 + testsuite/tests-to-run/parallel-polarhome.sh | 4 +- testsuite/wanted-results/parallel-local-100s | 26 ++- testsuite/wanted-results/parallel-local-ssh7 | 62 +++--- testsuite/wanted-results/parallel-local23 | 2 +- testsuite/wanted-results/parallel-polarhome | 13 -- 11 files changed, 166 insertions(+), 152 deletions(-) diff --git a/doc/release_new_version b/doc/release_new_version index 6d06639a..e070f3e7 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -205,9 +205,9 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20181022 ('peoples vote cumex khashoggi Sulawesi(Palu)') released <<[stable]>> +Subject: GNU Parallel 20181122 ('Kilogram/brexitdeal/Stan Lee/Cesar Sayoc/Tree of Life/Iran') released <<[stable]>> -GNU Parallel 20181022 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ +GNU Parallel 20181122 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ <> @@ -215,13 +215,9 @@ Quote of the month: New in this release: -* env_parallel.fish: --session support (alpha quality) +* https://codeday.me/bug/20181015/298447.html -* GNU Parallel was cited in: High-throughput sequencing of murine immunoglobulin heavy chain repertoires using single side unique molecular identifiers on an Ion Torrent PGM https://doi.org/10.18632/oncotarget.25493 - -* GNU parallel in Japanese Wikipedia https://ja.wikipedia.org/wiki/GNU_parallel - -* Outils de paramétrisation des tâches: lots de tâches, GNU Parallel https://www.eventbrite.ca/e/inscription-outils-de-parametrisation-des-taches-lots-de-taches-gnu-parallel-et-bqtools-midi-conference-de-50271076142 +* https://qiita.com//grohiro/items/4db3fa951a4778c5c479 * Bug fixes and man page updates. diff --git a/src/niceload b/src/niceload index f43763c1..45fb23a6 100755 --- a/src/niceload +++ b/src/niceload @@ -24,7 +24,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20181022; +$Global::version = 20181024; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { @@ -1147,7 +1147,7 @@ sub io_status_linux { # throw away all execpt the last Device:-section my @iostat; for(reverse @iostat_out) { - /Device:/ and last; + /Device/ and last; push @iostat, (split(/\s+/,$_))[13]; } my $io = ::max(@iostat); diff --git a/src/parallel b/src/parallel index 4196c6c8..5b3373e8 100755 --- a/src/parallel +++ b/src/parallel @@ -120,7 +120,7 @@ if($Global::semaphore) { $sem = acquire_semaphore(); } $SIG{TERM} = \&start_no_new_jobs; -start_more_jobs(); +while(start_more_jobs()) {} if($opt::tee) { # All jobs must be running in parallel for --tee $Global::start_no_new_jobs = 1; @@ -620,6 +620,7 @@ sub spreadstdin { my $sleep =1; while($Global::total_running > 0) { $sleep = ::reap_usleep($sleep); + start_more_jobs(); } } $Global::start_no_new_jobs ||= 1; @@ -1554,7 +1555,7 @@ sub check_invalid_option_combinations { sub init_globals { # Defaults: - $Global::version = 20181022; + $Global::version = 20181024; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -2668,7 +2669,6 @@ sub init_run_jobs { # Returns: # $jobs_started = number of jobs started my $jobs_started = 0; - my $jobs_started_this_round = 0; if($Global::start_no_new_jobs) { return $jobs_started; } @@ -2678,65 +2678,61 @@ sub init_run_jobs { changed_procs_file(); changed_sshloginfile(); } - do { - $jobs_started_this_round = 0; - # This will start 1 job on each --sshlogin (if possible) - # thus distribute the jobs on the --sshlogins round robin - for my $sshlogin (values %Global::host) { - if($Global::JobQueue->empty() and not $opt::pipe) { - # No more jobs in the queue - last; - } - debug("run", "Running jobs before on ", $sshlogin->string(), ": ", - $sshlogin->jobs_running(), "\n"); - if ($sshlogin->jobs_running() < $sshlogin->max_jobs_running()) { - if($opt::delay - and - $opt::delay > ::now() - $Global::newest_starttime) { - # It has been too short since last start - next; - } - if($opt::load and $sshlogin->loadavg_too_high()) { - # The load is too high or unknown - next; - } - if($opt::noswap and $sshlogin->swapping()) { - # The server is swapping - next; - } - if($opt::limit and $sshlogin->limit()) { - # Over limit - next; - } - if($opt::memfree and $sshlogin->memfree() < $opt::memfree) { - # The server has not enough mem free - ::debug("mem", "Not starting job: not enough mem\n"); - next; - } - if($sshlogin->too_fast_remote_login()) { - # It has been too short since - next; - } - debug("run", $sshlogin->string(), - " has ", $sshlogin->jobs_running(), - " out of ", $sshlogin->max_jobs_running(), - " jobs running. Start another.\n"); - if(start_another_job($sshlogin) == 0) { - # No more jobs to start on this $sshlogin - debug("run","No jobs started on ", - $sshlogin->string(), "\n"); - next; - } - $sshlogin->inc_jobs_running(); - $sshlogin->set_last_login_at(::now()); - $jobs_started++; - $jobs_started_this_round++; - } - debug("run","Running jobs after on ", $sshlogin->string(), ": ", - $sshlogin->jobs_running(), " of ", - $sshlogin->max_jobs_running(), "\n"); + # This will start 1 job on each --sshlogin (if possible) + # thus distribute the jobs on the --sshlogins round robin + for my $sshlogin (values %Global::host) { + if($Global::JobQueue->empty() and not $opt::pipe) { + # No more jobs in the queue + last; } - } while($jobs_started_this_round); + debug("run", "Running jobs before on ", $sshlogin->string(), ": ", + $sshlogin->jobs_running(), "\n"); + if ($sshlogin->jobs_running() < $sshlogin->max_jobs_running()) { + if($opt::delay + and + $opt::delay > ::now() - $Global::newest_starttime) { + # It has been too short since last start + next; + } + if($opt::load and $sshlogin->loadavg_too_high()) { + # The load is too high or unknown + next; + } + if($opt::noswap and $sshlogin->swapping()) { + # The server is swapping + next; + } + if($opt::limit and $sshlogin->limit()) { + # Over limit + next; + } + if($opt::memfree and $sshlogin->memfree() < $opt::memfree) { + # The server has not enough mem free + ::debug("mem", "Not starting job: not enough mem\n"); + next; + } + if($sshlogin->too_fast_remote_login()) { + # It has been too short since + next; + } + debug("run", $sshlogin->string(), + " has ", $sshlogin->jobs_running(), + " out of ", $sshlogin->max_jobs_running(), + " jobs running. Start another.\n"); + if(start_another_job($sshlogin) == 0) { + # No more jobs to start on this $sshlogin + debug("run","No jobs started on ", + $sshlogin->string(), "\n"); + next; + } + $sshlogin->inc_jobs_running(); + $sshlogin->set_last_login_at(::now()); + $jobs_started++; + } + debug("run","Running jobs after on ", $sshlogin->string(), ": ", + $sshlogin->jobs_running(), " of ", + $sshlogin->max_jobs_running(), "\n"); + } return $jobs_started; } @@ -2912,8 +2908,8 @@ sub drain_job_queue { } # * because of loadavg # * because of too little time between each ssh login. - start_more_jobs(); $sleep = ::reap_usleep($sleep); + start_more_jobs(); if($Global::max_jobs_running == 0) { ::warning("There are no job slots available. Increase --jobs."); } @@ -2921,6 +2917,7 @@ sub drain_job_queue { while($opt::sqlmaster and not $Global::sql->finished()) { # SQL master $sleep = ::reap_usleep($sleep); + start_more_jobs(); if($Global::start_sqlworker) { # Start an SQL worker as we are now sure there is work to do $Global::start_sqlworker = 0; @@ -4054,27 +4051,24 @@ sub reaper { # @pids_reaped = PIDs of children finished my $stiff; my @pids_reaped; - my $children_reaped = 0; + my $total_reaped; debug("run", "Reaper "); - # For efficiency surround with BEGIN/COMMIT when using $opt::sqlmaster - $opt::sqlmaster and $Global::sql->run("BEGIN;"); - while (($stiff = waitpid(-1, &WNOHANG)) > 0) { + if (($stiff = waitpid(-1, &WNOHANG)) > 0) { # $stiff = pid of dead process if(wantarray) { push(@pids_reaped,$stiff); - } else { - $children_reaped++; } - if($Global::sshmaster{$stiff}) { - # This is one of the ssh -M: ignore - next; - } - my $job = $Global::running{$stiff}; + $total_reaped++; + if($Global::sshmaster{$stiff}) { + # This is one of the ssh -M: ignore + next; + } + my $job = $Global::running{$stiff}; # '-a <(seq 10)' will give us a pid not in %Global::running - $job or next; - delete $Global::running{$stiff}; - $Global::total_running--; + $job or return 0; + delete $Global::running{$stiff}; + $Global::total_running--; if($job->{'commandline'}{'skip'}) { # $job->skip() was called $job->set_exitstatus(-2); @@ -4084,11 +4078,12 @@ sub reaper { $job->set_exitsignal($? & 127); } - debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")"); - $job->set_endtime(::now()); - my $sshlogin = $job->sshlogin(); - $sshlogin->dec_jobs_running(); - if($job->should_be_retried()) { + debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")"); + $job->set_endtime(::now()); + my $sshlogin = $job->sshlogin(); + $sshlogin->dec_jobs_running(); + if($job->should_be_retried()) { + # Free up file handles $job->free_ressources(); } else { # The job is done @@ -4109,18 +4104,17 @@ sub reaper { ::kill_sleep_seq($job->pid()); ::killall(); ::wait_and_exit($Global::halt_exitstatus); - } - } + } + } $job->cleanup(); - start_more_jobs(); + if($opt::progress) { my %progress = progress(); ::status_no_nl("\r",$progress{'status'}); } } - $opt::sqlmaster and $Global::sql->run("COMMIT;"); debug("run", "done "); - return wantarray ? @pids_reaped : $children_reaped; + return wantarray ? @pids_reaped : $total_reaped; } @@ -5102,6 +5096,7 @@ sub reap_usleep { # $ms*1.1 if no children reaped my $ms = shift; if(reaper()) { + while(reaper()) {} if(not $Global::total_completed % 100) { if($opt::timeout) { # Force cleaning the timeout queue for every 1000 jobs @@ -7947,7 +7942,7 @@ sub wrapped { $command = 'cat > $PARALLEL_TMP;'. $command.";". postpone_exit_and_cleanup(). - '$PARALLEL_TMP'; + '$PARALLEL_TMP'; } elsif($opt::fifo) { # Prepend fifo-wrapper. In essence: # mkfifo {} @@ -8280,7 +8275,7 @@ sub sshlogin_wrap { my $self = shift; my $command = shift; # TODO test that *sh -c 'parallel --env' use *sh - if(not defined $self->{'sshlogin_wrap'}) { + if(not defined $self->{'sshlogin_wrap'}{$command}) { my $sshlogin = $self->sshlogin(); my $serverlogin = $sshlogin->serverlogin(); my $quoted_remote_command; @@ -8310,12 +8305,12 @@ sub sshlogin_wrap { $command =~ /\n/) { # csh does not deal well with > 1000 chars in one word # csh does not deal well with $ENV with \n - $self->{'sshlogin_wrap'} = base64_wrap($perl_code); + $self->{'sshlogin_wrap'}{$command} = base64_wrap($perl_code); } else { - $self->{'sshlogin_wrap'} = "perl -e ".::Q($perl_code); + $self->{'sshlogin_wrap'}{$command} = "perl -e ".::Q($perl_code); } } else { - $self->{'sshlogin_wrap'} = $command; + $self->{'sshlogin_wrap'}{$command} = $command; } } else { my $pwd = ""; @@ -8357,7 +8352,7 @@ sub sshlogin_wrap { # We need to save the exit status of the job $post = '_EXIT_status=$?; ' . $post . ' exit $_EXIT_status;'; } - $self->{'sshlogin_wrap'} = + $self->{'sshlogin_wrap'}{$command} = ($pre . "$sshcmd $serverlogin -- exec " . $quoted_remote_command @@ -8365,7 +8360,7 @@ sub sshlogin_wrap { . $post); } } - return $self->{'sshlogin_wrap'}; + return $self->{'sshlogin_wrap'}{$command}; } sub transfer { diff --git a/src/parallel_alternatives.pod b/src/parallel_alternatives.pod index 916cd158..2f1cfcc3 100644 --- a/src/parallel_alternatives.pod +++ b/src/parallel_alternatives.pod @@ -1716,12 +1716,19 @@ dependency graph described in a file, so this is similar to B. https://github.com/cetra3/lorikeet (Last checked: 2018-10) +=head2 DIFFERENCES BETWEEN spp AND GNU Parallel + +B can run jobs in parallel. B does not use a command +template to generate the jobs, but requires jobs to be in a +file. Output from the jobs mix. + +https://github.com/john01dav/spp =head2 Todo Url for spread -https://github.com/john01dav/spp + https://github.com/amritb/with-this.git diff --git a/src/sql b/src/sql index 504d106d..63ef6867 100755 --- a/src/sql +++ b/src/sql @@ -576,7 +576,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20181022; + $Global::version = 20181024; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/tests-to-run/parallel-local-ssh7.sh b/testsuite/tests-to-run/parallel-local-ssh7.sh index 51fb5ebd..b4499066 100755 --- a/testsuite/tests-to-run/parallel-local-ssh7.sh +++ b/testsuite/tests-to-run/parallel-local-ssh7.sh @@ -787,6 +787,7 @@ _EOF par_fish_underscore() { echo '### fish' myscript=$(cat <<'_EOF' + echo "Fish is broken" echo "### Testing of --env _" # . `which env_parallel.fish`; @@ -1212,6 +1213,7 @@ _EOF par_fish_funky() { myscript=$(cat <<'_EOF' + echo "Fish is broken" env_parallel --session set myvar "myvar works" setenv myenvvar "myenvvar works" @@ -1509,6 +1511,7 @@ _EOF par_fish_env_parallel() { myscript=$(cat <<'_EOF' + echo "Fish is broken" echo 'bug #50435: Remote fifo broke in 20150522' # Due to $PARALLEL_TMP being transferred set OK OK diff --git a/testsuite/tests-to-run/parallel-polarhome.sh b/testsuite/tests-to-run/parallel-polarhome.sh index bda16743..462fbfc3 100644 --- a/testsuite/tests-to-run/parallel-polarhome.sh +++ b/testsuite/tests-to-run/parallel-polarhome.sh @@ -16,9 +16,9 @@ MAXINNERPROC=${maxinnerproc:-3} export PARALLEL_SSH="ssh -oLogLevel=quiet" -# select a running master (suse, ubuntu, or debian) +# select a running master (debian-ppc, suse, ubuntu, or debian) MASTER=$(parallel -j0 --delay 0.1 --halt now,success=1 $PARALLEL_SSH {} echo {} \ - ::: {ubuntu,suse,debian}.polarhome.com) + ::: {debian-ppc,ubuntu,debian,suse}.polarhome.com) parallel -j0 --delay 0.1 --retries $RETRIES \ rsync -L /usr/local/bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \ diff --git a/testsuite/wanted-results/parallel-local-100s b/testsuite/wanted-results/parallel-local-100s index 88c264f7..6e70b593 100644 --- a/testsuite/wanted-results/parallel-local-100s +++ b/testsuite/wanted-results/parallel-local-100s @@ -372,6 +372,30 @@ par_test_build_and_install test -d "parallel-00000000" || mkdir "parallel-000000 par_test_build_and_install (cd src && make top_distdir=../parallel-00000000 distdir=../parallel-00000000/src \ par_test_build_and_install am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir) par_test_build_and_install make[0]: Entering directory '~/privat/parallel/src' +par_test_build_and_install pod2man --release='00000000' --center='parallel' \ +par_test_build_and_install --section=1 ./sql > ./sql.1n \ +par_test_build_and_install && mv ./sql.1n ./sql.1 \ +par_test_build_and_install || echo "Warning: pod2man not found. Using old sql.1" +par_test_build_and_install pod2html --title "GNU SQL" ./sql > ./sql.htmln \ +par_test_build_and_install && mv ./sql.htmln ./sql.html \ +par_test_build_and_install || echo "Warning: pod2html not found. Using old sql.html" +par_test_build_and_install rm -f ./pod2htm* +par_test_build_and_install pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \ +par_test_build_and_install && mv ./niceload.htmln ./niceload.html \ +par_test_build_and_install || echo "Warning: pod2html not found. Using old niceload.html" +par_test_build_and_install rm -f ./pod2htm* +par_test_build_and_install pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \ +par_test_build_and_install && mv ./parcat.htmln ./parcat.html \ +par_test_build_and_install || echo "Warning: pod2html not found. Using old parcat.html" +par_test_build_and_install rm -f ./pod2htm* +par_test_build_and_install pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \ +par_test_build_and_install && mv ./parset.htmln ./parset.html \ +par_test_build_and_install || echo "Warning: pod2html not found. Using old parset.html" +par_test_build_and_install rm -f ./pod2htm* +par_test_build_and_install pod2texi --output=./sql.texi ./sql \ +par_test_build_and_install || echo "Warning: pod2texi not found. Using old sql.texi" +par_test_build_and_install pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \ +par_test_build_and_install || echo "Warning: pod2pdf not found. Using old sql.pdf" par_test_build_and_install make[0]: Leaving directory '~/privat/parallel/src' par_test_build_and_install test -n "" \ par_test_build_and_install || find "parallel-00000000" -type d ! -perm -755 \ @@ -380,7 +404,7 @@ par_test_build_and_install ! -type d ! -perm -444 -links 1 -exec chmod a+r {} par_test_build_and_install ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ par_test_build_and_install ! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \ par_test_build_and_install || chmod -R a+r "parallel-00000000" -par_test_build_and_install tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >parallel-00000000.tar.gz +par_test_build_and_install tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | eval GZIP= gzip --best -c >parallel-00000000.tar.gz par_test_build_and_install make[0]: Leaving directory '~/privat/parallel' par_test_build_and_install if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi par_test_build_and_install make[0]: Leaving directory '~/privat/parallel' diff --git a/testsuite/wanted-results/parallel-local-ssh7 b/testsuite/wanted-results/parallel-local-ssh7 index e35c3bb2..5a972bb6 100644 --- a/testsuite/wanted-results/parallel-local-ssh7 +++ b/testsuite/wanted-results/parallel-local-ssh7 @@ -1011,36 +1011,41 @@ par_ksh_env_parallel env_parallel: Warning: See BUGS in "man env_parallel". par_ksh_env_parallel env_parallel: Warning: See BUGS in "man env_parallel". par_ksh_env_parallel env_parallel: Warning: See BUGS in "man env_parallel". par_fish_underscore ### fish +par_fish_underscore Fish is broken par_fish_underscore ### Testing of --env _ par_fish_underscore variables in aliases and arrays in functions work par_fish_underscore variables in aliases and arrays in functions work par_fish_underscore variables in aliases and arrays in functions work par_fish_underscore variables in aliases and arrays in functions work -par_fish_underscore variables in aliases and arrays in functions work -par_fish_underscore variables in aliases and arrays in functions work -par_fish_underscore ^ -par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore not_copied_alias 'error=OK' +par_fish_underscore ^ +par_fish_underscore not_copied_func 'error=OK' +par_fish_underscore ^ par_fish_underscore error=OK par_fish_underscore error=OK -par_fish_underscore aliases and arrays in functions work -par_fish_underscore aliases and arrays in functions work -par_fish_underscore aliases functions work -par_fish_underscore aliases functions work -par_fish_underscore ^ -par_fish_underscore in function 'myfunc' -par_fish_underscore called on standard input -par_fish_underscore with parameter list 'work' -par_fish_underscore +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho -par_fish_underscore ^ -par_fish_underscore in function 'myfunc' -par_fish_underscore called on standard input -par_fish_underscore with parameter list 'work' -par_fish_underscore +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho -par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc -par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc par_fish_parset Not implemented par_fish_man ### fish @@ -1089,6 +1094,8 @@ par_fish_man env_parallel par_fish_man exit value 2 should be 2 par_fish_man Unknown option: no-such-option par_fish_man exit value 255 should be 255 `sleep 1` +par_fish_funky Fish is broken +par_fish_funky setenv: Too many arguments par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported par_fish_funky 3 arg alias_works par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported @@ -1100,7 +1107,7 @@ par_fish_funky par_fish_funky par_fish_funky par_fish_funky Funky-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky -par_fish_funky Funkyenv-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funkyenv +par_fish_funky Funkyenv--funkyenv par_fish_funky par_fish_funky par_fish_funky @@ -1115,7 +1122,7 @@ par_fish_funky par_fish_funky par_fish_funky par_fish_funky Funky-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky -par_fish_funky Funkyenv-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funkyenv +par_fish_funky Funkyenv--funkyenv par_fish_funky par_fish_funky par_fish_funky @@ -1123,16 +1130,11 @@ par_fish_funky par_fish_funky '   !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' par_fish_environment_too_big Not implemented par_fish_env_parallel_session Not implemented +par_fish_env_parallel Fish is broken par_fish_env_parallel bug #50435: Remote fifo broke in 20150522 par_fish_env_parallel TODO fix env_parallel --fifo -par_fish_env_parallel 'end' outside of a block -par_fish_env_parallel fish: end -par_fish_env_parallel ^ -par_fish_env_parallel data from stdin -par_fish_env_parallel OK -par_fish_env_parallel $? is not the exit status. In fish, please use $status. -par_fish_env_parallel fish: cat $PARALLEL_TMP; and echo $OK;perl -e '$bash=shift;$csh=shift;for(@ARGV){unlink;rmdir;}if($bash=~s/h//){exit$bash;}exit$csh;' "$?h" "$status" $PARALLEL_TMP -par_fish_env_parallel ^ +par_fish_env_parallel parallel: Error: Command line too long (XXX >= XXX) at input 0: $PARALLEL_TMP +par_fish_env_parallel parallel: Error: Command line too long (XXX >= XXX) at input 0: $PARALLEL_TMP par_dash_underscore ### dash par_dash_underscore ### Testing of --env _ par_dash_underscore variables in aliases work diff --git a/testsuite/wanted-results/parallel-local23 b/testsuite/wanted-results/parallel-local23 index 19c513d3..2a79e7e8 100644 --- a/testsuite/wanted-results/parallel-local23 +++ b/testsuite/wanted-results/parallel-local23 @@ -61,7 +61,7 @@ echo '### Check that 4 processes are really used' echo '### --version must have higher priority than retired options' ### --version must have higher priority than retired options $NICEPAR --version -g -Y -U -W -T | tail -GNU parallel 20180923 +GNU parallel 20181024 Copyright (C) 2007-2018 Ole Tange and Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index 6c32a5cb..9d8db6e8 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -43,7 +43,6 @@ bin/parallel freebsd copy freebsd bin/parallel parallel bin/parallel debian copy debian bin/parallel parallel bin/parallel hurd copy hurd bin/parallel parallel bin/parallel minix copy minix bin/parallel parallel -bin/parallel minix cat: stdout: no space left on device bin/env_parallel qnx copy qnx bin/env_parallel env_parallel bin/env_parallel pidora copy pidora bin/env_parallel env_parallel bin/env_parallel tru64 copy tru64 bin/env_parallel env_parallel @@ -69,7 +68,6 @@ bin/env_parallel freebsd copy freebsd bin/env_parallel env_parallel bin/env_parallel debian copy debian bin/env_parallel env_parallel bin/env_parallel hurd copy hurd bin/env_parallel env_parallel bin/env_parallel minix copy minix bin/env_parallel env_parallel -bin/env_parallel minix cat: stdout: no space left on device bin/env_parallel.ash qnx copy qnx bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash pidora copy pidora bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash tru64 copy tru64 bin/env_parallel.ash env_parallel.ash @@ -95,7 +93,6 @@ bin/env_parallel.ash freebsd copy freebsd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash debian copy debian bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash hurd copy hurd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash minix copy minix bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash minix cat: stdout: no space left on device bin/env_parallel.bash qnx copy qnx bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash pidora copy pidora bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash tru64 copy tru64 bin/env_parallel.bash env_parallel.bash @@ -147,7 +144,6 @@ bin/env_parallel.csh freebsd copy freebsd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh debian copy debian bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh hurd copy hurd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh minix copy minix bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh minix cat: stdout: no space left on device bin/env_parallel.dash qnx copy qnx bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash pidora copy pidora bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash tru64 copy tru64 bin/env_parallel.dash env_parallel.dash @@ -173,7 +169,6 @@ bin/env_parallel.dash freebsd copy freebsd bin/env_parallel.dash env_parallel.da bin/env_parallel.dash debian copy debian bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash hurd copy hurd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash minix copy minix bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash minix cat: stdout: no space left on device bin/env_parallel.fish qnx copy qnx bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish pidora copy pidora bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish tru64 copy tru64 bin/env_parallel.fish env_parallel.fish @@ -199,7 +194,6 @@ bin/env_parallel.fish freebsd copy freebsd bin/env_parallel.fish env_parallel.fi bin/env_parallel.fish debian copy debian bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish hurd copy hurd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish minix copy minix bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish minix cat: stdout: no space left on device bin/env_parallel.ksh qnx copy qnx bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh pidora copy pidora bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh tru64 copy tru64 bin/env_parallel.ksh env_parallel.ksh @@ -225,7 +219,6 @@ bin/env_parallel.ksh freebsd copy freebsd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh debian copy debian bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh hurd copy hurd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh minix copy minix bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh minix cat: stdout: no space left on device bin/env_parallel.mksh qnx copy qnx bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh pidora copy pidora bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh tru64 copy tru64 bin/env_parallel.mksh env_parallel.mksh @@ -251,7 +244,6 @@ bin/env_parallel.mksh freebsd copy freebsd bin/env_parallel.mksh env_parallel.mk bin/env_parallel.mksh debian copy debian bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh hurd copy hurd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh minix copy minix bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh minix cat: stdout: no space left on device bin/env_parallel.pdksh qnx copy qnx bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh pidora copy pidora bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh tru64 copy tru64 bin/env_parallel.pdksh env_parallel.pdksh @@ -277,7 +269,6 @@ bin/env_parallel.pdksh freebsd copy freebsd bin/env_parallel.pdksh env_parallel. bin/env_parallel.pdksh debian copy debian bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh hurd copy hurd bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh minix copy minix bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh minix cat: stdout: no space left on device bin/env_parallel.sh qnx copy qnx bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh pidora copy pidora bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh tru64 copy tru64 bin/env_parallel.sh env_parallel.sh @@ -303,7 +294,6 @@ bin/env_parallel.sh freebsd copy freebsd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh debian copy debian bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh hurd copy hurd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh minix copy minix bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh minix cat: stdout: no space left on device bin/env_parallel.tcsh qnx copy qnx bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh pidora copy pidora bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh tru64 copy tru64 bin/env_parallel.tcsh env_parallel.tcsh @@ -329,7 +319,6 @@ bin/env_parallel.tcsh freebsd copy freebsd bin/env_parallel.tcsh env_parallel.tc bin/env_parallel.tcsh debian copy debian bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh hurd copy hurd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh minix copy minix bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh minix cat: stdout: no space left on device bin/env_parallel.zsh qnx copy qnx bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh pidora copy pidora bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh tru64 copy tru64 bin/env_parallel.zsh env_parallel.zsh @@ -355,7 +344,6 @@ bin/env_parallel.zsh freebsd copy freebsd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh debian copy debian bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh hurd copy hurd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh minix copy minix bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh minix cat: stdout: no space left on device bin/parcat qnx copy qnx bin/parcat parcat bin/parcat pidora copy pidora bin/parcat parcat bin/parcat tru64 copy tru64 bin/parcat parcat @@ -381,7 +369,6 @@ bin/parcat freebsd copy freebsd bin/parcat parcat bin/parcat debian copy debian bin/parcat parcat bin/parcat hurd copy hurd bin/parcat parcat bin/parcat minix copy minix bin/parcat parcat -bin/parcat minix cat: stdout: no space left on device bin/stdout qnx copy qnx bin/stdout stdout bin/stdout pidora copy pidora bin/stdout stdout bin/stdout tru64 copy tru64 bin/stdout stdout