mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-16 10:43:27 +00:00
Merge #139541: coreutils: 8.32 -> 9.0 (into staging)
This commit is contained in:
commit
11fe58c9a3
@ -22,14 +22,14 @@ with lib;
|
||||
|
||||
stdenv.mkDerivation (rec {
|
||||
pname = "coreutils";
|
||||
version = "8.32";
|
||||
version = "9.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
|
||||
sha256 = "sha256-RFjY3nhJ30TMqxXhaxVIsoUiTbul8I+sBwwcDgvMTPo=";
|
||||
sha256 = "sha256-zjCs30pBvFuzDdlV6eqnX6IWtOPesIiJ7TJDPHs7l84=";
|
||||
};
|
||||
|
||||
patches = [ ./sys-getdents-undeclared.patch ]
|
||||
patches = [ ./fix-chmod-exit-code.patch ]
|
||||
++ optional stdenv.hostPlatform.isCygwin ./coreutils-8.23-4.cygwin.patch
|
||||
# fix gnulib tests on 32-bit ARM. Included on coreutils master.
|
||||
# https://lists.gnu.org/r/bug-gnulib/2020-08/msg00225.html
|
||||
@ -74,23 +74,26 @@ stdenv.mkDerivation (rec {
|
||||
sed '2i print "Skipping id zero test"; exit 77' -i ./tests/id/zero.sh
|
||||
sed '2i print "Skipping misc help-versiob test"; exit 77' -i ./tests/misc/help-version.sh
|
||||
sed '2i print "Skipping chown separator test"; exit 77' -i ./tests/chown/separator.sh
|
||||
'' + optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
|
||||
'' + (optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
|
||||
''
|
||||
echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
|
||||
echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c
|
||||
''
|
||||
]);
|
||||
])) + (optionalString stdenv.isAarch64 ''
|
||||
sed '2i print "Skipping tail assert test"; exit 77' -i ./tests/tail-2/assert.sh
|
||||
'');
|
||||
|
||||
outputs = [ "out" "info" ];
|
||||
|
||||
nativeBuildInputs = [ perl xz.bin ]
|
||||
++ optionals stdenv.hostPlatform.isCygwin [ autoreconfHook texinfo ]; # due to patch
|
||||
nativeBuildInputs = [ perl xz.bin autoreconfHook ] # autoreconfHook is due to patch, normally only needed for cygwin
|
||||
++ optionals stdenv.hostPlatform.isCygwin [ texinfo ]; # due to patch
|
||||
configureFlags = [ "--with-packager=https://NixOS.org" ]
|
||||
++ optional (singleBinary != false)
|
||||
("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
|
||||
++ optional withOpenssl "--with-openssl"
|
||||
++ optional stdenv.hostPlatform.isSunOS "ac_cv_func_inotify_init=no"
|
||||
++ optional withPrefix "--program-prefix=g"
|
||||
++ optional stdenv.isDarwin "--disable-nls" # the shipped configure script doesn't enable nls, but using autoreconfHook does so which breaks the build
|
||||
++ optionals (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc == "glibc") [
|
||||
# TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
|
||||
# don't know why it is not properly detected cross building with glibc.
|
||||
@ -152,7 +155,7 @@ stdenv.mkDerivation (rec {
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = platforms.unix ++ platforms.windows;
|
||||
priority = 10;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
maintainers = [ maintainers.eelco maintainers.das_j ];
|
||||
};
|
||||
} // optionalAttrs stdenv.hostPlatform.isMusl {
|
||||
# Work around a bogus warning in conjunction with musl.
|
||||
|
108
pkgs/tools/misc/coreutils/fix-chmod-exit-code.patch
Normal file
108
pkgs/tools/misc/coreutils/fix-chmod-exit-code.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From e8b56ebd536e82b15542a00c888109471936bfda Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Fri, 24 Sep 2021 20:57:41 +0100
|
||||
Subject: [PATCH] chmod: fix exit status when ignoring symlinks
|
||||
|
||||
* src/chmod.c: Reorder enum so CH_NOT_APPLIED
|
||||
can be treated as a non error.
|
||||
* tests/chmod/ignore-symlink.sh: A new test.
|
||||
* tests/local.mk: Reference the new test.
|
||||
* NEWS: Mention the bug fix.
|
||||
Fixes https://bugs.gnu.org/50784
|
||||
---
|
||||
NEWS | 6 ++++++
|
||||
src/chmod.c | 4 ++--
|
||||
tests/chmod/ignore-symlink.sh | 31 +++++++++++++++++++++++++++++++
|
||||
tests/local.mk | 1 +
|
||||
4 files changed, 40 insertions(+), 2 deletions(-)
|
||||
create mode 100755 tests/chmod/ignore-symlink.sh
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index a1470a7d7..1cb3c28a1 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
* Noteworthy changes in release ?.? (????-??-??) [?]
|
||||
|
||||
+** Bug fixes
|
||||
+
|
||||
+ chmod -R no longer exits with error status when encountering symlinks.
|
||||
+ All files would be processed correctly, but the exit status was incorrect.
|
||||
+ [bug introduced in coreutils-9.0]
|
||||
+
|
||||
|
||||
* Noteworthy changes in release 9.0 (2021-09-24) [stable]
|
||||
|
||||
diff --git a/src/chmod.c b/src/chmod.c
|
||||
index 37b04f500..57ac47f33 100644
|
||||
--- a/src/chmod.c
|
||||
+++ b/src/chmod.c
|
||||
@@ -44,8 +44,8 @@ struct change_status
|
||||
enum
|
||||
{
|
||||
CH_NO_STAT,
|
||||
- CH_NOT_APPLIED,
|
||||
CH_FAILED,
|
||||
+ CH_NOT_APPLIED,
|
||||
CH_NO_CHANGE_REQUESTED,
|
||||
CH_SUCCEEDED
|
||||
}
|
||||
@@ -322,7 +322,7 @@ process_file (FTS *fts, FTSENT *ent)
|
||||
if ( ! recurse)
|
||||
fts_set (fts, ent, FTS_SKIP);
|
||||
|
||||
- return CH_NO_CHANGE_REQUESTED <= ch.status;
|
||||
+ return CH_NOT_APPLIED <= ch.status;
|
||||
}
|
||||
|
||||
/* Recursively change the modes of the specified FILES (the last entry
|
||||
diff --git a/tests/chmod/ignore-symlink.sh b/tests/chmod/ignore-symlink.sh
|
||||
new file mode 100755
|
||||
index 000000000..5ce3de816
|
||||
--- /dev/null
|
||||
+++ b/tests/chmod/ignore-symlink.sh
|
||||
@@ -0,0 +1,31 @@
|
||||
+#!/bin/sh
|
||||
+# Test for proper exit code of chmod on a processed symlink.
|
||||
+
|
||||
+# Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software: you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation, either version 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
+
|
||||
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
+print_ver_ chmod
|
||||
+
|
||||
+mkdir dir || framework_failure_
|
||||
+touch dir/f || framework_failure_
|
||||
+ln -s f dir/l || framework_failure_
|
||||
+
|
||||
+# This operation ignores symlinks but should succeed.
|
||||
+chmod u+w -R dir 2> out || fail=1
|
||||
+
|
||||
+compare /dev/null out || fail=1
|
||||
+
|
||||
+Exit $fail
|
||||
diff --git a/tests/local.mk b/tests/local.mk
|
||||
index 228d0e368..b5b893fb7 100644
|
||||
--- a/tests/local.mk
|
||||
+++ b/tests/local.mk
|
||||
@@ -456,6 +456,7 @@ all_tests = \
|
||||
tests/chmod/c-option.sh \
|
||||
tests/chmod/equal-x.sh \
|
||||
tests/chmod/equals.sh \
|
||||
+ tests/chmod/ignore-symlink.sh \
|
||||
tests/chmod/inaccessible.sh \
|
||||
tests/chmod/octal.sh \
|
||||
tests/chmod/setgid.sh \
|
@ -1,100 +0,0 @@
|
||||
From 10fcb97bd728f09d4a027eddf8ad2900f0819b0a Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Thu, 5 Mar 2020 17:25:29 -0800
|
||||
Subject: ls: restore 8.31 behavior on removed directories
|
||||
|
||||
* NEWS: Mention this.
|
||||
* src/ls.c: Do not include <sys/sycall.h>
|
||||
(print_dir): Don't worry about whether the directory is removed.
|
||||
* tests/ls/removed-directory.sh: Adjust to match new (i.e., old)
|
||||
behavior.
|
||||
---
|
||||
NEWS (removed diff in nixpkgs)| 6 ++++++
|
||||
src/ls.c | 22 ----------------------
|
||||
tests/ls/removed-directory.sh | 10 ++--------
|
||||
3 files changed, 8 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/src/ls.c b/src/ls.c
|
||||
index 24b983287..4acf5f44d 100644
|
||||
--- a/src/ls.c
|
||||
+++ b/src/ls.c
|
||||
@@ -49,10 +49,6 @@
|
||||
# include <sys/ptem.h>
|
||||
#endif
|
||||
|
||||
-#ifdef __linux__
|
||||
-# include <sys/syscall.h>
|
||||
-#endif
|
||||
-
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <setjmp.h>
|
||||
@@ -2896,7 +2892,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
||||
struct dirent *next;
|
||||
uintmax_t total_blocks = 0;
|
||||
static bool first = true;
|
||||
- bool found_any_entries = false;
|
||||
|
||||
errno = 0;
|
||||
dirp = opendir (name);
|
||||
@@ -2972,7 +2967,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
||||
next = readdir (dirp);
|
||||
if (next)
|
||||
{
|
||||
- found_any_entries = true;
|
||||
if (! file_ignored (next->d_name))
|
||||
{
|
||||
enum filetype type = unknown;
|
||||
@@ -3018,22 +3012,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
||||
if (errno != EOVERFLOW)
|
||||
break;
|
||||
}
|
||||
-#ifdef __linux__
|
||||
- else if (! found_any_entries)
|
||||
- {
|
||||
- /* If readdir finds no directory entries at all, not even "." or
|
||||
- "..", then double check that the directory exists. */
|
||||
- if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1
|
||||
- && errno != EINVAL)
|
||||
- {
|
||||
- /* We exclude EINVAL as that pertains to buffer handling,
|
||||
- and we've passed NULL as the buffer for simplicity.
|
||||
- ENOENT is returned if appropriate before buffer handling. */
|
||||
- file_failure (command_line_arg, _("reading directory %s"), name);
|
||||
- }
|
||||
- break;
|
||||
- }
|
||||
-#endif
|
||||
else
|
||||
break;
|
||||
|
||||
diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh
|
||||
index e8c835dab..fe8f929a1 100755
|
||||
--- a/tests/ls/removed-directory.sh
|
||||
+++ b/tests/ls/removed-directory.sh
|
||||
@@ -26,20 +26,14 @@ case $host_triplet in
|
||||
*) skip_ 'non linux kernel' ;;
|
||||
esac
|
||||
|
||||
-LS_FAILURE=2
|
||||
-
|
||||
-cat <<\EOF >exp-err || framework_failure_
|
||||
-ls: reading directory '.': No such file or directory
|
||||
-EOF
|
||||
-
|
||||
cwd=$(pwd)
|
||||
mkdir d || framework_failure_
|
||||
cd d || framework_failure_
|
||||
rmdir ../d || framework_failure_
|
||||
|
||||
-returns_ $LS_FAILURE ls >../out 2>../err || fail=1
|
||||
+ls >../out 2>../err || fail=1
|
||||
cd "$cwd" || framework_failure_
|
||||
compare /dev/null out || fail=1
|
||||
-compare exp-err err || fail=1
|
||||
+compare /dev/null err || fail=1
|
||||
|
||||
Exit $fail
|
||||
--
|
||||
cgit v1.2.1
|
||||
|
Loading…
Reference in New Issue
Block a user