From e4c97e4bd1bf4be4f74eeab8c4d89e3aeb6d3440 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Tue, 20 Jan 2015 22:08:52 +0100 Subject: [PATCH] testsuite: Fixup. Passes testsuite. --- doc/release_new_version | 28 ++++- src/Makefile.am | 2 +- src/Makefile.in | 2 +- src/parallel | 5 +- src/parallel.pod | 3 +- src/parallel_design.pod | 102 ++++++++++++++++++- testsuite/tests-to-run/test19.sh | 2 +- testsuite/wanted-results/parallel-install | 78 ++++++++++---- testsuite/wanted-results/parallel-local-ssh3 | 2 +- testsuite/wanted-results/test19 | 4 +- 10 files changed, 191 insertions(+), 37 deletions(-) diff --git a/doc/release_new_version b/doc/release_new_version index ad2423cd..4bb31a36 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -240,7 +240,7 @@ New in this release: * Remote jobs now send stderr (standard error) to stderr (standard error) instead of stdout (standard output). -* Remote execution command is now packed using hex encoded bzip2. This means that big environments (app. 250 KB) can be transferred. This change makes remote execution alpha quality. +* Remote execution command is now packed using base64 encoded bzip2. This means that big environments (app. 250 KB) can be transferred. This change makes remote execution alpha quality. * --semaphoretimeout now takes a negative value. This means give up if the semaphore is not gotten within the timeout. @@ -250,6 +250,8 @@ New in this release: * A semibig refactoring of big functions. All non-trivial functions are now less than 100 lines. The refactoring makes this release beta quality. +* A description of the design decisions for GNU Parallel can be found in 'man parallel_design'. + * GNU Parallel was cited in: SlideToolkit: An Assistive Toolset for the Histological Quantification of Whole Slide Images http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0110289 * GNU Parallel was cited in: Improving Energy and Performance with Spintronics Caches in Multicore Systems http://link.springer.com/chapter/10.1007/978-3-319-14313-2_24 @@ -258,12 +260,8 @@ New in this release: * GNU Parallel was cited in: Distinguishing cause from effect using observational data: methods and benchmarks http://arxiv-web3.library.cornell.edu/pdf/1412.3773.pdf -* GNU Parallel was cited in: Bayesian Inference of Protein Structure from Chemical Shift Data https://peerj.com/preprints/692.pdf - * GNU Parallel was cited in: Data Science at the Command Line http://cdn.oreillystatic.com/oreilly/booksamplers/9781491947852_sampler.pdf -* GNU Parallel was cited in: Speaker environment classification using rhythm metrics in Levantine Arabic dialect http://ieeexplore.ieee.org/xpl/abstractReferences.jsp?tp=&arnumber=6923918 - * GNU Parallel was cited in: Resolution of Genetic Map Expansion Caused by Excess Heterozygosity in Plant Recombinant Inbred Populations http://www.g3journal.org/content/4/10/1963.full.pdf * GNU Parallel was cited in: Bayesian Inference of Protein Structure from Chemical Shift Data https://peerj.com/preprints/692v1.pdf @@ -278,6 +276,24 @@ New in this release: * GNU Parallel was cited in: Towards Recommender Engineering Tools and Experiments for Identifying Recommender Differences http://elehack.net/research/thesis/mde-thesis.pdf +* GNU Parallel was cited in: Speaker Environment Classification Using Rhythm Metrics in Levantine Arabic Dialect http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6923918 + +* GNU Parallel was cited in: A Formal Proof Of The Kepler Conjecture http://arxiv.org/pdf/1501.02155.pdf + +* GNU Parallel was cited in: Allocation Policy Analysis for Cache Coherence Protocols for STT-MRAM-based caches http://conservancy.umn.edu/bitstream/handle/11299/169362/Nandkar_umn_0130M_15551.pdf + +* GNU Parallel was cited in: Using Trusted Platform Module for securing virtual environment access in Cloud http://dar.aucegypt.edu:8080/bitstream/handle/10526/4237/Using%20Trusted%20Platform%20Module%20for%20Securing%20Virtual%20Environment%20Access%20in%20Cloud.pdf + +* GNU Parallel was cited in: Weakly Supervised Learning for Compositional Sentiment Recognition http://computerlinguist.org/static/downloads/ma-thesis/Master_Thesis-Michael_Haas-Weakly_Supervised_Learning_for_Compositional_Sentiment_Recognition.pdf + +* GNU Parallel was cited in: Agility and Performance in Elastic Distributed Storage http://dl.acm.org/citation.cfm?id=2668129 + +* GNU Parallel was used (unfortunately without citation) in: Large Scale Author Name Disambiguation in Digital Libraries http://semanticommunity.info/@api/deki/files/31523/P227_3546.pdf + +* GNU Parallel is used in BEDOPS: https://media.readthedocs.org/pdf/bedops/v2p5p0/bedops.pdf + +* Job ad asking for GNU Parallel skills: http://www.aplitrak.com/?adid=dXMzMTYxMjQuMzg0MTkuMTU1MEBtYW5wb3dlcmZveG5hLmFwbGl0cmFrLmNvbQ#sthash.kYCIhhty.KcoT6HnJ.dpbs + * GNU Parallel: Open Source For You (OSFY) magazine, October 2013 edition http://www.shakthimaan.com/posts/2014/11/27/gnu-parallel/news.html * Multithreaded Encryption and Compression http://www.krazyworks.com/multithreaded-encryption-and-compression/ @@ -290,6 +306,8 @@ New in this release: * From SRA Project to FastQ http://danielecook.com/sra-project-fastq/ +* Software Development Tooling http://www.computer.org/csdl/mags/so/2014/06/mso2014060021.pdf + * コマンドを並列に実行するGNU parallelがとても便利 http://bicycle1885.hatenablog.com/entry/2014/08/10/143612 * Bug fixes and man page updates. diff --git a/src/Makefile.am b/src/Makefile.am index 7443f019..607424c1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -147,5 +147,5 @@ DISTCLEANFILES = parallel.1 sem.1 sql.1 niceload.1 parallel_tutorial.7 parallel_ parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_design.pdf EXTRA_DIST = parallel sem sql niceload \ - sem.pod parallel.pod niceload.pod parallel_tutorial.pod \ + sem.pod parallel.pod niceload.pod parallel_tutorial.pod parallel_design.pod \ $(DISTCLEANFILES) diff --git a/src/Makefile.in b/src/Makefile.in index cf23ca1e..aa536945 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -229,7 +229,7 @@ DISTCLEANFILES = parallel.1 sem.1 sql.1 niceload.1 parallel_tutorial.7 parallel_ parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_design.pdf EXTRA_DIST = parallel sem sql niceload \ - sem.pod parallel.pod niceload.pod parallel_tutorial.pod \ + sem.pod parallel.pod niceload.pod parallel_tutorial.pod parallel_design.pod \ $(DISTCLEANFILES) all: all-am diff --git a/src/parallel b/src/parallel index a03f4e89..ba9a49f2 100755 --- a/src/parallel +++ b/src/parallel @@ -941,7 +941,7 @@ sub parse_options { if(remote_hosts() and ($opt::X or $opt::m or $opt::xargs)) { # As we do not know the max line length on the remote machine # long commands generated by xargs may fail - # If opt_N is set, it is probably safe + # If $opt::max_replace_args is set, it is probably safe ::warning("Using -X or -m with --sshlogin may fail.\n"); } @@ -5040,7 +5040,7 @@ sub cleanup_cmd { $dir .= $_."/"; unshift @rmdir, ::shell_quote_file($dir); } - my $rmdir = @rmdir ? "rmdir @rmdir >&/dev/null;" : ""; + my $rmdir = @rmdir ? "rmdir @rmdir 2>/dev/null;" : ""; if(defined $opt::workdir and $opt::workdir eq "...") { $rmdir .= "rm -rf " . ::shell_quote_file($workdir).';'; } @@ -6030,6 +6030,7 @@ sub sshlogin_wrap { my ($pre,$post,$cleanup)=("","",""); if($serverlogin eq ":") { # No transfer/environment neeeded + # TODO Copy env between shells (zsh to bash) $self->{'sshlogin_wrap'} = $command; } else { # --transfer diff --git a/src/parallel.pod b/src/parallel.pod index 8398af9d..15e3bcf8 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -94,7 +94,8 @@ B<--env> and use B instead of B. # } # # exportf my_func -# PARALLEL_SHELL=/bin/bash parallel "my_func {}" ::: 1 2 +# parallel --env my_func "my_func {}" ::: 1 2 +# TODO accept --env without -S =pod The command cannot contain the character \257 (macron: ¯). diff --git a/src/parallel_design.pod b/src/parallel_design.pod index 799e7247..7c4550a5 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -9,6 +9,47 @@ GNU B and the reasoning behind them. It will give an overview of why some of the code looks like it does, and help new maintainers understand the code better. + +=head2 One file program + +GNU B is a Perl script in a single file. It is object +oriented, but contrary to normal Perl scripts each class is not in its +own file. This is due to user experience: The goal is that in a pinch +the user will be able to get GNU B working simply by copying +a single file: No need messing around with environment variables like +PERL5LIB. + + +=head2 Old Perl style + +GNU B uses some old, deprecated constructs. This is due to a +goal of being able to run on old installations. Currently the target +is CentOS 3.9 and Perl 5.8.0. + + +=head2 Exponentially back off + +GNU B busy waits. This is because the reason why a job is +not started may be due to load average, and thus it will not make +sense to wait for a job to finish. Instead the load average must be +checked again. Load average is not the only reason. + +To not burn up too up too much CPU GNU B sleeps +exponentially longer and longer if nothing happens, maxing out at 1 +second. + + +=head2 Shell compatibility + +It is a goal to have GNU B work equally well in any +shell. However, in practice GNU B is being developed in +B and thus testing in other shells is limited to reported bugs. + +When an incompatibility is found there is often not an easy fix: +Fixing the problem in B often breaks it in B. In these +cases the fix is often to use a small Perl script and call that. + + =head2 Job slots The easiest way to explain what GNU B does is to assume that @@ -29,6 +70,7 @@ cannot assume that a given job slot will remain on the same remote server. This goes double since number of job slots can be adjusted on the fly (by giving B<--jobs> a file name). + =head2 Rsync protocol version B 3.1.x uses protocol 31 which is unsupported by version @@ -365,6 +407,19 @@ commands (that cannot be parallelized) on each server, but run the same sequence on multiple servers. +=head2 Buffering on disk + +GNU B buffers on disk in $TMPDIR using files, that are +removed as soon as they are created, but which are kept open. So even +if GNU B is killed by a power outage, there will be no files +to clean up afterwards. Another advantage is that the file system is +aware that these files will be lost in case of a crash, so it does +not need to sync them to disk. + +It gives the odd situation that a disk can be fully used, but there +are no visible files on it. + + =head2 Disk full GNU B buffers on disk. If the disk is full data may be @@ -375,6 +430,7 @@ full. The size 8193 was chosen because 8192 gave wrong result on some file systems, whereas 8193 did the correct thing on all tested filesystems. + =head2 Perl replacement strings, {= =}, and --rpl The shorthands for replacement strings makes a command look more @@ -400,8 +456,8 @@ still use ,, and ,, if they like: B<--parens ,,,,> Internally, however, the {= and =} are replaced by \257< and \257>. This is to make it simple to make regular expressions: \257 is -disallowed on the command line, so when that is matched, it is known -that this is a replacement string. +disallowed on the command line, so when that is matched in a regular +expression, it is known that this is a replacement string. =head2 Test suite @@ -424,9 +480,45 @@ these tests break when run on a different hardware than what the test was written for. When most bugs are fixed a test is added, so this bug will not -reappear. That is, however, sometimes hard to create the environment -in which the bug shows up. One of the harder problems is to make a -machine start swapping without forcing it to its knees. +reappear. It is, however, sometimes hard to create the environment in +which the bug shows up - especially if the bug only shows up +sometimes. One of the harder problems was to make a machine start +swapping without forcing it to its knees. + + +=head2 Median runtime + +Using a percentage for B<--timeout> causes GNU B to compute +the median run time of a job. The median is a better indicator of the +expected run time than average, because there will often be outliers +taking way longer than the normal run time. + +To avoid keeping all run times in memory, an implementation of +remedian was made (Rousseeuw et al). + + +=head2 Error messages and warnings + +Error messages like: ERROR, Not found, and 42 are not very +helpful. GNU B strives to inform the user: + +=over 2 + +=item * + +What went wrong? + +=item * + +Why did it go wrong? + +=item * + +What can be done about it? + +=back + +Unfortunately it is not always possible to predict the root cause of the error. =head1 Ideas for new design diff --git a/testsuite/tests-to-run/test19.sh b/testsuite/tests-to-run/test19.sh index c7c7a908..84723d60 100644 --- a/testsuite/tests-to-run/test19.sh +++ b/testsuite/tests-to-run/test19.sh @@ -123,6 +123,6 @@ stdout ssh $SSHLOGIN1 ls 'tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK echo 'Input for ssh' cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' | - perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;' + perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-zA-Z0-9/+=]{500,}:base64:;' rm /tmp/myssh1-run /tmp/myssh2-run diff --git a/testsuite/wanted-results/parallel-install b/testsuite/wanted-results/parallel-install index ccd6f5a4..75aeb5ed 100644 --- a/testsuite/wanted-results/parallel-install +++ b/testsuite/wanted-results/parallel-install @@ -58,22 +58,28 @@ pod2man --release='00000000' --center='parallel' \ /bin/bash: pod2man: command not found Warning: pod2man not found. Using old niceload.1 pod2man --release='00000000' --center='parallel' \ - --section=1 ./parallel_tutorial.pod > ./parallel_tutorial.1n \ - && mv ./parallel_tutorial.1n ./parallel_tutorial.1 \ - || echo "Warning: pod2man not found. Using old parallel_tutorial.1" + --section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \ + && mv ./parallel_tutorial.7n ./parallel_tutorial.7 \ + || echo "Warning: pod2man not found. Using old parallel_tutorial.7" /bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_tutorial.1 +Warning: pod2man not found. Using old parallel_tutorial.7 +pod2man --release='00000000' --center='parallel' \ + --section=7 ./parallel_design.pod > ./parallel_design.7n \ + && mv ./parallel_design.7n ./parallel_design.7 \ + || echo "Warning: pod2man not found. Using old parallel_design.7" +/bin/bash: pod2man: command not found +Warning: pod2man not found. Using old parallel_design.7 pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \ && mv ./parallel.htmln ./parallel.html \ || echo "Warning: pod2html not found. Using old parallel.html" /bin/bash: pod2html: command not found Warning: pod2html not found. Using old parallel.html rm -f ./pod2htm* -pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \ - && mv ./parallel_tutorial.htmln ./parallel_tutorial.html \ - || echo "Warning: pod2html not found. Using old parallel_tutorial.html" +pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \ + && mv ./parallel_design.htmln ./parallel_design.html \ + || echo "Warning: pod2html not found. Using old parallel_design.html" /bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_tutorial.html +Warning: pod2html not found. Using old parallel_design.html rm -f ./pod2htm* pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \ && mv ./sem.htmln ./sem.html \ @@ -93,6 +99,12 @@ pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \ /bin/bash: pod2html: command not found Warning: pod2html not found. Using old niceload.html rm -f ./pod2htm* +pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \ + && mv ./parallel_tutorial.htmln ./parallel_tutorial.html \ + || echo "Warning: pod2html not found. Using old parallel_tutorial.html" +/bin/bash: pod2html: command not found +Warning: pod2html not found. Using old parallel_tutorial.html +rm -f ./pod2htm* pod2texi --output=./parallel.texi ./parallel.pod \ || echo "Warning: pod2texi not found. Using old parallel.texi" /bin/bash: pod2texi: command not found @@ -113,6 +125,10 @@ pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \ || echo "Warning: pod2texi not found. Using old parallel_tutorial.texi" /bin/bash: pod2texi: command not found Warning: pod2texi not found. Using old parallel_tutorial.texi +pod2texi --output=./parallel_design.texi ./parallel_design.pod \ + || echo "Warning: pod2texi not found. Using old parallel_design.texi" +/bin/bash: pod2texi: command not found +Warning: pod2texi not found. Using old parallel_design.texi pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \ || echo "Warning: pod2pdf not found. Using old parallel.pdf" /bin/bash: pod2pdf: command not found @@ -133,6 +149,10 @@ pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "G || echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf" /bin/bash: pod2pdf: command not found Warning: pod2pdf not found. Using old parallel_tutorial.pdf +pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \ + || echo "Warning: pod2pdf not found. Using old parallel_design.pdf" +/bin/bash: pod2pdf: command not found +Warning: pod2pdf not found. Using old parallel_design.pdf make[0]: Entering directory `/tmp/parallel-00000000/src' /bin/mkdir -p '/usr/local/bin' /usr/bin/install -c parallel sql niceload '/usr/local/bin' @@ -147,11 +167,11 @@ pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \ /bin/bash: pod2html: command not found Warning: pod2html not found. Using old parallel.html rm -f ./pod2htm* -pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \ - && mv ./parallel_tutorial.htmln ./parallel_tutorial.html \ - || echo "Warning: pod2html not found. Using old parallel_tutorial.html" +pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \ + && mv ./parallel_design.htmln ./parallel_design.html \ + || echo "Warning: pod2html not found. Using old parallel_design.html" /bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_tutorial.html +Warning: pod2html not found. Using old parallel_design.html rm -f ./pod2htm* pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \ && mv ./sem.htmln ./sem.html \ @@ -171,6 +191,12 @@ pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \ /bin/bash: pod2html: command not found Warning: pod2html not found. Using old niceload.html rm -f ./pod2htm* +pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \ + && mv ./parallel_tutorial.htmln ./parallel_tutorial.html \ + || echo "Warning: pod2html not found. Using old parallel_tutorial.html" +/bin/bash: pod2html: command not found +Warning: pod2html not found. Using old parallel_tutorial.html +rm -f ./pod2htm* pod2texi --output=./parallel.texi ./parallel.pod \ || echo "Warning: pod2texi not found. Using old parallel.texi" /bin/bash: pod2texi: command not found @@ -191,6 +217,10 @@ pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \ || echo "Warning: pod2texi not found. Using old parallel_tutorial.texi" /bin/bash: pod2texi: command not found Warning: pod2texi not found. Using old parallel_tutorial.texi +pod2texi --output=./parallel_design.texi ./parallel_design.pod \ + || echo "Warning: pod2texi not found. Using old parallel_design.texi" +/bin/bash: pod2texi: command not found +Warning: pod2texi not found. Using old parallel_design.texi pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \ || echo "Warning: pod2pdf not found. Using old parallel.pdf" /bin/bash: pod2pdf: command not found @@ -211,8 +241,12 @@ pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "G || echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf" /bin/bash: pod2pdf: command not found Warning: pod2pdf not found. Using old parallel_tutorial.pdf +pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \ + || echo "Warning: pod2pdf not found. Using old parallel_design.pdf" +/bin/bash: pod2pdf: command not found +Warning: pod2pdf not found. Using old parallel_design.pdf /bin/mkdir -p '/usr/local/share/doc/parallel' - /usr/bin/install -c -m 644 parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf '/usr/local/share/doc/parallel' + /usr/bin/install -c -m 644 parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel_design.html parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel_design.texi parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_design.pdf '/usr/local/share/doc/parallel' pod2man --release='00000000' --center='parallel' \ --section=1 ./parallel.pod > ./parallel.1n \ && mv ./parallel.1n ./parallel.1 \ @@ -238,13 +272,21 @@ pod2man --release='00000000' --center='parallel' \ /bin/bash: pod2man: command not found Warning: pod2man not found. Using old niceload.1 pod2man --release='00000000' --center='parallel' \ - --section=1 ./parallel_tutorial.pod > ./parallel_tutorial.1n \ - && mv ./parallel_tutorial.1n ./parallel_tutorial.1 \ - || echo "Warning: pod2man not found. Using old parallel_tutorial.1" + --section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \ + && mv ./parallel_tutorial.7n ./parallel_tutorial.7 \ + || echo "Warning: pod2man not found. Using old parallel_tutorial.7" /bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_tutorial.1 +Warning: pod2man not found. Using old parallel_tutorial.7 +pod2man --release='00000000' --center='parallel' \ + --section=7 ./parallel_design.pod > ./parallel_design.7n \ + && mv ./parallel_design.7n ./parallel_design.7 \ + || echo "Warning: pod2man not found. Using old parallel_design.7" +/bin/bash: pod2man: command not found +Warning: pod2man not found. Using old parallel_design.7 /bin/mkdir -p '/usr/local/share/man/man1' - /usr/bin/install -c -m 644 parallel.1 sem.1 sql.1 niceload.1 parallel_tutorial.1 '/usr/local/share/man/man1' + /usr/bin/install -c -m 644 parallel.1 sem.1 sql.1 niceload.1 '/usr/local/share/man/man1' + /bin/mkdir -p '/usr/local/share/man/man7' + /usr/bin/install -c -m 644 parallel_tutorial.7 parallel_design.7 '/usr/local/share/man/man7' make[0]: Leaving directory `/tmp/parallel-00000000/src' make[0]: Leaving directory `/tmp/parallel-00000000/src' make[0]: Entering directory `/tmp/parallel-00000000' diff --git a/testsuite/wanted-results/parallel-local-ssh3 b/testsuite/wanted-results/parallel-local-ssh3 index 4e65f2fa..0cdf9d37 100644 --- a/testsuite/wanted-results/parallel-local-ssh3 +++ b/testsuite/wanted-results/parallel-local-ssh3 @@ -93,6 +93,6 @@ echo '### trailing space in sshlogin' sshlogin trailing space echo '### Special char file and dir transfer return and cleanup' ### Special char file and dir transfer return and cleanup - cd /tmp; mkdir -p d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; echo local > d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/f"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; ssh parallel@lo rm -rf d'*'/; mytouch() { cat d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/f"`perl -e 'print pack("c*",1..9,11..46,48..255)'`" > d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; echo remote OK >> d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; }; export -f mytouch; parallel --env mytouch -Sparallel@lo --transfer --return d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`" mytouch ::: d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/f"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; cat d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; # Should be changed to --return '{=s:/f:/g:=}' + cd /tmp; mkdir -p d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; echo local > d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/f"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; ssh parallel@lo rm -rf d'*'/; mytouch() { cat d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/f"`perl -e 'print pack("c*",1..9,11..46,48..255)'`" > d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; echo remote OK >> d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; }; export -f mytouch; parallel --env mytouch -Sparallel@lo --transfer --return d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`" mytouch ::: d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/f"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; cat d"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"/g"`perl -e 'print pack("c*",1..9,11..46,48..255)'`"; # Should be changed to --return '{=s:/f:/g:=}' and tested with csh local remote OK diff --git a/testsuite/wanted-results/test19 b/testsuite/wanted-results/test19 index 88076b16..caf3b70c 100644 --- a/testsuite/wanted-results/test19 +++ b/testsuite/wanted-results/test19 @@ -77,7 +77,7 @@ OK Input for ssh one-server mkdir -p ./. -l parallel one-server rsync --server -lDrRze.iLsfx . ./. -one-server exec perl -e @GNU_Parallel=\(\"use\",\"IPC::Open3\;\"\)\;eval\"@GNU_Parallel\"\;\$SIG\{CHLD\}=\"IGNORE\"\;my\$zip=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;my\(\$in,\$out,\$eval\)\;open3\(\$in,\$out,\"\>\&STDERR\",\$zip,\"-dc\"\)\;if\(my\$perlpid=fork\)\{close\$in\;\$eval=join\"\",\<\$out\>\;close\$out\;\}else\{close\$out\;print\$in\(pack\(\"H\*\",join\"\",@ARGV\)\)\;close\$in\;exit\;\}wait\;eval\$eval\; hex +one-server exec perl -e @GNU_Parallel=\(\"use\",\"IPC::Open3\;\",\"use\",\"MIME::Base64\"\)\;eval\"@GNU_Parallel\"\;\$SIG\{CHLD\}=\"IGNORE\"\;my\$zip=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;my\(\$in,\$out,\$eval\)\;open3\(\$in,\$out,\"\>\&STDERR\",\$zip,\"-dc\"\)\;if\(my\$perlpid=fork\)\{close\$in\;\$eval=join\"\",\<\$out\>\;close\$out\;\}else\{close\$out\;print\$in\(decode_base64\(join\"\",@ARGV\)\)\;close\$in\;exit\;\}wait\;eval\$eval\; base64 -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' 'newlineX.out -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' @@ -90,7 +90,7 @@ one-server (rm -f ./tmp/parallel.file.' 'newlineX.out2; rmdir ./tmp/ ./ 2>/dev/null;) one-server mkdir -p ./. -l parallel one-server rsync --server -lDrRze.iLsfx . ./. -one-server exec perl -e @GNU_Parallel=\(\"use\",\"IPC::Open3\;\"\)\;eval\"@GNU_Parallel\"\;\$SIG\{CHLD\}=\"IGNORE\"\;my\$zip=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;my\(\$in,\$out,\$eval\)\;open3\(\$in,\$out,\"\>\&STDERR\",\$zip,\"-dc\"\)\;if\(my\$perlpid=fork\)\{close\$in\;\$eval=join\"\",\<\$out\>\;close\$out\;\}else\{close\$out\;print\$in\(pack\(\"H\*\",join\"\",@ARGV\)\)\;close\$in\;exit\;\}wait\;eval\$eval\; hex +one-server exec perl -e @GNU_Parallel=\(\"use\",\"IPC::Open3\;\",\"use\",\"MIME::Base64\"\)\;eval\"@GNU_Parallel\"\;\$SIG\{CHLD\}=\"IGNORE\"\;my\$zip=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;my\(\$in,\$out,\$eval\)\;open3\(\$in,\$out,\"\>\&STDERR\",\$zip,\"-dc\"\)\;if\(my\$perlpid=fork\)\{close\$in\;\$eval=join\"\",\<\$out\>\;close\$out\;\}else\{close\$out\;print\$in\(decode_base64\(join\"\",@ARGV\)\)\;close\$in\;exit\;\}wait\;eval\$eval\; base64 -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' 'newlineX.out -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.'