Hello community,
here is the log from the commit of package gnu_parallel for openSUSE:Factory checked in at 2015-11-26 17:03:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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-10-25 14:18:14.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.gnu_parallel.new/gnu_parallel.changes 2015-11-26 17:03:45.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Nov 23 12:11:14 UTC 2015 - mpluskal@suse.com
+
+- Update to 20151122
+ * Automating large numbers of tasks https://rcc.uchicago.edu/docs/tutorials/kicp-tutorials/running-jobs.html
+ * Max out your IOPs with GNU Parallel http://blog.bitratchet.com/2015/11/11/max-out-your-iops-with-gnu-parallel/
+ * Bug fixes and man page updates.
+
+-------------------------------------------------------------------
Old:
----
parallel-20151022.tar.bz2
parallel-20151022.tar.bz2.sig
New:
----
parallel-20151122.tar.bz2
parallel-20151122.tar.bz2.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnu_parallel.spec ++++++
--- /var/tmp/diff_new_pack.Jj6Ims/_old 2015-11-26 17:03:46.000000000 +0100
+++ /var/tmp/diff_new_pack.Jj6Ims/_new 2015-11-26 17:03:46.000000000 +0100
@@ -17,16 +17,16 @@
Name: gnu_parallel
-Version: 20151022
+Version: 20151122
Release: 0
Summary: Shell tool for executing jobs in parallel
License: GPL-3.0+
Group: Productivity/File utilities
Url: http://www.gnu.org/software/parallel/
#DL-URL: http://ftp.gnu.org/gnu/parallel/
-Source0: http://ftp.gnu.org/gnu/parallel/parallel-%{version}.tar.bz2
-Source1: http://ftp.gnu.org/gnu/parallel/parallel-%{version}.tar.bz2.sig
-Source2: %{name}.keyring
+Source: http://ftp.gnu.org/gnu/parallel/parallel-%version.tar.bz2
+Source2: http://ftp.gnu.org/gnu/parallel/parallel-%version.tar.bz2.sig
+Source3: %name.keyring
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
@@ -49,27 +49,27 @@
This subpackage contains the documentation for Parallel.
%prep
-%setup -q -n parallel-%{version}
+%setup -q -n parallel-%version
%build
-%configure --docdir="%{_docdir}/%{name}"
+%configure --docdir="%_docdir/%name"
make %{?_smp_mflags}
%install
%make_install
-cp -a CITATION COPYING NEWS README "%{buildroot}/%{_docdir}/%{name}/"
+cp -a CITATION COPYING NEWS README "%buildroot/%_docdir/%name/"
%files
%defattr(-,root,root)
-%{_bindir}/niceload
-%{_bindir}/parallel
-%{_bindir}/sem
-%{_bindir}/sql
-%{_mandir}/man1/*.1*
-%{_mandir}/man7/*.7*
+%_bindir/niceload
+%_bindir/parallel
+%_bindir/sem
+%_bindir/sql
+%_mandir/man1/*.1*
+%_mandir/man7/*.7*
%files doc
%defattr(-,root,root)
-%{_docdir}/%{name}/
+%_docdir/%name/
%changelog
++++++ parallel-20151022.tar.bz2 -> parallel-20151122.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/NEWS new/parallel-20151122/NEWS
--- old/parallel-20151022/NEWS 2015-10-21 23:34:26.000000000 +0200
+++ new/parallel-20151122/NEWS 2015-11-22 19:49:29.000000000 +0100
@@ -1,8 +1,41 @@
+20151122
+
+* GNU Parallel packaged for CERN CentOS: http://linuxsoft.cern.ch/cern/centos/7/cern/x86_64/repoview/parallel.html
+
+* GNU Parallel was cited in: The Outer Solar System Origins Survey: I. Design and First-Quarter Discoveries http://arxiv.org/pdf/1511.02895.pdf
+
+* GNU Parallel was cited in: Contrasting genetic architectures of schizophrenia and other complex diseases using fast variance-components analysis http://www.nature.com/ng/journal/vaop/ncurrent/full/ng.3431.html
+
+* GNU Parallel was cited in: Named-Entity Chunking for Norwegian Text using Support Vector Machines http://ojs.bibsys.no/index.php/NIK/article/viewFile/248/211
+
+* GNU Parallel was cited in: Multiscale Estimation of Binding Kinetics Using Brownian Dynamics, Molecular Dynamics and Milestoning http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.100438...
+
+* GNU Parallel was cited in: A Detailed Characterization of Errors in Logic Circuits due to Single-Event Transients http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=7302348&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D7302348
+
+* GNU Parallel was cited in: Exploiting Multiple Levels of Parallelism in Sparse Matrix-Matrix Multiplication http://arxiv.org/pdf/1510.00844.pdf
+
+* GNU Parallel was cited in: Arabic Speaker Emotion Classification Using Rhythm Metrics and Neural Networks http://www.eurasip.org/Proceedings/Eusipco/Eusipco2015/papers/1570104855.pdf
+
+* GNU Parallel was cited in: Stride Search: a general algorithm for storm detection in high resolution climate data http://www.geosci-model-dev-discuss.net/8/7727/2015/gmdd-8-7727-2015.pdf
+
+* GNU Parallel was cited in: Decomposing Digital Paintings into Layers via RGB-space Geometry http://arxiv.org/pdf/1509.03335.pdf
+
+* GNU Parallel was cited in: Structure and evolutionary history of a large family of NLR proteins in the zebrafish http://www.biorxiv.org/content/biorxiv/early/2015/09/18/027151.full.pdf
+
+* GNU Parallel was cited in: Evolution of movement strategies under competitive interactions http://digital.csic.es/bitstream/10261/115973/1/evolution_movement_strategie...
+
+* Automating large numbers of tasks https://rcc.uchicago.edu/docs/tutorials/kicp-tutorials/running-jobs.html
+
+* Max out your IOPs with GNU Parallel http://blog.bitratchet.com/2015/11/11/max-out-your-iops-with-gnu-parallel/
+
+* Bug fixes and man page updates.
+
+
20151022
-* --plus makes it possible to use {##} as a short had for {=
- $_=$Global::JobQueue->total_jobs() =} which gives the the number of
- jobs to run.
+* --plus makes it possible to use {##} as a shorthand for
+ {= $_=$Global::JobQueue->total_jobs() =} which gives the the number
+ of jobs to run in total.
* {= $_=$Global::JobQueue->total_jobs() =} is incompatible with -X,
-m, and --xargs.
@@ -37,30 +70,48 @@
20150922
-* GNU Parallel was cited in: Flexible Modeling of Epidemics with an Empirical Bayes Framework http://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1004...
+* GNU Parallel was cited in: Flexible Modeling of Epidemics with an
+ Empirical Bayes Framework
+ http://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1004...
-* GNU Parallel was cited in: BL1: 2D Potts Model with a Twist https://sucs.swan.ac.uk/~rjames93/Dissertation.pdf
+* GNU Parallel was cited in: BL1: 2D Potts Model with a Twist
+ https://sucs.swan.ac.uk/~rjames93/Dissertation.pdf
-* GNU Parallel was cited in: DockBench: An Integrated Informatic Platform Bridging the Gap between the Robust Validation of Docking Protocols and Virtual Screening Simulations http://www.mdpi.com/1420-3049/20/6/9977/pdf
+* GNU Parallel was cited in: DockBench: An Integrated Informatic
+ Platform Bridging the Gap between the Robust Validation of Docking
+ Protocols and Virtual Screening Simulations
+ http://www.mdpi.com/1420-3049/20/6/9977/pdf
-* GNU Parallel was cited in: A Scalable Parallel Implementation of Evolutionary Algorithms for
-Multi-Objective Optimization on GPUs http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7257074
+* GNU Parallel was cited in: A Scalable Parallel Implementation of
+ Evolutionary Algorithms for Multi-Objective Optimization on GPUs
+ http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7257074
-* GNU Parallel was cited in: Tools and techniques for computational reproducibility http://biorxiv.org/content/biorxiv/early/2015/07/17/022707.full.pdf
+* GNU Parallel was cited in: Tools and techniques for computational
+ reproducibility
+ http://biorxiv.org/content/biorxiv/early/2015/07/17/022707.full.pdf
-* GNU Parallel was cited in: How Can We Measure the Similarity Between Résumés of Selected Candidates for a Job? http://www.researchgate.net/publication/275954089_How_can_we_measure_the_sim...
+* GNU Parallel was cited in: How Can We Measure the Similarity Between
+ Résumés of Selected Candidates for a Job?
+ http://www.researchgate.net/publication/275954089_How_can_we_measure_the_sim...
-* GNU Parallel was cited in: Interplay of cell dynamics and epithelial tension during morphogenesis of the Drosophila pupal wing http://www.researchgate.net/profile/Raphael_Etournay/publication/279061859_I...
+* GNU Parallel was cited in: Interplay of cell dynamics and epithelial
+ tension during morphogenesis of the Drosophila pupal wing
+ http://www.researchgate.net/profile/Raphael_Etournay/publication/279061859_I...
-* Third-party selling GNU Parallel T-shirts http://www.aliexpress.com/item/2015F-BSO-GNU-LOGO-GNU-PARALLEL-men-s-shirt-s...
+* Third-party selling GNU Parallel T-shirts
+ http://www.aliexpress.com/item/2015F-BSO-GNU-LOGO-GNU-PARALLEL-men-s-shirt-s...
-* Joys of gnu parallel http://scottolesen.com/index.php/2015/08/26/joys-of-gnu-parallel/
+* Joys of gnu parallel
+ http://scottolesen.com/index.php/2015/08/26/joys-of-gnu-parallel/
-* Crop and resize images with bash and ImageMagick https://www.simonholywell.com/post/2015/08/image-resize-crop-bash-imagemagic...
+* Crop and resize images with bash and ImageMagick
+ https://www.simonholywell.com/post/2015/08/image-resize-crop-bash-imagemagic...
-* Three Ways to Script Processes in Parallel http://www.codeword.xyz/2015/09/02/three-ways-to-script-processes-in-paralle...
+* Three Ways to Script Processes in Parallel
+ http://www.codeword.xyz/2015/09/02/three-ways-to-script-processes-in-paralle...
-* What It Looks Like to Process 3.5 Million Books http://blog.gdeltproject.org/what-it-looks-like-to-process-3-5-million-books...
+* What It Looks Like to Process 3.5 Million Books
+ http://blog.gdeltproject.org/what-it-looks-like-to-process-3-5-million-books...
* Bug fixes and man page updates.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/README new/parallel-20151122/README
--- old/parallel-20151022/README 2015-10-21 23:26:58.000000000 +0200
+++ new/parallel-20151122/README 2015-11-22 19:47:28.000000000 +0100
@@ -40,9 +40,9 @@
Full installation of GNU Parallel is as simple as:
- wget http://ftpmirror.gnu.org/parallel/parallel-20151022.tar.bz2
- bzip2 -dc parallel-20151022.tar.bz2 | tar xvf -
- cd parallel-20151022
+ wget http://ftpmirror.gnu.org/parallel/parallel-20151122.tar.bz2
+ bzip2 -dc parallel-20151122.tar.bz2 | tar xvf -
+ cd parallel-20151122
./configure && make && sudo 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-20151022.tar.bz2
- bzip2 -dc parallel-20151022.tar.bz2 | tar xvf -
- cd parallel-20151022
+ wget http://ftpmirror.gnu.org/parallel/parallel-20151122.tar.bz2
+ bzip2 -dc parallel-20151122.tar.bz2 | tar xvf -
+ cd parallel-20151122
./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-20151022/configure new/parallel-20151122/configure
--- old/parallel-20151022/configure 2015-10-21 23:27:08.000000000 +0200
+++ new/parallel-20151122/configure 2015-11-22 19:47:36.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for parallel 20151022.
+# Generated by GNU Autoconf 2.69 for parallel 20151122.
#
# Report bugs to .
#
@@ -579,8 +579,8 @@
# Identity of this package.
PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel'
-PACKAGE_VERSION='20151022'
-PACKAGE_STRING='parallel 20151022'
+PACKAGE_VERSION='20151122'
+PACKAGE_STRING='parallel 20151122'
PACKAGE_BUGREPORT='bug-parallel@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 20151022 to adapt to many kinds of systems.
+\`configure' configures parallel 20151122 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 20151022:";;
+ short | recursive ) echo "Configuration of parallel 20151122:";;
esac
cat <<\_ACEOF
@@ -1345,7 +1345,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-parallel configure 20151022
+parallel configure 20151122
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 20151022, which was
+It was created by parallel $as_me 20151122, 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='20151022'
+ VERSION='20151122'
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 20151022, which was
+This file was extended by parallel $as_me 20151122, 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 20151022
+parallel config.status 20151122
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-20151022/configure.ac new/parallel-20151122/configure.ac
--- old/parallel-20151022/configure.ac 2015-10-21 23:26:58.000000000 +0200
+++ new/parallel-20151122/configure.ac 2015-11-22 19:47:28.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([parallel], [20151022], [bug-parallel@gnu.org])
+AC_INIT([parallel], [20151122], [bug-parallel@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-20151022/src/niceload new/parallel-20151122/src/niceload
--- old/parallel-20151022/src/niceload 2015-10-21 23:26:58.000000000 +0200
+++ new/parallel-20151122/src/niceload 2015-11-22 19:47:28.000000000 +0100
@@ -24,7 +24,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
-$Global::version = 20151022;
+$Global::version = 20151122;
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-20151022/src/parallel new/parallel-20151122/src/parallel
--- old/parallel-20151022/src/parallel 2015-10-21 23:26:58.000000000 +0200
+++ new/parallel-20151122/src/parallel 2015-11-22 19:47:28.000000000 +0100
@@ -435,8 +435,8 @@
my $something_written = 0;
for my $pid (keys %incomplete_jobs) {
my $job = $incomplete_jobs{$pid};
- if($job->stdin_buffer_length()) {
- $something_written += $job->non_block_write();
+ if($job->block_length()) {
+ $something_written += $job->non_blocking_write();
} else {
delete $incomplete_jobs{$pid}
}
@@ -509,7 +509,7 @@
# %Global::running
# Returns:
# $something_written = amount of bytes written
- my ($header_ref,$block_ref,$recstart,$recend,$endpos) = @_;
+ my ($header_ref,$buffer_ref,$recstart,$recend,$endpos) = @_;
my $something_written = 0;
my $block_passed = 0;
my $sleep = 1;
@@ -522,13 +522,13 @@
values %Global::running);
}
while(my $job = shift @robin_queue) {
- if($job->stdin_buffer_length() > 0) {
- $something_written += $job->non_block_write();
+ if($job->block_length() > 0) {
+ $something_written += $job->non_blocking_write();
} else {
- $job->set_stdin_buffer($header_ref,$block_ref,$endpos,$recstart,$recend);
+ $job->set_block($header_ref,$buffer_ref,$endpos,$recstart,$recend);
$block_passed = 1;
$job->set_virgin(0);
- $something_written += $job->non_block_write();
+ $something_written += $job->non_blocking_write();
last;
}
}
@@ -633,21 +633,21 @@
# Input:
# $chunk_number = sequence number - to see if already run
# $header_ref = reference to header string to prepend
- # $record_ref = reference to record to write
+ # $buffer_ref = reference to record to write
# $recstart = start string of record
# $recend = end string of record
- # $endpos = position in $record_ref where record ends
+ # $endpos = position in $buffer_ref where record ends
# Uses:
# $Global::job_already_run
# $opt::roundrobin
# @Global::virgin_jobs
# Returns:
# Number of chunks written (0 or 1)
- my ($chunk_number,$header_ref,$record_ref,$recstart,$recend,$endpos) = @_;
+ my ($chunk_number,$header_ref,$buffer_ref,$recstart,$recend,$endpos) = @_;
if($endpos == 0) { return 0; }
if(vec($Global::job_already_run,$chunk_number,1)) { return 1; }
if($opt::roundrobin) {
- return round_robin_write($header_ref,$record_ref,$recstart,$recend,$endpos);
+ return round_robin_write($header_ref,$buffer_ref,$recstart,$recend,$endpos);
}
# If no virgin found, backoff
my $sleep = 0.0001; # 0.01 ms - better performance on highend
@@ -655,28 +655,31 @@
::debug("pipe", "No virgin jobs");
$sleep = ::reap_usleep($sleep);
# Jobs may not be started because of loadavg
- # or too little time between each ssh login.
+ # or too little time between each ssh login
+ # or retrying failed jobs.
start_more_jobs();
}
my $job = shift @Global::virgin_jobs;
# Job is no longer virgin
$job->set_virgin(0);
- # We ignore the removed rec_sep which is technically wrong.
- $job->add_transfersize($endpos + length $$header_ref);
- if(fork()) {
- # Skip
- } else {
- # Chop of at $endpos as we do not know how many rec_sep will
- # be removed.
- substr($$record_ref,$endpos,length $$record_ref) = "";
- # Remove rec_sep
- if($opt::remove_rec_sep) {
- Job::remove_rec_sep($record_ref,$recstart,$recend);
- }
- $job->write($header_ref);
- $job->write($record_ref);
- close $job->fh(0,"w");
- exit(0);
+ if(1) {
+ # We ignore the removed rec_sep which is technically wrong.
+ $job->add_transfersize($endpos + length $$header_ref);
+ if(fork()) {
+ # Skip
+ } else {
+ # Chop of at $endpos as we do not know how many rec_sep will
+ # be removed.
+ substr($$buffer_ref,$endpos,length $$buffer_ref) = "";
+ # Remove rec_sep
+ if($opt::remove_rec_sep) {
+ Job::remove_rec_sep($buffer_ref,$recstart,$recend);
+ }
+ $job->write($header_ref);
+ $job->write($buffer_ref);
+ close $job->fh(0,"w");
+ exit(0);
+ }
}
close $job->fh(0,"w");
return 1;
@@ -952,14 +955,7 @@
$opt::blocksize = 2**31-1;
}
$opt::memfree = multiply_binary_prefix($opt::memfree);
- if(defined $opt::timeout and $opt::timeout !~ /^\d+(\.\d+)?%?$/) {
- ::error("--timeout must be seconds or percentage.");
- wait_and_exit(255);
- }
- if(defined $opt::fifo and $opt::cat) {
- ::error("--fifo cannot be combined with --cat.");
- ::wait_and_exit(255);
- }
+ check_invalid_option_combinations();
if((defined $opt::fifo or defined $opt::cat)
and not $opt::pipepart) {
$opt::pipe = 1;
@@ -1043,13 +1039,6 @@
# Default = {}
$opt::tagstring = $Global::parensleft.$Global::parensright;
}
- if(defined $opt::pipepart and
- (defined $opt::L or defined $opt::max_lines
- or defined $opt::max_replace_args)) {
- ::error("--pipepart is incompatible with --max-replace-args, ".
- "--max-lines, and -L.");
- wait_and_exit(255);
- }
if(grep /^$Global::arg_sep$|^$Global::arg_file_sep$/o, @ARGV) {
# Deal with ::: and ::::
@ARGV=read_args_from_command_line();
@@ -1062,23 +1051,6 @@
if(defined $opt::bar) {
$opt::progress = $opt::bar;
}
- if(defined $opt::retired) {
- ::error("-g has been retired. Use --group.",
- "-B has been retired. Use --bf.",
- "-T has been retired. Use --tty.",
- "-U has been retired. Use --er.",
- "-W has been retired. Use --wd.",
- "-Y has been retired. Use --shebang.",
- "-H has been retired. Use --halt.",
- "--ctrlc has been retired.",
- "--noctrlc has been retired.");
- ::wait_and_exit(255);
- }
- if(defined $opt::tollef and not $opt::gnu) {
- ::error("--tollef has been retired.","Remove --tollef or use --gnu to override --tollef.");
- ::wait_and_exit(255);
- }
-
citation_notice();
parse_halt();
@@ -1098,9 +1070,55 @@
open_joblog();
}
+sub check_invalid_option_combinations {
+ if(defined $opt::timeout and $opt::timeout !~ /^\d+(\.\d+)?%?$/) {
+ ::error("--timeout must be seconds or percentage.");
+ wait_and_exit(255);
+ }
+ if(defined $opt::fifo and $opt::cat) {
+ ::error("--fifo cannot be combined with --cat.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::pipepart and
+ (defined $opt::L or defined $opt::max_lines
+ or defined $opt::max_replace_args)) {
+ ::error("--pipepart is incompatible with --max-replace-args, ".
+ "--max-lines, and -L.");
+ wait_and_exit(255);
+ }
+ if(defined $opt::group and $opt::ungroup) {
+ ::error("--group cannot be combined with --ungroup.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::group and $opt::linebuffer) {
+ ::error("--group cannot be combined with --line-buffer.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::ungroup and $opt::linebuffer) {
+ ::error("--ungroup cannot be combined with --line-buffer.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::tollef and not $opt::gnu) {
+ ::error("--tollef has been retired.","Remove --tollef or use --gnu to override --tollef.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::retired) {
+ ::error("-g has been retired. Use --group.",
+ "-B has been retired. Use --bf.",
+ "-T has been retired. Use --tty.",
+ "-U has been retired. Use --er.",
+ "-W has been retired. Use --wd.",
+ "-Y has been retired. Use --shebang.",
+ "-H has been retired. Use --halt.",
+ "--ctrlc has been retired.",
+ "--noctrlc has been retired.");
+ ::wait_and_exit(255);
+ }
+}
+
sub init_globals {
# Defaults:
- $Global::version = 20151022;
+ $Global::version = 20151122;
$Global::progname = 'parallel';
$Global::infinity = 2**31;
$Global::debug = 0;
@@ -4229,7 +4247,8 @@
my $script = memfreescript();
# TODO add sshlogin and backgrounding
- $self->{'memfree'} = qx{ $script };
+ # Run it twice if it gives 0
+ $self->{'memfree'} = qx{ $script } || qx{ $script };
if(not $self->{'memfree'}) {
::die_bug("Less than 1 byte free");
}
@@ -6198,32 +6217,38 @@
}
}
-sub set_stdin_buffer {
+sub set_block {
# Copy stdin buffer from $block_ref up to $endpos
- # Prepend with $header_ref
+ # Prepend with $header_ref if virgin (i.e. not --roundrobin)
# Remove $recstart and $recend if needed
# Input:
# $header_ref = ref to $header to prepend
- # $block_ref = ref to $block to pass on
+ # $buffer_ref = ref to $buffer containing the block
# $endpos = length of $block to pass on
# $recstart = --recstart regexp
# $recend = --recend regexp
# Returns:
# N/A
my $self = shift;
- my ($header_ref,$block_ref,$endpos,$recstart,$recend) = @_;
- $self->{'stdin_buffer'} = ($self->virgin() ? $$header_ref : "").substr($$block_ref,0,$endpos);
+ my ($header_ref,$buffer_ref,$endpos,$recstart,$recend) = @_;
+ $self->{'block'} = ($self->virgin() ? $$header_ref : "").substr($$buffer_ref,0,$endpos);
if($opt::remove_rec_sep) {
- remove_rec_sep(\$self->{'stdin_buffer'},$recstart,$recend);
+ remove_rec_sep(\$self->{'block'},$recstart,$recend);
}
- $self->{'stdin_buffer_length'} = length $self->{'stdin_buffer'};
- $self->{'stdin_buffer_pos'} = 0;
- $self->add_transfersize($self->{'stdin_buffer_length'});
+ $self->{'block_length'} = length $self->{'block'};
+ $self->{'block_pos'} = 0;
+ $self->add_transfersize($self->{'block_length'});
}
-sub stdin_buffer_length {
+sub block_ref {
+ my $self = shift;
+ return \$self->{'block'};
+}
+
+
+sub block_length {
my $self = shift;
- return $self->{'stdin_buffer_length'};
+ return $self->{'block_length'};
}
sub remove_rec_sep {
@@ -6234,26 +6259,26 @@
$$block_ref =~ s/$recend$//os;
}
-sub non_block_write {
+sub non_blocking_write {
my $self = shift;
my $something_written = 0;
use POSIX qw(:errno_h);
# for loop used to avoid copying substr: $buf will be an alias for the substr
- for my $buf (substr($self->{'stdin_buffer'},$self->{'stdin_buffer_pos'})) {
+ for my $buf (substr($self->{'block'},$self->{'block_pos'})) {
my $in = $self->fh(0,"w");
my $rv = syswrite($in, $buf);
if (!defined($rv) && $! == EAGAIN) {
# would block
$something_written = 0;
- } elsif ($self->{'stdin_buffer_pos'}+$rv != $self->{'stdin_buffer_length'}) {
+ } elsif ($self->{'block_pos'}+$rv != $self->{'block_length'}) {
# incomplete write
# Remove the written part
- $self->{'stdin_buffer_pos'} += $rv;
+ $self->{'block_pos'} += $rv;
$something_written = $rv;
} else {
# successfully wrote everything
my $a = "";
- $self->set_stdin_buffer(\$a,\$a,0,"","");
+ $self->set_block(\$a,\$a,0,"","");
$something_written = $rv;
}
}
@@ -8001,11 +8026,13 @@
if($perlexpr =~ /^(\d+) /) {
# Positional
defined($record->[$1-1]) or next;
- $self->{'len'}{$perlexpr} += length $record->[$1-1]->replace($perlexpr,$quote_arg,$self);
+ $self->{'len'}{$perlexpr} +=
+ length $record->[$1-1]->replace($perlexpr,$quote_arg,$self);
} else {
for my $arg (@$record) {
if(defined $arg) {
- $self->{'len'}{$perlexpr} += length $arg->replace($perlexpr,$quote_arg,$self);
+ $self->{'len'}{$perlexpr} +=
+ length $arg->replace($perlexpr,$quote_arg,$self);
}
}
}
@@ -8604,7 +8631,7 @@
if($opt::pipe or $opt::pipepart) {
if($cmd_line->replaced() eq "") {
# Empty command - pipe requires a command
- ::error("--pipe must have a command to pipe into (e.g. 'cat').");
+ ::error("--pipe/--pipepart must have a command to pipe into (e.g. 'cat').");
::wait_and_exit(255);
}
} else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/src/parallel.1 new/parallel-20151122/src/parallel.1
--- old/parallel-20151022/src/parallel.1 2015-10-21 23:27:12.000000000 +0200
+++ new/parallel-20151122/src/parallel.1 2015-10-22 00:06:45.000000000 +0200
@@ -533,8 +533,8 @@
string that is not in the command line.
.Sp
See also: \fB:::\fR.
-.IP "\fB\-\-bar\fR (alpha testing)" 9
-.IX Item "--bar (alpha testing)"
+.IP "\fB\-\-bar\fR (beta testing)" 9
+.IX Item "--bar (beta testing)"
Show progress as a progress bar. In the bar is shown: % of jobs
completed, estimated seconds left, and number of jobs started.
.Sp
@@ -618,8 +618,8 @@
\&\fIsize\fR defaults to 1M.
.Sp
See \fB\-\-pipe\fR and \fB\-\-pipepart\fR for use of this.
-.IP "\fB\-\-cat\fR (alpha testing)" 9
-.IX Item "--cat (alpha testing)"
+.IP "\fB\-\-cat\fR (beta testing)" 9
+.IX Item "--cat (beta testing)"
Create a temporary file with content. Normally \fB\-\-pipe\fR/\fB\-\-pipepart\fR
will give data to the program on stdin (standard input). With \fB\-\-cat\fR
\&\s-1GNU \s0\fBparallel\fR will create a temporary file with the name in {}, so
@@ -711,8 +711,8 @@
Delay starting next job \fIsecs\fR seconds. \s-1GNU \s0\fBparallel\fR will pause
\&\fIsecs\fR seconds after starting each job. \fIsecs\fR can be less than 1
second.
-.IP "\fB\-\-dry\-run\fR (alpha testing)" 9
-.IX Item "--dry-run (alpha testing)"
+.IP "\fB\-\-dry\-run\fR (beta testing)" 9
+.IX Item "--dry-run (beta testing)"
Print the job to run on stdout (standard output), but do not run the
job. Use \fB\-v \-v\fR to include the wrapping that \s-1GNU\s0 Parallel generates
(for remote jobs, \fB\-\-tmux\fR, \fB\-\-nice\fR, \fB\-\-pipe\fR, \fB\-\-pipepart\fR,
@@ -767,8 +767,8 @@
and functions) use env_parallel as described under the option \fIcommand\fR.
.Sp
See also: \fB\-\-record\-env\fR.
-.IP "\fB\-\-eta\fR (alpha testing)" 9
-.IX Item "--eta (alpha testing)"
+.IP "\fB\-\-eta\fR (beta testing)" 9
+.IX Item "--eta (beta testing)"
Show the estimated number of seconds before finishing. This forces \s-1GNU
\&\s0\fBparallel\fR to read all jobs before starting to find the number of
jobs. \s-1GNU \s0\fBparallel\fR normally only reads the next job to run.
@@ -784,8 +784,8 @@
Implies \fB\-\-semaphore\fR.
.Sp
See also \fB\-\-bg\fR, \fBman sem\fR.
-.IP "\fB\-\-fifo\fR (alpha testing)" 9
-.IX Item "--fifo (alpha testing)"
+.IP "\fB\-\-fifo\fR (beta testing)" 9
+.IX Item "--fifo (beta testing)"
Create a temporary fifo with content. Normally \fB\-\-pipe\fR and
\&\fB\-\-pipepart\fR will give data to the program on stdin (standard
input). With \fB\-\-fifo\fR \s-1GNU \s0\fBparallel\fR will create a temporary fifo
@@ -810,8 +810,8 @@
Behave like \s-1GNU \s0\fBparallel\fR. This option historically took precedence
over \fB\-\-tollef\fR. The \fB\-\-tollef\fR option is now retired, and therefore
may not be used. \fB\-\-gnu\fR is kept for compatibility.
-.IP "\fB\-\-group\fR (alpha testing)" 9
-.IX Item "--group (alpha testing)"
+.IP "\fB\-\-group\fR (beta testing)" 9
+.IX Item "--group (beta testing)"
Group output. Output from each jobs is grouped together and is only
printed when the command is finished. stderr (standard error) first
followed by stdout (standard output). This takes some \s-1CPU\s0 time. In
@@ -830,11 +830,11 @@
.IX Item "-h"
.PD
Print a summary of the options to \s-1GNU \s0\fBparallel\fR and exit.
-.IP "\fB\-\-halt\-on\-error\fR \fIval\fR (alpha testing)" 9
-.IX Item "--halt-on-error val (alpha testing)"
+.IP "\fB\-\-halt\-on\-error\fR \fIval\fR (beta testing)" 9
+.IX Item "--halt-on-error val (beta testing)"
.PD 0
-.IP "\fB\-\-halt\fR \fIval\fR (alpha testing)" 9
-.IX Item "--halt val (alpha testing)"
+.IP "\fB\-\-halt\fR \fIval\fR (beta testing)" 9
+.IX Item "--halt val (beta testing)"
.PD
When should \s-1GNU \s0\fBparallel\fR terminate? In some situations it makes no
sense to run all jobs. \s-1GNU \s0\fBparallel\fR should simply give up as soon
@@ -1225,8 +1225,8 @@
performance is important use \fB\-\-pipepart\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
@@ -1243,8 +1243,8 @@
Ignore any \fB\-\-profile\fR, \f(CW$PARALLEL\fR, and ~/.parallel/config to get full
control on the command line (used by \s-1GNU \s0\fBparallel\fR internally when
called with \fB\-\-sshlogin\fR).
-.IP "\fB\-\-plus\fR (alpha testing)" 9
-.IX Item "--plus (alpha testing)"
+.IP "\fB\-\-plus\fR (beta testing)" 9
+.IX Item "--plus (beta testing)"
Activate additional replacement strings: {+/} {+.} {+..} {+...} {..}
{...} {/..} {/...} {##}. The idea being that '{+foo}' matches the opposite of
\&'{foo}' and {} = {+/}/{/} = {.}.{+.} = {+/}/{/.}.{+.} = {..}.{+..} =
@@ -1323,8 +1323,8 @@
.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 (alpha testing)" 9
-.IX Item "--nice niceness (alpha testing)"
+.IP "\fB\-\-nice\fR \fIniceness\fR (beta testing)" 9
+.IX Item "--nice niceness (beta testing)"
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
@@ -1776,8 +1776,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
@@ -1796,17 +1796,17 @@
Delay starting next ssh by \fIsecs\fR seconds. \s-1GNU \s0\fBparallel\fR will pause
\&\fIsecs\fR seconds after starting each ssh. \fIsecs\fR can be less than 1
seconds.
-.IP "\fB\-S\fR \fI[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]\fR (alpha testing)" 9
-.IX Item "-S [@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]] (alpha testing)"
+.IP "\fB\-S\fR \fI[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]\fR (beta testing)" 9
+.IX Item "-S [@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]] (beta testing)"
.PD 0
-.ie n .IP "\fB\-S\fR \fI\fI@hostgroup\fI\fR (alpha testing)" 9
-.el .IP "\fB\-S\fR \fI\f(CI@hostgroup\fI\fR (alpha testing)" 9
-.IX Item "-S @hostgroup (alpha testing)"
-.IP "\fB\-\-sshlogin\fR \fI[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]\fR (alpha testing)" 9
-.IX Item "--sshlogin [@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]] (alpha testing)"
-.ie n .IP "\fB\-\-sshlogin\fR \fI\fI@hostgroup\fI\fR (alpha testing)" 9
-.el .IP "\fB\-\-sshlogin\fR \fI\f(CI@hostgroup\fI\fR (alpha testing)" 9
-.IX Item "--sshlogin @hostgroup (alpha testing)"
+.ie n .IP "\fB\-S\fR \fI\fI@hostgroup\fI\fR (beta testing)" 9
+.el .IP "\fB\-S\fR \fI\f(CI@hostgroup\fI\fR (beta testing)" 9
+.IX Item "-S @hostgroup (beta testing)"
+.IP "\fB\-\-sshlogin\fR \fI[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]\fR (beta testing)" 9
+.IX Item "--sshlogin [@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]] (beta testing)"
+.ie n .IP "\fB\-\-sshlogin\fR \fI\fI@hostgroup\fI\fR (beta testing)" 9
+.el .IP "\fB\-\-sshlogin\fR \fI\f(CI@hostgroup\fI\fR (beta testing)" 9
+.IX Item "--sshlogin @hostgroup (beta testing)"
.PD
Distribute jobs to remote computers. The jobs will be run on a list of
remote computers.
@@ -2107,11 +2107,11 @@
.IX Item "-V"
.PD
Print the version \s-1GNU \s0\fBparallel\fR and exit.
-.IP "\fB\-\-workdir\fR \fImydir\fR (alpha testing)" 9
-.IX Item "--workdir mydir (alpha testing)"
+.IP "\fB\-\-workdir\fR \fImydir\fR (beta testing)" 9
+.IX Item "--workdir mydir (beta testing)"
.PD 0
-.IP "\fB\-\-wd\fR \fImydir\fR (alpha testing)" 9
-.IX Item "--wd mydir (alpha testing)"
+.IP "\fB\-\-wd\fR \fImydir\fR (beta testing)" 9
+.IX Item "--wd mydir (beta testing)"
.PD
Files transferred using \fB\-\-transfer\fR and \fB\-\-return\fR will be relative
to \fImydir\fR on remote computers, and the command will be executed in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/src/parallel.html new/parallel-20151122/src/parallel.html
--- old/parallel-20151022/src/parallel.html 2015-10-21 23:27:11.000000000 +0200
+++ new/parallel-20151122/src/parallel.html 2015-10-22 00:06:43.000000000 +0200
@@ -488,7 +488,7 @@
<p>See also: <b>:::</b>.</p>
</dd>
-<dt id="bar-alpha-testing"><b>--bar</b> (alpha testing)</dt>
+<dt id="bar-beta-testing"><b>--bar</b> (beta testing)</dt>
<dd>
<p>Show progress as a progress bar. In the bar is shown: % of jobs completed, estimated seconds left, and number of jobs started.</p>
@@ -571,7 +571,7 @@
<p>See <b>--pipe</b> and <b>--pipepart</b> for use of this.</p>
</dd>
-<dt id="cat-alpha-testing"><b>--cat</b> (alpha testing)</dt>
+<dt id="cat-beta-testing"><b>--cat</b> (beta testing)</dt>
<dd>
<p>Create a temporary file with content. Normally <b>--pipe</b>/<b>--pipepart</b> will give data to the program on stdin (standard input). With <b>--cat</b> GNU <b>parallel</b> will create a temporary file with the name in {}, so you can do: <b>parallel --pipe --cat wc {}</b>.</p>
@@ -661,7 +661,7 @@
<p>Delay starting next job <i>secs</i> seconds. GNU <b>parallel</b> will pause <i>secs</i> seconds after starting each job. <i>secs</i> can be less than 1 second.</p>
</dd>
-<dt id="dry-run-alpha-testing"><b>--dry-run</b> (alpha testing)</dt>
+<dt id="dry-run-beta-testing"><b>--dry-run</b> (beta testing)</dt>
<dd>
<p>Print the job to run on stdout (standard output), but do not run the job. Use <b>-v -v</b> to include the wrapping that GNU Parallel generates (for remote jobs, <b>--tmux</b>, <b>--nice</b>, <b>--pipe</b>, <b>--pipepart</b>, <b>--fifo</b> and <b>--cat</b>). Do not count on this literaly, though, as the job may be scheduled on another computer or the local computer if : is in the list.</p>
@@ -710,7 +710,7 @@
<p>See also: <b>--record-env</b>.</p>
</dd>
-<dt id="eta-alpha-testing"><b>--eta</b> (alpha testing)</dt>
+<dt id="eta-beta-testing"><b>--eta</b> (beta testing)</dt>
<dd>
<p>Show the estimated number of seconds before finishing. This forces GNU <b>parallel</b> to read all jobs before starting to find the number of jobs. GNU <b>parallel</b> normally only reads the next job to run.</p>
@@ -730,7 +730,7 @@
<p>See also <b>--bg</b>, <b>man sem</b>.</p>
</dd>
-<dt id="fifo-alpha-testing"><b>--fifo</b> (alpha testing)</dt>
+<dt id="fifo-beta-testing"><b>--fifo</b> (beta testing)</dt>
<dd>
<p>Create a temporary fifo with content. Normally <b>--pipe</b> and <b>--pipepart</b> will give data to the program on stdin (standard input). With <b>--fifo</b> GNU <b>parallel</b> will create a temporary fifo with the name in {}, so you can do: <b>parallel --pipe --fifo wc {}</b>.</p>
@@ -756,7 +756,7 @@
<p>Behave like GNU <b>parallel</b>. This option historically took precedence over <b>--tollef</b>. The <b>--tollef</b> option is now retired, and therefore may not be used. <b>--gnu</b> is kept for compatibility.</p>
</dd>
-<dt id="group-alpha-testing"><b>--group</b> (alpha testing)</dt>
+<dt id="group-beta-testing"><b>--group</b> (beta testing)</dt>
<dd>
<p>Group output. Output from each jobs is grouped together and is only printed when the command is finished. stderr (standard error) first followed by stdout (standard output). This takes some CPU time. In rare situations GNU <b>parallel</b> takes up lots of CPU time and if it is acceptable that the outputs from different commands are mixed together, then disabling grouping with <b>-u</b> can speedup GNU <b>parallel</b> by a factor of 10.</p>
@@ -776,11 +776,11 @@
<p>Print a summary of the options to GNU <b>parallel</b> and exit.</p>
</dd>
-<dt id="halt-on-error-val-alpha-testing"><b>--halt-on-error</b> <i>val</i> (alpha testing)</dt>
+<dt id="halt-on-error-val-beta-testing"><b>--halt-on-error</b> <i>val</i> (beta testing)</dt>
<dd>
</dd>
-<dt id="halt-val-alpha-testing"><b>--halt</b> <i>val</i> (alpha testing)</dt>
+<dt id="halt-val-beta-testing"><b>--halt</b> <i>val</i> (beta testing)</dt>
<dd>
<p>When should GNU <b>parallel</b> terminate? In some situations it makes no sense to run all jobs. GNU <b>parallel</b> should simply give up as soon as a condition is met.</p>
@@ -1207,7 +1207,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>
@@ -1235,7 +1235,7 @@
<p>Ignore any <b>--profile</b>, $PARALLEL, and ~/.parallel/config to get full control on the command line (used by GNU <b>parallel</b> internally when called with <b>--sshlogin</b>).</p>
</dd>
-<dt id="plus-alpha-testing"><b>--plus</b> (alpha testing)</dt>
+<dt id="plus-beta-testing"><b>--plus</b> (beta testing)</dt>
<dd>
<p>Activate additional replacement strings: {+/} {+.} {+..} {+...} {..} {...} {/..} {/...} {##}. The idea being that '{+foo}' matches the opposite of '{foo}' and {} = {+/}/{/} = {.}.{+.} = {+/}/{/.}.{+.} = {..}.{+..} = {+/}/{/..}.{+..} = {...}.{+...} = {+/}/{/...}.{+...}</p>
@@ -1311,7 +1311,7 @@
<p>Overrides an earlier <b>--keep-order</b> (e.g. if set in <b>~/.parallel/config</b>).</p>
</dd>
-<dt id="nice-niceness-alpha-testing"><b>--nice</b> <i>niceness</i> (alpha testing)</dt>
+<dt id="nice-niceness-beta-testing"><b>--nice</b> <i>niceness</i> (beta testing)</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>
@@ -1725,7 +1725,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>
@@ -1749,19 +1749,19 @@
<p>Delay starting next ssh by <i>secs</i> seconds. GNU <b>parallel</b> will pause <i>secs</i> seconds after starting each ssh. <i>secs</i> can be less than 1 seconds.</p>
</dd>
-<dt id="S-hostgroups-ncpu-sshlogin-hostgroups-ncpu-sshlogin-...-alpha-testing"><b>-S</b> <i>[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]</i> (alpha testing)</dt>
+<dt id="S-hostgroups-ncpu-sshlogin-hostgroups-ncpu-sshlogin-...-beta-testing"><b>-S</b> <i>[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]</i> (beta testing)</dt>
<dd>
</dd>
-<dt id="S-hostgroup-alpha-testing"><b>-S</b> <i>@hostgroup</i> (alpha testing)</dt>
+<dt id="S-hostgroup-beta-testing"><b>-S</b> <i>@hostgroup</i> (beta testing)</dt>
<dd>
</dd>
-<dt id="sshlogin-hostgroups-ncpu-sshlogin-hostgroups-ncpu-sshlogin-...-alpha-testing"><b>--sshlogin</b> <i>[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]</i> (alpha testing)</dt>
+<dt id="sshlogin-hostgroups-ncpu-sshlogin-hostgroups-ncpu-sshlogin-...-beta-testing"><b>--sshlogin</b> <i>[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]</i> (beta testing)</dt>
<dd>
</dd>
-<dt id="sshlogin-hostgroup-alpha-testing"><b>--sshlogin</b> <i>@hostgroup</i> (alpha testing)</dt>
+<dt id="sshlogin-hostgroup-beta-testing"><b>--sshlogin</b> <i>@hostgroup</i> (beta testing)</dt>
<dd>
<p>Distribute jobs to remote computers. The jobs will be run on a list of remote computers.</p>
@@ -2055,11 +2055,11 @@
<p>Print the version GNU <b>parallel</b> and exit.</p>
</dd>
-<dt id="workdir-mydir-alpha-testing"><b>--workdir</b> <i>mydir</i> (alpha testing)</dt>
+<dt id="workdir-mydir-beta-testing"><b>--workdir</b> <i>mydir</i> (beta testing)</dt>
<dd>
</dd>
-<dt id="wd-mydir-alpha-testing"><b>--wd</b> <i>mydir</i> (alpha testing)</dt>
+<dt id="wd-mydir-beta-testing"><b>--wd</b> <i>mydir</i> (beta testing)</dt>
<dd>
<p>Files transferred using <b>--transfer</b> and <b>--return</b> will be relative to <i>mydir</i> on remote computers, and the command will be executed in the dir <i>mydir</i>.</p>
Files old/parallel-20151022/src/parallel.pdf and new/parallel-20151122/src/parallel.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/src/parallel.pod new/parallel-20151122/src/parallel.pod
--- old/parallel-20151022/src/parallel.pod 2015-10-21 23:22:15.000000000 +0200
+++ new/parallel-20151122/src/parallel.pod 2015-10-21 23:56:29.000000000 +0200
@@ -426,7 +426,7 @@
See also: B<:::>.
-=item B<--bar> (alpha testing)
+=item B<--bar> (beta testing)
Show progress as a progress bar. In the bar is shown: % of jobs
completed, estimated seconds left, and number of jobs started.
@@ -513,7 +513,7 @@
See B<--pipe> and B<--pipepart> for use of this.
-=item B<--cat> (alpha testing)
+=item B<--cat> (beta testing)
Create a temporary file with content. Normally B<--pipe>/B<--pipepart>
will give data to the program on stdin (standard input). With B<--cat>
@@ -613,7 +613,7 @@
second.
-=item B<--dry-run> (alpha testing)
+=item B<--dry-run> (beta testing)
Print the job to run on stdout (standard output), but do not run the
job. Use B<-v -v> to include the wrapping that GNU Parallel generates
@@ -672,7 +672,7 @@
See also: B<--record-env>.
-=item B<--eta> (alpha testing)
+=item B<--eta> (beta testing)
Show the estimated number of seconds before finishing. This forces GNU
B<parallel> to read all jobs before starting to find the number of
@@ -693,7 +693,7 @@
See also B<--bg>, B<man sem>.
-=item B<--fifo> (alpha testing)
+=item B<--fifo> (beta testing)
Create a temporary fifo with content. Normally B<--pipe> and
B<--pipepart> will give data to the program on stdin (standard
@@ -725,7 +725,7 @@
may not be used. B<--gnu> is kept for compatibility.
-=item B<--group> (alpha testing)
+=item B<--group> (beta testing)
Group output. Output from each jobs is grouped together and is only
printed when the command is finished. stderr (standard error) first
@@ -747,9 +747,9 @@
Print a summary of the options to GNU B<parallel> and exit.
-=item B<--halt-on-error> I<val> (alpha testing)
+=item B<--halt-on-error> I<val> (beta testing)
-=item B<--halt> I<val> (alpha testing)
+=item B<--halt> I<val> (beta testing)
When should GNU B<parallel> terminate? In some situations it makes no
sense to run all jobs. GNU B<parallel> should simply give up as soon
@@ -1172,7 +1172,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:
@@ -1198,7 +1198,7 @@
called with B<--sshlogin>).
-=item B<--plus> (alpha testing)
+=item B<--plus> (beta testing)
Activate additional replacement strings: {+/} {+.} {+..} {+...} {..}
{...} {/..} {/...} {##}. The idea being that '{+foo}' matches the opposite of
@@ -1288,7 +1288,7 @@
B<~/.parallel/config>).
-=item B<--nice> I<niceness> (alpha testing)
+=item B<--nice> I<niceness> (beta testing)
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
@@ -1737,7 +1737,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
@@ -1765,13 +1765,13 @@
seconds.
-=item B<-S> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]> (alpha testing)
+=item B<-S> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]> (beta testing)
-=item B<-S> I<@hostgroup> (alpha testing)
+=item B<-S> I<@hostgroup> (beta testing)
-=item B<--sshlogin> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]> (alpha testing)
+=item B<--sshlogin> I<[@hostgroups/][ncpu/]sshlogin[,[@hostgroups/][ncpu/]sshlogin[,...]]> (beta testing)
-=item B<--sshlogin> I<@hostgroup> (alpha testing)
+=item B<--sshlogin> I<@hostgroup> (beta testing)
Distribute jobs to remote computers. The jobs will be run on a list of
remote computers.
@@ -2088,9 +2088,9 @@
Print the version GNU B<parallel> and exit.
-=item B<--workdir> I<mydir> (alpha testing)
+=item B<--workdir> I<mydir> (beta testing)
-=item B<--wd> I<mydir> (alpha testing)
+=item B<--wd> I<mydir> (beta testing)
Files transferred using B<--transfer> and B<--return> will be relative
to I<mydir> on remote computers, and the command will be executed in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/src/parallel.texi new/parallel-20151122/src/parallel.texi
--- old/parallel-20151022/src/parallel.texi 2015-10-21 23:27:19.000000000 +0200
+++ new/parallel-20151122/src/parallel.texi 2015-10-22 00:06:54.000000000 +0200
@@ -527,8 +527,8 @@
See also: @strong{:::}.
-@item @strong{--bar} (alpha testing)
-@anchor{@strong{--bar} (alpha testing)}
+@item @strong{--bar} (beta testing)
+@anchor{@strong{--bar} (beta testing)}
Show progress as a progress bar. In the bar is shown: % of jobs
completed, estimated seconds left, and number of jobs started.
@@ -621,8 +621,8 @@
See @strong{--pipe} and @strong{--pipepart} for use of this.
-@item @strong{--cat} (alpha testing)
-@anchor{@strong{--cat} (alpha testing)}
+@item @strong{--cat} (beta testing)
+@anchor{@strong{--cat} (beta testing)}
Create a temporary file with content. Normally @strong{--pipe}/@strong{--pipepart}
will give data to the program on stdin (standard input). With @strong{--cat}
@@ -728,8 +728,8 @@
@emph{secs} seconds after starting each job. @emph{secs} can be less than 1
second.
-@item @strong{--dry-run} (alpha testing)
-@anchor{@strong{--dry-run} (alpha testing)}
+@item @strong{--dry-run} (beta testing)
+@anchor{@strong{--dry-run} (beta testing)}
Print the job to run on stdout (standard output), but do not run the
job. Use @strong{-v -v} to include the wrapping that GNU Parallel generates
@@ -789,8 +789,8 @@
See also: @strong{--record-env}.
-@item @strong{--eta} (alpha testing)
-@anchor{@strong{--eta} (alpha testing)}
+@item @strong{--eta} (beta testing)
+@anchor{@strong{--eta} (beta testing)}
Show the estimated number of seconds before finishing. This forces GNU
@strong{parallel} to read all jobs before starting to find the number of
@@ -810,8 +810,8 @@
See also @strong{--bg}, @strong{man sem}.
-@item @strong{--fifo} (alpha testing)
-@anchor{@strong{--fifo} (alpha testing)}
+@item @strong{--fifo} (beta testing)
+@anchor{@strong{--fifo} (beta testing)}
Create a temporary fifo with content. Normally @strong{--pipe} and
@strong{--pipepart} will give data to the program on stdin (standard
@@ -842,8 +842,8 @@
over @strong{--tollef}. The @strong{--tollef} option is now retired, and therefore
may not be used. @strong{--gnu} is kept for compatibility.
-@item @strong{--group} (alpha testing)
-@anchor{@strong{--group} (alpha testing)}
+@item @strong{--group} (beta testing)
+@anchor{@strong{--group} (beta testing)}
Group output. Output from each jobs is grouped together and is only
printed when the command is finished. stderr (standard error) first
@@ -865,11 +865,11 @@
Print a summary of the options to GNU @strong{parallel} and exit.
-@item @strong{--halt-on-error} @emph{val} (alpha testing)
-@anchor{@strong{--halt-on-error} @emph{val} (alpha testing)}
+@item @strong{--halt-on-error} @emph{val} (beta testing)
+@anchor{@strong{--halt-on-error} @emph{val} (beta testing)}
-@item @strong{--halt} @emph{val} (alpha testing)
-@anchor{@strong{--halt} @emph{val} (alpha testing)}
+@item @strong{--halt} @emph{val} (beta testing)
+@anchor{@strong{--halt} @emph{val} (beta testing)}
When should GNU @strong{parallel} terminate? In some situations it makes no
sense to run all jobs. GNU @strong{parallel} should simply give up as soon
@@ -1332,8 +1332,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:
@@ -1359,8 +1359,8 @@
control on the command line (used by GNU @strong{parallel} internally when
called with @strong{--sshlogin}).
-@item @strong{--plus} (alpha testing)
-@anchor{@strong{--plus} (alpha testing)}
+@item @strong{--plus} (beta testing)
+@anchor{@strong{--plus} (beta testing)}
Activate additional replacement strings: @{+/@} @{+.@} @{+..@} @{+...@} @{..@}
@{...@} @{/..@} @{/...@} @{##@}. The idea being that '@{+foo@}' matches the opposite of
@@ -1453,8 +1453,8 @@
Overrides an earlier @strong{--keep-order} (e.g. if set in
@strong{~/.parallel/config}).
-@item @strong{--nice} @emph{niceness} (alpha testing)
-@anchor{@strong{--nice} @emph{niceness} (alpha testing)}
+@item @strong{--nice} @emph{niceness} (beta testing)
+@anchor{@strong{--nice} @emph{niceness} (beta testing)}
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
@@ -1951,8 +1951,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
@@ -1979,17 +1979,17 @@
@emph{secs} seconds after starting each ssh. @emph{secs} can be less than 1
seconds.
-@item @strong{-S} @emph{[@@hostgroups/][ncpu/]sshlogin[,[@@hostgroups/][ncpu/]sshlogin[,...]]} (alpha testing)
-@anchor{@strong{-S} @emph{[@@hostgroups/][ncpu/]sshlogin[@comma{}[@@hostgroups/][ncpu/]sshlogin[@comma{}...]]} (alpha testing)}
+@item @strong{-S} @emph{[@@hostgroups/][ncpu/]sshlogin[,[@@hostgroups/][ncpu/]sshlogin[,...]]} (beta testing)
+@anchor{@strong{-S} @emph{[@@hostgroups/][ncpu/]sshlogin[@comma{}[@@hostgroups/][ncpu/]sshlogin[@comma{}...]]} (beta testing)}
-@item @strong{-S} @emph{@@hostgroup} (alpha testing)
-@anchor{@strong{-S} @emph{@@hostgroup} (alpha testing)}
+@item @strong{-S} @emph{@@hostgroup} (beta testing)
+@anchor{@strong{-S} @emph{@@hostgroup} (beta testing)}
-@item @strong{--sshlogin} @emph{[@@hostgroups/][ncpu/]sshlogin[,[@@hostgroups/][ncpu/]sshlogin[,...]]} (alpha testing)
-@anchor{@strong{--sshlogin} @emph{[@@hostgroups/][ncpu/]sshlogin[@comma{}[@@hostgroups/][ncpu/]sshlogin[@comma{}...]]} (alpha testing)}
+@item @strong{--sshlogin} @emph{[@@hostgroups/][ncpu/]sshlogin[,[@@hostgroups/][ncpu/]sshlogin[,...]]} (beta testing)
+@anchor{@strong{--sshlogin} @emph{[@@hostgroups/][ncpu/]sshlogin[@comma{}[@@hostgroups/][ncpu/]sshlogin[@comma{}...]]} (beta testing)}
-@item @strong{--sshlogin} @emph{@@hostgroup} (alpha testing)
-@anchor{@strong{--sshlogin} @emph{@@hostgroup} (alpha testing)}
+@item @strong{--sshlogin} @emph{@@hostgroup} (beta testing)
+@anchor{@strong{--sshlogin} @emph{@@hostgroup} (beta testing)}
Distribute jobs to remote computers. The jobs will be run on a list of
remote computers.
@@ -2330,11 +2330,11 @@
Print the version GNU @strong{parallel} and exit.
-@item @strong{--workdir} @emph{mydir} (alpha testing)
-@anchor{@strong{--workdir} @emph{mydir} (alpha testing)}
+@item @strong{--workdir} @emph{mydir} (beta testing)
+@anchor{@strong{--workdir} @emph{mydir} (beta testing)}
-@item @strong{--wd} @emph{mydir} (alpha testing)
-@anchor{@strong{--wd} @emph{mydir} (alpha testing)}
+@item @strong{--wd} @emph{mydir} (beta testing)
+@anchor{@strong{--wd} @emph{mydir} (beta testing)}
Files transferred using @strong{--transfer} and @strong{--return} will be relative
to @emph{mydir} on remote computers, and the command will be executed in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/src/sem new/parallel-20151122/src/sem
--- old/parallel-20151022/src/sem 2015-10-21 23:26:58.000000000 +0200
+++ new/parallel-20151122/src/sem 2015-11-22 19:47:28.000000000 +0100
@@ -435,8 +435,8 @@
my $something_written = 0;
for my $pid (keys %incomplete_jobs) {
my $job = $incomplete_jobs{$pid};
- if($job->stdin_buffer_length()) {
- $something_written += $job->non_block_write();
+ if($job->block_length()) {
+ $something_written += $job->non_blocking_write();
} else {
delete $incomplete_jobs{$pid}
}
@@ -509,7 +509,7 @@
# %Global::running
# Returns:
# $something_written = amount of bytes written
- my ($header_ref,$block_ref,$recstart,$recend,$endpos) = @_;
+ my ($header_ref,$buffer_ref,$recstart,$recend,$endpos) = @_;
my $something_written = 0;
my $block_passed = 0;
my $sleep = 1;
@@ -522,13 +522,13 @@
values %Global::running);
}
while(my $job = shift @robin_queue) {
- if($job->stdin_buffer_length() > 0) {
- $something_written += $job->non_block_write();
+ if($job->block_length() > 0) {
+ $something_written += $job->non_blocking_write();
} else {
- $job->set_stdin_buffer($header_ref,$block_ref,$endpos,$recstart,$recend);
+ $job->set_block($header_ref,$buffer_ref,$endpos,$recstart,$recend);
$block_passed = 1;
$job->set_virgin(0);
- $something_written += $job->non_block_write();
+ $something_written += $job->non_blocking_write();
last;
}
}
@@ -633,21 +633,21 @@
# Input:
# $chunk_number = sequence number - to see if already run
# $header_ref = reference to header string to prepend
- # $record_ref = reference to record to write
+ # $buffer_ref = reference to record to write
# $recstart = start string of record
# $recend = end string of record
- # $endpos = position in $record_ref where record ends
+ # $endpos = position in $buffer_ref where record ends
# Uses:
# $Global::job_already_run
# $opt::roundrobin
# @Global::virgin_jobs
# Returns:
# Number of chunks written (0 or 1)
- my ($chunk_number,$header_ref,$record_ref,$recstart,$recend,$endpos) = @_;
+ my ($chunk_number,$header_ref,$buffer_ref,$recstart,$recend,$endpos) = @_;
if($endpos == 0) { return 0; }
if(vec($Global::job_already_run,$chunk_number,1)) { return 1; }
if($opt::roundrobin) {
- return round_robin_write($header_ref,$record_ref,$recstart,$recend,$endpos);
+ return round_robin_write($header_ref,$buffer_ref,$recstart,$recend,$endpos);
}
# If no virgin found, backoff
my $sleep = 0.0001; # 0.01 ms - better performance on highend
@@ -655,28 +655,31 @@
::debug("pipe", "No virgin jobs");
$sleep = ::reap_usleep($sleep);
# Jobs may not be started because of loadavg
- # or too little time between each ssh login.
+ # or too little time between each ssh login
+ # or retrying failed jobs.
start_more_jobs();
}
my $job = shift @Global::virgin_jobs;
# Job is no longer virgin
$job->set_virgin(0);
- # We ignore the removed rec_sep which is technically wrong.
- $job->add_transfersize($endpos + length $$header_ref);
- if(fork()) {
- # Skip
- } else {
- # Chop of at $endpos as we do not know how many rec_sep will
- # be removed.
- substr($$record_ref,$endpos,length $$record_ref) = "";
- # Remove rec_sep
- if($opt::remove_rec_sep) {
- Job::remove_rec_sep($record_ref,$recstart,$recend);
- }
- $job->write($header_ref);
- $job->write($record_ref);
- close $job->fh(0,"w");
- exit(0);
+ if(1) {
+ # We ignore the removed rec_sep which is technically wrong.
+ $job->add_transfersize($endpos + length $$header_ref);
+ if(fork()) {
+ # Skip
+ } else {
+ # Chop of at $endpos as we do not know how many rec_sep will
+ # be removed.
+ substr($$buffer_ref,$endpos,length $$buffer_ref) = "";
+ # Remove rec_sep
+ if($opt::remove_rec_sep) {
+ Job::remove_rec_sep($buffer_ref,$recstart,$recend);
+ }
+ $job->write($header_ref);
+ $job->write($buffer_ref);
+ close $job->fh(0,"w");
+ exit(0);
+ }
}
close $job->fh(0,"w");
return 1;
@@ -952,14 +955,7 @@
$opt::blocksize = 2**31-1;
}
$opt::memfree = multiply_binary_prefix($opt::memfree);
- if(defined $opt::timeout and $opt::timeout !~ /^\d+(\.\d+)?%?$/) {
- ::error("--timeout must be seconds or percentage.");
- wait_and_exit(255);
- }
- if(defined $opt::fifo and $opt::cat) {
- ::error("--fifo cannot be combined with --cat.");
- ::wait_and_exit(255);
- }
+ check_invalid_option_combinations();
if((defined $opt::fifo or defined $opt::cat)
and not $opt::pipepart) {
$opt::pipe = 1;
@@ -1043,13 +1039,6 @@
# Default = {}
$opt::tagstring = $Global::parensleft.$Global::parensright;
}
- if(defined $opt::pipepart and
- (defined $opt::L or defined $opt::max_lines
- or defined $opt::max_replace_args)) {
- ::error("--pipepart is incompatible with --max-replace-args, ".
- "--max-lines, and -L.");
- wait_and_exit(255);
- }
if(grep /^$Global::arg_sep$|^$Global::arg_file_sep$/o, @ARGV) {
# Deal with ::: and ::::
@ARGV=read_args_from_command_line();
@@ -1062,23 +1051,6 @@
if(defined $opt::bar) {
$opt::progress = $opt::bar;
}
- if(defined $opt::retired) {
- ::error("-g has been retired. Use --group.",
- "-B has been retired. Use --bf.",
- "-T has been retired. Use --tty.",
- "-U has been retired. Use --er.",
- "-W has been retired. Use --wd.",
- "-Y has been retired. Use --shebang.",
- "-H has been retired. Use --halt.",
- "--ctrlc has been retired.",
- "--noctrlc has been retired.");
- ::wait_and_exit(255);
- }
- if(defined $opt::tollef and not $opt::gnu) {
- ::error("--tollef has been retired.","Remove --tollef or use --gnu to override --tollef.");
- ::wait_and_exit(255);
- }
-
citation_notice();
parse_halt();
@@ -1098,9 +1070,55 @@
open_joblog();
}
+sub check_invalid_option_combinations {
+ if(defined $opt::timeout and $opt::timeout !~ /^\d+(\.\d+)?%?$/) {
+ ::error("--timeout must be seconds or percentage.");
+ wait_and_exit(255);
+ }
+ if(defined $opt::fifo and $opt::cat) {
+ ::error("--fifo cannot be combined with --cat.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::pipepart and
+ (defined $opt::L or defined $opt::max_lines
+ or defined $opt::max_replace_args)) {
+ ::error("--pipepart is incompatible with --max-replace-args, ".
+ "--max-lines, and -L.");
+ wait_and_exit(255);
+ }
+ if(defined $opt::group and $opt::ungroup) {
+ ::error("--group cannot be combined with --ungroup.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::group and $opt::linebuffer) {
+ ::error("--group cannot be combined with --line-buffer.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::ungroup and $opt::linebuffer) {
+ ::error("--ungroup cannot be combined with --line-buffer.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::tollef and not $opt::gnu) {
+ ::error("--tollef has been retired.","Remove --tollef or use --gnu to override --tollef.");
+ ::wait_and_exit(255);
+ }
+ if(defined $opt::retired) {
+ ::error("-g has been retired. Use --group.",
+ "-B has been retired. Use --bf.",
+ "-T has been retired. Use --tty.",
+ "-U has been retired. Use --er.",
+ "-W has been retired. Use --wd.",
+ "-Y has been retired. Use --shebang.",
+ "-H has been retired. Use --halt.",
+ "--ctrlc has been retired.",
+ "--noctrlc has been retired.");
+ ::wait_and_exit(255);
+ }
+}
+
sub init_globals {
# Defaults:
- $Global::version = 20151022;
+ $Global::version = 20151122;
$Global::progname = 'parallel';
$Global::infinity = 2**31;
$Global::debug = 0;
@@ -4229,7 +4247,8 @@
my $script = memfreescript();
# TODO add sshlogin and backgrounding
- $self->{'memfree'} = qx{ $script };
+ # Run it twice if it gives 0
+ $self->{'memfree'} = qx{ $script } || qx{ $script };
if(not $self->{'memfree'}) {
::die_bug("Less than 1 byte free");
}
@@ -6198,32 +6217,38 @@
}
}
-sub set_stdin_buffer {
+sub set_block {
# Copy stdin buffer from $block_ref up to $endpos
- # Prepend with $header_ref
+ # Prepend with $header_ref if virgin (i.e. not --roundrobin)
# Remove $recstart and $recend if needed
# Input:
# $header_ref = ref to $header to prepend
- # $block_ref = ref to $block to pass on
+ # $buffer_ref = ref to $buffer containing the block
# $endpos = length of $block to pass on
# $recstart = --recstart regexp
# $recend = --recend regexp
# Returns:
# N/A
my $self = shift;
- my ($header_ref,$block_ref,$endpos,$recstart,$recend) = @_;
- $self->{'stdin_buffer'} = ($self->virgin() ? $$header_ref : "").substr($$block_ref,0,$endpos);
+ my ($header_ref,$buffer_ref,$endpos,$recstart,$recend) = @_;
+ $self->{'block'} = ($self->virgin() ? $$header_ref : "").substr($$buffer_ref,0,$endpos);
if($opt::remove_rec_sep) {
- remove_rec_sep(\$self->{'stdin_buffer'},$recstart,$recend);
+ remove_rec_sep(\$self->{'block'},$recstart,$recend);
}
- $self->{'stdin_buffer_length'} = length $self->{'stdin_buffer'};
- $self->{'stdin_buffer_pos'} = 0;
- $self->add_transfersize($self->{'stdin_buffer_length'});
+ $self->{'block_length'} = length $self->{'block'};
+ $self->{'block_pos'} = 0;
+ $self->add_transfersize($self->{'block_length'});
}
-sub stdin_buffer_length {
+sub block_ref {
+ my $self = shift;
+ return \$self->{'block'};
+}
+
+
+sub block_length {
my $self = shift;
- return $self->{'stdin_buffer_length'};
+ return $self->{'block_length'};
}
sub remove_rec_sep {
@@ -6234,26 +6259,26 @@
$$block_ref =~ s/$recend$//os;
}
-sub non_block_write {
+sub non_blocking_write {
my $self = shift;
my $something_written = 0;
use POSIX qw(:errno_h);
# for loop used to avoid copying substr: $buf will be an alias for the substr
- for my $buf (substr($self->{'stdin_buffer'},$self->{'stdin_buffer_pos'})) {
+ for my $buf (substr($self->{'block'},$self->{'block_pos'})) {
my $in = $self->fh(0,"w");
my $rv = syswrite($in, $buf);
if (!defined($rv) && $! == EAGAIN) {
# would block
$something_written = 0;
- } elsif ($self->{'stdin_buffer_pos'}+$rv != $self->{'stdin_buffer_length'}) {
+ } elsif ($self->{'block_pos'}+$rv != $self->{'block_length'}) {
# incomplete write
# Remove the written part
- $self->{'stdin_buffer_pos'} += $rv;
+ $self->{'block_pos'} += $rv;
$something_written = $rv;
} else {
# successfully wrote everything
my $a = "";
- $self->set_stdin_buffer(\$a,\$a,0,"","");
+ $self->set_block(\$a,\$a,0,"","");
$something_written = $rv;
}
}
@@ -8001,11 +8026,13 @@
if($perlexpr =~ /^(\d+) /) {
# Positional
defined($record->[$1-1]) or next;
- $self->{'len'}{$perlexpr} += length $record->[$1-1]->replace($perlexpr,$quote_arg,$self);
+ $self->{'len'}{$perlexpr} +=
+ length $record->[$1-1]->replace($perlexpr,$quote_arg,$self);
} else {
for my $arg (@$record) {
if(defined $arg) {
- $self->{'len'}{$perlexpr} += length $arg->replace($perlexpr,$quote_arg,$self);
+ $self->{'len'}{$perlexpr} +=
+ length $arg->replace($perlexpr,$quote_arg,$self);
}
}
}
@@ -8604,7 +8631,7 @@
if($opt::pipe or $opt::pipepart) {
if($cmd_line->replaced() eq "") {
# Empty command - pipe requires a command
- ::error("--pipe must have a command to pipe into (e.g. 'cat').");
+ ::error("--pipe/--pipepart must have a command to pipe into (e.g. 'cat').");
::wait_and_exit(255);
}
} else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20151022/src/sql new/parallel-20151122/src/sql
--- old/parallel-20151022/src/sql 2015-10-21 23:26:58.000000000 +0200
+++ new/parallel-20151122/src/sql 2015-11-22 19:47:28.000000000 +0100
@@ -566,7 +566,7 @@
exit ($err);
sub parse_options {
- $Global::version = 20151022;
+ $Global::version = 20151122;
$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-20151022/src/sql.1 new/parallel-20151122/src/sql.1
--- old/parallel-20151022/src/sql.1 2015-10-21 23:27:11.000000000 +0200
+++ new/parallel-20151122/src/sql.1 2015-11-22 19:47:39.000000000 +0100
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SQL 1"
-.TH SQL 1 "2015-10-21" "20151022" "parallel"
+.TH SQL 1 "2015-11-22" "20151122" "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-20151022/src/sql.pdf and new/parallel-20151122/src/sql.pdf differ
++++++ parallel-20151022.tar.bz2.sig -> parallel-20151122.tar.bz2.sig ++++++
--- /work/SRC/openSUSE:Factory/gnu_parallel/parallel-20151022.tar.bz2.sig 2015-10-25 14:18:14.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.gnu_parallel.new/parallel-20151122.tar.bz2.sig 2015-11-26 17:03:45.000000000 +0100
@@ -2,7 +2,7 @@
# To check the signature run:
# echo | gpg
-# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20151022.tar.bz2.sig
+# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20151122.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 v1
-iQTwBAABCgAGBQJWKAUwAAoJENGrRRaIiIiI/Jwmn0SvVu4qT0nKVBMqWh0+qQ1M
-PDlxwOJKbEuHydsCiLg9I3nqvEFTAqq0rO5T5yBdw+D6ACPOF8MwId+lPATKr3sU
-KthGAdMg/NimCeiARvbbuQsLzfd56hUtCCgyDv7aylgn8FBsA5HyE7c4G+32n/or
-45QvfbpFCbLF4D9KrUXh0SkC8M+2aBa0sokK/a2odJefvqYNm1pSzNrWsXAEGIDs
-zEgxXIvRiSnZUcguWVUFFwfoxJqGgY/nyDYDkmLHJU6gheX/M2pVhF2kwK7b3IBN
-GVQqIN8/z1aQwqlFTRkVdNzphWGqoAmih5Ch5Kn5579jGVRRhF+rz2Y9oQUlm8gx
-cmMH8ysEUM4HKwazS+ujaicBCSDuGMiJ7odwm7V1E8Mk3N9fem7Dm8bHAjlb0DYk
-j5ICi3I9Mb8yzbsehF2crxS+nnfr4/T0tqkjFFJY2dKHEXVotiB0z3kUWPtcI863
-aPGxGJg3lJpfxond4A3Nd8fGmzHPHzE2h6swXF33+EJvFKyh7rqqb0jB6djAMThH
-SCKEVIaHUCLxXAN5/Yf1lYJJ2/YEjuPpO8sqAZMKY+LI9YQoJ0n3Acx7J8KZf9oe
-zPYnKI0rDNu2wYrme6nnbWY5A7erh5KB3OaslyA+fP9d/WVVeMK451r7nl0NHq1o
-Nyhgpo1rEe1QeOvv5OuMeB5NVIYhgUWe7a896MasbDcC3TubxxwUwXnusTAadHH5
-m4cVcVr5GlfjWbzPPs0WQXmJpbSoX4X+EgnU2uQFQVe9z4KuugZ3/PM4DovzNH7R
-Dk9lnaARSHdz7BReqli+gff5gGnqJ3/+3FbQsqoSO6FPpeBvBN1ohYTl1xxBceCH
-92jysM0adF3N/5AamVfFFSHBfMYSjql2LgbRQXpeRl1aqTsftz0EsrW4qAe5cqEl
-O7ilhzEj3+5orxwFB88JBf1BscD2ZI1irQi0UjlGplHZ/iJnNCjYewrj9Iu0665r
-yB85SLA2RTwazmh4MU5bbxjNwy9CAbXS//wjj3+gc9y1wxS3BRO6wq9OBkGYy31g
-TLDNYYDekwuBeICIzmPgXyRMluxq1HH4Regi8NzBvaZNQev7EAo0reBlbHCcVYjp
-iOUaZ+I/a+c+XyMsYqgFe1ReKYoztQkGwVclk72ztP/kGowBROFpPMmG11ym0efu
-oLMYfoQwBcAl23OtK8EXyrdk6ySSzuBejeRIOcfNsqGJjDqdKpSecQgF66bbTGyZ
-MGz1rDvXSIzU8pcLae/xBbUouTji7JDeEplrOwiGAEcP6O64jhcLgIimLfZaGFel
-VReXN3gA3loQWqpeY7ENrc1oAe0r60RR+emjrSklrcyPbLKV1liaKgQ5Ha9rX6oI
-MafEwuN6GHSCwT6T1VCLHITRjAp1mrV6SmaFK5BF2Xo20QgrAPLj1WEw2jFbZ5bB
-xApWndeJs1RhMKjhy6bF/kCnv2IkpPAj8en5zqpxlKbwuxXmdaNqNis+Sd/dscnf
-CulJ/AKk6AuROKzbq2TwBm7CFDCmZDJPBiFre+qsKfbbxEhBi1bu9SCq+IQaU1XH
-ulW/fd07W2oP4ze8DhJojQrxxIr5Itt9A1SSfstYp7GMsR3dZbRJedtsW0ilZ2zB
-QqP7HPGu3153bZoU4F5o4iEZLg==
-=78kD
+iQTwBAABCgAGBQJWUg5pAAoJENGrRRaIiIiICMkmn288HZmNrrmTcYhwRqZ4NkeB
++2QibiyxnkLZCv3hyzhZ8UGJ9FYYzdxMq8bpsK7d6VnbwwcpGX91rwmsrFedA0yf
+fUxRXQE0Ph9+6E5r0kqRP0wi4W5ZSpgqmGnOYyHZhy2mOQi1j70fvW70X4LRcrPg
+pkyE++5abh7RRnrvRyW+BE91x5l0sk7deCiw/kRPPiZNgI4W389LhYwen8B6evCc
+mfBTjJibvj93+58kbvDZPRjxFcpx2vq6E+jrquMfQiZ7JlkEF5ki9asNx9vqAFks
+WnS3Id73ZJjazAFLA1aJB2aYcIRcby4g3xdMWhSWfCuuuqlZNWXnEhXWXvaY9Aad
+DelrcTUceN6kdEKPv8/djq9iqmDneofQiu6h1osZ6bEvZ0Uncp+5Cr6RqeYO4+ZH
+JAEmsDEAPadxxQ9Fzjo/fe0/u29LSF2/f9tR0Cg9G200TV9liVnZYlxjIYN6kfkh
+8kvIAOofW1NXj0DSr3z9HqDCSZ5Nh+oRrl/s+DXQNjNfJEMp1uHWBbUbawiBBfQm
+Y2Fs1CCeceD5oRwf5tGLFWlp62Xevflcbz6xmB1Zw528naHM6BkeofLSqrcjbKfA
+KMpk3IE5lzdgSZkBqIh/eItm8yynijMe424bm818WD1ZWCMJYAmSZCSANHU13gd3
+8Sw5D1IAowBtiyWsBLBEun1u69XoY+D9GsxqsDbKREVmYzKrTn9pvDmh5/UBola1
+UUfMzT1Fe7RF9Te5U10MncppV8AE0IhzueJ4PUxwCQRJ/5eQqCviQal80PLIHH8f
+ZXP3h41FGiuIafuoLH4/TqlpBzVX4gg2x32PYHeG34FipTTevACHtKM9ifqyeCO5
+PpYiYsCvFQnGexRPMqKNepUgCaq0N0+TO4+Orqxo9y7F8qFTBUYac4kux8nNGzdk
+cf4I4or27Ux/XR1WhYPXJq03DrRPcjKKA5maW/gSiDIvUe198oMZwbVB0YoYiMQz
+Wr9VKI4f6Wrnq2Mw1HaA5Dz2gL6gdCRvyZPqjqYSRk6OfgB3GohnGAIEwhFT5ipO
+NoMplpRxAKNIyd8XxRWy20Pb7VQ27/JGKb0npkXglCk/ekcuuYW9e2U1+rKPjN3u
+Tx/EQuv3UrDTpxs+V/Tj3/9ik//RgFLbx8s6yZt5zxjfV7ccVKCBZGvJsQ0IRZ1I
+hAVQCDN2EwlpOE6RBw1cPkFTodSW3+I7OudYXTHdPtUQOLIzSf82CGBCL8RDyc+/
+8oDATnmGq4ewcDRRAlaND/V3JhnKA7VyVPgMqL5X5FKOV4QCY8+OnA7BqBmd+VUL
+6CzoEw68sHkgcUCg+AmL2qm4g0NCk7qy37TDpJFClV6UHL4SwOg/ZCs53qgWWRPt
+lE2YSc5LAv31Ne77LN/sAW44dnP+hwLP1xsfrZfePxKj6wltjK2/uctocVZUlUOC
+NYLTlBUZfhki24pHQ8U6LdHZ1U6ol0JuHNrZA3eUpSWWrZdhDY5o6Ck+LlR7JpzK
+Sr4X8IdFQ6LKuFsJlOP5cL6ytwjzXX3yiqvLaYgKFvtVYsNr+YX3lkdcUZXG8H0M
+bx146xEiHrLMgF4oH4dCLQzS7diQn7lYyzUKDHoiJWPI6WXwjevakFYCgvihopM0
+tMAmoWJAC1oyx5tgX1Stt9VI2A==
+=R6NL
-----END PGP SIGNATURE-----