From f485a24df3293af1b71a414fbfd97cab9e7b9fe3 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Sun, 24 Jul 2022 08:43:41 +0200 Subject: [PATCH] parallel: Fixed: --filter-hosts and -0. --- src/parallel | 38 ++++++++++--------- testsuite/tests-to-run/parallel-local-ssh9.sh | 10 +++++ testsuite/wanted-results/parallel-local-ssh9 | 12 ++++++ 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/parallel b/src/parallel index 79523bd5..c98d6406 100755 --- a/src/parallel +++ b/src/parallel @@ -2219,9 +2219,7 @@ sub parse_options(@) { $Global::cache_replacement_eval = 0; } } - if(defined $opt::interactive) { - $Global::interactive = $opt::interactive; - } + if(defined $opt::interactive) { $Global::interactive = $opt::interactive; } if(defined $opt::quote) { $Global::quoting = 1; } if(defined $opt::r) { $Global::ignore_empty = 1; } if(defined $opt::verbose) { $Global::stderr_verbose = 1; } @@ -2329,8 +2327,7 @@ sub parse_options(@) { $opt::memsuspend = multiply_binary_prefix($opt::memsuspend); $Global::memlimit = $opt::memsuspend + $opt::memfree; check_invalid_option_combinations(); - if((defined $opt::fifo or defined $opt::cat) - and not $opt::pipepart) { + if((defined $opt::fifo or defined $opt::cat) and not $opt::pipepart) { $opt::pipe = 1; } if(defined $opt::minversion) { @@ -2661,7 +2658,7 @@ sub check_invalid_option_combinations() { sub init_globals() { # Defaults: - $Global::version = 20220622; + $Global::version = 20220722; $Global::progname = 'parallel'; $::name = "GNU Parallel"; $Global::infinity = 2**31; @@ -2789,7 +2786,9 @@ sub init_globals() { # no warnings to allow for undefined $XDG_* no warnings 'uninitialized'; # If $PARALLEL_HOME is set, but does not exist, try making it. - eval { File::Path::mkpath($ENV{'PARALLEL_HOME'}); }; + if(defined $ENV{'PARALLEL_HOME'}) { + eval { File::Path::mkpath($ENV{'PARALLEL_HOME'}); }; + } # $xdg_config_home is needed to make env_parallel.fish stop complaining my $xdg_config_home = $ENV{'XDG_CONFIG_HOME'}; # config_dirs = $PARALLEL_HOME, $XDG_CONFIG_HOME/parallel, @@ -5032,6 +5031,8 @@ sub parallelized_host_filtering() { exit(); } close $in; + # If -0: $/ must be \n + local $/ = "\n"; for(<$host_fh>) { # TODO incompatible with '-quoting. Needs to be fixed differently #if(/\'$/) { @@ -5534,8 +5535,8 @@ sub usage() { "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - " Tange, O. (2022, June 22). GNU Parallel 20220622 ('Bongbong').", - " Zenodo. https://doi.org/10.5281/zenodo.6682930", + " Tange, O. (2022, July 22). GNU Parallel 20220722 ('Roe vs Wade').", + " Zenodo. https://doi.org/10.5281/zenodo.6891516", "", # Before changing these lines, please read # https://www.gnu.org/software/parallel/parallel_design.html#citation-notice @@ -5567,8 +5568,8 @@ sub citation_notice() { "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - " Tange, O. (2022, June 22). GNU Parallel 20220622 ('Bongbong').", - " Zenodo. https://doi.org/10.5281/zenodo.6682930", + " Tange, O. (2022, July 22). GNU Parallel 20220722 ('Roe vs Wade').", + " Zenodo. https://doi.org/10.5281/zenodo.6891516", "", # Before changing these line, please read # https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and @@ -5695,20 +5696,20 @@ sub citation() { "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - "\@software{tange_2022_6682930,", + "\@software{tange_2022_6891516,", " author = {Tange, Ole},", - " title = {GNU Parallel 20220622 ('Bongbong')},", - " month = Jun,", + " title = {GNU Parallel 20220722 ('Roe vs Wade')},", + " month = Jul,", " year = 2022,", " note = {{GNU Parallel is a general parallelizer to run", " multiple serial command line programs in parallel", " without changing them.}},", " publisher = {Zenodo},", - " doi = {10.5281/zenodo.6682930},", - " url = {https://doi.org/10.5281/zenodo.6682930}", + " doi = {10.5281/zenodo.6891516},", + " url = {https://doi.org/10.5281/zenodo.6891516}", "}", "", - "(Feel free to use \\nocite{tange_2022_6682930})", + "(Feel free to use \\nocite{tange_2022_6891516})", "", # Before changing these lines, please read # https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and @@ -12887,6 +12888,7 @@ sub max_length($) { my $len_cache = $Global::cache_dir . "/tmp/sshlogin/" . ::hostname() . "/linelen"; my $cached_limit; + local $/ = undef; if(open(my $fh, "<", $len_cache)) { $cached_limit = <$fh>; $cached_limit || ::die_bug("Cannot read $len_cache"); @@ -13438,7 +13440,7 @@ sub nest_get($) { return undef; } } - if(not $dos_crnl_determined and not $opt::d) { + if(not $dos_crnl_determined and not defined $opt::d) { # Warn if input has CR-NL and -d is not set if($arg =~ /\r$/) { $cr_count++; diff --git a/testsuite/tests-to-run/parallel-local-ssh9.sh b/testsuite/tests-to-run/parallel-local-ssh9.sh index 12050272..33991982 100644 --- a/testsuite/tests-to-run/parallel-local-ssh9.sh +++ b/testsuite/tests-to-run/parallel-local-ssh9.sh @@ -209,6 +209,16 @@ par_PARALLEL_SSHLOGIN_SSHHOST() { LANG=C sort } +par_d_filter_hosts() { + echo '### --filter-hosts and -0' + echo '### https://lists.gnu.org/archive/html/parallel/2022-07/msg00002.html' + printf 'OKa OKb ' | parallel -k -d ' ' --filter-hosts -S lo echo + printf 'OKa1OKb1' | parallel -k -d 1 --filter-hosts -S lo echo + printf 'OKa0OKb0' | parallel -k -d 0 --filter-hosts -S lo echo + printf 'OKa\0OKb\0' | parallel -k -d '\0' --filter-hosts -S lo echo + printf 'OKa\0OKb\0' | parallel -k -0 --filter-hosts -S lo echo +} + export -f $(compgen -A function | grep par_) #compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1' #compgen -A function | grep par_ | sort | diff --git a/testsuite/wanted-results/parallel-local-ssh9 b/testsuite/wanted-results/parallel-local-ssh9 index d6ee189c..14e55368 100644 --- a/testsuite/wanted-results/parallel-local-ssh9 +++ b/testsuite/wanted-results/parallel-local-ssh9 @@ -100,6 +100,18 @@ par_fish_embed Not implemented par_env_parallel_big_env ### bug #54128: command too long when exporting big env par_env_parallel_big_env should not fail par_env_parallel_big_env OK +par_d_filter_hosts ### --filter-hosts and -0 +par_d_filter_hosts ### https://lists.gnu.org/archive/html/parallel/2022-07/msg00002.html +par_d_filter_hosts OKa +par_d_filter_hosts OKb +par_d_filter_hosts OKa +par_d_filter_hosts OKb +par_d_filter_hosts OKa +par_d_filter_hosts OKb +par_d_filter_hosts OKa +par_d_filter_hosts OKb +par_d_filter_hosts OKa +par_d_filter_hosts OKb par_csh_embed Not implemented par_bash_embed --embed par_bash_embed Redirect the output to a file and add your changes at the end: