From 3319fcad5b441818a41b962b67bebb8ac1a52acf Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Sun, 21 Apr 2019 20:16:33 +0200 Subject: [PATCH] Released as 20190422 ('Invitation') --- CREDITS | 1 + NEWS | 7 + README | 12 +- configure | 20 +-- configure.ac | 2 +- doc/citation-notice-faq.txt | 127 +++++++++++++---- doc/haikus | 14 +- doc/promo | 131 +++++++++++++----- doc/release_new_version | 80 ++++++++--- packager/obs/Makefile | 4 +- packager/obs/home:tange/parallel/.osc/_files | 10 +- .../home:tange/parallel/.osc/parallel.spec | 2 +- .../obs/home:tange/parallel/parallel.spec | 2 +- src/niceload | 2 +- src/parallel_alternatives.pod | 29 ++-- src/sql | 2 +- testsuite/tests-to-run/parallel-local-10s.sh | 3 +- testsuite/tests-to-run/parallel-local-1s.sh | 14 +- testsuite/tests-to-run/parallel-polarhome.sh | 5 +- testsuite/wanted-results/parallel-local-10s | 4 +- testsuite/wanted-results/parallel-local23 | 2 +- testsuite/wanted-results/parallel-polarhome | 16 ++- testsuite/wanted-results/parallel-tutorial | 7 +- 23 files changed, 351 insertions(+), 145 deletions(-) diff --git a/CREDITS b/CREDITS index 0b589b9c..b5ff9706 100644 --- a/CREDITS +++ b/CREDITS @@ -1,5 +1,6 @@ People who have helped GNU Parallel different ways. +Renan Valieris: Maintaining GNU Parallel for Anaconda Cloud. Jakub Kulík: Maintaining GNU Parallel for Solaris-userland. Rich Burridge: Maintaining GNU Parallel for Solaris-userland. Jonathan Kamens: Bug patch for chomp. diff --git a/NEWS b/NEWS index cb1895f5..7b889450 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,10 @@ +20190422 + +* Invitation to the 10 years anniversary next year. + +* Bug fixes and man page updates. + + 20190322 * SIGTERM is changed to SIGHUP, so sending SIGHUP will make GNU diff --git a/README b/README index f832ac33..edee81e6 100644 --- a/README +++ b/README @@ -44,9 +44,9 @@ document. Full installation of GNU Parallel is as simple as: - wget https://ftpmirror.gnu.org/parallel/parallel-20190322.tar.bz2 - bzip2 -dc parallel-20190322.tar.bz2 | tar xvf - - cd parallel-20190322 + wget https://ftpmirror.gnu.org/parallel/parallel-20190422.tar.bz2 + bzip2 -dc parallel-20190422.tar.bz2 | tar xvf - + cd parallel-20190422 ./configure && make && sudo make install @@ -55,9 +55,9 @@ Full installation of GNU Parallel is as simple as: If you are not root you can add ~/bin to your path and install in ~/bin and ~/share: - wget https://ftpmirror.gnu.org/parallel/parallel-20190322.tar.bz2 - bzip2 -dc parallel-20190322.tar.bz2 | tar xvf - - cd parallel-20190322 + wget https://ftpmirror.gnu.org/parallel/parallel-20190422.tar.bz2 + bzip2 -dc parallel-20190422.tar.bz2 | tar xvf - + cd parallel-20190422 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel diff --git a/configure b/configure index 8281d6e1..b78c9a41 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for parallel 20190322. +# Generated by GNU Autoconf 2.69 for parallel 20190422. # # Report bugs to . # @@ -579,8 +579,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20190322' -PACKAGE_STRING='parallel 20190322' +PACKAGE_VERSION='20190422' +PACKAGE_STRING='parallel 20190422' PACKAGE_BUGREPORT='bug-parallel@gnu.org' PACKAGE_URL='' @@ -1214,7 +1214,7 @@ if test "$ac_init_help" = "long"; then # 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 20190322 to adapt to many kinds of systems. +\`configure' configures parallel 20190422 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1281,7 +1281,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of parallel 20190322:";; + short | recursive ) echo "Configuration of parallel 20190422:";; esac cat <<\_ACEOF @@ -1357,7 +1357,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -parallel configure 20190322 +parallel configure 20190422 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1374,7 +1374,7 @@ cat >config.log <<_ACEOF 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 20190322, which was +It was created by parallel $as_me 20190422, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2237,7 +2237,7 @@ fi # Define the identity of the package. PACKAGE='parallel' - VERSION='20190322' + VERSION='20190422' cat >>confdefs.h <<_ACEOF @@ -2880,7 +2880,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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 20190322, which was +This file was extended by parallel $as_me 20190422, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2942,7 +2942,7 @@ _ACEOF 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 20190322 +parallel config.status 20190422 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 09f51c6d..0fdff1d2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20190322], [bug-parallel@gnu.org]) +AC_INIT([parallel], [20190422], [bug-parallel@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff --git a/doc/citation-notice-faq.txt b/doc/citation-notice-faq.txt index c5b1623b..6c1139ac 100644 --- a/doc/citation-notice-faq.txt +++ b/doc/citation-notice-faq.txt @@ -2,21 +2,35 @@ > Why does GNU Parallel show a citation notice? -GNU Parallel is indirectly funded through citations. It is therefore important for the long term survival of GNU Parallel that it is cited. The citation notice makes users aware of this. +GNU Parallel is indirectly funded through citations. + +GNU Parallel is funded by me having a paid job that allows for +maintaining GNU Parallel. This is much easier to get if GNU Parallel +is cited in scientific journals, and history has shown that +researchers forget to do this if they are not reminded explicitly. + +It is therefore important for the long term survival of GNU Parallel +that it is cited. The citation notice makes users aware of this. See also: https://lists.gnu.org/archive/html/parallel/2013-11/msg00006.html > Is the citation notice compatible with GPLv3? -Yes. The wording has been cleared by Richard M. Stallman to be compatible with GPLv3. This is because the citation notice is not part of the license, but part of academic tradition. +Yes. The wording has been cleared by Richard M. Stallman to be +compatible with GPLv3. This is because the citation notice is not part +of the license, but part of academic tradition. -Therefore the notice is not adding a term that would require citation as mentioned on: https://www.gnu.org/licenses/gpl-faq.en.html#RequireCitation +Therefore the notice is not adding a term that would require citation +as mentioned on: +https://www.gnu.org/licenses/gpl-faq.en.html#RequireCitation > Do automated scripts break if the notice is not silenced? -No. Not a single time has that happened. This is due to the notice only being printed, if the output is to the screen - not if the output is to a file or a pipe. +No. Not a single time has that happened. This is due to the notice +only being printed, if the output is to the screen - not if the output +is to a file or a pipe. > How do I silence the citation notice? @@ -25,9 +39,16 @@ Run this once: parallel --citation -It takes less than 10 seconds to do and is thus comparable to an 'OK. Do not show this again'-dialog box seen in Firefox and similar programs. +It takes less than 10 seconds to do and is thus comparable to an +'OK. Do not show this again'-dialog box seen in Firefox and similar +programs. -It is even optional to run this, as GNU Parallel will work without having 'parallel --citation' run first (in other words it is _not_ comparable to a clickwrap license, that must be accepted before the program will run). However, not running it does not change that academic tradition requires you to cite in scientific articles. That tradition requires you to cite even if there had been no notice. +It is even optional to run this, as GNU Parallel will work without +having 'parallel --citation' run first (in other words it is _not_ +comparable to a clickwrap license, that must be accepted before the +program will run). However, not running it does not change that +academic tradition requires you to cite in scientific articles. That +tradition requires you to cite even if there had been no notice. > I do not write scientific articles. Does the notice apply to me? @@ -37,7 +58,8 @@ The notice is only relevant if you write scientific articles. > What shows citing software is an academic tradition? -These links say: Yes, you should cite software, and if the author suggests a way of citing, use that. +These links say: Yes, you should cite software, and if the author +suggests a way of citing, use that. * https://blog.apastyle.org/apastyle/2015/01/how-to-cite-software-in-apa-style.html * https://libguides.mit.edu/c.php?g=551454&p=3900280 @@ -48,12 +70,18 @@ These links say: Yes, you should cite software, and if the author suggests a way * https://guides.lib.monash.edu/c.php?g=219786&p=1454293 * https://www.maxqda.com/how-to-cite-maxqda -If you feel the benefit from using GNU Parallel is too small to warrant a citation, then prove that by simply using another tool. If you replace your use of GNU Parallel with another tool, you obviously do not have to cite GNU Parallel. If it is too much work replacing the use of GNU Parallel, then it is a good indication that the benefit is big enough to warrant a citation. +If you feel the benefit from using GNU Parallel is too small to +warrant a citation, then prove that by simply using another tool. If +you replace your use of GNU Parallel with another tool, you obviously +do not have to cite GNU Parallel. If it is too much work replacing the +use of GNU Parallel, then it is a good indication that the benefit is +big enough to warrant a citation. > Do other software tools show how to cite? -Here are other examples of software showing how to cite. Some of these refer to peer-reviewed articles - others do not: +Here are other examples of software showing how to cite. Some of these +refer to peer-reviewed articles - others do not: * https://www.scipy.org/citing.html * https://octave.org/doc/interpreter/Citing-Octave-in-Publications.html @@ -71,62 +99,107 @@ Here are other examples of software showing how to cite. Some of these refer to > I do not like the notice. Can I fork GNU Parallel and remove it? -Yes. GNU Parallel is released under GNU GPLv3 and thus you are allowed to fork the code. But you have to make sure that your forked version cannot be confused with the original, so for one thing you cannot call it anything similar to GNU Parallel as that would cause confusion between your forked version and the original. This is also why we have CentOS (and not RedHat Free), and IceCat (and not Firefox Free). This is also covered in DFSG ("The license may require derived works to carry a different name or version number from the original software"). +Yes. GNU Parallel is released under GNU GPLv3 and thus you are allowed +to fork the code. But you have to make sure that your forked version +cannot be confused with the original, so for one thing you cannot call +it anything similar to GNU Parallel as that would cause confusion +between your forked version and the original. Also documentation +cannot be confused with the documentation for GNU Parallel. This is +also why we have CentOS (and not RedHat Free), and IceCat (and not +Firefox Free). This is also covered in DFSG ("The license may require +derived works to carry a different name or version number from the +original software"). This principle has even been tested in court: http://www.inta.org/INTABulletin/Pages/GERMANYGeneralPublicLicenseDoesNotPermitUseofThird-PartyTrademarksforAdvertisingModifiedVersionsofOpen-SourceSoftware.aspx https://www.admody.com/urteilsdatenbank/cafe6fdaeed3/OLG-Duesseldorf_Urteil_vom_28-September-2010_Az_I-20-U-41-09 -Also know that if you fork GNU Parallel and remove the notice, you are not helping to fund further develpment. So if you like GNU Parallel and want it to be maintained in the future, then this is a bad idea, as it will lead to less funding. +Also know that if you fork GNU Parallel and remove the notice, you are +not helping to fund further develpment. So if you like GNU Parallel +and do not want to see it wither away like many of the competitors, +then this is a bad idea, as it will lead to less funding. > How important is the notice for the survival of GNU Parallel? -Citations is what indirectly funds maintaining GNU Parallel. Before the citation notice was implemented hardly anyone cited GNU Parallel, and that would not have been sustainable in the long term. Funding development aligns well with "We will give back to the free software community" and "To accelerate innovation and underpin operations". +Citations is what indirectly funds maintaining GNU Parallel. Before +the citation notice was implemented hardly anyone cited GNU Parallel, +and that would not have been sustainable in the long term. Funding +development aligns well with "We will give back to the free software +community" and "To accelerate innovation and underpin operations". -Therefore it is more important to keep the notice than to be included in different distributions. Specifically, it will be preferable to be moved from Debian main to Debian non-free over having the notice removed (and staying in main). +Therefore it is more important to keep the notice than to be included +in different distributions. Specifically, it will be preferable to be +moved from Debian main to Debian non-free over having the notice +removed (and staying in main). -In other words: It is preferable having fewer users, who all know they should cite, over having many users, who do not know they should cite. +In other words: It is preferable having fewer users, who all know they +should cite, over having many users, who do not know they should cite. -If the goal had been to get more users, then the license would have been public domain. +If the goal had been to get more users, then the license would have +been public domain. -This is because a long term survival with funding is more important than short term gains in popularity that can be achieved by being distributed as part of a distribution. +This is because a long term survival with funding is more important +than short term gains in popularity that can be achieved by being +distributed as part of a distribution. > Is there another way I can get rid of the citation notice? -Yes. Find a way to finance future development of GNU Parallel. If you pay me a normal salary, I will be happy to remove the citation notice. +Yes. Find a way to finance future development of GNU Parallel. If you +pay me a normal salary, I will be happy to remove the citation notice. The citation notice is about (indirect) funding - nothing else. > I do not think it is fair having to cite -If the inconvenience of having to cite is too big for you, then you should use another tool. +If the inconvenience of having to cite is too big for you, then you +should use another tool. -If you do not want to help fund GNU Parallel, then you will not be a happy GNU Parallel user, and thus you using another tool is the best solution for all parties. Here is a list of parallelizing tools to help you find an alternative: https://www.gnu.org/software/parallel/parallel_alternatives.html +If you do not want to help fund GNU Parallel, then you will not be a +happy GNU Parallel user, and thus you using another tool is the best +solution for all parties. Here is a list of parallelizing tools to +help you find an alternative: +https://www.gnu.org/software/parallel/parallel_alternatives.html > I do not want to run 'parallel --citation' -If the inconvenience of running 'parallel --citation' one single time after installing GNU Parallel is too big, then you do not have to do it. You only need to do that if you do not want to see the citation notice. +If the inconvenience of running 'parallel --citation' one single time +after installing GNU Parallel is too big, then you do not have to do +it. You only need to do that if you do not want to see the citation +notice. But it really only takes 10 seconds to run. > I do not want to see the citation notice at every run -You do not have to. Spend 10 seconds on running 'parallel --citation' and the notice is silenced. This is similar to clicking 'OK. Do not show this again' in a dialog box seen in Firefox and similar programs. +You do not have to. Spend 10 seconds on running 'parallel --citation' +and the notice is silenced. This is similar to clicking 'OK. Do not +show this again' in a dialog box seen in Firefox and similar programs. -If GNU Parallel does not save you more than 10 seconds, then you should probably not be using it anyway. +If GNU Parallel does not save you more than 10 seconds, then you +should probably not be using it anyway. -> I do not want my users to see the citation notice and I do not want to finance the development +> I do not want to help finance the development -If you care so little about GNU Parallel that you do not want to help finance development, then you should contemplate whether GNU Parallel is really the right tool for you. +If you care so little about GNU Parallel that you do not want to help +finance development, then you should contemplate whether GNU Parallel +is really the right tool for you. -It is, however, doable (e.g. by forking and changing the code). But you will be going against the wishes of the author, because you make it harder to make a living, thus you will be making it harder to justify producing more free software. If you like GNU Parallel and want to see it maintained in the future, then this is not the way to go. +It is, however, doable (e.g. by forking and changing the code). But +you will be going against the wishes of the author, because you make +it harder to make a living, thus you will be making it harder to +justify producing more free software. If you like GNU Parallel and +want to see it maintained in the future, then this is not the way to +go. -Maybe it is you Nadia Eghbal addresses in https://www.slideshare.net/NadiaEghbal/consider-the-maintainer: +Maybe it is you Nadia Eghbal addresses in +https://www.slideshare.net/NadiaEghbal/consider-the-maintainer: -"Is it alright to compromise, or even deliberately ignore, the happiness of maintainers so we that can enjoy free and open source software?" +"Is it alright to compromise, or even deliberately ignore, the +happiness of maintainers so we that can enjoy free and open source +software?" diff --git a/doc/haikus b/doc/haikus index f30ab242..1a6415fe 100644 --- a/doc/haikus +++ b/doc/haikus @@ -1,11 +1,15 @@ Quote of the month: +GNU parallel really changed how I do a lot of data processing stuff + -- Brendan Dolan-Gavitt @moyix@twitter + +It is, beyond absolutely any doubt whatsoever, the single most +important tool I use in making me a productive bioinformatician. +-- A-N-Other@reddit.com + Parallel is a life send, what an awesome piece of software. -- Blaze9@reddit.com -Y'all need some GNU parallel in your lives --- ChaKu @ChaiLovesChai@twitter - It's really powerful for smallish data processing scripts -- João Veiga @jcsvveiga@twitter @@ -31,6 +35,10 @@ It's the MapReduce of our generation! === Used === +Y'all need some GNU parallel in your lives +-- ChaKu @ChaiLovesChai@twitter + + There are so many things to love about GNU parallel. You could honestly teach a whole parallel computing course with it and never have to leave it for a real language. -- Aubrey Bailey @DNAvinci@twitter diff --git a/doc/promo b/doc/promo index b35574e6..5198433b 100644 --- a/doc/promo +++ b/doc/promo @@ -1,5 +1,7 @@ =head1 GNU Parallel 10 year anniversery - 2020-04-22 +Git log entry 2010-04-22: + """ Author: Ole Tange Date: Thu Apr 22 01:23:00 2010 +0200 @@ -11,7 +13,8 @@ Date: Thu Apr 22 01:23:00 2010 +0200 Wow. It has been 10 years since my parallel program was officially renamed GNU Parallel. It has been quite a ride. -So it is a probably a good time to take stock. +Not all software is maintained for 10 full years, so it is a probably +a good time to take stock. =head2 The design @@ -93,13 +96,29 @@ It is still cool that it can be done at all. A sad chapter is the attack on the funding of GNU Parallel. -You would think such an attack would come from non-free competitors, but -this attack was from packagers that packaged GNU Parallel for Debian -and SuSE. +You would think such an attack would come from non-free competitors, +but this attack was from packagers that packaged GNU Parallel. Didier +Raboud (Debian and by inheritance Ubuntu), Andreas +Stieger (SuSE) and Johannes Löthberg + (Arch). These are all people sitting in jobs, +where they are paid to use free software, and you would think they +would understand the importance of getting paid. -GNU Parallel is funded by me having a job. It is easier to get a well -paid job that will allow for maintaining GNU Parallel if GNU Parallel -is cited, because that proves the tool is useful for serious work. +< +<> + + +>> + +GNU Parallel is funded by me having a job. It is easier to get a paid +job that will allow for maintaining GNU Parallel if GNU Parallel is +cited, because that proves the tool is useful for serious work. This +is especially true in academia. I saw GNU Parallel being used in scientific articles, which was great, but without being cited, which was not ideal. So we discussed on the @@ -110,23 +129,27 @@ So it was decided to make a notice similar to a do-show-this-again box known from e.g. Firefox. The notice could be silenced in less than 10 seconds. -Unfortunately in a misguided act of short term gain in popularity SuSE -and Debian did a disservice to free software and disabled this notice -in the version they currently distribute. +Unfortunately in a misguided act of short term gain in popularity +SuSE, Debian, and Arch did a disservice to free software and disabled +this notice in the version they currently distribute. As GNU Parallel is free software they are allowed to fork the software, but only if they make sure the forked version cannot be mistaken for GNU Parallel. We have court cases showing this is the -case, but still Debian and SuSE refuse to back down, so the problem -still not resolved. +case, but still Didier Raboud (Debian and by +inheritance Ubuntu), Andreas Stieger (SUSE) and +Johannes Löthberg (Arch) refuse to back down, +so the problem still not resolved. If you would like to see GNU Parallel maintained in the future, please -help by raising this issue with SuSE and Debian. Their current stance -hurts free software by making it harder to justify spending time on -maintaining GNU Parallel. Not having GNU Parallel distributed by -Debian and SuSE is actually preferable to the current situation, -though, the best outcome would be if they distributed the non-modified -version. +help by raising this issue with SUSE (current maintainer: Jan +Engelhardt ), Debian/Ubuntu (current maintainer: +<<>>), and Arch (current maintainer: Johannes Löthberg +). Their current stance hurts free software by +making it harder to justify spending time on maintaining GNU +Parallel. Not having GNU Parallel distributed by Debian/Ubuntu, Arch, +and SUSE is actually preferable to the current situation, though, the +best outcome would be if they distributed the non-modified version. For users who are unwiling to spend the 10 seconds on silencing the notice there is an easy solution: "Don't like it? Don't use it." A @@ -153,14 +176,40 @@ read a full book to be able to use GNU Parallel". Several people noted that GNU Parallel was missing a cheat sheet. So in 2019 a one page cheat sheet was included in the package. -=head2 Why all the options? -Instead of crappy wrapper scripts. +=head2 Why so many options? + +GNU B has a lot of options. A good part of them could be +written as wrapper scripts. + +Normally it would not be in the UNIX philosophy to merge the wrapper +scripts into the tool itself. But experience showed that people could +not write these wrapper scripts without bugs. + +By having them part of GNU B the code will be tested by more +people and will in general be of better quality than code that was +just thrown together in a couple of hours. + +An example of this is B<--nice>: For running local jobs the option is +not needed, you simply B everything: + + nice parallel ... + +But as soon as you run composed commands on remote systems, +it becomes much harder: + + parallel -S .. nice bash -c "'cmd1; cmd2'" + +When you combine that with other wrapper scripts (such as +B<--return>), it quickly becomes tricky to get right for all cases. + =head2 Convenience options --nice --basefile --transfer --return --cleanup --tmux --group --compress --cat --fifo --workdir --tag + + =head2 The May 1st incident I was at a May 1st event for computer professionals where I sat at a @@ -175,7 +224,8 @@ quite intimately. "And it is written by a Dane," he said excited. -"Oh. Are you aware that the author is sitting on my side of the table?" +"Oh. Are you aware that the author is sitting on my side of the +table?" We were the only ones sitting at the table, but we had had a few beers, so it took a while before it dawned to him, who I was. @@ -184,6 +234,10 @@ beers, so it took a while before it dawned to him, who I was. =head2 Underappreciated functionality +There is some functionality I am particularly proud of, but which is +currently not in wide use. + + =head3 env_parallel When I was shown you could encode variables into a single variable and @@ -203,11 +257,11 @@ system just because you want to run jobs on a remote system? Some of GNU Parallel functionality is inspired by other people problems: How could this problem be solved in general? -parset is one of those. It was inpired by a user who needed the output -from different jobs to be stored in different variables. The jobs were -slow and could be run in parallel. So while the running of the jobs -were clearly a task for GNU Parallel, the storing in variables was not -so clear. +B is one of those. It was inpired by a user who needed the +output from different jobs to be stored in different variables. The +jobs were slow and could be run in parallel. So while the running of +the jobs were clearly a task for GNU Parallel, the storing in +variables was not so clear. It was fairly easy to code something that would work if the output was a single line with no spaces, but GNU Parallel tries hard not to set @@ -218,24 +272,24 @@ data. =head3 --embed -Some of the functionality is inspired by other tools. --embed is one +Some of the functionality is inspired by other tools. B<--embed> is one of those. ---embed was inspired by Lesser Parallel that in turn was inspired by -GNU Parallel. The major feature of Lesser Parallel is to be embedded -in any bash script. The developer will embed the code into his own -bash script and distribute this script. +B<--embed> was inspired by Lesser Parallel that in turn was inspired +by GNU Parallel. The major feature of Lesser Parallel is to be +embedded in any bash script. The developer will embed the code into +his own bash script and distribute this script. -So with --embed the users of the script will not have to install GNU -Parallel to run it. +So with B<--embed> the users of the script will not have to install +GNU Parallel to run it. =head3 --pipepart with --fifo =head3 --bar -I see people using --bar too rarely. It is one of the easiest ways to -get a visual representation of when all the jobs are expected done. +I see people using B<--bar> too rarely. It is one of the easiest ways +to get a visual representation of when all the jobs are expected done. =head3 Combining ::: with :::+ @@ -253,7 +307,7 @@ get a visual representation of when all the jobs are expected done. Best ever -=head2 Live strong +=head2 Vitality On average there has been a new release of GNU Parallel every month since 2010-04-24. @@ -261,8 +315,8 @@ since 2010-04-24. In the autumn of 2010 Henrik Sandklef teased me that he knew when the next release would be. GNU Parallel just happened to have been released twice in the 22nd, so he assumed the next release would also -be on the 22nd. And why not? A few releases were not in line with -this, but since 2011 there has been a release every month around the +be on the 22nd. And why not? A few releases were not in line with this +rule, but since 2011 there has been a release every month around the 22nd. The fixed release cycle means there has been more than 100 releases @@ -283,6 +337,7 @@ Since the events are not always happy events, the names have now and then stirred a bit of controversy. But if you want happier names, go make a happier world :) + =head3 Competitors Apart from xargs no competitor has had the strength to live for 10 diff --git a/doc/release_new_version b/doc/release_new_version index d278ce74..33b4e9ea 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -5,7 +5,7 @@ Check that documentation is updated (compare to web): git grep -E '(alpha|beta) testing' | cat -git diff last-release-commit +git diff $(date --date="last month" +%Y%m22) Unmodified beta since last version => production Unmodified alpha since last version => beta Modified => alpha @@ -76,8 +76,6 @@ make alphaupload == Update OpenSUSE build system == cd ~/privat/parallel/packager/obs -# Update version number -em home:tange/parallel/parallel.spec find home:tange/parallel/* -type f | grep -v parallel.spec | parallel -Xj1 osc rm {} # This should not create new files @@ -119,8 +117,9 @@ cp src/*.pdf src/*.html ../parallel-web/parallel cp src/parallel.html ../parallel-web/parallel/man.html pushd ../parallel-web/parallel -cvs up -cvs ci -m "New release" +# Bug at Savannah makes this take 30 seconds +torsocks cvs up +torsocks cvs ci -m "New release" pushd == Commit released version == @@ -139,9 +138,9 @@ git commit -a -m "Released as $YYYYMMDD ('$TAG')" git tag -s -u 88888888 -m "Released as $YYYYMMDD ('$TAG')" $TAG git tag -s -u 88888888 -m "Released as $YYYYMMDD ('$TAG')" $YYYYMMDD -git push -git push origin $TAG -git push origin $YYYYMMDD +torsocks git push +torsocks git push origin $TAG +torsocks git push origin $YYYYMMDD == Update documentation == @@ -207,27 +206,68 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20190322 ('FridayforFuture') released <<[stable]>> +Subject: GNU Parallel 20190422 ('Invitation Assange') released <<[stable]>> -GNU Parallel 20190322 ('FridayforFuture') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ +GNU Parallel 20190422 ('Invitation') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ + +No new functionality was introduced so this is a good candidate for a stable release. + +GNU Parallel is 10 years old in a year on 2020-04-22. You are here by invited to a reception on Friday 2020-04-17. + +The primary reception will be held in Copenhagen, DK. Please reserve the date and email happybirthdaygnuparallel@tange.dk if you want to join. + +If you cannot make it, you are encouraged to host a parallel party. + +So far we hope to have parallel parties at: + ++verbatim+ + PROSA + Vester Farimagsgade 37A + DK-1606 København V + RSVP: happybirthdaygnuparallel@tange.dk + + PROSA + Søren Frichs Vej 38 K th + DK-8230 Åbyhøj + RSVP: To be determined + + PROSA + Overgade 54 + DK-5000 Odense C + RSVP: To be determined +-verbatim- + +If you want to host a party held in parallel (either in this or in a parallel universe), please let me know, so it can be announced. + +If you have parallel ideas for how to celebrate GNU Parallel, please post on the email list parallel@gnu.org. So far we have the following ideas: + +* Use GNU Parallel logo (the café wall illusion) as decoration everywhere – preferably in a moving version where the bars slide. Maybe we can borrow this https://www.youtube.com/watch?v=_XFDnFLqRFE or make an animation in javascript based on https://bl.ocks.org/Fil/13177d3c911fb8943cb0013086469b87? Other illusions might be fun, too. +* Only serve beverages in parallel (2 or more), which may or may not be the same kind of beverage, and may or may not be served to the same person, and may or may not be served by multiple waiters in parallel +* Let people drink in parallel with straws (2 or more straws) +* Serve popcorn as snack (funny because cores and kernels are the same word in Danish, and GNU Parallel keeps cores hot) +* Serve saltstænger and similar parallel snacks. +* Serve (snack friendly) cereal in parallel bowls. +* Live parallel streaming from parallel parties +* Play songs in parallel that use the same 4 chords: https://www.youtube.com/watch?v=5pidokakU4I +* Play songs named parallel, serial, mutex, race condition and similar +* Have RC racing cars to demonstrate race condition +* Put a counting semaphore on the toilets +* Only let people leave one at a time to simulate serialized output – UNLESS they swap some clothing (to simulate half line mixing) + +If you have interesting stories about or uses of GNU Parallel, please post them, so can be part of the anniversary update. -The change in signalling makes this release experimental for users that send SIGTERM to GNU Parallel. Quote of the month: - There are so many things to love about GNU parallel. You could honestly teach a whole parallel computing course with it and never have to leave it for a real language. - -- Aubrey Bailey @DNAvinci@twitter - + Y'all need some GNU parallel in your lives + -- ChaKu @ChaiLovesChai@twitter + New in this release: -* GNU Parallel now includes a cheat sheet: parallel_cheat.pdf +* Invitation to the 10 years anniversary next year. -* High Throughput Computing on RMACC Summit and Beyond https://calendar.colorado.edu/event/high_throughput_computing_on_rmacc_summit_and_beyond#.XH2NBhB7mV4 - -* GNU Parallel Cheat Sheet by cpriest https://www.cheatography.com/cpriest/cheat-sheets/gnu-parallel/ - -* Use Multiple CPU Cores(Parallelize) with Single Threaded Linux Commands http://xensoft.com/use-multiple-cpu-cores-parallelize-with-single-threaded-linux-commands/ +* The Austin Linux Meetup: KVM as Hypervisor and GNU Parallel https://www.meetup.com/linuxaustin/events/jbxcnqyzgbpb/ * Bug fixes and man page updates. diff --git a/packager/obs/Makefile b/packager/obs/Makefile index 089268ff..17e88edc 100644 --- a/packager/obs/Makefile +++ b/packager/obs/Makefile @@ -3,6 +3,8 @@ all: osc rm home\:tange/parallel/parallel_*.dsc || true cp ../debian/parallel_*.dsc ../debian/parallel_*.tar.gz home\:tange/parallel/ cp `ls ../../parallel-2*.tar.bz2|grep -v latest|tail -n1` home\:tange/parallel/ - cd home\:tange/parallel/ && osc up + perl -i -pe '/Version:/ and s/20\d\d\d\d\d\d/$$ENV{YYYYMMDD}/g' home:tange/parallel/parallel.spec + cd home\:tange/parallel/ && osc diff + cd home\:tange/parallel/ && osc up cd home\:tange/parallel/ && parallel osc add ::: *.spec *.dsc *.tar.gz *.tar.bz2 && echo Src added OK || true cd home\:tange/parallel/ && osc ci -m "New release" diff --git a/packager/obs/home:tange/parallel/.osc/_files b/packager/obs/home:tange/parallel/.osc/_files index 277da423..1cb93279 100644 --- a/packager/obs/home:tange/parallel/.osc/_files +++ b/packager/obs/home:tange/parallel/.osc/_files @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/packager/obs/home:tange/parallel/.osc/parallel.spec b/packager/obs/home:tange/parallel/.osc/parallel.spec index d0ed7801..cf392574 100644 --- a/packager/obs/home:tange/parallel/.osc/parallel.spec +++ b/packager/obs/home:tange/parallel/.osc/parallel.spec @@ -1,7 +1,7 @@ Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20190322 +Version: 20190422 Release: 1.2 License: GPL Group: Productivity/File utilities diff --git a/packager/obs/home:tange/parallel/parallel.spec b/packager/obs/home:tange/parallel/parallel.spec index d0ed7801..cf392574 100644 --- a/packager/obs/home:tange/parallel/parallel.spec +++ b/packager/obs/home:tange/parallel/parallel.spec @@ -1,7 +1,7 @@ Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20190322 +Version: 20190422 Release: 1.2 License: GPL Group: Productivity/File utilities diff --git a/src/niceload b/src/niceload index 66e1be98..317f7ac4 100755 --- a/src/niceload +++ b/src/niceload @@ -23,7 +23,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20190322; +$Global::version = 20190422; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff --git a/src/parallel_alternatives.pod b/src/parallel_alternatives.pod index 56b521ad..554ecf58 100644 --- a/src/parallel_alternatives.pod +++ b/src/parallel_alternatives.pod @@ -27,7 +27,7 @@ years. The following features are in some of the comparable tools: -Inputs +B I1. Arguments can be read from stdin I2. Arguments can be read from a file I3. Arguments can be read from multiple files @@ -36,7 +36,7 @@ Inputs I6. Arguments can be read from the same file using #! (shebang) I7. Line oriented input as default (Quoting of special chars not needed) -Manipulation of input +B M1. Composed command M2. Multiple arguments can fill up an execution line M3. Arguments can be put anywhere in the execution line @@ -44,15 +44,18 @@ Manipulation of input M5. Arguments can be replaced with context M6. Input can be treated as the complete command line -Outputs +B O1. Grouping output so output from different jobs do not mix O2. Send stderr (standard error) to stderr (standard error) O3. Send stdout (standard output) to stdout (standard output) O4. Order of output can be same as order of input O5. Stdout only contains stdout (standard output) from the command O6. Stderr only contains stderr (standard error) from the command + O7. Buffering on disk + O8. Cleanup of file if killed + O9. Test if disk runs full during run -Execution +B E1. Running jobs in parallel E2. List running jobs E3. Finish running jobs, but do not start new jobs @@ -60,7 +63,7 @@ Execution E5. Finish running jobs, but do not start new jobs after first failure E6. Number of running jobs can be adjusted while running -Remote execution +B R1. Jobs can be run on remote computers R2. Basefiles can be transferred R3. Argument files can be transferred @@ -71,11 +74,11 @@ Remote execution R8. Configurable SSH command R9. Retry if connection breaks occasionally -Semaphore +B S1. Possibility to work as a mutex S2. Possibility to work as a counting semaphore -Legend +B - = no x = not applicable ID = yes @@ -87,7 +90,7 @@ BUGS). parallel: I1 I2 I3 I4 I5 I6 I7 M1 M2 M3 M4 M5 M6 -O1 O2 O3 O4 O5 O6 +O1 O2 O3 O4 O5 O6 O7 O8 O9 E1 E2 E3 E4 E5 E6 R1 R2 R3 R4 R5 R6 R7 R8 R9 S1 S2 @@ -1569,9 +1572,10 @@ emulated with GNU B: $ loop 'touch $COUNT.txt' --count-by 5 $ loopy touch '{= $_=seq()*5 =}'.txt - $ loop --until-contains 200 -- ./get_response_code.sh --site mysite.biz` - $ loopy --halt now,success=1 './get_response_code.sh --site mysite.biz | - match 200' + $ loop --until-contains 200 -- \ + ./get_response_code.sh --site mysite.biz` + $ loopy --halt now,success=1 \ + './get_response_code.sh --site mysite.biz | match 200' $ loop './poke_server' --for-duration 8h $ time_out 8h loopy ./poke_server @@ -2137,7 +2141,8 @@ corresponding GNU B and GNU B commands: 3$ for i in $(seq 1 100); do 3$ lateral run -- command_still_outputs_but_wont_spam inputfile$i 3$ done - 3$ lateral config -p 10; lateral wait # command output spam can commence + 3$ # command output spam can commence + 3$ lateral config -p 10; lateral wait 3$ 3$ for i in $(seq 1 100); do 3$ echo "command inputfile$i" >> joblist diff --git a/src/sql b/src/sql index 77afebfd..c540392f 100755 --- a/src/sql +++ b/src/sql @@ -574,7 +574,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20190322; + $Global::version = 20190422; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/tests-to-run/parallel-local-10s.sh b/testsuite/tests-to-run/parallel-local-10s.sh index b5d5fd8b..c6aee471 100644 --- a/testsuite/tests-to-run/parallel-local-10s.sh +++ b/testsuite/tests-to-run/parallel-local-10s.sh @@ -161,7 +161,8 @@ par_k() { parallel -j1 -kq echo "sleep 1; echo {}"; echo "echo end") | stdout nice parallel -k -j0 | - grep -Ev 'No more file handles.|Raising ulimit -n' + grep -Ev 'No more file handles.|Raising ulimit -n' | + perl -pe '/parallel:/ and s/\d/X/g' } par_k_linebuffer() { diff --git a/testsuite/tests-to-run/parallel-local-1s.sh b/testsuite/tests-to-run/parallel-local-1s.sh index f095d738..7925c198 100644 --- a/testsuite/tests-to-run/parallel-local-1s.sh +++ b/testsuite/tests-to-run/parallel-local-1s.sh @@ -466,7 +466,7 @@ cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: "; - # Core i7 Acer laptop + # Core i7-3632QM Acer laptop cpuinfo2=" processor : 0 vendor_id : GenuineIntel @@ -684,7 +684,7 @@ cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: "; - # Core i5 laptop firewall + # Core i5-2410M laptop firewall cpuinfo3=" processor : 0 vendor_id : GenuineIntel @@ -2221,13 +2221,13 @@ CPU revision : 4 "; test_one() { export PARALLEL_CPUINFO="$1" - echo $(ppar --number-of-sockets) \ - $(ppar --number-of-cores) \ - $(ppar --number-of-threads) \ - $(ppar --number-of-cpus) + echo $(parallel --number-of-sockets) \ + $(parallel --number-of-cores) \ + $(parallel --number-of-threads) \ + $(parallel --number-of-cpus) } export -f test_one - ppar -j0 -0 -k --tagstring {2} test_one {1} \ + parallel -j0 -0 -k --tagstring {2} test_one {1} \ ::: "$cpuinfo1" "$cpuinfo2" "$cpuinfo3" "$cpuinfo4" "$cpuinfo5" "$cpuinfo6" "$cpuinfo7" \ :::+ "2-8-8-8" "1-4-8-4" "1-2-4-2" "1-2-2-2" "2-24-48-24" "1-2-2-2" "1-8-8-8" } diff --git a/testsuite/tests-to-run/parallel-polarhome.sh b/testsuite/tests-to-run/parallel-polarhome.sh index bcf37003..5909ddb2 100644 --- a/testsuite/tests-to-run/parallel-polarhome.sh +++ b/testsuite/tests-to-run/parallel-polarhome.sh @@ -6,8 +6,9 @@ unset TIMEOUT env_parallel --session P_ALL="openstep qnx pidora alpha tru64 hpux-ia64 syllable raspbian solaris openindiana aix hpux debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2" -# Skip irix until Perl is upgraded -P_ALL="openstep qnx pidora alpha tru64 hpux-ia64 syllable raspbian solaris openindiana aix hpux debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix hurd beaglebone cubieboard2" +# Skip ultrix +# Skip irix until Perl is upgraded (I cannot due to too small disk quota) +P_ALL="openstep qnx pidora alpha tru64 hpux-ia64 syllable raspbian solaris openindiana aix hpux debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax minix hurd beaglebone cubieboard2" P="$P_ALL" # tru64 takes 22s to run 4 parallels diff --git a/testsuite/wanted-results/parallel-local-10s b/testsuite/wanted-results/parallel-local-10s index bafc765a..338d3912 100644 --- a/testsuite/wanted-results/parallel-local-10s +++ b/testsuite/wanted-results/parallel-local-10s @@ -27,8 +27,8 @@ par_interactive sleep 0.1; echo opt-p 2 ?...n par_interactive sleep 0.1; echo opt-p 3 ?...y par_interactive spawn /tmp/parallel-script-for-expect par_k ### Test -k -par_k parallel: Warning: Only enough file handles to run 8 jobs in parallel. -par_k parallel: Warning: Running 'parallel -j0 -N 8 --pipe parallel -j0' or +par_k parallel: Warning: Only enough file handles to run X jobs in parallel. +par_k parallel: Warning: Running 'parallel -jX -N X --pipe parallel -jX' or par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf par_k parallel: Warning: or /proc/sys/fs/file-max may help. par_k begin diff --git a/testsuite/wanted-results/parallel-local23 b/testsuite/wanted-results/parallel-local23 index 9279e6ff..60960d17 100644 --- a/testsuite/wanted-results/parallel-local23 +++ b/testsuite/wanted-results/parallel-local23 @@ -61,7 +61,7 @@ echo '### Check that 4 processes are really used' echo '### --version must have higher priority than retired options' ### --version must have higher priority than retired options $NICEPAR --version -g -Y -U -W -T | tail -GNU parallel 20190223 +GNU parallel 20190422 Copyright (C) 2007-2019 Ole Tange and Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index f4e5a729..a42f85b3 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -1,4 +1,4 @@ -MAXTIME=50 RETRIES=3 MAXPROC=84 MAXINNERPROC=3 +MAXTIME=50 RETRIES=3 MAXPROC=100 MAXINNERPROC=3 ### Filter out working servers 1d0 < openstep @@ -6,10 +6,10 @@ MAXTIME=50 RETRIES=3 MAXPROC=84 MAXINNERPROC=3 < alpha 7d4 < syllable -28,31d24 +28,29d24 < dragonfly < vax -< ultrix +31,34d25 < minix 33,34d25 < beaglebone @@ -618,6 +618,16 @@ unixware UX:sh (/bin/sh): ERROR: source: Not found ### Does exporting a bash function make parallel fail? If login shell is not bash compatible it fails + cat <(echo bash only A) + cat <(echo bash only A) + bin/parallel funcA ::: 1 + bin/parallel funcA ::: 1 + export -f funcA; + export -f funcA; + funcA() { + funcA() { + } + } aix bash only A aix test funcA centos bash only A diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index 67fdb1b1..4a4b8b40 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -1205,7 +1205,7 @@ parallel: Error: echo is not a valid DBURL cat num1000000 | parallel --pipe --block 2M wc 999999 999999 9999999 85349 85349 597444 - cat num1000000 | parallel --pipe -j4 --round-robin wc + cat num1000000 | parallel --pipe -j4 --roundrobin wc 999999 999999 9999999 cat num1000000 | parallel --pipe -N140000 wc 140000 140000 868895 @@ -1418,6 +1418,7 @@ The second finished running in the foreground First started First done sem --id my_id -u 'echo Second started; sleep 10; echo Second done' +Second done sem --jobs 3 --id my_id -u 'echo Start 1; sleep 5; echo 1 done' && sem --jobs 3 --id my_id -u 'echo Start 2; sleep 6; echo 2 done' && sem --jobs 3 --id my_id -u 'echo Start 3; sleep 7; echo 3 done' && @@ -1438,8 +1439,8 @@ Start 4 Slow started Forced running after 1 sec Slow ended -Give up after 2 secs parallel: Warning: Semaphore timed out. Stealing the semaphore. +parallel: Warning: Semaphore timed out. Exiting. parallel --help Usage: @@ -1515,7 +1516,9 @@ This helps funding further development; AND IT WON'T COST YOU A CENT. If you pay 10000 EUR you should feel free to use GNU Parallel without citing. More about funding GNU Parallel and the citation notice: +https://lists.gnu.org/archive/html/parallel/2013-11/msg00006.html https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice +https://git.savannah.gnu.org/cgit/parallel.git/tree/doc/citation-notice-faq.txt If you send a copy of your published article to tange@gnu.org, it will be mentioned in the release notes of next version of GNU Parallel.