Hello community, here is the log from the commit of package gnu_parallel for openSUSE:Factory checked in at 2015-05-24 19:34:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gnu_parallel (Old) and /work/SRC/openSUSE:Factory/.gnu_parallel.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnu_parallel" Changes: -------- --- /work/SRC/openSUSE:Factory/gnu_parallel/gnu_parallel.changes 2015-04-27 22:09:12.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.gnu_parallel.new/gnu_parallel.changes 2015-05-24 19:34:23.000000000 +0200 @@ -1,0 +2,11 @@ +Sat May 23 19:17:45 UTC 2015 - astie...@suse.com + +- GNU parallel 20150522: [boo#932143] + * Security: The security issue for --sshlogin + --fifo/--cat has + been fixed. Thereby all issues with + http://lists.gnu.org/archive/html/parallel/2015-04/msg00045.html + have been fixed. + * Security: After further security analysis the issue fixed in + 20150422 also fixed the problem for --tmux. + +------------------------------------------------------------------- Old: ---- parallel-20150422.tar.bz2 parallel-20150422.tar.bz2.sig New: ---- parallel-20150522.tar.bz2 parallel-20150522.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnu_parallel.spec ++++++ --- /var/tmp/diff_new_pack.fPS7Xq/_old 2015-05-24 19:34:24.000000000 +0200 +++ /var/tmp/diff_new_pack.fPS7Xq/_new 2015-05-24 19:34:24.000000000 +0200 @@ -17,7 +17,7 @@ Name: gnu_parallel -Version: 20150422 +Version: 20150522 Release: 0 Summary: Shell tool for executing jobs in parallel License: GPL-3.0+ ++++++ parallel-20150422.tar.bz2 -> parallel-20150522.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/CITATION new/parallel-20150522/CITATION --- old/parallel-20150422/CITATION 2014-09-23 16:33:08.000000000 +0200 +++ new/parallel-20150522/CITATION 2015-05-14 17:20:14.000000000 +0200 @@ -1,16 +1,17 @@ When using programs that use GNU Parallel to process data for publication please cite: @article{Tange2011a, - title = {GNU Parallel - The Command-Line Power Tool}, - author = {O. Tange}, - address = {Frederiksberg, Denmark}, - journal = {;login: The USENIX Magazine}, - month = {Feb}, - number = {1}, - volume = {36}, - url = {http://www.gnu.org/s/parallel}, - year = {2011}, - pages = {42-47} + title = {GNU Parallel - The Command-Line Power Tool}, + author = {O. Tange}, + address = {Frederiksberg, Denmark}, + journal = {;login: The USENIX Magazine}, + month = {Feb}, + number = {1}, + volume = {36}, + url = {http://www.gnu.org/s/parallel}, + year = {2011}, + pages = {42-47} + doi = {10.5281/zenodo.16303} } (Feel free to use \nocite{Tange2011a}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/NEWS new/parallel-20150522/NEWS --- old/parallel-20150422/NEWS 2015-04-23 00:59:51.000000000 +0200 +++ new/parallel-20150522/NEWS 2015-05-22 00:28:04.000000000 +0200 @@ -1,51 +1,118 @@ -20150422 +20150522 -New in this release: +* Security: The security issue for --sshlogin + --fifo/--cat has been fixed. Thereby all issues with http://lists.gnu.org/archive/html/parallel/2015-04/msg00045.html have been fixed. -* Security fix. An attacker on the local system could make you overwrite one of your own files with a single byte. The problem exist when you use --compress or --tmux or --pipe or --cat or --fifo. The attacker must figure out the randomly chosen file name and create a symlink within a time window of 15 ms. +* Security: After further security analysis the issue fixed in 20150422 also fixed the problem for --tmux. -* --shuf will generate all jobs, and shuffle them before running them. This is useful to get a quick preview of the results before running the full batch. +* GNU Parallel was cited in: CIDER: a pipeline for detecting waves of coordinated transcriptional regulation in gene expression time-course data http://biorxiv.org/content/biorxiv/early/2015/03/17/012518.full.pdf -* GNU Parallel now has a DOI: https://dx.doi.org/10.5281/zenodo.16303 +* GNU Parallel was cited in: Building Genomic Analysis Pipelines in a Hackathon Setting with Bioinformatician Teams: DNA-seq, Epigenomics, Metagenomics and RNA-seq http://biorxiv.org/content/biorxiv/early/2015/05/05/018085.full.pdf -* GNU Parallel was cited in: Scaling Machine Learning for Target Prediction in Drug Discovery using Apache Spark https://cris.cumulus.vub.ac.be/portal/files/5147244/spark.pdf +* GNU Parallel was cited in: Toward Enhanced Metadata Quality of Large-Scale Digital Libraries: Estimating Volume Time Range https://www.ideals.illinois.edu/bitstream/handle/2142/73656/186_ready.pdf -* GNU Parallel was cited in: Bayesian inference of protein structure from chemical shift data https://peerj.com/articles/861/ +* GNU Parallel was cited in: Sequencing the cap-snatching repertoire of H1N1 influenza provides insight into the mechanism of viral transcription initiation http://nar.oxfordjournals.org/content/early/2015/04/20/nar.gkv333.full.pdf -* GNU Parallel was cited in: Toward Enhanced Metadata Quality of Large-Scale Digital Libraries: Estimating Volume Time Range https://www.ideals.illinois.edu/bitstream/handle/2142/73656/186_ready.pdf +* GNU Parallel was cited in: Genome assembly using Nanopore-guided long and error-free DNA reads http://www.biomedcentral.com/content/pdf/s12864-015-1519-z.pdf * GNU Parallel was cited in: Contrasting regional architectures of schizophrenia and other complex diseases using fast variance components analysis http://biorxiv.org/content/biorxiv/early/2015/03/13/016527.full.pdf -* GNU Parallel was cited in: Experimental study on the Wind Farm Substation Cable Installation Problem http://i11www.iti.uni-karlsruhe.de/_media/teaching/theses/ma-schmitz-14.pdf +* GNU Parallel was used (unfortunately with wrong citation) in: Comparing the CarbonTracker and TM5-4DVar data assimilation systems for CO2 surface flux inversions http://www.atmos-chem-phys-discuss.net/15/8883/2015/acpd-15-8883-2015-discussion.html + +* GNU Parallel was used in: Gene Set Omic Analysis (GSOA) method https://bitbucket.org/srp33/gsoa + +* A Quick and Neat :) Orchestrator using GNU Parallel http://www.elsotanillo.net/2015/05/a-quick-and-neat-orchestrator-using-gnu-parallel/ + +* Execute commands on multiple computers using GNU Parallel (setting up a cluster on the cheap) https://spectraldifferences.wordpress.com/2015/04/26/execute-commands-on-multiple-computers-using-gnu-parallel-setting-up-a-cluster-on-the-cheap/ + +* Functions and GNU parallel for effective cluster load management http://genomespot.blogspot.dk/2015/04/functions-and-gnu-parallel-for.html + +* Use parallel processing to save time importing databases http://drupalsun.com/node/41854 + +* Run multiple ssh commands in parallel with GNU Parallel http://www.ameir.net/blog/archives/380-run-multiple-ssh-commands-in-parallel-with-gnu-parallel.html + +* Importing huge databases faster https://www.lullabot.com/blog/article/importing-huge-databases-faster + +* Run multiple ssh commands in parallel with GNU Parallel https://www.ameir.net/blog/archives/380-run-multiple-ssh-commands-in-parallel-with-gnu-parallel.html/comment-page-1 -* GNU Parallel was used in: landsat-gifworks https://github.com/KAPPS-/landsat-gifworks +* Parallel? Gnu parallel! https://debian.pro/1834 + +* Bug fixes and man page updates. + + +20150422 + +New in this release: + +* Security fix. An attacker on the local system could make you + overwrite one of your own files with a single byte. The problem + exist when you use --compress or --tmux or --pipe or --cat or + --fifo. The attacker must figure out the randomly chosen file name + and create a symlink within a time window of 15 ms. + +* --shuf will generate all jobs, and shuffle them before running + them. This is useful to get a quick preview of the results before + running the full batch. + +* GNU Parallel now has a DOI: https://dx.doi.org/10.5281/zenodo.16303 + +* GNU Parallel was cited in: Scaling Machine Learning for Target + Prediction in Drug Discovery using Apache Spark + https://cris.cumulus.vub.ac.be/portal/files/5147244/spark.pdf + +* GNU Parallel was cited in: Bayesian inference of protein structure + from chemical shift data https://peerj.com/articles/861/ + +* GNU Parallel was cited in: Toward Enhanced Metadata Quality of + Large-Scale Digital Libraries: Estimating Volume Time Range + https://www.ideals.illinois.edu/bitstream/handle/2142/73656/186_ready.pdf + +* GNU Parallel was cited in: Contrasting regional architectures of + schizophrenia and other complex diseases using fast variance + components analysis + http://biorxiv.org/content/biorxiv/early/2015/03/13/016527.full.pdf + +* GNU Parallel was cited in: Experimental study on the Wind Farm + Substation Cable Installation Problem + http://i11www.iti.uni-karlsruhe.de/_media/teaching/theses/ma-schmitz-14.pdf + +* GNU Parallel was used in: landsat-gifworks + https://github.com/KAPPS-/landsat-gifworks * GNU Parallel was used in: https://github.com/exascience/elprep -* GNU Parallel was used in: http://search.cpan.org/~jillrowe/HPC-Runner-GnuParallel-0.01/ +* GNU Parallel was used in: + http://search.cpan.org/~jillrowe/HPC-Runner-GnuParallel-0.01/ -* GNU Parallel was used in: http://search.cpan.org/~ajpage/Bio-Roary-2.0.7/lib/Bio/Roary/JobRunner/Parallel.pm +* GNU Parallel was used in: + http://search.cpan.org/~ajpage/Bio-Roary-2.0.7/lib/Bio/Roary/JobRunner/Parallel.pm -* GNU Parallel was used in: Rapid haploid SNP calling https://github.com/tseemann/snippy +* GNU Parallel was used in: Rapid haploid SNP calling + https://github.com/tseemann/snippy -* Pictures and Metadata http://www.ozzy.no/2015/02/05/pictures-and-metadata/ +* Pictures and Metadata + http://www.ozzy.no/2015/02/05/pictures-and-metadata/ -* Task automation with bash and parallel https://biowize.wordpress.com/2015/03/23/task-automation-with-bash-and-parallel/ +* Task automation with bash and parallel + https://biowize.wordpress.com/2015/03/23/task-automation-with-bash-and-parallel/ -* How To: Speed Up File Transfers in Linux using RSync with GNU Parallel http://www.yourownlinux.com/2015/04/speed-up-file-transfers-using-rsync-with-gnu-parallel.html +* How To: Speed Up File Transfers in Linux using RSync with GNU + Parallel + http://www.yourownlinux.com/2015/04/speed-up-file-transfers-using-rsync-with-gnu-parallel.html -* Mirroring a Git Repository https://avacariu.me/articles/mirroring-a-git-repository.html +* Mirroring a Git Repository + https://avacariu.me/articles/mirroring-a-git-repository.html -* Add an ENVI header to JAXA Global Mangrove Watch PALSAR tiles https://spectraldifferences.wordpress.com/2015/03/24/add-an-envi-header-to-jaxa-global-mangrove-watch-palsar-tiles/ +* Add an ENVI header to JAXA Global Mangrove Watch PALSAR tiles + https://spectraldifferences.wordpress.com/2015/03/24/add-an-envi-header-to-jaxa-global-mangrove-watch-palsar-tiles/ -* GNU Parallel (Sebuah Uji Coba) http://kaka.prakasa.my.id/2014/09/04/gnu-parallel-sebuah-uji-coba/ +* GNU Parallel (Sebuah Uji Coba) + http://kaka.prakasa.my.id/2014/09/04/gnu-parallel-sebuah-uji-coba/ -* 你见过的最牛逼的命令行程序是什么? http://www.zhihu.com/question/29257300 +* 你见过的最牛逼的命令行程序是什么? + http://www.zhihu.com/question/29257300 * Bug fixes and man page updates. -GNU Parallel - For people who live life in the parallel lane. - 20150322 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/README new/parallel-20150522/README --- old/parallel-20150422/README 2015-04-23 00:16:38.000000000 +0200 +++ new/parallel-20150522/README 2015-05-21 23:32:47.000000000 +0200 @@ -40,9 +40,9 @@ Full installation of GNU Parallel is as simple as: - wget http://ftpmirror.gnu.org/parallel/parallel-20150422.tar.bz2 - bzip2 -dc parallel-20150422.tar.bz2 | tar xvf - - cd parallel-20150422 + wget http://ftpmirror.gnu.org/parallel/parallel-20150522.tar.bz2 + bzip2 -dc parallel-20150522.tar.bz2 | tar xvf - + cd parallel-20150522 ./configure && make && make install @@ -51,9 +51,9 @@ If you are not root you can add ~/bin to your path and install in ~/bin and ~/share: - wget http://ftpmirror.gnu.org/parallel/parallel-20150422.tar.bz2 - bzip2 -dc parallel-20150422.tar.bz2 | tar xvf - - cd parallel-20150422 + wget http://ftpmirror.gnu.org/parallel/parallel-20150522.tar.bz2 + bzip2 -dc parallel-20150522.tar.bz2 | tar xvf - + cd parallel-20150522 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/configure new/parallel-20150522/configure --- old/parallel-20150422/configure 2015-04-23 00:16:52.000000000 +0200 +++ new/parallel-20150522/configure 2015-05-21 23:32:58.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for parallel 20150422. +# Generated by GNU Autoconf 2.69 for parallel 20150522. # # Report bugs to <bug-paral...@gnu.org>. # @@ -579,8 +579,8 @@ # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20150422' -PACKAGE_STRING='parallel 20150422' +PACKAGE_VERSION='20150522' +PACKAGE_STRING='parallel 20150522' PACKAGE_BUGREPORT='bug-paral...@gnu.org' PACKAGE_URL='' @@ -1203,7 +1203,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures parallel 20150422 to adapt to many kinds of systems. +\`configure' configures parallel 20150522 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1269,7 +1269,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of parallel 20150422:";; + short | recursive ) echo "Configuration of parallel 20150522:";; esac cat <<\_ACEOF @@ -1345,7 +1345,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -parallel configure 20150422 +parallel configure 20150522 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1362,7 +1362,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by parallel $as_me 20150422, which was +It was created by parallel $as_me 20150522, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2225,7 +2225,7 @@ # Define the identity of the package. PACKAGE='parallel' - VERSION='20150422' + VERSION='20150522' cat >>confdefs.h <<_ACEOF @@ -2867,7 +2867,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by parallel $as_me 20150422, which was +This file was extended by parallel $as_me 20150522, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2929,7 +2929,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -parallel config.status 20150422 +parallel config.status 20150522 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/configure.ac new/parallel-20150522/configure.ac --- old/parallel-20150422/configure.ac 2015-04-23 00:16:38.000000000 +0200 +++ new/parallel-20150522/configure.ac 2015-05-21 23:32:47.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20150422], [bug-paral...@gnu.org]) +AC_INIT([parallel], [20150522], [bug-paral...@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/niceload new/parallel-20150522/src/niceload --- old/parallel-20150422/src/niceload 2015-04-23 00:16:38.000000000 +0200 +++ new/parallel-20150522/src/niceload 2015-05-21 23:32:47.000000000 +0200 @@ -24,7 +24,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20150422; +$Global::version = 20150522; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/niceload.1 new/parallel-20150522/src/niceload.1 --- old/parallel-20150422/src/niceload.1 2015-01-22 00:33:37.000000000 +0100 +++ new/parallel-20150522/src/niceload.1 2015-05-10 17:07:00.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "NICELOAD 1" -.TH NICELOAD 1 "2015-01-21" "20150122" "parallel" +.TH NICELOAD 1 "2015-01-21" "20150422" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l Files old/parallel-20150422/src/niceload.pdf and new/parallel-20150522/src/niceload.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel new/parallel-20150522/src/parallel --- old/parallel-20150422/src/parallel 2015-04-23 00:31:33.000000000 +0200 +++ new/parallel-20150522/src/parallel 2015-05-21 23:32:47.000000000 +0200 @@ -725,7 +725,6 @@ "use-cpus-instead-of-cores" => \$opt::use_cpus_instead_of_cores, "shellquote|shell_quote|shell-quote" => \$opt::shellquote, "nice=i" => \$opt::nice, - "timeout=s" => \$opt::timeout, "tag" => \$opt::tag, "tagstring|tag-string=s" => \$opt::tagstring, "onall" => \$opt::onall, @@ -751,9 +750,7 @@ "compress" => \$opt::compress, "tty" => \$opt::tty, "T" => \$opt::retired, - "halt-on-error|halt=s" => \$opt::halt, "H=i" => \$opt::retired, - "retries=i" => \$opt::retries, "dry-run|dryrun" => \$opt::dryrun, "progress" => \$opt::progress, "eta" => \$opt::eta, @@ -779,7 +776,11 @@ "xapply" => \$opt::xapply, "bibtex" => \$opt::bibtex, "wc|willcite|will-cite|nn|nonotice|no-notice" => \$opt::willcite, + # Termination and retries + "halt-on-error|halt=s" => \$opt::halt, "memfree=s" => \$opt::memfree, + "retries=i" => \$opt::retries, + "timeout=s" => \$opt::timeout, # xargs-compatibility - implemented, man, testsuite "max-procs|P=s" => \$opt::jobs, "delimiter|d=s" => \$opt::d, @@ -1053,7 +1054,7 @@ sub init_globals { # Defaults: - $Global::version = 20150422; + $Global::version = 20150522; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -3276,17 +3277,17 @@ "please cite:", "", "\@article{Tange2011a,", - " title = {GNU Parallel - The Command-Line Power Tool},", - " author = {O. Tange},", - " address = {Frederiksberg, Denmark},", - " journal = {;login: The USENIX Magazine},", - " month = {Feb},", - " number = {1},", - " volume = {36},", - " url = {http://www.gnu.org/s/parallel},", - " year = {2011},", - " pages = {42-47}", - " doi = {10.5281/zenodo.16303}", + " title = {GNU Parallel - The Command-Line Power Tool},", + " author = {O. Tange},", + " address = {Frederiksberg, Denmark},", + " journal = {;login: The USENIX Magazine},", + " month = {Feb},", + " number = {1},", + " volume = {36},", + " url = {http://www.gnu.org/s/parallel},", + " year = {2011},", + " pages = {42-47}", + " doi = {10.5281/zenodo.16303}", "}", "", "(Feel free to use \\nocite{Tange2011a})", @@ -3599,6 +3600,10 @@ ::debug("init", "shell path $shellpath\n"); $shellpath and last; } + if($testpid == $parent_of_ref->{$testpid}) { + # In Solaris zones, the PPID of the zsched process is itself + last; + } $testpid = $parent_of_ref->{$testpid}; } return $shellpath; @@ -6263,24 +6268,29 @@ } } if($opt::cat) { - # Prepend 'cat > {};' - # Append 'unlink {} without affecting $?' +# Append 'unlink {} without affecting $?' $command = $self->{'commandline'}->replace_placeholders(["cat > \257<\257>; "], 0, 0). $command.";". postpone_exit_and_cleanup(). - $self->{'commandline'}->replace_placeholders(["\257<\257>"], 0, 0); + '$PARALLEL_TMP'; } elsif($opt::fifo) { # Prepend 'mkfifo {}; (' # Append ') & _PID=$!; cat > {}; wait $_PID; ' # (This makes it fail in csh, but give the correct exit code in bash) # Append 'unlink {} without affecting $?' + # Set $ENV{PARALLEL_TMP} when starting a job + # Set $ENV{PARALLEL_TMP} in the remote wrapper + # mkfifo $PARALLEL_TMP; + # {} = $PARALLEL_TMP; + # (...) & + # cat > $PARALLEL_TMP; wait \$_PID; cleanup $PARALLEL_TMP + # perl -e 'open($fifo,">",shift); while(read){print FIFO};unlink $fifo;waitpid($pid,0);exit $?' $! $PARALLEL_FIFO $command = - $self->{'commandline'}->replace_placeholders(["mkfifo \257<\257>;\n ("], 0, 0). + "mkfifo \$PARALLEL_TMP\n (". $command.";". - $self->{'commandline'}->replace_placeholders([") & _PID=\$!; cat > \257<\257>; ", - "wait \$_PID; "]). + ') & _PID=$!; cat > $PARALLEL_TMP; wait $_PID; '. postpone_exit_and_cleanup(). - $self->{'commandline'}->replace_placeholders(["\257<\257>"], 0, 0); + '$PARALLEL_TMP'; } # Wrap with ssh + tranferring of files $command = $self->sshlogin_wrap($command); @@ -6401,7 +6411,13 @@ $monitor_parent_sshd_script = # This will be packed in ', so only use " ::spacefree(0,'$shell = "'.($ENV{'PARALLEL_SHELL'} || '$ENV{SHELL}').'";'. - q{ + '$tmpdir = "'.::perl_quote_scalar($ENV{'TMPDIR'}).'";'. + q{ + # Set $PARALLEL_TMP to a non-existent file name in $TMPDIR + do { + $ENV{PARALLEL_TMP} = $tmpdir."/par". + join"", map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..5); + } while(-e $ENV{PARALLEL_TMP}); $SIG{CHLD} = sub { $done = 1; }; $pid = fork; unless($pid) { @@ -6828,6 +6844,7 @@ } $ENV{'PARALLEL_SEQ'} = $job->seq(); $ENV{'PARALLEL_PID'} = $$; + $ENV{'PARALLEL_TMP'} = ::tmpname("par"); ::debug("run", $Global::total_running, " processes . Starting (", $job->seq(), "): $command\n"); if($opt::pipe) { @@ -6936,12 +6953,8 @@ my $self = shift; my $actual_command = shift; # Temporary file name. Used for fifo to communicate exit val - my ($fh, $tmpfifo) = ::tmpfile(SUFFIX => ".tmx"); - $Global::unlink{$tmpfifo} = 1; - close $fh; - unlink $tmpfifo; -# # FIFO for communicating exit val -# my $tmpfifo = ::tmpfifo(); + my $tmpfifo=::tmpname("tmx"); + if(length($tmpfifo) >=100) { ::error("tmux does not support sockets with path > 100\n"); ::wait_and_exit(255); @@ -6959,12 +6972,13 @@ my $l_act = length($actual_command); my $l_tit = length($title); + my $l_fifo = length($tmpfifo); # The line to run contains a 118 chars extra code + the title 2x - my $l_tot = 2 * $l_tit + $l_act + 30; + my $l_tot = 2 * $l_tit + $l_act + $l_fifo; while($l_tit < 1000 and ( - (900 < $l_tot and $l_tot < 1300) + (890 < $l_tot and $l_tot < 1350) or (9250 < $l_tot and $l_tot < 9800) )) { @@ -6977,7 +6991,7 @@ # 9331 < (title + whole command) < 9636 $title = $title.('\ 'x75); $l_tit = length($title); - $l_tot = 2 * $l_tit + $l_act + 30; + $l_tot = 2 * $l_tit + $l_act + $l_fifo; } my $tmux; @@ -6994,7 +7008,7 @@ $Limits::Command::line_max_len, " tot ", $l_tot, "\n"); - return "mkfifo $tmpfifo; $tmux ". + return "mkfifo $tmpfifo && $tmux ". # Run in tmux ::shell_quote_scalar ( @@ -7567,14 +7581,14 @@ my $max_len = $Global::minimal_command_line_length || Limits::Command::max_length(); if($opt::cat) { - # Generate a tempfile name that will be used as {} + # $PARALLEL_TMP will point to a tempfile that will be used as {} $Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}-> - unget([Arg->new(::tmpname("cat"))]); + unget([Arg->new('$PARALLEL_TMP')]); } if($opt::fifo) { - # Generate a tempfile name that will be used as {} + # $PARALLEL_TMP will point to a tempfile that will be used as {} $Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}-> - unget([Arg->new(::tmpname("fif"))]); + unget([Arg->new('$PARALLEL_TMP')]); } while (not $self->{'arg_queue'}->empty()) { $next_arg = $self->{'arg_queue'}->get(); @@ -7868,6 +7882,8 @@ if(not defined $self->{'replaced'}) { # Don't quote arguments if the input is the full command line my $quote_arg = $Global::noquote ? 0 : not $Global::quoting; + # or if ($opt::cat or $opt::pipe) as they use $PARALLEL_TMP + $quote_arg = ($opt::cat || $opt::fifo) ? 0 : $quote_arg; $self->{'replaced'} = $self-> replace_placeholders($self->{'command'},$Global::quoting, $quote_arg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel.1 new/parallel-20150522/src/parallel.1 --- old/parallel-20150422/src/parallel.1 2015-04-22 18:30:44.000000000 +0200 +++ new/parallel-20150522/src/parallel.1 2015-05-21 23:33:01.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "PARALLEL 1" -.TH PARALLEL 1 "2015-04-22" "20150322" "parallel" +.TH PARALLEL 1 "2015-05-14" "20150522" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -557,8 +557,8 @@ .Sp \&\fIregexp\fR is a Perl Regular Expression: http://perldoc.perl.org/perlre.html -.IP "\fB\-\-compress\fR (beta testing)" 9 -.IX Item "--compress (beta testing)" +.IP "\fB\-\-compress\fR" 9 +.IX Item "--compress" Compress temporary files. If the output is big and very compressible this will take up less disk space in \f(CW$TMPDIR\fR and possibly be faster due to less disk I/O. @@ -566,11 +566,11 @@ \&\s-1GNU \s0\fBparallel\fR will try \fBlzop\fR, \fBpigz\fR, \fBgzip\fR, \fBpbzip2\fR, \&\fBplzip\fR, \fBbzip2\fR, \fBlzma\fR, \fBlzip\fR, \fBxz\fR in that order, and use the first available. -.IP "\fB\-\-compress\-program\fR \fIprg\fR (beta testing)" 9 -.IX Item "--compress-program prg (beta testing)" +.IP "\fB\-\-compress\-program\fR \fIprg\fR" 9 +.IX Item "--compress-program prg" .PD 0 -.IP "\fB\-\-decompress\-program\fR \fIprg\fR (beta testing)" 9 -.IX Item "--decompress-program prg (beta testing)" +.IP "\fB\-\-decompress\-program\fR \fIprg\fR" 9 +.IX Item "--decompress-program prg" .PD Use \fIprg\fR for (de)compressing temporary files. It is assumed that \fIprg \&\-dc\fR will decompress stdin (standard input) to stdout (standard @@ -579,11 +579,11 @@ .IX Item "--ctrlc" If receiving \s-1SIGNING, GNU \s0\fBparallel\fR will send \s-1SIGINT\s0 to tasks running on remote computers thus killing them. -.IP "\fB\-\-delimiter\fR \fIdelim\fR (beta testing)" 9 -.IX Item "--delimiter delim (beta testing)" +.IP "\fB\-\-delimiter\fR \fIdelim\fR" 9 +.IX Item "--delimiter delim" .PD 0 -.IP "\fB\-d\fR \fIdelim\fR (beta testing)" 9 -.IX Item "-d delim (beta testing)" +.IP "\fB\-d\fR \fIdelim\fR" 9 +.IX Item "-d delim" .PD Input items are terminated by \fIdelim\fR. Quotes and backslash are not special; every character in the input is taken literally. Disables @@ -628,8 +628,8 @@ because it is \s-1POSIX\s0 compliant for \fBxargs\fR while this option is not. If \fIeof-str\fR is omitted, there is no end of file string. If neither \&\fB\-E\fR nor \fB\-e\fR is used, no end of file string is used. -.IP "\fB\-\-env\fR \fIvar\fR (alpha testing)" 9 -.IX Item "--env var (alpha testing)" +.IP "\fB\-\-env\fR \fIvar\fR (beta testing)" 9 +.IX Item "--env var (beta testing)" Copy environment variable \fIvar\fR. This will copy \fIvar\fR to the environment that the command is run in. This is especially useful for remote execution. @@ -823,8 +823,8 @@ This option is a synonym for \fB\-I\fR\fIreplace-str\fR if \fIreplace-str\fR is specified, and for \fB\-I\fR{} otherwise. This option is deprecated; use \fB\-I\fR instead. -.IP "\fB\-\-joblog\fR \fIlogfile\fR (beta testing)" 9 -.IX Item "--joblog logfile (beta testing)" +.IP "\fB\-\-joblog\fR \fIlogfile\fR" 9 +.IX Item "--joblog logfile" Logfile for executed jobs. Save a list of the executed jobs to \&\fIlogfile\fR in the following \s-1TAB\s0 separated format: sequence number, sshlogin, start time as seconds since epoch, run time in seconds, @@ -1065,11 +1065,11 @@ of each job is saved in a file and the filename is then printed. .Sp See also: \fB\-\-results\fR -.IP "\fB\-\-pipe\fR (beta testing)" 9 -.IX Item "--pipe (beta testing)" +.IP "\fB\-\-pipe\fR" 9 +.IX Item "--pipe" .PD 0 -.IP "\fB\-\-spreadstdin\fR (beta testing)" 9 -.IX Item "--spreadstdin (beta testing)" +.IP "\fB\-\-spreadstdin\fR" 9 +.IX Item "--spreadstdin" .PD Spread input to jobs on stdin (standard input). Read a block of data from stdin (standard input) and give one block of data as input to one @@ -1094,8 +1094,8 @@ \&\fB\-\-files\fR is often used with \fB\-\-pipe\fR. .Sp See also: \fB\-\-recstart\fR, \fB\-\-recend\fR, \fB\-\-fifo\fR, \fB\-\-cat\fR, \fB\-\-pipepart\fR. -.IP "\fB\-\-pipepart\fR (alpha testing)" 9 -.IX Item "--pipepart (alpha testing)" +.IP "\fB\-\-pipepart\fR (beta testing)" 9 +.IX Item "--pipepart (beta testing)" Pipe parts of a physical file. \fB\-\-pipepart\fR works similar to \&\fB\-\-pipe\fR, but is much faster. It has a few limitations: .RS 9 @@ -1176,20 +1176,20 @@ Print the maximal number of characters allowed on the command line and exit (used by \s-1GNU \s0\fBparallel\fR itself to determine the line length on remote computers). -.IP "\fB\-\-number\-of\-cpus\fR (beta testing)" 9 -.IX Item "--number-of-cpus (beta testing)" +.IP "\fB\-\-number\-of\-cpus\fR" 9 +.IX Item "--number-of-cpus" Print the number of physical CPUs and exit (used by \s-1GNU \s0\fBparallel\fR itself to determine the number of physical CPUs on remote computers). -.IP "\fB\-\-number\-of\-cores\fR (beta testing)" 9 -.IX Item "--number-of-cores (beta testing)" +.IP "\fB\-\-number\-of\-cores\fR" 9 +.IX Item "--number-of-cores" Print the number of \s-1CPU\s0 cores and exit (used by \s-1GNU \s0\fBparallel\fR itself to determine the number of \s-1CPU\s0 cores on remote computers). .IP "\fB\-\-no\-keep\-order\fR" 9 .IX Item "--no-keep-order" Overrides an earlier \fB\-\-keep\-order\fR (e.g. if set in \&\fB~/.parallel/config\fR). -.IP "\fB\-\-nice\fR \fIniceness\fR (beta testing)" 9 -.IX Item "--nice niceness (beta testing)" +.IP "\fB\-\-nice\fR \fIniceness\fR" 9 +.IX Item "--nice niceness" Run the command at this niceness. For simple commands you can just add \&\fBnice\fR in front of the command. But if the command consists of more sub commands (Like: ls|wc) then prepending \fBnice\fR will not always @@ -1447,8 +1447,8 @@ .Sp \&\fB\-\-keep\-order\fR will not work with \fB\-\-round\-robin\fR as it is impossible to track which input block corresponds to which output. -.IP "\fB\-\-rpl\fR '\fItag\fR \fIperl expression\fR' (beta testing)" 9 -.IX Item "--rpl 'tag perl expression' (beta testing)" +.IP "\fB\-\-rpl\fR '\fItag\fR \fIperl expression\fR'" 9 +.IX Item "--rpl 'tag perl expression'" Use \fItag\fR as a replacement string for \fIperl expression\fR. This makes it possible to define your own replacement strings. \s-1GNU \s0\fBparallel\fR's 7 replacement strings are implemented as: @@ -1630,8 +1630,8 @@ .IX Item "--shellquote" Does not run the command but quotes it. Useful for making quoted composed commands for \s-1GNU \s0\fBparallel\fR. -.IP "\fB\-\-shuf\fR (alpha testing)" 9 -.IX Item "--shuf (alpha testing)" +.IP "\fB\-\-shuf\fR (beta testing)" 9 +.IX Item "--shuf (beta testing)" Shuffle jobs. When having multiple input sources it is hard to randomize jobs. \-\-shuf will generate all jobs, and shuffle them before running them. This is useful to get a quick preview of the results @@ -1789,8 +1789,8 @@ the lines will be prepended with the sshlogin instead. .Sp \&\fB\-\-tag\fR is ignored when using \fB\-u\fR. -.IP "\fB\-\-tagstring\fR \fIstr\fR (beta testing)" 9 -.IX Item "--tagstring str (beta testing)" +.IP "\fB\-\-tagstring\fR \fIstr\fR" 9 +.IX Item "--tagstring str" Tag lines with a string. Each output line will be prepended with \&\fIstr\fR and \s-1TAB \s0(\et). \fIstr\fR can contain replacement strings such as {}. @@ -1802,8 +1802,8 @@ into temporary files in /tmp. By setting \fB\-\-tmpdir\fR you can use a different dir for the files. Setting \fB\-\-tmpdir\fR is equivalent to setting \f(CW$TMPDIR\fR. -.IP "\fB\-\-tmux\fR (beta testing)" 9 -.IX Item "--tmux (beta testing)" +.IP "\fB\-\-tmux\fR" 9 +.IX Item "--tmux" Use \fBtmux\fR for output. Start a \fBtmux\fR session and run each job in a window in that session. No other output will be produced. .IP "\fB\-\-timeout\fR \fIval\fR" 9 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel.html new/parallel-20150522/src/parallel.html --- old/parallel-20150422/src/parallel.html 2015-04-22 18:30:44.000000000 +0200 +++ new/parallel-20150522/src/parallel.html 2015-05-21 23:33:00.000000000 +0200 @@ -519,7 +519,7 @@ <p><i>regexp</i> is a Perl Regular Expression: http://perldoc.perl.org/perlre.html</p> </dd> -<dt id="compress-beta-testing"><b>--compress</b> (beta testing)</dt> +<dt id="compress"><b>--compress</b></dt> <dd> <p>Compress temporary files. If the output is big and very compressible this will take up less disk space in $TMPDIR and possibly be faster due to less disk I/O.</p> @@ -527,11 +527,11 @@ <p>GNU <b>parallel</b> will try <b>lzop</b>, <b>pigz</b>, <b>gzip</b>, <b>pbzip2</b>, <b>plzip</b>, <b>bzip2</b>, <b>lzma</b>, <b>lzip</b>, <b>xz</b> in that order, and use the first available.</p> </dd> -<dt id="compress-program-prg-beta-testing"><b>--compress-program</b> <i>prg</i> (beta testing)</dt> +<dt id="compress-program-prg"><b>--compress-program</b> <i>prg</i></dt> <dd> </dd> -<dt id="decompress-program-prg-beta-testing"><b>--decompress-program</b> <i>prg</i> (beta testing)</dt> +<dt id="decompress-program-prg"><b>--decompress-program</b> <i>prg</i></dt> <dd> <p>Use <i>prg</i> for (de)compressing temporary files. It is assumed that <i>prg -dc</i> will decompress stdin (standard input) to stdout (standard output) unless <b>--decompress-program</b> is given.</p> @@ -543,11 +543,11 @@ <p>If receiving SIGNING, GNU <b>parallel</b> will send SIGINT to tasks running on remote computers thus killing them.</p> </dd> -<dt id="delimiter-delim-beta-testing"><b>--delimiter</b> <i>delim</i> (beta testing)</dt> +<dt id="delimiter-delim"><b>--delimiter</b> <i>delim</i></dt> <dd> </dd> -<dt id="d-delim-beta-testing"><b>-d</b> <i>delim</i> (beta testing)</dt> +<dt id="d-delim"><b>-d</b> <i>delim</i></dt> <dd> <p>Input items are terminated by <i>delim</i>. Quotes and backslash are not special; every character in the input is taken literally. Disables the end-of-file string, which is treated like any other argument. The specified delimiter may be characters, C-style character escapes such as \n, or octal or hexadecimal escape codes. Octal and hexadecimal escape codes are understood as for the printf command. Multibyte characters are not supported.</p> @@ -591,7 +591,7 @@ <p>This option is a synonym for the <b>-E</b> option. Use <b>-E</b> instead, because it is POSIX compliant for <b>xargs</b> while this option is not. If <i>eof-str</i> is omitted, there is no end of file string. If neither <b>-E</b> nor <b>-e</b> is used, no end of file string is used.</p> </dd> -<dt id="env-var-alpha-testing"><b>--env</b> <i>var</i> (alpha testing)</dt> +<dt id="env-var-beta-testing"><b>--env</b> <i>var</i> (beta testing)</dt> <dd> <p>Copy environment variable <i>var</i>. This will copy <i>var</i> to the environment that the command is run in. This is especially useful for remote execution.</p> @@ -795,7 +795,7 @@ <p>This option is a synonym for <b>-I</b><i>replace-str</i> if <i>replace-str</i> is specified, and for <b>-I</b>{} otherwise. This option is deprecated; use <b>-I</b> instead.</p> </dd> -<dt id="joblog-logfile-beta-testing"><b>--joblog</b> <i>logfile</i> (beta testing)</dt> +<dt id="joblog-logfile"><b>--joblog</b> <i>logfile</i></dt> <dd> <p>Logfile for executed jobs. Save a list of the executed jobs to <i>logfile</i> in the following TAB separated format: sequence number, sshlogin, start time as seconds since epoch, run time in seconds, bytes in files transferred, bytes in files returned, exit status, signal, and command run.</p> @@ -1045,11 +1045,11 @@ <p>See also: <b>--results</b></p> </dd> -<dt id="pipe-beta-testing"><b>--pipe</b> (beta testing)</dt> +<dt id="pipe"><b>--pipe</b></dt> <dd> </dd> -<dt id="spreadstdin-beta-testing"><b>--spreadstdin</b> (beta testing)</dt> +<dt id="spreadstdin"><b>--spreadstdin</b></dt> <dd> <p>Spread input to jobs on stdin (standard input). Read a block of data from stdin (standard input) and give one block of data as input to one job.</p> @@ -1069,7 +1069,7 @@ <p>See also: <b>--recstart</b>, <b>--recend</b>, <b>--fifo</b>, <b>--cat</b>, <b>--pipepart</b>.</p> </dd> -<dt id="pipepart-alpha-testing"><b>--pipepart</b> (alpha testing)</dt> +<dt id="pipepart-beta-testing"><b>--pipepart</b> (beta testing)</dt> <dd> <p>Pipe parts of a physical file. <b>--pipepart</b> works similar to <b>--pipe</b>, but is much faster. It has a few limitations:</p> @@ -1153,13 +1153,13 @@ <p>Print the maximal number of characters allowed on the command line and exit (used by GNU <b>parallel</b> itself to determine the line length on remote computers).</p> </dd> -<dt id="number-of-cpus-beta-testing"><b>--number-of-cpus</b> (beta testing)</dt> +<dt id="number-of-cpus"><b>--number-of-cpus</b></dt> <dd> <p>Print the number of physical CPUs and exit (used by GNU <b>parallel</b> itself to determine the number of physical CPUs on remote computers).</p> </dd> -<dt id="number-of-cores-beta-testing"><b>--number-of-cores</b> (beta testing)</dt> +<dt id="number-of-cores"><b>--number-of-cores</b></dt> <dd> <p>Print the number of CPU cores and exit (used by GNU <b>parallel</b> itself to determine the number of CPU cores on remote computers).</p> @@ -1171,7 +1171,7 @@ <p>Overrides an earlier <b>--keep-order</b> (e.g. if set in <b>~/.parallel/config</b>).</p> </dd> -<dt id="nice-niceness-beta-testing"><b>--nice</b> <i>niceness</i> (beta testing)</dt> +<dt id="nice-niceness"><b>--nice</b> <i>niceness</i></dt> <dd> <p>Run the command at this niceness. For simple commands you can just add <b>nice</b> in front of the command. But if the command consists of more sub commands (Like: ls|wc) then prepending <b>nice</b> will not always work. <b>--nice</b> will make sure all sub commands are niced - even on remote servers.</p> @@ -1404,7 +1404,7 @@ <p><b>--keep-order</b> will not work with <b>--round-robin</b> as it is impossible to track which input block corresponds to which output.</p> </dd> -<dt id="rpl-tag-perl-expression-beta-testing"><b>--rpl</b> '<i>tag</i> <i>perl expression</i>' (beta testing)</dt> +<dt id="rpl-tag-perl-expression"><b>--rpl</b> '<i>tag</i> <i>perl expression</i>'</dt> <dd> <p>Use <i>tag</i> as a replacement string for <i>perl expression</i>. This makes it possible to define your own replacement strings. GNU <b>parallel</b>'s 7 replacement strings are implemented as:</p> @@ -1573,7 +1573,7 @@ <p>Does not run the command but quotes it. Useful for making quoted composed commands for GNU <b>parallel</b>.</p> </dd> -<dt id="shuf-alpha-testing"><b>--shuf</b> (alpha testing)</dt> +<dt id="shuf-beta-testing"><b>--shuf</b> (beta testing)</dt> <dd> <p>Shuffle jobs. When having multiple input sources it is hard to randomize jobs. --shuf will generate all jobs, and shuffle them before running them. This is useful to get a quick preview of the results before running the full batch.</p> @@ -1722,7 +1722,7 @@ <p><b>--tag</b> is ignored when using <b>-u</b>.</p> </dd> -<dt id="tagstring-str-beta-testing"><b>--tagstring</b> <i>str</i> (beta testing)</dt> +<dt id="tagstring-str"><b>--tagstring</b> <i>str</i></dt> <dd> <p>Tag lines with a string. Each output line will be prepended with <i>str</i> and TAB (\t). <i>str</i> can contain replacement strings such as {}.</p> @@ -1736,7 +1736,7 @@ <p>Directory for temporary files. GNU <b>parallel</b> normally buffers output into temporary files in /tmp. By setting <b>--tmpdir</b> you can use a different dir for the files. Setting <b>--tmpdir</b> is equivalent to setting $TMPDIR.</p> </dd> -<dt id="tmux-beta-testing"><b>--tmux</b> (beta testing)</dt> +<dt id="tmux"><b>--tmux</b></dt> <dd> <p>Use <b>tmux</b> for output. Start a <b>tmux</b> session and run each job in a window in that session. No other output will be produced.</p> Files old/parallel-20150422/src/parallel.pdf and new/parallel-20150522/src/parallel.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel.pod new/parallel-20150522/src/parallel.pod --- old/parallel-20150422/src/parallel.pod 2015-04-22 18:26:25.000000000 +0200 +++ new/parallel-20150522/src/parallel.pod 2015-05-14 17:20:14.000000000 +0200 @@ -488,7 +488,7 @@ http://perldoc.perl.org/perlre.html -=item B<--compress> (beta testing) +=item B<--compress> Compress temporary files. If the output is big and very compressible this will take up less disk space in $TMPDIR and possibly be faster @@ -499,9 +499,9 @@ first available. -=item B<--compress-program> I<prg> (beta testing) +=item B<--compress-program> I<prg> -=item B<--decompress-program> I<prg> (beta testing) +=item B<--decompress-program> I<prg> Use I<prg> for (de)compressing temporary files. It is assumed that I<prg -dc> will decompress stdin (standard input) to stdout (standard @@ -514,9 +514,9 @@ running on remote computers thus killing them. -=item B<--delimiter> I<delim> (beta testing) +=item B<--delimiter> I<delim> -=item B<-d> I<delim> (beta testing) +=item B<-d> I<delim> Input items are terminated by I<delim>. Quotes and backslash are not special; every character in the input is taken literally. Disables @@ -568,7 +568,7 @@ B<-E> nor B<-e> is used, no end of file string is used. -=item B<--env> I<var> (alpha testing) +=item B<--env> I<var> (beta testing) Copy environment variable I<var>. This will copy I<var> to the environment that the command is run in. This is especially useful for @@ -782,7 +782,7 @@ use B<-I> instead. -=item B<--joblog> I<logfile> (beta testing) +=item B<--joblog> I<logfile> Logfile for executed jobs. Save a list of the executed jobs to I<logfile> in the following TAB separated format: sequence number, @@ -1039,9 +1039,9 @@ See also: B<--results> -=item B<--pipe> (beta testing) +=item B<--pipe> -=item B<--spreadstdin> (beta testing) +=item B<--spreadstdin> Spread input to jobs on stdin (standard input). Read a block of data from stdin (standard input) and give one block of data as input to one @@ -1068,7 +1068,7 @@ See also: B<--recstart>, B<--recend>, B<--fifo>, B<--cat>, B<--pipepart>. -=item B<--pipepart> (alpha testing) +=item B<--pipepart> (beta testing) Pipe parts of a physical file. B<--pipepart> works similar to B<--pipe>, but is much faster. It has a few limitations: @@ -1162,13 +1162,13 @@ on remote computers). -=item B<--number-of-cpus> (beta testing) +=item B<--number-of-cpus> Print the number of physical CPUs and exit (used by GNU B<parallel> itself to determine the number of physical CPUs on remote computers). -=item B<--number-of-cores> (beta testing) +=item B<--number-of-cores> Print the number of CPU cores and exit (used by GNU B<parallel> itself to determine the number of CPU cores on remote computers). @@ -1180,7 +1180,7 @@ B<~/.parallel/config>). -=item B<--nice> I<niceness> (beta testing) +=item B<--nice> I<niceness> Run the command at this niceness. For simple commands you can just add B<nice> in front of the command. But if the command consists of more @@ -1441,7 +1441,7 @@ impossible to track which input block corresponds to which output. -=item B<--rpl> 'I<tag> I<perl expression>' (beta testing) +=item B<--rpl> 'I<tag> I<perl expression>' Use I<tag> as a replacement string for I<perl expression>. This makes it possible to define your own replacement strings. GNU B<parallel>'s @@ -1616,7 +1616,7 @@ composed commands for GNU B<parallel>. -=item B<--shuf> (alpha testing) +=item B<--shuf> (beta testing) Shuffle jobs. When having multiple input sources it is hard to randomize jobs. --shuf will generate all jobs, and shuffle them before @@ -1781,7 +1781,7 @@ B<--tag> is ignored when using B<-u>. -=item B<--tagstring> I<str> (beta testing) +=item B<--tagstring> I<str> Tag lines with a string. Each output line will be prepended with I<str> and TAB (\t). I<str> can contain replacement strings such as @@ -1798,7 +1798,7 @@ setting $TMPDIR. -=item B<--tmux> (beta testing) +=item B<--tmux> Use B<tmux> for output. Start a B<tmux> session and run each job in a window in that session. No other output will be produced. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel.texi new/parallel-20150522/src/parallel.texi --- old/parallel-20150422/src/parallel.texi 2015-04-22 18:30:54.000000000 +0200 +++ new/parallel-20150522/src/parallel.texi 2015-05-21 23:33:10.000000000 +0200 @@ -564,8 +564,8 @@ @emph{regexp} is a Perl Regular Expression: http://perldoc.perl.org/perlre.html -@item @strong{--compress} (beta testing) -@anchor{@strong{--compress} (beta testing)} +@item @strong{--compress} +@anchor{@strong{--compress}} Compress temporary files. If the output is big and very compressible this will take up less disk space in $TMPDIR and possibly be faster @@ -575,11 +575,11 @@ @strong{plzip}, @strong{bzip2}, @strong{lzma}, @strong{lzip}, @strong{xz} in that order, and use the first available. -@item @strong{--compress-program} @emph{prg} (beta testing) -@anchor{@strong{--compress-program} @emph{prg} (beta testing)} +@item @strong{--compress-program} @emph{prg} +@anchor{@strong{--compress-program} @emph{prg}} -@item @strong{--decompress-program} @emph{prg} (beta testing) -@anchor{@strong{--decompress-program} @emph{prg} (beta testing)} +@item @strong{--decompress-program} @emph{prg} +@anchor{@strong{--decompress-program} @emph{prg}} Use @emph{prg} for (de)compressing temporary files. It is assumed that @emph{prg -dc} will decompress stdin (standard input) to stdout (standard @@ -591,11 +591,11 @@ If receiving SIGNING, GNU @strong{parallel} will send SIGINT to tasks running on remote computers thus killing them. -@item @strong{--delimiter} @emph{delim} (beta testing) -@anchor{@strong{--delimiter} @emph{delim} (beta testing)} +@item @strong{--delimiter} @emph{delim} +@anchor{@strong{--delimiter} @emph{delim}} -@item @strong{-d} @emph{delim} (beta testing) -@anchor{@strong{-d} @emph{delim} (beta testing)} +@item @strong{-d} @emph{delim} +@anchor{@strong{-d} @emph{delim}} Input items are terminated by @emph{delim}. Quotes and backslash are not special; every character in the input is taken literally. Disables @@ -649,8 +649,8 @@ If @emph{eof-str} is omitted, there is no end of file string. If neither @strong{-E} nor @strong{-e} is used, no end of file string is used. -@item @strong{--env} @emph{var} (alpha testing) -@anchor{@strong{--env} @emph{var} (alpha testing)} +@item @strong{--env} @emph{var} (beta testing) +@anchor{@strong{--env} @emph{var} (beta testing)} Copy environment variable @emph{var}. This will copy @emph{var} to the environment that the command is run in. This is especially useful for @@ -878,8 +878,8 @@ specified, and for @strong{-I}@{@} otherwise. This option is deprecated; use @strong{-I} instead. -@item @strong{--joblog} @emph{logfile} (beta testing) -@anchor{@strong{--joblog} @emph{logfile} (beta testing)} +@item @strong{--joblog} @emph{logfile} +@anchor{@strong{--joblog} @emph{logfile}} Logfile for executed jobs. Save a list of the executed jobs to @emph{logfile} in the following TAB separated format: sequence number, @@ -1160,11 +1160,11 @@ See also: @strong{--results} -@item @strong{--pipe} (beta testing) -@anchor{@strong{--pipe} (beta testing)} +@item @strong{--pipe} +@anchor{@strong{--pipe}} -@item @strong{--spreadstdin} (beta testing) -@anchor{@strong{--spreadstdin} (beta testing)} +@item @strong{--spreadstdin} +@anchor{@strong{--spreadstdin}} Spread input to jobs on stdin (standard input). Read a block of data from stdin (standard input) and give one block of data as input to one @@ -1190,8 +1190,8 @@ See also: @strong{--recstart}, @strong{--recend}, @strong{--fifo}, @strong{--cat}, @strong{--pipepart}. -@item @strong{--pipepart} (alpha testing) -@anchor{@strong{--pipepart} (alpha testing)} +@item @strong{--pipepart} (beta testing) +@anchor{@strong{--pipepart} (beta testing)} Pipe parts of a physical file. @strong{--pipepart} works similar to @strong{--pipe}, but is much faster. It has a few limitations: @@ -1289,14 +1289,14 @@ exit (used by GNU @strong{parallel} itself to determine the line length on remote computers). -@item @strong{--number-of-cpus} (beta testing) -@anchor{@strong{--number-of-cpus} (beta testing)} +@item @strong{--number-of-cpus} +@anchor{@strong{--number-of-cpus}} Print the number of physical CPUs and exit (used by GNU @strong{parallel} itself to determine the number of physical CPUs on remote computers). -@item @strong{--number-of-cores} (beta testing) -@anchor{@strong{--number-of-cores} (beta testing)} +@item @strong{--number-of-cores} +@anchor{@strong{--number-of-cores}} Print the number of CPU cores and exit (used by GNU @strong{parallel} itself to determine the number of CPU cores on remote computers). @@ -1307,8 +1307,8 @@ Overrides an earlier @strong{--keep-order} (e.g. if set in @strong{~/.parallel/config}). -@item @strong{--nice} @emph{niceness} (beta testing) -@anchor{@strong{--nice} @emph{niceness} (beta testing)} +@item @strong{--nice} @emph{niceness} +@anchor{@strong{--nice} @emph{niceness}} Run the command at this niceness. For simple commands you can just add @strong{nice} in front of the command. But if the command consists of more @@ -1593,8 +1593,8 @@ @strong{--keep-order} will not work with @strong{--round-robin} as it is impossible to track which input block corresponds to which output. -@item @strong{--rpl} '@emph{tag} @emph{perl expression}' (beta testing) -@anchor{@strong{--rpl} '@emph{tag} @emph{perl expression}' (beta testing)} +@item @strong{--rpl} '@emph{tag} @emph{perl expression}' +@anchor{@strong{--rpl} '@emph{tag} @emph{perl expression}'} Use @emph{tag} as a replacement string for @emph{perl expression}. This makes it possible to define your own replacement strings. GNU @strong{parallel}'s @@ -1792,8 +1792,8 @@ Does not run the command but quotes it. Useful for making quoted composed commands for GNU @strong{parallel}. -@item @strong{--shuf} (alpha testing) -@anchor{@strong{--shuf} (alpha testing)} +@item @strong{--shuf} (beta testing) +@anchor{@strong{--shuf} (beta testing)} Shuffle jobs. When having multiple input sources it is hard to randomize jobs. --shuf will generate all jobs, and shuffle them before @@ -1967,8 +1967,8 @@ @strong{--tag} is ignored when using @strong{-u}. -@item @strong{--tagstring} @emph{str} (beta testing) -@anchor{@strong{--tagstring} @emph{str} (beta testing)} +@item @strong{--tagstring} @emph{str} +@anchor{@strong{--tagstring} @emph{str}} Tag lines with a string. Each output line will be prepended with @emph{str} and TAB (\t). @emph{str} can contain replacement strings such as @@ -1984,8 +1984,8 @@ different dir for the files. Setting @strong{--tmpdir} is equivalent to setting $TMPDIR. -@item @strong{--tmux} (beta testing) -@anchor{@strong{--tmux} (beta testing)} +@item @strong{--tmux} +@anchor{@strong{--tmux}} Use @strong{tmux} for output. Start a @strong{tmux} session and run each job in a window in that session. No other output will be produced. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel_design.7 new/parallel-20150522/src/parallel_design.7 --- old/parallel-20150422/src/parallel_design.7 2015-04-22 22:19:32.000000000 +0200 +++ new/parallel-20150522/src/parallel_design.7 2015-05-10 17:07:00.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "PARALLEL_DESIGN 7" -.TH PARALLEL_DESIGN 7 "2015-04-22" "20150322" "parallel" +.TH PARALLEL_DESIGN 7 "2015-04-22" "20150422" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l Files old/parallel-20150422/src/parallel_design.pdf and new/parallel-20150522/src/parallel_design.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/parallel_tutorial.7 new/parallel-20150522/src/parallel_tutorial.7 --- old/parallel-20150422/src/parallel_tutorial.7 2015-04-06 22:16:04.000000000 +0200 +++ new/parallel-20150522/src/parallel_tutorial.7 2015-05-13 10:15:56.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "PARALLEL_TUTORIAL 7" -.TH PARALLEL_TUTORIAL 7 "2015-04-06" "20150322" "parallel" +.TH PARALLEL_TUTORIAL 7 "2015-05-13" "20150422" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l Files old/parallel-20150422/src/parallel_tutorial.pdf and new/parallel-20150522/src/parallel_tutorial.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/sem new/parallel-20150522/src/sem --- old/parallel-20150422/src/sem 2015-04-23 00:31:33.000000000 +0200 +++ new/parallel-20150522/src/sem 2015-05-21 23:32:47.000000000 +0200 @@ -725,7 +725,6 @@ "use-cpus-instead-of-cores" => \$opt::use_cpus_instead_of_cores, "shellquote|shell_quote|shell-quote" => \$opt::shellquote, "nice=i" => \$opt::nice, - "timeout=s" => \$opt::timeout, "tag" => \$opt::tag, "tagstring|tag-string=s" => \$opt::tagstring, "onall" => \$opt::onall, @@ -751,9 +750,7 @@ "compress" => \$opt::compress, "tty" => \$opt::tty, "T" => \$opt::retired, - "halt-on-error|halt=s" => \$opt::halt, "H=i" => \$opt::retired, - "retries=i" => \$opt::retries, "dry-run|dryrun" => \$opt::dryrun, "progress" => \$opt::progress, "eta" => \$opt::eta, @@ -779,7 +776,11 @@ "xapply" => \$opt::xapply, "bibtex" => \$opt::bibtex, "wc|willcite|will-cite|nn|nonotice|no-notice" => \$opt::willcite, + # Termination and retries + "halt-on-error|halt=s" => \$opt::halt, "memfree=s" => \$opt::memfree, + "retries=i" => \$opt::retries, + "timeout=s" => \$opt::timeout, # xargs-compatibility - implemented, man, testsuite "max-procs|P=s" => \$opt::jobs, "delimiter|d=s" => \$opt::d, @@ -1053,7 +1054,7 @@ sub init_globals { # Defaults: - $Global::version = 20150422; + $Global::version = 20150522; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -3276,17 +3277,17 @@ "please cite:", "", "\@article{Tange2011a,", - " title = {GNU Parallel - The Command-Line Power Tool},", - " author = {O. Tange},", - " address = {Frederiksberg, Denmark},", - " journal = {;login: The USENIX Magazine},", - " month = {Feb},", - " number = {1},", - " volume = {36},", - " url = {http://www.gnu.org/s/parallel},", - " year = {2011},", - " pages = {42-47}", - " doi = {10.5281/zenodo.16303}", + " title = {GNU Parallel - The Command-Line Power Tool},", + " author = {O. Tange},", + " address = {Frederiksberg, Denmark},", + " journal = {;login: The USENIX Magazine},", + " month = {Feb},", + " number = {1},", + " volume = {36},", + " url = {http://www.gnu.org/s/parallel},", + " year = {2011},", + " pages = {42-47}", + " doi = {10.5281/zenodo.16303}", "}", "", "(Feel free to use \\nocite{Tange2011a})", @@ -3599,6 +3600,10 @@ ::debug("init", "shell path $shellpath\n"); $shellpath and last; } + if($testpid == $parent_of_ref->{$testpid}) { + # In Solaris zones, the PPID of the zsched process is itself + last; + } $testpid = $parent_of_ref->{$testpid}; } return $shellpath; @@ -6263,24 +6268,29 @@ } } if($opt::cat) { - # Prepend 'cat > {};' - # Append 'unlink {} without affecting $?' +# Append 'unlink {} without affecting $?' $command = $self->{'commandline'}->replace_placeholders(["cat > \257<\257>; "], 0, 0). $command.";". postpone_exit_and_cleanup(). - $self->{'commandline'}->replace_placeholders(["\257<\257>"], 0, 0); + '$PARALLEL_TMP'; } elsif($opt::fifo) { # Prepend 'mkfifo {}; (' # Append ') & _PID=$!; cat > {}; wait $_PID; ' # (This makes it fail in csh, but give the correct exit code in bash) # Append 'unlink {} without affecting $?' + # Set $ENV{PARALLEL_TMP} when starting a job + # Set $ENV{PARALLEL_TMP} in the remote wrapper + # mkfifo $PARALLEL_TMP; + # {} = $PARALLEL_TMP; + # (...) & + # cat > $PARALLEL_TMP; wait \$_PID; cleanup $PARALLEL_TMP + # perl -e 'open($fifo,">",shift); while(read){print FIFO};unlink $fifo;waitpid($pid,0);exit $?' $! $PARALLEL_FIFO $command = - $self->{'commandline'}->replace_placeholders(["mkfifo \257<\257>;\n ("], 0, 0). + "mkfifo \$PARALLEL_TMP\n (". $command.";". - $self->{'commandline'}->replace_placeholders([") & _PID=\$!; cat > \257<\257>; ", - "wait \$_PID; "]). + ') & _PID=$!; cat > $PARALLEL_TMP; wait $_PID; '. postpone_exit_and_cleanup(). - $self->{'commandline'}->replace_placeholders(["\257<\257>"], 0, 0); + '$PARALLEL_TMP'; } # Wrap with ssh + tranferring of files $command = $self->sshlogin_wrap($command); @@ -6401,7 +6411,13 @@ $monitor_parent_sshd_script = # This will be packed in ', so only use " ::spacefree(0,'$shell = "'.($ENV{'PARALLEL_SHELL'} || '$ENV{SHELL}').'";'. - q{ + '$tmpdir = "'.::perl_quote_scalar($ENV{'TMPDIR'}).'";'. + q{ + # Set $PARALLEL_TMP to a non-existent file name in $TMPDIR + do { + $ENV{PARALLEL_TMP} = $tmpdir."/par". + join"", map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..5); + } while(-e $ENV{PARALLEL_TMP}); $SIG{CHLD} = sub { $done = 1; }; $pid = fork; unless($pid) { @@ -6828,6 +6844,7 @@ } $ENV{'PARALLEL_SEQ'} = $job->seq(); $ENV{'PARALLEL_PID'} = $$; + $ENV{'PARALLEL_TMP'} = ::tmpname("par"); ::debug("run", $Global::total_running, " processes . Starting (", $job->seq(), "): $command\n"); if($opt::pipe) { @@ -6936,12 +6953,8 @@ my $self = shift; my $actual_command = shift; # Temporary file name. Used for fifo to communicate exit val - my ($fh, $tmpfifo) = ::tmpfile(SUFFIX => ".tmx"); - $Global::unlink{$tmpfifo} = 1; - close $fh; - unlink $tmpfifo; -# # FIFO for communicating exit val -# my $tmpfifo = ::tmpfifo(); + my $tmpfifo=::tmpname("tmx"); + if(length($tmpfifo) >=100) { ::error("tmux does not support sockets with path > 100\n"); ::wait_and_exit(255); @@ -6959,12 +6972,13 @@ my $l_act = length($actual_command); my $l_tit = length($title); + my $l_fifo = length($tmpfifo); # The line to run contains a 118 chars extra code + the title 2x - my $l_tot = 2 * $l_tit + $l_act + 30; + my $l_tot = 2 * $l_tit + $l_act + $l_fifo; while($l_tit < 1000 and ( - (900 < $l_tot and $l_tot < 1300) + (890 < $l_tot and $l_tot < 1350) or (9250 < $l_tot and $l_tot < 9800) )) { @@ -6977,7 +6991,7 @@ # 9331 < (title + whole command) < 9636 $title = $title.('\ 'x75); $l_tit = length($title); - $l_tot = 2 * $l_tit + $l_act + 30; + $l_tot = 2 * $l_tit + $l_act + $l_fifo; } my $tmux; @@ -6994,7 +7008,7 @@ $Limits::Command::line_max_len, " tot ", $l_tot, "\n"); - return "mkfifo $tmpfifo; $tmux ". + return "mkfifo $tmpfifo && $tmux ". # Run in tmux ::shell_quote_scalar ( @@ -7567,14 +7581,14 @@ my $max_len = $Global::minimal_command_line_length || Limits::Command::max_length(); if($opt::cat) { - # Generate a tempfile name that will be used as {} + # $PARALLEL_TMP will point to a tempfile that will be used as {} $Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}-> - unget([Arg->new(::tmpname("cat"))]); + unget([Arg->new('$PARALLEL_TMP')]); } if($opt::fifo) { - # Generate a tempfile name that will be used as {} + # $PARALLEL_TMP will point to a tempfile that will be used as {} $Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}-> - unget([Arg->new(::tmpname("fif"))]); + unget([Arg->new('$PARALLEL_TMP')]); } while (not $self->{'arg_queue'}->empty()) { $next_arg = $self->{'arg_queue'}->get(); @@ -7868,6 +7882,8 @@ if(not defined $self->{'replaced'}) { # Don't quote arguments if the input is the full command line my $quote_arg = $Global::noquote ? 0 : not $Global::quoting; + # or if ($opt::cat or $opt::pipe) as they use $PARALLEL_TMP + $quote_arg = ($opt::cat || $opt::fifo) ? 0 : $quote_arg; $self->{'replaced'} = $self-> replace_placeholders($self->{'command'},$Global::quoting, $quote_arg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/sem.1 new/parallel-20150522/src/sem.1 --- old/parallel-20150422/src/sem.1 2015-01-15 00:44:37.000000000 +0100 +++ new/parallel-20150522/src/sem.1 2015-05-13 10:15:56.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SEM 1" -.TH SEM 1 "2015-01-03" "20150109" "parallel" +.TH SEM 1 "2015-05-13" "20150422" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l Files old/parallel-20150422/src/sem.pdf and new/parallel-20150522/src/sem.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/sql new/parallel-20150522/src/sql --- old/parallel-20150422/src/sql 2015-04-23 00:16:38.000000000 +0200 +++ new/parallel-20150522/src/sql 2015-05-21 23:32:47.000000000 +0200 @@ -566,7 +566,7 @@ exit ($err); sub parse_options { - $Global::version = 20150422; + $Global::version = 20150522; $Global::progname = 'sql'; # This must be done first as this may exec myself diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20150422/src/sql.1 new/parallel-20150522/src/sql.1 --- old/parallel-20150422/src/sql.1 2015-04-23 00:16:55.000000000 +0200 +++ new/parallel-20150522/src/sql.1 2015-05-21 23:33:00.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SQL 1" -.TH SQL 1 "2015-04-23" "20150422" "parallel" +.TH SQL 1 "2015-05-21" "20150522" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l Files old/parallel-20150422/src/sql.pdf and new/parallel-20150522/src/sql.pdf differ ++++++ parallel-20150422.tar.bz2.sig -> parallel-20150522.tar.bz2.sig ++++++ --- /work/SRC/openSUSE:Factory/gnu_parallel/parallel-20150422.tar.bz2.sig 2015-04-27 22:09:12.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.gnu_parallel.new/parallel-20150522.tar.bz2.sig 2015-05-24 19:34:23.000000000 +0200 @@ -2,7 +2,7 @@ # To check the signature run: # echo | gpg -# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20150422.tar.bz2.sig +# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20150522.tar.bz2.sig echo | gpg 2>/dev/null gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve $0 @@ -11,32 +11,32 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) -iQTwBAABCgAGBQJVOCnuAAoJENGrRRaIiIiIXZkmmQHHtzQPMWzetWZgOW1O6xdA -bqi8+9hOQxLaOoZIX+K1hLLYsiTQ3fjOGOmLPqy5ISGbI9cCqKO54OR+OMOvplit -6YYmGgs1A8NBZThoXjga87tMu4mfbMqiacQVcXTVUzTT3PG5JWNgJ7dmhgbOeLb0 -B2esDduIm8TUNmTEb+AcAF6sg3B3nSPLqYgpAILUWxscbHEoffuKEzCXP6NhOMMw -gtEz2EEDoIR49/4MgWBs6ocCKNgY+1q5/4X8UgxsoEKBW7gkvXzZnFF934syYW/w -n5yWXpelJix8GxNjASK7U461WpZ9s7RR9vuemekJYYBHWCsM6HquRL0NTKBBvjht -uAINwBp2KAY4YyRf3FI7h4cR7EkAOiqi1WPVL7KlA9uwa03TcL6yAF5CsKMUsLQ4 -i5Mv8ifhdBWs4LoUsBmgtrNih7BSOQhlOrkOz7d7GTYWRDB6gTrarj26K9LXXpcy -j/DzhHf8ENnfTiKTgGMqanplJlsztMPZ4OCUde3D7bDlWhUZYvWxPt0xQ8/Rk16k -V80FulTJjm4AHRkb+Vmw+tHOsT8sJ3Fq+ROhFhJJ/c0O8VMob5HKWQd6NveLAfbd -AK0Tnj3bjiJ7RPyvDLqV+OTkmW3aB+MdJILyYD0VjXlftxZkhM7jjw/2D5YUa/bZ -Q9mEjkgf/AF9O/GbZ822DWPOLME5PftQ4NXQNuGXfbvTJ3VpZI3t55NyWx4GBFLh -y+XWSMgo2suZzp5ML1NlBhs+uoTopXrtMGXIBOJB9OYY23jMsNzg23v7hWzROoWh -qBfxsyr5m5DZugoplzhgEBObSt6PuebfnIe/74n41yoXvBFwSFfjc2btyfEtLmik -oq8RynaEcvuli32iGsZBoCqyYJ/d9lo31SYENBx3m6LzW64DcQnjlDQBQi7+5Zni -spMJ4TrCGOpHDeq1bqbuyKsGIzODFV0GF2hsbXUzIEuABN2mtGhF3Vss2S73q8l4 -O1BA6IkyAe7jCA7Iv3BzWnWqmfGD1Zi18qeEmUYm+2kg/2Tg2vmO3OjMTzGyoqTi -/Uk0tSkPrqpKGaf5oU0nbpDIdNQbB4iMEJCF4gGcgRe76Q5iNT2x+Z288aJk3ULq -rQ72h1KLVM0mRYwVhJq8PP2dV/r7ePZW3PYa2xPZH/WL2nG1N9ZegzwDhtgznVnU -KSZihoMAD9OxqCd6pwyTQfcf9O+gnDLJS3KogzNEJIVa6zQMwXdHJU0tu+8lwbPR -I2ir/NcVoibfBINPP9ttPZ6s6Rzk4LlYHaihwqoNyh7LcJFTbwiGq0uYkypr41WG -hTcRAnwinXcMfB4O33ogvySNxs5WtlQYMu06TlvMwRMVRspP9dD9rKrIx+O/7RDY -GezQDyorEH2dHwjCh2mEMm8deThlAF6xVOk7AbI0aLccHuNfWyuLkA2ltkRZz8oi -3pN0syzX5X6lAujz/1y967peI8Fvexg9wxiYfxuAlLhiAuO3qDCcrFV7jAQ2eH+l -huvIELGbffLBC9rFEwobyQe9+go3XAuJBDtQpcMPn2QXDHNYDrmxUgtPNyfAgsNG -BZlpMfSKuMeJysOg4+2s6X8CbD3tiNm2nAFD2lbTN7k/npBiTtsHmkTCuK/G4kjR -+0StKFRKIo4qOoG5sMXLYwfH0A== -=7QLH +iQTwBAABCgAGBQJVXlxEAAoJENGrRRaIiIiIzGcmmwZXDHq51OpxTtxcBh7TNHQe +LRj7/0z1oFJhlnsiLgpypjWKWWWiXsJOLC8RQXvO84TulrJz7tWT383dBCbOowAY +ZC/kWz7yB8NDV5cP6jqw9vJ6AUMeARAih249IgTvZeHuviUVVabfE8NKCsJWCDfF +KbHG/Itk17Th2nvaUhYZ0RdSgmcy9QLpzjavfdu4elJ9oBkt9yx1e32qXsbc8wRu +jE1aLaP7faHYDEz9dCZbb90gQuMOR77RNmbsubaxHMTX+cvKK6LTGQb+7Rq7pv5I +QCqqCfa9bX7uF1k175dzpkTOZR2PoIPc2s5mx8tjrzOddRH/a3USEbFjrsEtI9sT +bKIz4xCsbGhCQy/XUsaTuihS2Fsy8x7R7qK0JYvD7OtL1bs5Hp69VycjH5it5Ulz +JrCc0K1uIdQB0TpwWJq7IDq7dxDV2g/fed78bANq+yqgMCI9kFKHkxK7VOGpHC/n +u3u3lmUo6ikC4rQ3kQLmtQ0tywXBgFx1NMhD40S/bcQDU2GLd9t2dWuUrMsQoe/q +CrXSxhxLD2ckWJnWwCwGl42xXryL1++0IY0sw/44H1qZeVUXqgHPre5AKMPKVhfI +7ixer53qRLape7H4OA1i4zlded70snVPQEYGdrwqiKQFHMyVgfPQfv0ZwnJZJgdA +Y3OncFeHjnc+xuBEM4gq02cN8gf8NPy+WmXF7UwfPPxKqNzNiFlzfaO2QIYS+g9a +SRiU1ZiHy/+W24NDuBvOjcNAs3KP2wqgKctDVyFVT97X2u98EjiRgjlmzyGscC4F +kz+8Jo0Tpn0R/C+h+eKEYJrLeTUThbVNNaGssfZo704p0Yms0BIK1QInT1EfjDF6 +72yR26yR7zi8bpfJSE8AcMV/eKZIeNwZ59vPyhchZTKxL/EJ/oSZraTLRhcJF2pF +E0yaXsezFvkoHwjSgIjo9kppN8Lhuh846BGL3ua7r/25qcCSxa79cf2Xocexonku +QfK4G2tom3yjoH7NDm12FQM6uFKB2AmZLzldfF9V+Q7sGdYeBdFH+47B50iUhwV0 +LzlZifAF/28ax59wn5qdn1PZ10j+y37OcZWXoRDXSKGC14yW5JSy/H2CHn9ygJV7 +zoszw41qlkpeTkxgEtSK9Waew2kphxaMGkaTxh7VCqreFPf7u5E4Q3jQlKtI1cym +OFSyGjuls7KcokJH1RZhI4eVVArSMB5a5eVThBiPzw/OILXR3EBXNRS5EOUgkLB5 +rYh6xuJvHpBHWRl9WpdOLXJ2QCocWJ7LRat3ImEeEgHcrrEbc7UU9LLCIKVMxITV +sea8zAHPlaId6LkDstRETxNeUlZIOX9iBxzyoLVE3KZElawCPKHyFmaN5wKjm2BP +KRELtvtWs+aRshVlxQoNm5LO77qbSR2hNSRwwUbFe4lO3TxsbRm6Lb7+SDBka84a +YEbSPo0ZkDclYyfWmpLBeoRaqHGA70aUvvGvC2C6UOas0w6pLLxWjS7zq+Poieys +WtLUc1OvQc3ozmlU0CVfJ8eBX5wr8TKADScvuMyxHlda8O9INmswhjppFROBj/wM +9IzLVotlsHRs4thuv1h8L1GHj5JZPlUI1qwIgJfQ7tGIbULKRurZwxvn40fi77Tw +5qKM6yrcCuR4XciH4asjrA5XXA== +=qvDl -----END PGP SIGNATURE-----