Skip to content

Commit 11fe58c

Browse files
committed
Merge #139541: coreutils: 8.32 -> 9.0 (into staging)
2 parents 9c3f895 + b42fa98 commit 11fe58c

File tree

3 files changed

+119
-108
lines changed

3 files changed

+119
-108
lines changed

pkgs/tools/misc/coreutils/default.nix

+11-8
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ with lib;
2222

2323
stdenv.mkDerivation (rec {
2424
pname = "coreutils";
25-
version = "8.32";
25+
version = "9.0";
2626

2727
src = fetchurl {
2828
url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
29-
sha256 = "sha256-RFjY3nhJ30TMqxXhaxVIsoUiTbul8I+sBwwcDgvMTPo=";
29+
sha256 = "sha256-zjCs30pBvFuzDdlV6eqnX6IWtOPesIiJ7TJDPHs7l84=";
3030
};
3131

32-
patches = [ ./sys-getdents-undeclared.patch ]
32+
patches = [ ./fix-chmod-exit-code.patch ]
3333
++ optional stdenv.hostPlatform.isCygwin ./coreutils-8.23-4.cygwin.patch
3434
# fix gnulib tests on 32-bit ARM. Included on coreutils master.
3535
# https://lists.gnu.org/r/bug-gnulib/2020-08/msg00225.html
@@ -74,23 +74,26 @@ stdenv.mkDerivation (rec {
7474
sed '2i print "Skipping id zero test"; exit 77' -i ./tests/id/zero.sh
7575
sed '2i print "Skipping misc help-versiob test"; exit 77' -i ./tests/misc/help-version.sh
7676
sed '2i print "Skipping chown separator test"; exit 77' -i ./tests/chown/separator.sh
77-
'' + optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
77+
'' + (optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
7878
''
7979
echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
8080
echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c
8181
''
82-
]);
82+
])) + (optionalString stdenv.isAarch64 ''
83+
sed '2i print "Skipping tail assert test"; exit 77' -i ./tests/tail-2/assert.sh
84+
'');
8385

8486
outputs = [ "out" "info" ];
8587

86-
nativeBuildInputs = [ perl xz.bin ]
87-
++ optionals stdenv.hostPlatform.isCygwin [ autoreconfHook texinfo ]; # due to patch
88+
nativeBuildInputs = [ perl xz.bin autoreconfHook ] # autoreconfHook is due to patch, normally only needed for cygwin
89+
++ optionals stdenv.hostPlatform.isCygwin [ texinfo ]; # due to patch
8890
configureFlags = [ "--with-packager=https://NixOS.org" ]
8991
++ optional (singleBinary != false)
9092
("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
9193
++ optional withOpenssl "--with-openssl"
9294
++ optional stdenv.hostPlatform.isSunOS "ac_cv_func_inotify_init=no"
9395
++ optional withPrefix "--program-prefix=g"
96+
++ optional stdenv.isDarwin "--disable-nls" # the shipped configure script doesn't enable nls, but using autoreconfHook does so which breaks the build
9497
++ optionals (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc == "glibc") [
9598
# TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
9699
# don't know why it is not properly detected cross building with glibc.
@@ -152,7 +155,7 @@ stdenv.mkDerivation (rec {
152155
license = licenses.gpl3Plus;
153156
platforms = platforms.unix ++ platforms.windows;
154157
priority = 10;
155-
maintainers = [ maintainers.eelco ];
158+
maintainers = [ maintainers.eelco maintainers.das_j ];
156159
};
157160
} // optionalAttrs stdenv.hostPlatform.isMusl {
158161
# Work around a bogus warning in conjunction with musl.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
From e8b56ebd536e82b15542a00c888109471936bfda Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
3+
Date: Fri, 24 Sep 2021 20:57:41 +0100
4+
Subject: [PATCH] chmod: fix exit status when ignoring symlinks
5+
6+
* src/chmod.c: Reorder enum so CH_NOT_APPLIED
7+
can be treated as a non error.
8+
* tests/chmod/ignore-symlink.sh: A new test.
9+
* tests/local.mk: Reference the new test.
10+
* NEWS: Mention the bug fix.
11+
Fixes https://bugs.gnu.org/50784
12+
---
13+
NEWS | 6 ++++++
14+
src/chmod.c | 4 ++--
15+
tests/chmod/ignore-symlink.sh | 31 +++++++++++++++++++++++++++++++
16+
tests/local.mk | 1 +
17+
4 files changed, 40 insertions(+), 2 deletions(-)
18+
create mode 100755 tests/chmod/ignore-symlink.sh
19+
20+
diff --git a/NEWS b/NEWS
21+
index a1470a7d7..1cb3c28a1 100644
22+
--- a/NEWS
23+
+++ b/NEWS
24+
@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*-
25+
26+
* Noteworthy changes in release ?.? (????-??-??) [?]
27+
28+
+** Bug fixes
29+
+
30+
+ chmod -R no longer exits with error status when encountering symlinks.
31+
+ All files would be processed correctly, but the exit status was incorrect.
32+
+ [bug introduced in coreutils-9.0]
33+
+
34+
35+
* Noteworthy changes in release 9.0 (2021-09-24) [stable]
36+
37+
diff --git a/src/chmod.c b/src/chmod.c
38+
index 37b04f500..57ac47f33 100644
39+
--- a/src/chmod.c
40+
+++ b/src/chmod.c
41+
@@ -44,8 +44,8 @@ struct change_status
42+
enum
43+
{
44+
CH_NO_STAT,
45+
- CH_NOT_APPLIED,
46+
CH_FAILED,
47+
+ CH_NOT_APPLIED,
48+
CH_NO_CHANGE_REQUESTED,
49+
CH_SUCCEEDED
50+
}
51+
@@ -322,7 +322,7 @@ process_file (FTS *fts, FTSENT *ent)
52+
if ( ! recurse)
53+
fts_set (fts, ent, FTS_SKIP);
54+
55+
- return CH_NO_CHANGE_REQUESTED <= ch.status;
56+
+ return CH_NOT_APPLIED <= ch.status;
57+
}
58+
59+
/* Recursively change the modes of the specified FILES (the last entry
60+
diff --git a/tests/chmod/ignore-symlink.sh b/tests/chmod/ignore-symlink.sh
61+
new file mode 100755
62+
index 000000000..5ce3de816
63+
--- /dev/null
64+
+++ b/tests/chmod/ignore-symlink.sh
65+
@@ -0,0 +1,31 @@
66+
+#!/bin/sh
67+
+# Test for proper exit code of chmod on a processed symlink.
68+
+
69+
+# Copyright (C) 2021 Free Software Foundation, Inc.
70+
+
71+
+# This program is free software: you can redistribute it and/or modify
72+
+# it under the terms of the GNU General Public License as published by
73+
+# the Free Software Foundation, either version 3 of the License, or
74+
+# (at your option) any later version.
75+
+
76+
+# This program is distributed in the hope that it will be useful,
77+
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
78+
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
79+
+# GNU General Public License for more details.
80+
+
81+
+# You should have received a copy of the GNU General Public License
82+
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
83+
+
84+
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
85+
+print_ver_ chmod
86+
+
87+
+mkdir dir || framework_failure_
88+
+touch dir/f || framework_failure_
89+
+ln -s f dir/l || framework_failure_
90+
+
91+
+# This operation ignores symlinks but should succeed.
92+
+chmod u+w -R dir 2> out || fail=1
93+
+
94+
+compare /dev/null out || fail=1
95+
+
96+
+Exit $fail
97+
diff --git a/tests/local.mk b/tests/local.mk
98+
index 228d0e368..b5b893fb7 100644
99+
--- a/tests/local.mk
100+
+++ b/tests/local.mk
101+
@@ -456,6 +456,7 @@ all_tests = \
102+
tests/chmod/c-option.sh \
103+
tests/chmod/equal-x.sh \
104+
tests/chmod/equals.sh \
105+
+ tests/chmod/ignore-symlink.sh \
106+
tests/chmod/inaccessible.sh \
107+
tests/chmod/octal.sh \
108+
tests/chmod/setgid.sh \

pkgs/tools/misc/coreutils/sys-getdents-undeclared.patch

-100
This file was deleted.

0 commit comments

Comments
 (0)