mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 05:57:54 +00:00
parsort: Fail if TMPDIR does not exist.
This commit is contained in:
parent
35f539696e
commit
373e5cccc9
83
src/parsort
83
src/parsort
|
@ -121,7 +121,7 @@ GetOptions(
|
||||||
"help" => \$opt::dummy,
|
"help" => \$opt::dummy,
|
||||||
) || exit(255);
|
) || exit(255);
|
||||||
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
|
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
|
||||||
$Global::version = 20210622;
|
$Global::version = 20210623;
|
||||||
if($opt::version) { version(); exit 0; }
|
if($opt::version) { version(); exit 0; }
|
||||||
@Global::sortoptions =
|
@Global::sortoptions =
|
||||||
shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]);
|
shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]);
|
||||||
|
@ -174,7 +174,8 @@ sub sort_stdin {
|
||||||
map { mkfifo($_,0600) } @fifos;
|
map { mkfifo($_,0600) } @fifos;
|
||||||
# This trick removes the fifo as soon as it is connected in the other end
|
# This trick removes the fifo as soon as it is connected in the other end
|
||||||
# (rm fifo; ...) < fifo
|
# (rm fifo; ...) < fifo
|
||||||
my @cmd = map { "(rm $_; sort @Global::sortoptions) < $_" } @fifos;
|
my @cmd = (map { "(rm $_; sort @Global::sortoptions) < $_" }
|
||||||
|
map { Q($_) } @fifos);
|
||||||
@cmd = merge(@cmd);
|
@cmd = merge(@cmd);
|
||||||
if(fork) {
|
if(fork) {
|
||||||
} else {
|
} else {
|
||||||
|
@ -196,11 +197,13 @@ sub tmpname {
|
||||||
my($tmpname);
|
my($tmpname);
|
||||||
if(not -w $ENV{'TMPDIR'}) {
|
if(not -w $ENV{'TMPDIR'}) {
|
||||||
if(not -e $ENV{'TMPDIR'}) {
|
if(not -e $ENV{'TMPDIR'}) {
|
||||||
::error("Tmpdir '$ENV{'TMPDIR'}' does not exist.","Try 'mkdir $ENV{'TMPDIR'}'");
|
::error("Tmpdir '$ENV{'TMPDIR'}' does not exist.","Try 'mkdir ".
|
||||||
|
Q($ENV{'TMPDIR'})."'");
|
||||||
} else {
|
} else {
|
||||||
::error("Tmpdir '$ENV{'TMPDIR'}' is not writable.","Try 'chmod +w $ENV{'TMPDIR'}'");
|
::error("Tmpdir '$ENV{'TMPDIR'}' is not writable.","Try 'chmod +w ".
|
||||||
|
Q($ENV{'TMPDIR'})."'");
|
||||||
}
|
}
|
||||||
::wait_and_exit(255);
|
exit(255);
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
$tmpname = $ENV{'TMPDIR'}."/".$name.
|
$tmpname = $ENV{'TMPDIR'}."/".$name.
|
||||||
|
@ -332,6 +335,76 @@ sub Q($) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub status(@) {
|
||||||
|
my @w = @_;
|
||||||
|
my $fh = $Global::status_fd || *STDERR;
|
||||||
|
print $fh map { ($_, "\n") } @w;
|
||||||
|
flush $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub status_no_nl(@) {
|
||||||
|
my @w = @_;
|
||||||
|
my $fh = $Global::status_fd || *STDERR;
|
||||||
|
print $fh @w;
|
||||||
|
flush $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub warning(@) {
|
||||||
|
my @w = @_;
|
||||||
|
my $prog = $Global::progname || "parsort";
|
||||||
|
status_no_nl(map { ($prog, ": Warning: ", $_, "\n"); } @w);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my %warnings;
|
||||||
|
sub warning_once(@) {
|
||||||
|
my @w = @_;
|
||||||
|
my $prog = $Global::progname || "parsort";
|
||||||
|
$warnings{@w}++ or
|
||||||
|
status_no_nl(map { ($prog, ": Warning: ", $_, "\n"); } @w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub error(@) {
|
||||||
|
my @w = @_;
|
||||||
|
my $prog = $Global::progname || "parsort";
|
||||||
|
status(map { ($prog.": Error: ". $_); } @w);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub die_bug($) {
|
||||||
|
my $bugid = shift;
|
||||||
|
print STDERR
|
||||||
|
("$Global::progname: This should not happen. You have found a bug. ",
|
||||||
|
"Please follow\n",
|
||||||
|
"https://www.gnu.org/software/parallel/man.html#REPORTING-BUGS\n",
|
||||||
|
"\n",
|
||||||
|
"Include this in the report:\n",
|
||||||
|
"* The version number: $Global::version\n",
|
||||||
|
"* The bugid: $bugid\n",
|
||||||
|
"* The command line being run\n",
|
||||||
|
"* The files being read (put the files on a webserver if they are big)\n",
|
||||||
|
"\n",
|
||||||
|
"If you get the error on smaller/fewer files, please include those instead.\n");
|
||||||
|
exit(255);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version() {
|
||||||
|
# Returns: N/A
|
||||||
|
print join
|
||||||
|
("\n",
|
||||||
|
"GNU $Global::progname $Global::version",
|
||||||
|
"Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software",
|
||||||
|
"Foundation, Inc.",
|
||||||
|
"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>",
|
||||||
|
"This is free software: you are free to change and redistribute it.",
|
||||||
|
"GNU $Global::progname comes with no warranty.",
|
||||||
|
"",
|
||||||
|
"Web site: https://www.gnu.org/software/${Global::progname}\n",
|
||||||
|
"When using programs that use GNU Parallel to process data for publication",
|
||||||
|
"please cite as described in 'parallel --citation'.\n",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if(@ARGV) {
|
if(@ARGV) {
|
||||||
sort_files(@ARGV);
|
sort_files(@ARGV);
|
||||||
} elsif(length $opt::files0_from) {
|
} elsif(length $opt::files0_from) {
|
||||||
|
|
|
@ -102,6 +102,16 @@ par_dummy() {
|
||||||
# --files0-from=$files0
|
# --files0-from=$files0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_tmpdir() {
|
||||||
|
export TMPDIR="/tmp/parsort dir"
|
||||||
|
rm -rf "$TMPDIR"
|
||||||
|
echo Fail: no such dir | parsort
|
||||||
|
mkdir "$TMPDIR"
|
||||||
|
echo OK | parsort
|
||||||
|
chmod -w "$TMPDIR"
|
||||||
|
echo Fail: writeable | parsort
|
||||||
|
}
|
||||||
|
|
||||||
setup
|
setup
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
|
|
Loading…
Reference in a new issue