diff --git a/NEWS b/NEWS index 4801e754..70a1974c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,16 @@ +20241122 + +New in this release: + +* <> + +* Bug fixes and man page updates. + +News about GNU Parallel: + +<<>> + + 20241022 New in this release: diff --git a/doc/haikus b/doc/haikus index 0d4f66af..94aa5e21 100644 --- a/doc/haikus +++ b/doc/haikus @@ -4,6 +4,21 @@ Quote of the month: +ainda não inventaram palavras capazes de expressar minha gratidão aos desenvolvedores do GNU Parallel +-- nueidris ‪@nueidris.kawaii.social‬ + +Und die Tage jetzt hab ich GNU parallel für mich entdeckt, auch ne nette Geschichte, gerade wenn's irgendwelche remote APIs sind. +-- Vince ‪@dd1des.bsky.social‬ + + GNU parallel is so satisfying + -- ‪James Coman‬ ‪@jcoman.bsky.social‬ + + gnu parallelすごい!!! + -- たらたら@nosennyuu@twitter + + GNU parallel is awesome. Use it more often in your scripts! + -- Wade @WadeGrimshire@twitter + by extreme do you mean extremely slow? you could do it at least 100x faster using awk + grep + gnu parallel -- @ObssessedDev@twitter diff --git a/doc/release_new_version b/doc/release_new_version index 809fe3ad..f9354b1a 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -112,8 +112,7 @@ lbry://@GnuParallel#4/parallel-20210322.tar.bz2 . .last-doitag.txt file_path="`pwd`/parallel-$YYYYMMDD.tar.bz2" -title="GNU Parallel $YYYYMMDD ('$SPCTAG') [stable]" - +#title="GNU Parallel $YYYYMMDD ('$SPCTAG') [stable]" title="GNU Parallel $YYYYMMDD ('$SPCTAG')" name="GNU-Parallel-$YYYYMMDD-$TAG" author="Ole Tange" @@ -121,6 +120,7 @@ license="GNU GPLv3 or later" thumbnail_url=https://www.gnu.org/software/parallel/logo-gray+black10000.png channel_name="@GnuParallel" tags_opt='--tag gnu --tag parallel --tag free --tag software' +release_time=$(date -d "$YYYYMMDD" +%s) description="An easy way to support GNU Parallel is to tip on LBRY. @@ -141,8 +141,7 @@ lbrynet publish \ --license="$license" \ --thumbnail_url="$thumbnail_url" \ --channel_name="$channel_name" \ - -# --release_time="$release_time" \ + --release_time="$release_time" \ == Update website == @@ -267,14 +266,13 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20241022 ('Sinwar Nasrallah') released +Subject: GNU Parallel 20241122 ('#AhooDaryaei /Regn i valencia/us pres/Unite the kingdom/Tommy Robinson/Alex/Southport2/Georgien') released -GNU Parallel 20241022 ('Sinwar Nasrallah') has been released. It is available for download at: lbry://@GnuParallel:4 +GNU Parallel 20241122 ('<<>>') has been released. It is available for download at: lbry://@GnuParallel:4 Quote of the month: - GNU Parallel is one of the most helpful tools I've been using recently, and it's just something like: parallel -j4 'gzip {}' ::: folder/*.csv - -- Milton Pividori @miltondp@twitter + <<>> New in this release: @@ -284,13 +282,8 @@ New in this release: News about GNU Parallel: -* Separate arguments with a custom separator in GNU Parallel https://boxofcuriosities.co.uk/post/separate-arguments-with-a-custom-separator-in-gnu-parallel - -* GNU parallel is underrated https://amontalenti.com/2021/11/10/parallel - -* Unlocking the Power of Supercomputers: My HPC Adventure with 2800 Cores and GNU Parallel https://augalip.com/2024/03/10/unlocking-the-power-of-supercomputers-my-hpc-adventure-with-2800-cores-and-gnu-parallel/ - -* Converting WebP Images to PNG Using parallel and dwebp https://bytefreaks.net/gnulinux/bash/converting-webp-images-to-png-using-parallel-and-dwebp +https://www.redhat.com/en/blog/gnu-parallel +https://erolrecep.github.io/posts/gnuparallel_for_your_terminal_tasks/ GNU Parallel - For people who live life in the parallel lane. diff --git a/src/parallel b/src/parallel index 71a2c976..7618ec8f 100755 --- a/src/parallel +++ b/src/parallel @@ -2888,7 +2888,7 @@ sub check_invalid_option_combinations() { sub init_globals() { # Defaults: - $Global::version = 20241022; + $Global::version = 20241120; $Global::progname = 'parallel'; $::name = "GNU Parallel"; $Global::infinity = 2**31; @@ -15159,12 +15159,18 @@ sub check_permissions($) { } sub parse_dburl($) { + sub undef_if_empty { + if(defined($_[0]) and $_[0] eq "") { + return undef; + } + return $_[0]; + } my $url = shift; my %options = (); # sql:mysql://[[user][:password]@][host][:port]/[database[/table][?query]] if($url=~m!^(?:sql:)? # You can prefix with 'sql:' - ((?:oracle|ora|mysql|pg|postgres|postgresql)(?:s|ssl|)| + ((?:oracle|ora|mysql|pg|postgres|postgresql|influx|influxdb)(?:s|ssl|)| (?:sqlite|sqlite2|sqlite3|csv)):// # Databasedriver ($1) (?: ([^:@/][^:@]*|) # Username ($2) @@ -15179,25 +15185,27 @@ sub parse_dburl($) { )? (?: / - ([^/?]*)? # Database ($6) + ([^?]*)? # Database ($6) )? (?: / - ([^?]*)? # Table ($7) - )? + ([^?/]*)? # Table ($7) + ) (?: \? (.*)? # Query ($8) )? $!ix) { - $options{databasedriver} = ::undef_if_empty(lc(uri_unescape($1))); - $options{user} = ::undef_if_empty(uri_unescape($2)); - $options{password} = ::undef_if_empty(uri_unescape($3)); - $options{host} = ::undef_if_empty(uri_unescape($4)); - $options{port} = ::undef_if_empty(uri_unescape($5)); - $options{database} = ::undef_if_empty(uri_unescape($6)); - $options{table} = ::undef_if_empty(uri_unescape($7)); - $options{query} = ::undef_if_empty(uri_unescape($8)); + $options{databasedriver} = undef_if_empty(lc(uri_unescape($1))); + $options{user} = undef_if_empty(uri_unescape($2)); + $options{password} = undef_if_empty(uri_unescape($3)); + $options{host} = undef_if_empty(uri_unescape($4)); + $options{port} = undef_if_empty(uri_unescape($5)); + $options{database} = undef_if_empty(uri_unescape($6)) + || $options{user} || $ENV{'USER'}; + $options{table} = undef_if_empty(uri_unescape($7)) + || $options{user} || $ENV{'USER'}; + $options{query} = undef_if_empty(uri_unescape($8)); ::debug("sql", "dburl $url\n"); ::debug("sql", "databasedriver ", $options{databasedriver}, " user ", $options{user}, diff --git a/src/parallel.pod b/src/parallel.pod index cf92c08d..e4d0d16c 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -3124,7 +3124,7 @@ complete. The format of a DBURL is: - [sql:]vendor://[[user][:pwd]@][host][:port]/[db]/table + [sql:]vendor://[[user][:pwd]@][host][:port]/[db]/[table] E.g. @@ -3134,11 +3134,16 @@ E.g. postgresql://scott:tiger@pg.example.com/pgdb/parjob pg:///parjob sqlite3:///%2Ftmp%2Fpardb.sqlite/parjob + sqlite:///file_in_current_dir.sqlite/my_table csv:///%2Ftmp%2Fpardb/parjob + csv:///./file_in_current_dir + pg://// -Notice how / in the path of sqlite and CVS must be encoded as +Notice how / in the path of sqlite and CSV must be encoded as %2F. Except the last / in CSV which must be a /. +I and I defaults to $USER: pg://// = pg:///$USER/$USER + It can also be an alias from ~/.sql/aliases: :myalias mysql:///mydb/paralleljobs diff --git a/src/sql b/src/sql index 0476108f..4970c8c3 100755 --- a/src/sql +++ b/src/sql @@ -234,6 +234,18 @@ To quote special characters use %-encoding specified in http://tools.ietf.org/html/rfc3986#section-2.1 (E.g. a password containing '/' would contain '%2F'). +csv:///%2Ftmp%2Fparallel-bug-56096/mytable +csv:////tmp/parallel-bug-56096/mytable +mysql://me@/me/ +mysql://// + +sqlite3:///%2Frun%2Fshm%2Fparallel.db +sqlite3:///%2Frun%2Fshm%2Fparallel.db/table +sqlite:///%2Ftmp%2Ffile.sqlite?SELECT +csv:///%2Ftmp%2Fparallel-CSV/OK +csv:///%2Fmust%2Ffail/fail +sqlite3:///%2Frun%2Fshm%2Fparallel.db + Examples: mysql://scott:tiger@my.example.com/mydb @@ -245,12 +257,23 @@ Examples: sql:sqlite2:////tmp/db.sqlite?SELECT * FROM foo; sqlite3:///../db.sqlite3?SELECT%20*%20FROM%20foo; -Currently supported vendors: MySQL (mysql), MySQL with SSL (mysqls, -mysqlssl), Oracle (oracle, ora), PostgreSQL (postgresql, pg, pgsql, -postgres), PostgreSQL with SSL (postgresqlssl, pgs, pgsqlssl, -postgresssl, pgssl, postgresqls, pgsqls, postgress), SQLite2 (sqlite, -sqlite2), SQLite3 (sqlite3), InfluxDB 1.x (influx, influxdb), InfluxDB -with SSL (influxdbssl, influxdbs, influxs, influxssl) +Currently supported vendors: + +=over 2 + +=item * MySQL (mysql) with SSL (mysqls, mysqlssl) + +=item * Oracle (oracle, ora) + +=item * PostgreSQL (postgresql, pg, pgsql, postgres) with SSL (postgresqlssl, pgs, pgsqlssl, postgresssl, pgssl, postgresqls, pgsqls, postgress) + +=item * SQLite2 (sqlite, sqlite2) + +=item * SQLite3 (sqlite3) + +=item * InfluxDB 1.x (influx, influxdb) with SSL (influxdbssl, influxdbs, influxs, influxssl) + +=back Aliases must start with ':' and are read from /etc/sql/aliases and ~/.sql/aliases. The user's own @@ -1152,9 +1175,9 @@ sub parse_dburl { my %options = (); # sql:mysql://[[user][:password]@][host][:port]/[database[?sql query]] - if($url=~m!(?:sql:)? # You can prefix with 'sql:' + if($url=~m!^(?:sql:)? # You can prefix with 'sql:' ((?:oracle|ora|mysql|pg|postgres|postgresql|influx|influxdb)(?:s|ssl|)| - (?:sqlite|sqlite2|sqlite3)):// # Databasedriver ($1) + (?:sqlite|sqlite2|sqlite3|csv)):// # Databasedriver ($1) (?: ([^:@/][^:@]*|) # Username ($2) (?: @@ -1168,21 +1191,21 @@ sub parse_dburl { )? (?: / - ([^?/]*)? # Database ($6) + ([^?]*)? # Database ($6) )? (?: /? \? (.*)? # Query ($7) )? - !x) { - $options{databasedriver} = undef_if_empty(uri_unescape($1)); + $!ix) { + $options{databasedriver} = undef_if_empty(lc(uri_unescape($1))); $options{user} = undef_if_empty(uri_unescape($2)); $options{password} = undef_if_empty(uri_unescape($3)); $options{host} = undef_if_empty(uri_unescape($4)); $options{port} = undef_if_empty(uri_unescape($5)); $options{database} = undef_if_empty(uri_unescape($6)) - || $options{user}; + || $options{user} || $ENV{'USER'}; $options{query} = undef_if_empty(uri_unescape($7)); debug("dburl $url\n"); debug("databasedriver ",$options{databasedriver}, " user ", $options{user}, diff --git a/testsuite/tests-to-run/parallel-local-1s.sh b/testsuite/tests-to-run/parallel-local-1s.sh index b93f4a82..be8723f0 100644 --- a/testsuite/tests-to-run/parallel-local-1s.sh +++ b/testsuite/tests-to-run/parallel-local-1s.sh @@ -8,6 +8,11 @@ # Each should be taking 1-3s and be possible to run in parallel # I.e.: No race conditions, no logins +par_--pipe--block-2() { + echo '### --block -2' + yes `seq 100` | head -c 100M | parallel -j 5 --block -2 -k --pipe wc +} + par_keep_order_make_job_1_output_fast() { echo '# EXAMPLE: Keep order, but make job 1 output fast' doit() { diff --git a/testsuite/tests-to-run/parallel-local-30s.sh b/testsuite/tests-to-run/parallel-local-30s.sh index f05600cd..47d98873 100755 --- a/testsuite/tests-to-run/parallel-local-30s.sh +++ b/testsuite/tests-to-run/parallel-local-30s.sh @@ -8,6 +8,88 @@ # Each should be taking 30-100s and be possible to run in parallel # I.e.: No race conditions, no logins +par__dburl_parsing() { + mkdir -p test + ( + cd test + export me=$(whoami) + pwd=$(pwd) + pwdurl=$(pwd | perl -pe 's:/:%2F:g') + dburls=( + # relative path - no dir + # relative path - with dir + # full path + # default + + csv:///mydir/$me + csv:///./mydir/$me + csv:///.%2Fmydir/$me + csv:///$pwd/$me + csv:///$pwdurl/$me + csv:///./$me + csv:///./ + # this defaults to $me/$me = non-existent dir + csv:///$me/$me + csv:////$me + csv:///$me/ + csv://// + csv:/// + + sqlite3:///$me/$me + sqlite3://mydir/$me/$me + sqlite3:///mydir/$me/$me + sqlite3:///mydir%2F$me/$me + sqlite3:///$pwd/$me/$me + sqlite3:///$pwdurl/$me/$me + sqlite3:///$me/ + sqlite3:///$me/$me + sqlite3:////$me + sqlite3:///$me/ + sqlite3://// + sqlite3:/// + + sqlite:///$me/$me + sqlite://mydir/$me/$me + sqlite:///mydir/$me/$me + sqlite:///mydir%2F$me/$me + sqlite:///$pwd/$me/$me + sqlite:///$pwdurl/$me/$me + sqlite:///$me/ + sqlite:///$me/$me + sqlite:////$me + sqlite:///$me/ + sqlite://// + sqlite:/// + + mysql://$me@/$me/$me + mysql://$me@/$me/ + mysql://$me@// + mysql:///$me/$me + mysql:////$me + mysql:///$me/ + mysql://// + mysql:/// + + pg://$me@/$me/$me + pg://$me@/$me/ + pg://$me@// + pg:///$me/$me + pg:////$me + pg:///$me/ + pg://// + pg:/// + ) + test_dburl() { + mkdir mydir + parallel -k --sqlandworker $1 echo ::: {1..3} + rm -rf "$me" mydir + } + export -f test_dburl + parallel -j1 --tag test_dburl ::: ${dburls[@]} + ) + rmdir test +} + par_sshlogin_parsing() { echo '### Generate sshlogins to test parsing' sudo sshd -p 22222 @@ -564,7 +646,7 @@ par_memfree() { grep -v TERM | grep -v ps/display.c } -par_test_detected_shell() { +par__test_detected_shell() { echo '### bug #42913: Dont use $SHELL but the shell currently running' shells="bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh" diff --git a/testsuite/tests-to-run/sem01.sh b/testsuite/tests-to-run/sem01.sh index 383bb30f..42cb4e18 100755 --- a/testsuite/tests-to-run/sem01.sh +++ b/testsuite/tests-to-run/sem01.sh @@ -73,7 +73,7 @@ par_exit() { export -f test_signal ulimit -c 0 stdout parallel -j15 -k --timeout 20 --tag test_signal ::: {0..64} | - perl -pe 's/line 1: (\d+)/line 1: PID/' + perl -pe 's/line 1: *(\d+)/line 1: PID/' } diff --git a/testsuite/wanted-results/parallel-local-1s b/testsuite/wanted-results/parallel-local-1s index 707f65bc..b2910f08 100644 --- a/testsuite/wanted-results/parallel-local-1s +++ b/testsuite/wanted-results/parallel-local-1s @@ -1,3 +1,15 @@ +par_--pipe--block-2 ### --block -2 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35911 3591100 10486012 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 35910 3591000 10485720 +par_--pipe--block-2 0 39 108 par__arg_sep ### Test basic --arg-sep par__arg_sep a par__arg_sep b diff --git a/testsuite/wanted-results/parallel-local-30s b/testsuite/wanted-results/parallel-local-30s index d526eb60..c9539a4d 100644 --- a/testsuite/wanted-results/parallel-local-30s +++ b/testsuite/wanted-results/parallel-local-30s @@ -1,3 +1,182 @@ +par__dburl_parsing csv:///mydir/tange parallel: Error: +par__dburl_parsing csv:///mydir/tange Execution ERROR: Cannot open /tmp/parallel-local-30s-tmp/ +par__dburl_parsing csv:///mydir/tange `/tmp/trip`>/tmp/tripwire; +par__dburl_parsing csv:///mydir/tange  +par__dburl_parsing csv:///mydir/tange "'@/tmp/tripwire; +par__dburl_parsing csv:///./mydir/tange  +par__dburl_parsing csv:///./mydir/tange "'@/tmp/tripwire; +par__dburl_parsing csv:///.%2Fmydir/tange  +par__dburl_parsing csv:///.%2Fmydir/tange "'@/tmp/tripwire; parallel: Error: `/tmp/trip`>/tmp/tripwire; is not a valid DBURL +par__dburl_parsing  parallel: Error:  is not a valid DBURL +par__dburl_parsing "'@%2Ftmp%2Ftripwire; parallel: Error: `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; is not a valid DBURL +par__dburl_parsing  parallel: Error:  is not a valid DBURL +par__dburl_parsing "'@/tmp/tripwire; +par__dburl_parsing csv:///./tange  +par__dburl_parsing csv:///./tange "'@/tmp/tripwire; +par__dburl_parsing csv:///./  +par__dburl_parsing csv:///./ "'@/tmp/tripwire; parallel: Error: `/tmp/trip`>/tmp/tripwire; is not a valid DBURL +par__dburl_parsing  parallel: Error:  is not a valid DBURL +par__dburl_parsing "'@ line 1. +par__dburl_parsing `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; parallel: Error: `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; is not a valid DBURL +par__dburl_parsing  parallel: Error:  is not a valid DBURL +par__dburl_parsing "'@/tmp/tripwire; parallel: Error: `/tmp/trip`>/tmp/tripwire; is not a valid DBURL +par__dburl_parsing  parallel: Error:  is not a valid DBURL +par__dburl_parsing "'@ line 1. +par__dburl_parsing `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; parallel: Error: `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; is not a valid DBURL +par__dburl_parsing  parallel: Error:  is not a valid DBURL +par__dburl_parsing "'@/tmp/trap`;) par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)(|<*&"'@lo withpassword par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)(|<*&"'@lo:22222 22222 par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)(|<*&"'@lo:22222 withpassword -par_test_detected_shell ### bug #42913: Dont use $SHELL but the shell currently running -par_test_detected_shell test_unknown_shell bash Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell csh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell dash Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell fish Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell fizsh Global::shell /usr/bin/zsh -par_test_detected_shell test_unknown_shell ksh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell ksh93 Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell mksh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell posh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell rbash Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell rzsh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell sash Global::shell /usr/bin/sh -par_test_detected_shell test_unknown_shell sh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell tcsh Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell yash Global::shell /usr/bin/bash -par_test_detected_shell test_unknown_shell zsh Global::shell /usr/bin/bash -par_test_detected_shell test_known_shell_c bash Global::shell /usr/bin/bash -par_test_detected_shell test_known_shell_c csh Global::shell /usr/bin/csh -par_test_detected_shell test_known_shell_c dash Global::shell /usr/bin/dash -par_test_detected_shell test_known_shell_c fish Global::shell /usr/bin/fish -par_test_detected_shell test_known_shell_c fizsh Global::shell /usr/bin/zsh -par_test_detected_shell test_known_shell_c ksh Global::shell /usr/bin/ksh -par_test_detected_shell test_known_shell_c ksh93 Global::shell /usr/bin/ksh93 -par_test_detected_shell test_known_shell_c mksh Global::shell /usr/bin/mksh -par_test_detected_shell test_known_shell_c posh Global::shell /usr/bin/posh -par_test_detected_shell test_known_shell_c rbash Global::shell /usr/bin/rbash -par_test_detected_shell test_known_shell_c rzsh Global::shell /usr/bin/rzsh -par_test_detected_shell test_known_shell_c sash Global::shell /usr/bin/sh -par_test_detected_shell test_known_shell_c sh Global::shell /usr/bin/sh -par_test_detected_shell test_known_shell_c static-sh Global::shell /usr/bin/static-sh -par_test_detected_shell test_known_shell_c tcsh Global::shell /usr/bin/tcsh -par_test_detected_shell test_known_shell_c yash Global::shell /usr/bin/yash -par_test_detected_shell test_known_shell_c zsh Global::shell /usr/bin/zsh -par_test_detected_shell test_known_shell_pipe bash Global::shell /usr/bin/bash -par_test_detected_shell test_known_shell_pipe csh Global::shell /usr/bin/csh -par_test_detected_shell test_known_shell_pipe dash Global::shell /usr/bin/dash -par_test_detected_shell test_known_shell_pipe fish Global::shell /usr/bin/fish -par_test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/fizsh -par_test_detected_shell test_known_shell_pipe ksh Global::shell /usr/bin/ksh -par_test_detected_shell test_known_shell_pipe ksh93 Global::shell /usr/bin/ksh93 -par_test_detected_shell test_known_shell_pipe mksh Global::shell /usr/bin/mksh -par_test_detected_shell test_known_shell_pipe posh Global::shell /usr/bin/posh -par_test_detected_shell test_known_shell_pipe rbash Global::shell /usr/bin/rbash -par_test_detected_shell test_known_shell_pipe rzsh Global::shell /usr/bin/rzsh -par_test_detected_shell test_known_shell_pipe sash Global::shell /usr/bin/sh -par_test_detected_shell test_known_shell_pipe sh Global::shell /usr/bin/sh -par_test_detected_shell test_known_shell_pipe static-sh Global::shell /usr/bin/static-sh -par_test_detected_shell test_known_shell_pipe tcsh Global::shell /usr/bin/tcsh -par_test_detected_shell test_known_shell_pipe yash Global::shell /usr/bin/yash -par_test_detected_shell test_known_shell_pipe zsh Global::shell /usr/bin/zsh par_test_diff_roundrobin_k ### test there is difference on -k par_test_diff_roundrobin_k OK par_test_ipv6_format ### Host as IPv6 address diff --git a/testsuite/wanted-results/parallel-local-race02 b/testsuite/wanted-results/parallel-local-race02 index c5a92ae6..f172ec0a 100644 --- a/testsuite/wanted-results/parallel-local-race02 +++ b/testsuite/wanted-results/parallel-local-race02 @@ -51,10 +51,7 @@ par_continuous_output 1 par_continuous_output 1 par_continuous_output 1 par_continuous_output 1 -par_hostgroup ### --hostgroup force ncpu -par_hostgroup parallel -par_hostgroup tange -par_hostgroup ### --hostgroup two group arg +par_hostgroup ### --hostgroup force ncpu - 2x parallel, 6x me par_hostgroup parallel par_hostgroup parallel par_hostgroup tange @@ -63,7 +60,16 @@ par_hostgroup tange par_hostgroup tange par_hostgroup tange par_hostgroup tange -par_hostgroup ### --hostgroup one group arg +par_hostgroup ### --hostgroup two group arg - 2x parallel, 6x me +par_hostgroup parallel +par_hostgroup parallel +par_hostgroup tange +par_hostgroup tange +par_hostgroup tange +par_hostgroup tange +par_hostgroup tange +par_hostgroup tange +par_hostgroup ### --hostgroup one group arg - 8x me par_hostgroup tange par_hostgroup tange par_hostgroup tange @@ -72,7 +78,7 @@ par_hostgroup tange par_hostgroup tange par_hostgroup tange par_hostgroup tange -par_hostgroup ### --hostgroup multiple group arg + unused group +par_hostgroup ### --hostgroup multiple group arg + unused group - 2x parallel, 6x me, 0x tcsh par_hostgroup parallel par_hostgroup tange par_hostgroup ### --hostgroup two groups @ @@ -87,17 +93,17 @@ par_hostgroup implicit_group par_hostgroup ### --hostgroup --sshlogin with @ par_hostgroup no_group par_hostgroup implicit_group -par_hostgroup ### --hostgroup -S @group +par_hostgroup ### --hostgroup -S @group - bad if you get parallel@lo par_hostgroup tange par_hostgroup tcsh -par_hostgroup ### --hostgroup -S @group1 -Sgrp2 +par_hostgroup ### --hostgroup -S @group1 -Sgrp2 - get all twice par_hostgroup parallel par_hostgroup parallel par_hostgroup tange par_hostgroup tange par_hostgroup tcsh par_hostgroup tcsh -par_hostgroup ### --hostgroup -S @group1+grp2 +par_hostgroup ### --hostgroup -S @group1+grp2 - get all twice par_hostgroup parallel par_hostgroup parallel par_hostgroup tange