mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-21 13:37:56 +00:00
Released as 20221022 ('Nord Stream')
This commit is contained in:
parent
ba0f1d38d6
commit
0566b05283
29
NEWS
29
NEWS
|
@ -1,4 +1,31 @@
|
|||
20220822
|
||||
20221022
|
||||
|
||||
New in this release:
|
||||
|
||||
* --latest-line chops line length at terminal width.
|
||||
|
||||
* Determine max command length faster on Microsoft Windows.
|
||||
|
||||
News about GNU Parallel:
|
||||
|
||||
* Distributed Task Processing with GNU Parallel https://www.youtube.com/watch?v=usbMLggdMgc
|
||||
|
||||
* GNU Parallel workflow for many small, independent runs https://docs.csc.fi/support/tutorials/many/
|
||||
|
||||
* Copy a File To Multiple Directories With A Single Command on Linux https://www.linuxfordevices.com/tutorials/linux/copy-file-to-multiple-directories-with-one-command
|
||||
|
||||
* Behind The Scenes: The Power Of Simple Command Line Tools At Cloud Scale https://blog.gdeltproject.org/behind-the-scenes-the-power-of-simple-command-line-tools-at-cloud-scale/
|
||||
|
||||
* Run lz4 compression in parallel using GNU parallel https://www.openguru.com/2022/09/
|
||||
|
||||
* Xargs / Parallel With Code Examples https://www.folkstalk.com/2022/09/xargs-parallel-with-code-examples.html
|
||||
|
||||
* Parallel processing on a single node with GNU Parallel https://www3.cs.stonybrook.edu/~cse416/Section01/Slides/SeaWulfIntro_CSE416_09222022.pdf
|
||||
|
||||
* Using GNU parallel painlessly -- from basics to bioinformatics job orchestration https://www.youtube.com/watch?v=qypUdm-IE9c
|
||||
|
||||
|
||||
20220922
|
||||
|
||||
New in this release:
|
||||
|
||||
|
|
24
README
24
README
|
@ -57,11 +57,11 @@ document.
|
|||
|
||||
Full installation of GNU Parallel is as simple as:
|
||||
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20220922.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20220922.tar.bz2.sig
|
||||
gpg parallel-20220922.tar.bz2.sig
|
||||
bzip2 -dc parallel-20220922.tar.bz2 | tar xvf -
|
||||
cd parallel-20220922
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20221022.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20221022.tar.bz2.sig
|
||||
gpg parallel-20221022.tar.bz2.sig
|
||||
bzip2 -dc parallel-20221022.tar.bz2 | tar xvf -
|
||||
cd parallel-20221022
|
||||
./configure && make && sudo make install
|
||||
|
||||
|
||||
|
@ -70,11 +70,11 @@ 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-20220922.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20220922.tar.bz2.sig
|
||||
gpg parallel-20220922.tar.bz2.sig
|
||||
bzip2 -dc parallel-20220922.tar.bz2 | tar xvf -
|
||||
cd parallel-20220922
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20221022.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20221022.tar.bz2.sig
|
||||
gpg parallel-20221022.tar.bz2.sig
|
||||
bzip2 -dc parallel-20221022.tar.bz2 | tar xvf -
|
||||
cd parallel-20221022
|
||||
./configure --prefix=$HOME && make && make install
|
||||
|
||||
Or if your system lacks 'make' you can simply copy src/parallel
|
||||
|
@ -122,8 +122,8 @@ will love you for it.
|
|||
When using programs that use GNU Parallel to process data for
|
||||
publication please cite:
|
||||
|
||||
Tange, O. (2022, September 22). GNU Parallel 20220922 ('Elizabeth').
|
||||
Zenodo. https://doi.org/10.5281/zenodo.7105792
|
||||
Tange, O. (2022, October 22). GNU Parallel 20221022 ('Nord Stream').
|
||||
Zenodo. https://doi.org/10.5281/zenodo.7239559
|
||||
|
||||
Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.71 for parallel 20220922.
|
||||
# Generated by GNU Autoconf 2.71 for parallel 20221022.
|
||||
#
|
||||
# Report bugs to <bug-parallel@gnu.org>.
|
||||
#
|
||||
|
@ -610,8 +610,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='parallel'
|
||||
PACKAGE_TARNAME='parallel'
|
||||
PACKAGE_VERSION='20220922'
|
||||
PACKAGE_STRING='parallel 20220922'
|
||||
PACKAGE_VERSION='20221022'
|
||||
PACKAGE_STRING='parallel 20221022'
|
||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -1246,7 +1246,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 20220922 to adapt to many kinds of systems.
|
||||
\`configure' configures parallel 20221022 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1313,7 +1313,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of parallel 20220922:";;
|
||||
short | recursive ) echo "Configuration of parallel 20221022:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1390,7 +1390,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
parallel configure 20220922
|
||||
parallel configure 20221022
|
||||
generated by GNU Autoconf 2.71
|
||||
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
|
@ -1427,7 +1427,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 20220922, which was
|
||||
It was created by parallel $as_me 20221022, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
|
@ -2379,7 +2379,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='parallel'
|
||||
VERSION='20220922'
|
||||
VERSION='20221022'
|
||||
|
||||
|
||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||
|
@ -3026,7 +3026,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 20220922, which was
|
||||
This file was extended by parallel $as_me 20221022, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -3090,7 +3090,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
parallel config.status 20220922
|
||||
parallel config.status 20221022
|
||||
configured by $0, generated by GNU Autoconf 2.71,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
AC_INIT([parallel],[20220922],[bug-parallel@gnu.org])
|
||||
AC_INIT([parallel],[20221022],[bug-parallel@gnu.org])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
|
|
|
@ -7,9 +7,6 @@ Quote of the month:
|
|||
Got around to using GNU parallel for the first time from a suggestion by @jdwasmuth ... now I'm wishing I started using this years ago
|
||||
-- Stefan Gavriliuc @GavriliucStefan@twitter
|
||||
|
||||
If used properly, #gnuparallel actually enables time travel.
|
||||
-- Dr. James Wasmuth @jdwasmuth@twitter
|
||||
|
||||
I’m a big fan of GNU parallel!
|
||||
-- Scott Cain @scottjcain@twitter
|
||||
|
||||
|
@ -207,6 +204,9 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
|
|||
|
||||
=== Used ===
|
||||
|
||||
If used properly, #gnuparallel actually enables time travel.
|
||||
-- Dr. James Wasmuth @jdwasmuth@twitter
|
||||
|
||||
reduced our backend test pipelines from 4 to 1.30 hrs. gnu parallel for the win!!!
|
||||
-- Swapnil Sahu @CaffeinatedWryy@twitter
|
||||
|
||||
|
|
|
@ -255,31 +255,40 @@ from:tange@gnu.org
|
|||
to:parallel@gnu.org, bug-parallel@gnu.org
|
||||
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
||||
|
||||
Subject: GNU Parallel 20221022 ('Керчь/Nord Stream/Annectxation/DART/Mahsa Amini/Mobilising/Niemann') released
|
||||
Subject: GNU Parallel 20221022 ('Nord Stream') released
|
||||
|
||||
GNU Parallel 20221022 ('') has been released. It is available for download at: lbry://@GnuParallel:4
|
||||
GNU Parallel 20221022 ('Nord Stream') has been released. It is available for download at: lbry://@GnuParallel:4
|
||||
|
||||
Quote of the month:
|
||||
|
||||
<<>>
|
||||
|
||||
If used properly, #gnuparallel actually enables time travel.
|
||||
-- Dr. James Wasmuth @jdwasmuth@twitter
|
||||
|
||||
New in this release:
|
||||
|
||||
*
|
||||
* --latest-line chops line length at terminal width.
|
||||
|
||||
* Determine max command length faster on Microsoft Windows.
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
News about GNU Parallel:
|
||||
|
||||
https://www.youtube.com/watch?v=usbMLggdMgc
|
||||
* Distributed Task Processing with GNU Parallel https://www.youtube.com/watch?v=usbMLggdMgc
|
||||
|
||||
https://docs.csc.fi/support/tutorials/many/
|
||||
https://www.linuxfordevices.com/tutorials/linux/copy-file-to-multiple-directories-with-one-command
|
||||
https://blog.gdeltproject.org/behind-the-scenes-the-power-of-simple-command-line-tools-at-cloud-scale/
|
||||
https://www.openguru.com/2022/09/
|
||||
https://www.folkstalk.com/2022/09/xargs-parallel-with-code-examples.html
|
||||
https://www3.cs.stonybrook.edu/~cse416/Section01/Slides/SeaWulfIntro_CSE416_09222022.pdf
|
||||
https://www.youtube.com/watch?v=qypUdm-IE9c
|
||||
* GNU Parallel workflow for many small, independent runs https://docs.csc.fi/support/tutorials/many/
|
||||
|
||||
* Copy a File To Multiple Directories With A Single Command on Linux https://www.linuxfordevices.com/tutorials/linux/copy-file-to-multiple-directories-with-one-command
|
||||
|
||||
* Behind The Scenes: The Power Of Simple Command Line Tools At Cloud Scale https://blog.gdeltproject.org/behind-the-scenes-the-power-of-simple-command-line-tools-at-cloud-scale/
|
||||
|
||||
* Run lz4 compression in parallel using GNU parallel https://www.openguru.com/2022/09/
|
||||
|
||||
* Xargs / Parallel With Code Examples https://www.folkstalk.com/2022/09/xargs-parallel-with-code-examples.html
|
||||
|
||||
* Parallel processing on a single node with GNU Parallel https://www3.cs.stonybrook.edu/~cse416/Section01/Slides/SeaWulfIntro_CSE416_09222022.pdf
|
||||
|
||||
* Using GNU parallel painlessly -- from basics to bioinformatics job orchestration https://www.youtube.com/watch?v=qypUdm-IE9c
|
||||
|
||||
|
||||
GNU Parallel - For people who live life in the parallel lane.
|
||||
|
|
|
@ -395,7 +395,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -397,7 +397,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -395,7 +395,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -378,7 +378,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -380,7 +380,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -395,7 +395,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -370,7 +370,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20220923 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20221022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
use strict;
|
||||
use Getopt::Long;
|
||||
$Global::progname="niceload";
|
||||
$Global::version = 20220923;
|
||||
$Global::version = 20221022;
|
||||
Getopt::Long::Configure("bundling","require_order");
|
||||
get_options_from_array(\@ARGV) || die_usage();
|
||||
if($opt::version) {
|
||||
|
|
24
src/parallel
24
src/parallel
|
@ -2680,7 +2680,7 @@ sub check_invalid_option_combinations() {
|
|||
|
||||
sub init_globals() {
|
||||
# Defaults:
|
||||
$Global::version = 20220923;
|
||||
$Global::version = 20221022;
|
||||
$Global::progname = 'parallel';
|
||||
$::name = "GNU Parallel";
|
||||
$Global::infinity = 2**31;
|
||||
|
@ -5560,8 +5560,8 @@ sub usage() {
|
|||
"If you use programs that use GNU Parallel to process data for an article in a",
|
||||
"scientific publication, please cite:",
|
||||
"",
|
||||
" Tange, O. (2022, September 22). GNU Parallel 20220922 ('Elizabeth').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.7105792",
|
||||
" Tange, O. (2022, October 22). GNU Parallel 20221022 ('Nord Stream').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.7239559",
|
||||
"",
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice
|
||||
|
@ -5593,8 +5593,8 @@ sub citation_notice() {
|
|||
"If you use programs that use GNU Parallel to process data for an article in a",
|
||||
"scientific publication, please cite:",
|
||||
"",
|
||||
" Tange, O. (2022, September 22). GNU Parallel 20220922 ('Elizabeth').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.7105792",
|
||||
" Tange, O. (2022, October 22). GNU Parallel 20221022 ('Nord Stream').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.7239559",
|
||||
"",
|
||||
# Before changing these line, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
|
||||
|
@ -5721,20 +5721,20 @@ sub citation() {
|
|||
"If you use programs that use GNU Parallel to process data for an article in a",
|
||||
"scientific publication, please cite:",
|
||||
"",
|
||||
"\@software{tange_2022_7105792,",
|
||||
"\@software{tange_2022_7239559,",
|
||||
" author = {Tange, Ole},",
|
||||
" title = {GNU Parallel 20220922 ('Elizabeth')},",
|
||||
" month = Sep,",
|
||||
" title = {GNU Parallel 20221022 ('Nord Stream')},",
|
||||
" month = Oct,",
|
||||
" year = 2022,",
|
||||
" note = {{GNU Parallel is a general parallelizer to run",
|
||||
" multiple serial command line programs in parallel",
|
||||
" without changing them.}},",
|
||||
" publisher = {Zenodo},",
|
||||
" doi = {10.5281/zenodo.7105792},",
|
||||
" url = {https://doi.org/10.5281/zenodo.7105792}",
|
||||
" doi = {10.5281/zenodo.7239559},",
|
||||
" url = {https://doi.org/10.5281/zenodo.7239559}",
|
||||
"}",
|
||||
"",
|
||||
"(Feel free to use \\nocite{tange_2022_7105792})",
|
||||
"(Feel free to use \\nocite{tange_2022_7239559})",
|
||||
"",
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
|
||||
|
@ -9248,6 +9248,7 @@ sub filter_through_compress($) {
|
|||
# When the echo is written to $comfile,
|
||||
# it is known that output file is opened,
|
||||
# thus output file can then be removed by the decompressor.
|
||||
# empty_input_wrapper is needed for plzip
|
||||
my $wpid = open(my $fdw,"|-", "(echo > $comfile; ".
|
||||
empty_input_wrapper($opt::compress_program).") >".
|
||||
::Q($self->fh($fdno,'name'))) || die $?;
|
||||
|
@ -10760,6 +10761,7 @@ sub interactive_start($) {
|
|||
$ENV{'PARALLEL_TMUX'} ||= "tmux";
|
||||
if(not $tmuxsocket) {
|
||||
$tmuxsocket = ::tmpname("tms");
|
||||
::debug("tmux", "Start: $ENV{'PARALLEL_TMUX'} -S $tmuxsocket attach");
|
||||
if($opt::fg) {
|
||||
if(not fork) {
|
||||
# Run tmux in the foreground
|
||||
|
|
|
@ -749,7 +749,7 @@ See also: B<--basefile> B<--transfer> B<--transferfile> B<--sshlogin>
|
|||
B<--return>
|
||||
|
||||
|
||||
=item B<--color> (alpha testing)
|
||||
=item B<--color> (beta testing)
|
||||
|
||||
Colour output.
|
||||
|
||||
|
@ -761,9 +761,9 @@ B<--color> is ignored when using B<-u>.
|
|||
See also: B<--color-failed>
|
||||
|
||||
|
||||
=item B<--color-failed> (alpha testing)
|
||||
=item B<--color-failed> (beta testing)
|
||||
|
||||
=item B<--cf> (alpha testing)
|
||||
=item B<--cf> (beta testing)
|
||||
|
||||
Colour the output from failing jobs white on red.
|
||||
|
||||
|
@ -1268,7 +1268,7 @@ soon,fail=1-99%
|
|||
=back
|
||||
|
||||
|
||||
=item B<--header> I<regexp> (beta testing)
|
||||
=item B<--header> I<regexp>
|
||||
|
||||
Use regexp as header.
|
||||
|
||||
|
@ -1594,9 +1594,9 @@ Example:
|
|||
See also: B<--line-buffer>
|
||||
|
||||
|
||||
=item B<--line-buffer> (alpha testing)
|
||||
=item B<--line-buffer> (beta testing)
|
||||
|
||||
=item B<--lb> (alpha testing)
|
||||
=item B<--lb> (beta testing)
|
||||
|
||||
Buffer output on line basis.
|
||||
|
||||
|
@ -1937,7 +1937,7 @@ called with B<--sshlogin>).
|
|||
See also: B<--profile>
|
||||
|
||||
|
||||
=item B<--plus> (beta testing)
|
||||
=item B<--plus>
|
||||
|
||||
Add more replacement strings.
|
||||
|
||||
|
@ -2013,7 +2013,7 @@ B<--progress> on a running GNU B<parallel> process.
|
|||
See also: B<--eta> B<--bar>
|
||||
|
||||
|
||||
=item B<--max-line-length-allowed>
|
||||
=item B<--max-line-length-allowed> (alpha testing)
|
||||
|
||||
Print maximal command line length.
|
||||
|
||||
|
@ -2496,7 +2496,7 @@ I<n>=0 means infinite.
|
|||
See also: B<--term-seq> B<--sshlogin>
|
||||
|
||||
|
||||
=item B<--return> I<filename> (beta testing)
|
||||
=item B<--return> I<filename>
|
||||
|
||||
Transfer files from remote computers.
|
||||
|
||||
|
@ -3020,13 +3020,13 @@ I<duration> is in seconds, but can be postfixed with s, m, h, or d.
|
|||
See also: TIME POSTFIXES B<--sshlogin> B<--delay>
|
||||
|
||||
|
||||
=item B<--sshlogin> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> (alpha testing)
|
||||
=item B<--sshlogin> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> (beta testing)
|
||||
|
||||
=item B<--sshlogin> I<@hostgroup> (alpha testing)
|
||||
=item B<--sshlogin> I<@hostgroup> (beta testing)
|
||||
|
||||
=item B<-S> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> (alpha testing)
|
||||
=item B<-S> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> (beta testing)
|
||||
|
||||
=item B<-S> I<@hostgroup> (alpha testing)
|
||||
=item B<-S> I<@hostgroup> (beta testing)
|
||||
|
||||
Distribute jobs to remote computers.
|
||||
|
||||
|
@ -3331,7 +3331,7 @@ Print the job to be run on stderr (standard error).
|
|||
See also: B<-v> B<--interactive>
|
||||
|
||||
|
||||
=item B<--transfer> (beta testing)
|
||||
=item B<--transfer>
|
||||
|
||||
Transfer files to remote computers.
|
||||
|
||||
|
@ -3340,9 +3340,9 @@ Shorthand for: B<--transferfile {}>.
|
|||
See also: B<--transferfile>.
|
||||
|
||||
|
||||
=item B<--transferfile> I<filename> (beta testing)
|
||||
=item B<--transferfile> I<filename>
|
||||
|
||||
=item B<--tf> I<filename> (beta testing)
|
||||
=item B<--tf> I<filename>
|
||||
|
||||
Transfer I<filename> to remote computers.
|
||||
|
||||
|
@ -3394,7 +3394,7 @@ See also: B<--workdir> B<--sshlogin> B<--basefile> B<--return>
|
|||
B<--cleanup>
|
||||
|
||||
|
||||
=item B<--trc> I<filename> (beta testing)
|
||||
=item B<--trc> I<filename>
|
||||
|
||||
Transfer, Return, Cleanup. Shorthand for: B<--transfer> B<--return>
|
||||
I<filename> B<--cleanup>
|
||||
|
|
|
@ -261,7 +261,9 @@ More detailed it works like this:
|
|||
cattail ( rm tmpfile; compound decompress ) < tmpfile
|
||||
|
||||
This complex setup is to make sure compress program is only started if
|
||||
there is input.
|
||||
there is input. This means each job will cause 8 processes to run. If
|
||||
combined with B<--keep-order> these processes will run until the job
|
||||
has been printed.
|
||||
|
||||
|
||||
=head2 Wrapping
|
||||
|
|
|
@ -122,7 +122,7 @@ GetOptions(
|
|||
"help" => \$opt::dummy,
|
||||
) || exit(255);
|
||||
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
|
||||
$Global::version = 20220923;
|
||||
$Global::version = 20221022;
|
||||
if($opt::version) { version(); exit 0; }
|
||||
@Global::sortoptions = grep { ! /^-D$/ }
|
||||
shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]);
|
||||
|
|
2
src/sql
2
src/sql
|
@ -667,7 +667,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
|||
exit ($err);
|
||||
|
||||
sub parse_options {
|
||||
$Global::version = 20220923;
|
||||
$Global::version = 20221022;
|
||||
$Global::progname = 'sql';
|
||||
|
||||
# This must be done first as this may exec myself
|
||||
|
|
|
@ -182,8 +182,14 @@ par_failing_compressor() {
|
|||
echo 'Test --tag/--line-buffer/--files in all combinations'
|
||||
echo 'Test working/failing compressor/decompressor in all combinations'
|
||||
echo '(-k is used as a dummy argument)'
|
||||
doit() {
|
||||
# Print something to stdout/stderr
|
||||
echo "$@"
|
||||
echo "$@" >&2
|
||||
}
|
||||
export -f doit
|
||||
stdout parallel -vk --header : --argsep ,,, \
|
||||
parallel -k {tag} {lb} {files} --compress --compress-program {comp} --decompress-program {decomp} echo ::: C={comp},D={decomp} \
|
||||
parallel -k {tag} {lb} {files} --compress --compress-program {comp} --decompress-program {decomp} doit ::: C={comp},D={decomp} \
|
||||
,,, tag --tag -k \
|
||||
,,, lb --line-buffer -k \
|
||||
,,, files --files -k \
|
||||
|
|
|
@ -106,86 +106,118 @@ par_failing_compressor Compress with failing (de)compressor
|
|||
par_failing_compressor Test --tag/--line-buffer/--files in all combinations
|
||||
par_failing_compressor Test working/failing compressor/decompressor in all combinations
|
||||
par_failing_compressor (-k is used as a dummy argument)
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor /tmp/parallel-local-10s-tmpdir/tmpfile
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;true
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
|
||||
par_failing_compressor C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;true,D=cat;false
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
|
||||
par_failing_compressor C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;true
|
||||
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
|
||||
par_failing_compressor C=cat;false,D=cat;false
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor parallel: Error: cat;false failed.
|
||||
par_failing_compressor C=cat;false,D=cat;false
|
||||
par_fifo_under_csh ### Test --fifo under csh
|
||||
par_fifo_under_csh 1048571
|
||||
par_fifo_under_csh 1
|
||||
|
|
Loading…
Reference in a new issue