forked from pool/coreutils
Accepting request 318007 from Base:System
Automatic submission by obs-autosubmit OBS-URL: https://build.opensuse.org/request/show/318007 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/coreutils?expand=0&rev=114
This commit is contained in:
parent
aa598c9778
commit
97445f35bb
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ec43ca5bcfc62242accb46b7f121f6b684ee21ecd7d075059bf650ff9e37b82d
|
||||
size 5375612
|
@ -1,17 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.15 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJTyaijAAoJEN9v2XEwYDfZlPMP/jFS+l7u59zNRnPQfUrrcNmN
|
||||
/mWwAEcxzGwZlyPQ9Fr6HrSryOKiPwmkmOnhsHbXjQZdi7MTd8A8TfQTLyZvLRvO
|
||||
DJJ0HHqtGojLYFij01ZCtKHOIgry5VqhVHkauIp14+OW5+Bsd/bpfhwAMpNVqFPq
|
||||
Txu5BvPBh6z/ouTdynuwthRv+iCbWRYvWDIaF1jdfhE1jLcIeZmdZ9xNxE7IDvsU
|
||||
uSxQoLQrRybfEoqFNrOXc77n5O+JJnIbqpJAJk0QYugA3q2bgE6sdoEr/SUzZy+k
|
||||
BkEdIfTdZrMMe2S91uh8WSLQrgS9bqD3YLdt75QTYV+d0fPOyfdSwLenMrqS62nV
|
||||
SSJZNXY8zWTye79WWz0tyWoeosE+OE/xE3JNzjxPLy6q9BaoP3eKAMo//I0MH9uT
|
||||
Ry+8gOu4BXkT7BMsTVRr3/mr2IIhlHEhjhDL6/ISTEB28fAwLge4a6okD6S1dTSD
|
||||
YWKz9pzml72pFDo/XAntKsTmbMnHcw3z3IV62zlIErawO2LHSiEUyk11wUJs0dk8
|
||||
QVmFC6GP/zQ5qy9rHa3xogxdAU2K4ihtC3ZvaaZdU8TOxt/zJDb6rHsoRGuP+g3D
|
||||
cB1HSepPVzt3rbb3tmA9AnXjIqmXN+Xp8ha5xTdqhHjVGQBzIs8kQIQnPV40mY43
|
||||
JS25ZfB2PCICITMbWyq7
|
||||
=fAoz
|
||||
-----END PGP SIGNATURE-----
|
3
coreutils-8.24.tar.xz
Normal file
3
coreutils-8.24.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a2d75286a4b9ef3a13039c2da3868a61be4ee9f17d8ae380a35a97e506972170
|
||||
size 5649896
|
17
coreutils-8.24.tar.xz.sig
Normal file
17
coreutils-8.24.tar.xz.sig
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1
|
||||
|
||||
iQIcBAABAgAGBQJVlwFSAAoJEN9v2XEwYDfZ3IwP/3KOp/R3kHQMn4XKlecernhK
|
||||
1iR0sh13gVhf4gVm/TbzLYmjSnWZzxQTs2WfyEZvbsm7pjKW0ulT7hqM81tKBkNH
|
||||
7VpOUWVhvQUjwLGbV3lQsPrcshFejkWq3noHRIoTR6TsbwSyNqJ67wR/Ix+aDDBR
|
||||
vfrCnG544+Dpl2RWF6bvib2+moWy+ztMghkiIONcqDg2KNhTB6V45CZ64Vw2S/1Z
|
||||
88kSfd48D88wk06yKtoHck4A7DNqNLE+QHKbNy2BtTkvfT4x00XYRESPv/P1wKMk
|
||||
n7mmJHx6idB3cvpm1vk0xiA8Xa3h1ot8w6a47NY48B8/UuwE6AROReWAwXAVOAvW
|
||||
lInr4YP9YTYLAoUsH7RhrtFVUwIBZme6rbYeKvaU59LuVgQBL6eG5zHq5a45sCHg
|
||||
8Bezfx5eXak4PClS36TguN350l5wbfBqiCxfqy05g+r0xYgTaFWKujmlP8c+8AN3
|
||||
nOaNle4LUioC6RIvoZu/h/nhwYl6/HIRt/dlZ5/TRvs+YKo58Y8lXAKcWixHfk7s
|
||||
Rx/NZWOMwhdyKqjRDADflauzpI/YboGkafozzHkIZg+uBd3zgTAAfUCvEHSGpKvw
|
||||
pVlXIH4VN2gOfNroDMUAJN2UiIxp4Weukfk/gkMFAIlxmjZAcZ7wLKjABf4Vqeq+
|
||||
Iubv9MiiqMa1t/MsDDb5
|
||||
=Zz9/
|
||||
-----END PGP SIGNATURE-----
|
@ -36,4 +36,4 @@ Index: src/local.mk
|
||||
+
|
||||
# for various ACL functions
|
||||
copy_ldadd += $(LIB_ACL)
|
||||
src_ls_LDADD += $(LIB_ACL)
|
||||
src_ls_LDADD += $(LIB_HAS_ACL)
|
||||
|
@ -1,455 +0,0 @@
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24):
|
||||
# https://git.sv.gnu.org/cgit/coreutils.git/commit/?id=0cf7b1d9
|
||||
# Fixes a regression in chroot which did not chdir("/") in all cases.
|
||||
|
||||
From 0c7abd9e8e1d1725ae600daa3ac9bbf8333f93c9 Mon Sep 17 00:00:00 2001
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
Date: Fri, 1 Aug 2014 02:07:33 +0200
|
||||
Subject: [PATCH] chroot: perform chdir("/") again unless new --skip-chdir is
|
||||
specified
|
||||
|
||||
Since commit v8.22-94-g99960ee, chroot(1) skips the chroot(2) syscall
|
||||
for "/" arguments (and synonyms). The problem is that it also skips
|
||||
the following chdir("/") call in that case. The latter breaks existing
|
||||
scripts which expect "/" to be the working directory inside the chroot.
|
||||
While the first part of the change - i.e., skipping chroot("/") - is
|
||||
okay for consistency with systems where it might succeed for a non-root
|
||||
user, the second part might be malicious, e.g.
|
||||
|
||||
cd /home/user && chroot '/' bin/foo
|
||||
|
||||
In the "best" case, chroot(1) could not execute 'bin/foo' with ENOENT,
|
||||
but in the worst case, chroot(1) would execute '/home/user/bin/foo' in
|
||||
the case that exists - instead of '/bin/foo'.
|
||||
|
||||
Revert that second part of the patch, i.e., perform the chdir("/)
|
||||
in the common case again - unless the new --skip-chdir option is
|
||||
specified. Restrict this new option to the case of "/" arguments.
|
||||
|
||||
* src/chroot.c (SKIP_CHDIR): Add enum.
|
||||
(long_opts): Add entry for the new --skip-chdir option.
|
||||
(usage): Add --skip-chdir option, and while at it, move the other
|
||||
to options into alphabetical order.
|
||||
(main): Accept the above new option, allowing it only in the case
|
||||
when NEWROOT is the old "/".
|
||||
Move down the chdir() call after the if-clause to ensure it is
|
||||
run in any case - unless --skip-chdir is specified.
|
||||
Add a 'newroot' variable for the new root directory as it is used
|
||||
in a couple of places now.
|
||||
* tests/misc/chroot-fail.sh: Invert the last tests which check the
|
||||
working directory of the execvp()ed program when a "/"-like
|
||||
argument was passed: now expect it to be "/" - unless --skip-chdir
|
||||
is given.
|
||||
* doc/coreutils.texi (chroot invocation): Document the new option.
|
||||
Document that chroot(1) usually calls chdir("/") unless the new
|
||||
--skip-chdir option is specified. Sort options.
|
||||
* NEWS (Changes in behavior): Mention the fix.
|
||||
(New features): Mention the new option.
|
||||
* init.cfg (nonroot_has_perm_): Add chroot's new --skip-chdir option.
|
||||
* tests/cp/preserve-gid.sh (t1): Likewise.
|
||||
* tests/cp/special-bits.sh: Likewise.
|
||||
* tests/id/setgid.sh: Likewise.
|
||||
* tests/misc/truncate-owned-by-other.sh: Likewise.
|
||||
* tests/mv/sticky-to-xpart.sh: Likewise.
|
||||
* tests/rm/fail-2eperm.sh: Likewise.
|
||||
* tests/rm/no-give-up.sh: Likewise.
|
||||
* tests/touch/now-owned-by-other.sh: Likewise.
|
||||
|
||||
Reported by Andreas Schwab in http://bugs.gnu.org/18062
|
||||
---
|
||||
NEWS | 13 +++++++++++
|
||||
doc/coreutils.texi | 36 +++++++++++++++++++++-----------
|
||||
init.cfg | 3 +-
|
||||
src/chroot.c | 38 ++++++++++++++++++++++++++--------
|
||||
tests/cp/preserve-gid.sh | 3 +-
|
||||
tests/cp/special-bits.sh | 3 +-
|
||||
tests/id/setgid.sh | 8 +++----
|
||||
tests/misc/chroot-fail.sh | 23 +++++++++++++++++---
|
||||
tests/misc/truncate-owned-by-other.sh | 2 -
|
||||
tests/mv/sticky-to-xpart.sh | 5 ++--
|
||||
tests/rm/fail-2eperm.sh | 6 +++--
|
||||
tests/rm/no-give-up.sh | 2 -
|
||||
tests/touch/now-owned-by-other.sh | 2 -
|
||||
13 files changed, 106 insertions(+), 38 deletions(-)
|
||||
|
||||
Index: NEWS
|
||||
===================================================================
|
||||
--- NEWS.orig
|
||||
+++ NEWS
|
||||
@@ -180,6 +180,19 @@ GNU coreutils NEWS
|
||||
--format=%T now reports the file system type, and tail -f now uses inotify,
|
||||
rather than the default of issuing a warning and reverting to polling.
|
||||
|
||||
+** New features
|
||||
+
|
||||
+ chroot accepts the new --skip-chdir option to not change the working directory
|
||||
+ to "/" after changing into the chroot(2) jail, thus retaining the current wor-
|
||||
+ king directory. The new option is only permitted if the new root directory is
|
||||
+ the old "/", and therefore is useful with the --group and --userspec options.
|
||||
+
|
||||
+** Changes in behavior
|
||||
+
|
||||
+ chroot changes the current directory to "/" in again - unless the above new
|
||||
+ --skip-chdir option is specified.
|
||||
+ [bug introduced in coreutils-8.23]
|
||||
+
|
||||
|
||||
* Noteworthy changes in release 8.22 (2013-12-13) [stable]
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -16074,7 +16074,10 @@ On many systems, only the super-user can
|
||||
some systems (e.g., FreeBSD) can be configured to allow certain regular
|
||||
users to use the @code{chroot} system call, and hence to run this program.
|
||||
Also, on Cygwin, anyone can run the @command{chroot} command, because the
|
||||
-underlying function is non-privileged due to lack of support in MS-Windows.}
|
||||
+underlying function is non-privileged due to lack of support in MS-Windows.
|
||||
+Furthermore, the @command{chroot} command avoids the @code{chroot} system call
|
||||
+when @var{newroot} is identical to the old @file{/} directory for consistency
|
||||
+with systems where this is allowed for non-privileged users.}.
|
||||
Synopses:
|
||||
|
||||
@example
|
||||
@@ -16084,10 +16087,11 @@ chroot @var{option}
|
||||
|
||||
Ordinarily, file names are looked up starting at the root of the
|
||||
directory structure, i.e., @file{/}. @command{chroot} changes the root to
|
||||
-the directory @var{newroot} (which must exist) and then runs
|
||||
-@var{command} with optional @var{args}. If @var{command} is not
|
||||
-specified, the default is the value of the @env{SHELL} environment
|
||||
-variable or @command{/bin/sh} if not set, invoked with the @option{-i} option.
|
||||
+the directory @var{newroot} (which must exist), then changes the working
|
||||
+directory to @file{/}, and finally runs @var{command} with optional @var{args}.
|
||||
+If @var{command} is not specified, the default is the value of the @env{SHELL}
|
||||
+environment variable or @command{/bin/sh} if not set, invoked with the
|
||||
+@option{-i} option.
|
||||
@var{command} must not be a special built-in utility
|
||||
(@pxref{Special built-in utilities}).
|
||||
|
||||
@@ -16096,6 +16100,14 @@ Options must precede operands.
|
||||
|
||||
@table @samp
|
||||
|
||||
+@item --groups=@var{groups}
|
||||
+@opindex --groups
|
||||
+Use this option to override the supplementary @var{groups} to be
|
||||
+used by the new process.
|
||||
+The items in the list (names or numeric IDs) must be separated by commas.
|
||||
+Use @samp{--groups=''} to disable the supplementary group look-up
|
||||
+implicit in the @option{--userspec} option.
|
||||
+
|
||||
@item --userspec=@var{user}[:@var{group}]
|
||||
@opindex --userspec
|
||||
By default, @var{command} is run with the same credentials
|
||||
@@ -16106,13 +16118,13 @@ If a @var{user} is specified then the su
|
||||
are set according to the system defined list for that user,
|
||||
unless overridden with the @option{--groups} option.
|
||||
|
||||
-@item --groups=@var{groups}
|
||||
-@opindex --groups
|
||||
-Use this option to override the supplementary @var{groups} to be
|
||||
-used by the new process.
|
||||
-The items in the list (names or numeric IDs) must be separated by commas.
|
||||
-Use @samp{--groups=''} to disable the supplementary group look-up
|
||||
-implicit in the @option{--userspec} option.
|
||||
+@item --skip-chdir
|
||||
+@opindex --skip-chdir
|
||||
+Use this option to not change the working directory to @file{/} after changing
|
||||
+the root directory to @var{newroot}, i.e., inside the chroot.
|
||||
+This option is only permitted when @var{newroot} is the old @file{/} directory,
|
||||
+and therefore is mostly useful together with the @option{--groups} and
|
||||
+@option{--userspec} options to retain the previous working directory.
|
||||
|
||||
@end table
|
||||
|
||||
Index: init.cfg
|
||||
===================================================================
|
||||
--- init.cfg.orig
|
||||
+++ init.cfg
|
||||
@@ -400,7 +400,8 @@ nonroot_has_perm_()
|
||||
require_built_ chroot
|
||||
|
||||
local rm_version=$(
|
||||
- chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" rm --version |
|
||||
+ chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+ rm --version |
|
||||
sed -n '1s/.* //p'
|
||||
)
|
||||
case ":$rm_version:" in
|
||||
Index: src/chroot.c
|
||||
===================================================================
|
||||
--- src/chroot.c.orig
|
||||
+++ src/chroot.c
|
||||
@@ -49,13 +49,15 @@ static inline bool gid_unset (gid_t gid)
|
||||
enum
|
||||
{
|
||||
GROUPS = UCHAR_MAX + 1,
|
||||
- USERSPEC
|
||||
+ USERSPEC,
|
||||
+ SKIP_CHDIR
|
||||
};
|
||||
|
||||
static struct option const long_opts[] =
|
||||
{
|
||||
{"groups", required_argument, NULL, GROUPS},
|
||||
{"userspec", required_argument, NULL, USERSPEC},
|
||||
+ {"skip-chdir", no_argument, NULL, SKIP_CHDIR},
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
{NULL, 0, NULL, 0}
|
||||
@@ -194,9 +196,14 @@ Run COMMAND with root directory set to N
|
||||
"), stdout);
|
||||
|
||||
fputs (_("\
|
||||
- --userspec=USER:GROUP specify user and group (ID or name) to use\n\
|
||||
--groups=G_LIST specify supplementary groups as g1,g2,..,gN\n\
|
||||
"), stdout);
|
||||
+ fputs (_("\
|
||||
+ --userspec=USER:GROUP specify user and group (ID or name) to use\n\
|
||||
+"), stdout);
|
||||
+ printf (_("\
|
||||
+ --skip-chdir do not change working directory to %s\n\
|
||||
+"), quote ("/"));
|
||||
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
@@ -218,6 +225,7 @@ main (int argc, char **argv)
|
||||
char *userspec = NULL;
|
||||
char const *username = NULL;
|
||||
char const *groups = NULL;
|
||||
+ bool skip_chdir = false;
|
||||
|
||||
/* Parsed user and group IDs. */
|
||||
uid_t uid = -1;
|
||||
@@ -254,6 +262,10 @@ main (int argc, char **argv)
|
||||
groups = optarg;
|
||||
break;
|
||||
|
||||
+ case SKIP_CHDIR:
|
||||
+ skip_chdir = true;
|
||||
+ break;
|
||||
+
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||
@@ -269,9 +281,19 @@ main (int argc, char **argv)
|
||||
usage (EXIT_CANCELED);
|
||||
}
|
||||
|
||||
+ char const *newroot = argv[optind];
|
||||
+ bool is_oldroot = is_root (newroot);
|
||||
+
|
||||
+ if (! is_oldroot && skip_chdir)
|
||||
+ {
|
||||
+ error (0, 0, _("option --skip-chdir only permitted if NEWROOT is old %s"),
|
||||
+ quote ("/"));
|
||||
+ usage (EXIT_CANCELED);
|
||||
+ }
|
||||
+
|
||||
/* Only do chroot specific actions if actually changing root.
|
||||
The main difference here is that we don't change working dir. */
|
||||
- if (! is_root (argv[optind]))
|
||||
+ if (! is_oldroot)
|
||||
{
|
||||
/* We have to look up users and groups twice.
|
||||
- First, outside the chroot to load potentially necessary passwd/group
|
||||
@@ -307,14 +329,14 @@ main (int argc, char **argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
- if (chroot (argv[optind]) != 0)
|
||||
+ if (chroot (newroot) != 0)
|
||||
error (EXIT_CANCELED, errno, _("cannot change root directory to %s"),
|
||||
- argv[optind]);
|
||||
-
|
||||
- if (chdir ("/"))
|
||||
- error (EXIT_CANCELED, errno, _("cannot chdir to root directory"));
|
||||
+ newroot);
|
||||
}
|
||||
|
||||
+ if (! skip_chdir && chdir ("/"))
|
||||
+ error (EXIT_CANCELED, errno, _("cannot chdir to root directory"));
|
||||
+
|
||||
if (argc == optind + 1)
|
||||
{
|
||||
/* No command. Run an interactive shell. */
|
||||
Index: tests/cp/preserve-gid.sh
|
||||
===================================================================
|
||||
--- tests/cp/preserve-gid.sh.orig
|
||||
+++ tests/cp/preserve-gid.sh
|
||||
@@ -117,7 +117,8 @@ t1() {
|
||||
u=$1; shift
|
||||
g=$1; shift
|
||||
t0 "$f" "$u" "$g" \
|
||||
- chroot --user=+$nameless_uid:+$nameless_gid1 \
|
||||
+ chroot --skip-chdir \
|
||||
+ --user=+$nameless_uid:+$nameless_gid1 \
|
||||
--groups="+$nameless_gid1,+$nameless_gid2" \
|
||||
/ env PATH="$tmp_path" "$@"
|
||||
}
|
||||
Index: tests/cp/special-bits.sh
|
||||
===================================================================
|
||||
--- tests/cp/special-bits.sh.orig
|
||||
+++ tests/cp/special-bits.sh
|
||||
@@ -42,7 +42,8 @@ set _ $(ls -l b); shift; p1=$1
|
||||
set _ $(ls -l b2); shift; p2=$1
|
||||
test $p1 = $p2 || fail=1
|
||||
|
||||
-chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" cp -p c c2 || fail=1
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" cp -p c c2 \
|
||||
+ || fail=1
|
||||
set _ $(ls -l c); shift; p1=$1
|
||||
set _ $(ls -l c2); shift; p2=$1
|
||||
test $p1 = $p2 && fail=1
|
||||
Index: tests/id/setgid.sh
|
||||
===================================================================
|
||||
--- tests/id/setgid.sh.orig
|
||||
+++ tests/id/setgid.sh
|
||||
@@ -27,14 +27,14 @@ echo $gp1 > exp || framework_failure_
|
||||
|
||||
# With coreutils-8.16 and earlier, id -G would print both:
|
||||
# $gp1 $NON_ROOT_GID
|
||||
-chroot --user=$NON_ROOT_USERNAME:+$gp1 --groups='' / env PATH="$PATH" \
|
||||
- id -G > out || fail=1
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME:+$gp1 --groups='' / \
|
||||
+ env PATH="$PATH" id -G > out || fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
# With coreutils-8.22 and earlier, id would erroneously print
|
||||
# groups=$NON_ROOT_GID
|
||||
-chroot --user=$NON_ROOT_USERNAME:+$gp1 --groups='' / env PATH="$PATH" \
|
||||
- id > out || fail=1
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME:+$gp1 --groups='' / \
|
||||
+ env PATH="$PATH" id > out || fail=1
|
||||
grep -F "groups=$gp1" out || { cat out; fail=1; }
|
||||
|
||||
Exit $fail
|
||||
Index: tests/misc/chroot-fail.sh
|
||||
===================================================================
|
||||
--- tests/misc/chroot-fail.sh.orig
|
||||
+++ tests/misc/chroot-fail.sh
|
||||
@@ -30,7 +30,7 @@ chroot --- / true # unknown option
|
||||
test $? = 125 || fail=1
|
||||
|
||||
# Note chroot("/") succeeds for non-root users on some systems, but not all,
|
||||
-# however we avoid the chroot() with "/" to have common behvavior.
|
||||
+# however we avoid the chroot() with "/" to have common behavior.
|
||||
chroot / sh -c 'exit 2' # exit status propagation
|
||||
test $? = 2 || fail=1
|
||||
chroot / . # invalid command
|
||||
@@ -38,10 +38,25 @@ test $? = 126 || fail=1
|
||||
chroot / no_such # no such command
|
||||
test $? = 127 || fail=1
|
||||
|
||||
-# Ensure we don't chdir("/") when not changing root
|
||||
-# to allow only changing user ids for a command.
|
||||
-for dir in '/' '/.' '/../'; do
|
||||
+# Ensure that --skip-chdir fails with a non-"/" argument.
|
||||
+cat <<\EOF > exp || framework_failure_
|
||||
+chroot: option --skip-chdir only permitted if NEWROOT is old '/'
|
||||
+Try 'chroot --help' for more information.
|
||||
+EOF
|
||||
+chroot --skip-chdir . env pwd >out 2>err && fail=1
|
||||
+compare /dev/null out || fail=1
|
||||
+compare exp err || fail=1
|
||||
+
|
||||
+# Ensure we don't chroot("/") when NEWROOT is old "/".
|
||||
+ln -s / isroot || framework_failure_
|
||||
+for dir in '/' '/.' '/../' isroot; do
|
||||
+ # Verify that chroot(1) succeeds and performs chdir("/")
|
||||
+ # (chroot(1) of coreutils-8.23 failed to run the latter).
|
||||
curdir=$(chroot "$dir" env pwd) || fail=1
|
||||
+ test "$curdir" = '/' || fail=1
|
||||
+
|
||||
+ # Test the "--skip-chdir" option.
|
||||
+ curdir=$(chroot --skip-chdir "$dir" env pwd) || fail=1
|
||||
test "$curdir" = '/' && fail=1
|
||||
done
|
||||
|
||||
Index: tests/misc/truncate-owned-by-other.sh
|
||||
===================================================================
|
||||
--- tests/misc/truncate-owned-by-other.sh.orig
|
||||
+++ tests/misc/truncate-owned-by-other.sh
|
||||
@@ -29,7 +29,7 @@ chmod g+w root-owned
|
||||
# Ensure that the current directory is searchable by $NON_ROOT_USERNAME.
|
||||
chmod g+x .
|
||||
|
||||
-chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
truncate -s0 root-owned || fail=1
|
||||
|
||||
Exit $fail
|
||||
Index: tests/mv/sticky-to-xpart.sh
|
||||
===================================================================
|
||||
--- tests/mv/sticky-to-xpart.sh.orig
|
||||
+++ tests/mv/sticky-to-xpart.sh
|
||||
@@ -42,7 +42,8 @@ chmod go+x . || framework_failure_
|
||||
|
||||
# Ensure that $NON_ROOT_USERNAME can access the required version of mv.
|
||||
version=$(
|
||||
- chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" mv --version |
|
||||
+ chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+ mv --version |
|
||||
sed -n '1s/.* //p'
|
||||
)
|
||||
case $version in
|
||||
@@ -50,7 +51,7 @@ case $version in
|
||||
*) skip_ "cannot access just-built mv as user $NON_ROOT_USERNAME";;
|
||||
esac
|
||||
|
||||
-chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
mv t/root-owned "$other_partition_tmpdir" 2> out-t && fail=1
|
||||
|
||||
# On some systems, we get 'Not owner'. Convert it.
|
||||
Index: tests/rm/fail-2eperm.sh
|
||||
===================================================================
|
||||
--- tests/rm/fail-2eperm.sh.orig
|
||||
+++ tests/rm/fail-2eperm.sh
|
||||
@@ -32,14 +32,16 @@ touch a/b || framework_failure_
|
||||
# Try to ensure that $NON_ROOT_USERNAME can access
|
||||
# the required version of rm.
|
||||
rm_version=$(
|
||||
- chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" rm --version |
|
||||
+ chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+ rm --version |
|
||||
sed -n '1s/.* //p'
|
||||
)
|
||||
case $rm_version in
|
||||
$PACKAGE_VERSION) ;;
|
||||
*) skip_ "cannot access just-built rm as user $NON_ROOT_USERNAME";;
|
||||
esac
|
||||
-chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" rm -rf a 2> out-t && fail=1
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME / \
|
||||
+ env PATH="$PATH" rm -rf a 2> out-t && fail=1
|
||||
|
||||
# On some systems, we get 'Not owner'. Convert it.
|
||||
# On other systems (HPUX), we get 'Permission denied'. Convert it, too.
|
||||
Index: tests/rm/no-give-up.sh
|
||||
===================================================================
|
||||
--- tests/rm/no-give-up.sh.orig
|
||||
+++ tests/rm/no-give-up.sh
|
||||
@@ -30,7 +30,7 @@ chmod go=x . || framework_failure_
|
||||
|
||||
|
||||
# This must fail, since '.' is not writable by $NON_ROOT_USERNAME.
|
||||
-chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
rm -rf d 2>/dev/null && fail=1
|
||||
|
||||
# d must remain.
|
||||
Index: tests/touch/now-owned-by-other.sh
|
||||
===================================================================
|
||||
--- tests/touch/now-owned-by-other.sh.orig
|
||||
+++ tests/touch/now-owned-by-other.sh
|
||||
@@ -28,7 +28,7 @@ chmod g+w root-owned
|
||||
# Ensure that the current directory is searchable by $NON_ROOT_USERNAME.
|
||||
chmod g+x .
|
||||
|
||||
-chroot --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
+chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
|
||||
touch -d now root-owned || fail=1
|
||||
|
||||
Exit $fail
|
@ -1,65 +0,0 @@
|
||||
Upstream patch for df(1) on top of v8.23, to be removed with v8.24.
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=097897bd2c9d
|
||||
|
||||
From 097897bd2c9de5723af24b3848d6d922a862064b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Mon, 27 Oct 2014 11:41:09 +0000
|
||||
Subject: [PATCH] doc: mention that df -a includes duplicate file systems
|
||||
|
||||
* src/df.c (usage): Mention that duplicate file systems are shown
|
||||
with this option, not just dummy file systems.
|
||||
* doc/coreutils.texi (df invocation): For the --all option, expand
|
||||
on the class of normally suppressed mount entries that it includes.
|
||||
|
||||
Reported in http://bugs.debian.org/737399
|
||||
---
|
||||
doc/coreutils.texi | 12 ++++++++----
|
||||
src/df.c | 4 ++--
|
||||
2 files changed, 10 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -11184,11 +11184,15 @@ The program accepts the following option
|
||||
@itemx --all
|
||||
@opindex -a
|
||||
@opindex --all
|
||||
-@cindex automounter file systems
|
||||
@cindex ignore file systems
|
||||
-Include in the listing dummy file systems, which
|
||||
-are omitted by default. Such file systems are typically special-purpose
|
||||
-pseudo-file-systems, such as automounter entries.
|
||||
+Include in the listing dummy, duplicate, or inaccessible file systems, which
|
||||
+are omitted by default. Dummy file systems are typically special purpose
|
||||
+pseudo file systems such as @samp{/proc}, with no associated storage.
|
||||
+Duplicate file systems are local or remote file systems that are mounted
|
||||
+at separate locations in the local file hierarchy, or bind mounted locations.
|
||||
+Inaccessible file systems are those which are mounted but subsequently
|
||||
+over-mounted by another file system at that point, or otherwise inaccessible
|
||||
+due to permissions of the mount point etc.
|
||||
|
||||
@item -B @var{size}
|
||||
@itemx --block-size=@var{size}
|
||||
Index: src/df.c
|
||||
===================================================================
|
||||
--- src/df.c.orig
|
||||
+++ src/df.c
|
||||
@@ -648,7 +648,7 @@ filter_mount_list (bool devices_only)
|
||||
> strlen (me->me_mountdir))
|
||||
/* let an entry overmounted on a different device win... */
|
||||
|| (! STREQ (devlist->me->me_devname, me->me_devname)
|
||||
- /* ... but only when matching an exsiting mount point, to
|
||||
+ /* ... but only when matching an existing mount point, to
|
||||
avoid problematic replacement when given inaccurate mount
|
||||
lists, seen with some chroot environments for example. */
|
||||
&& STREQ (me->me_mountdir, devlist->me->me_mountdir)))
|
||||
@@ -1396,7 +1396,7 @@ or all file systems by default.\n\
|
||||
/* TRANSLATORS: The thousands and decimal separators are best
|
||||
adjusted to an appropriate default for your locale. */
|
||||
fputs (_("\
|
||||
- -a, --all include dummy file systems\n\
|
||||
+ -a, --all include pseudo, duplicate, inaccessible file systems\n\
|
||||
-B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,\n\
|
||||
'-BM' prints sizes in units of 1,048,576 bytes;\n\
|
||||
see SIZE format below\n\
|
@ -1,67 +0,0 @@
|
||||
Upstream patch for df(1) on top of v8.23, to be removed with v8.24.
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=ed1a495b3ccb
|
||||
|
||||
From ed1a495b3ccb2665a13229ca866f2115bd768d17 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Mon, 18 Aug 2014 17:59:26 +0100
|
||||
Subject: [PATCH] df: improve mount point selection with inaccurate mount list
|
||||
|
||||
v8.23 has a test failure on Fedora rawhide build servers
|
||||
in tests/df/skip-duplicate.sh. This was due to no '/'
|
||||
entry being output by df. That was due to an inaccurate
|
||||
/proc/mounts on the build environment as stat(/mnt/point)
|
||||
identified all these /proc/mounts entries as having the
|
||||
same device id:
|
||||
|
||||
/ rootfs
|
||||
/ /dev/md1
|
||||
/dev devtmpfs
|
||||
/run tmpfs
|
||||
/boot /dev/md0
|
||||
/proc/filesystems /dev/md1
|
||||
|
||||
Since the device name on the right changes for a given id,
|
||||
that causes the entries to be continually replaced, thus
|
||||
resulting in no '/' entry. I'm guessing this is due to
|
||||
the mock environment bind mounting unneeded or sensitive
|
||||
items to a dummy file on the host / (/dev/md1) though
|
||||
have not looked into those details.
|
||||
|
||||
So rather than relying on an accurate /proc/mounts,
|
||||
the attached patch takes a more conservative replacement
|
||||
approach and only swaps a new device entry when the
|
||||
mount point matches. That should handle all practical
|
||||
cases while also avoiding this situation.
|
||||
|
||||
* src/df.c (filter_mount_list): Only replace entries with
|
||||
different device names when the mount point also matches.
|
||||
---
|
||||
src/df.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/df.c
|
||||
===================================================================
|
||||
--- src/df.c.orig
|
||||
+++ src/df.c
|
||||
@@ -640,13 +640,18 @@ filter_mount_list (bool devices_only)
|
||||
|
||||
if (devlist)
|
||||
{
|
||||
- /* ...let the shorter mountdir win. */
|
||||
+ /* let "real" devices with '/' in the name win. */
|
||||
if ((strchr (me->me_devname, '/')
|
||||
&& ! strchr (devlist->me->me_devname, '/'))
|
||||
+ /* let a shorter mountdir win. */
|
||||
|| (strlen (devlist->me->me_mountdir)
|
||||
> strlen (me->me_mountdir))
|
||||
- /* or one overmounted on a different device. */
|
||||
- || ! STREQ (devlist->me->me_devname, me->me_devname))
|
||||
+ /* let an entry overmounted on a different device win... */
|
||||
+ || (! STREQ (devlist->me->me_devname, me->me_devname)
|
||||
+ /* ... but only when matching an exsiting mount point, to
|
||||
+ avoid problematic replacement when given inaccurate mount
|
||||
+ lists, seen with some chroot environments for example. */
|
||||
+ && STREQ (me->me_mountdir, devlist->me->me_mountdir)))
|
||||
{
|
||||
/* Discard mount entry for existing device. */
|
||||
discard_me = devlist->me;
|
@ -1,70 +0,0 @@
|
||||
Upstream patch for df(1) on top of v8.23, to be removed with v8.24.
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=3ab3c7bb24b8
|
||||
|
||||
From 3ab3c7bb24b86ef2d2fede9fe26e3ee585db5411 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Mon, 27 Oct 2014 23:37:08 +0000
|
||||
Subject: [PATCH] df: ensure -a shows all remote file system entries
|
||||
|
||||
commit v8.22-125-g9d736f8 printed placeholder "-" values
|
||||
for device names that didn't match the preferred device name
|
||||
for a particular mount point. However that was seen to erroneously
|
||||
suppress values for aliased host names or exports, common with
|
||||
remote file systems.
|
||||
|
||||
* src/df.c (me_for_dev): Rename from devname_for_dev() so that
|
||||
we can determine the remoteness as well as the name for the
|
||||
preferred mount entry.
|
||||
(get_dev): Don't output place holder values when both
|
||||
current and preferred mount entries are remote.
|
||||
|
||||
Reported in http://bugs.debian.org/737399
|
||||
---
|
||||
src/df.c | 17 ++++++++++-------
|
||||
1 file changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: src/df.c
|
||||
===================================================================
|
||||
--- src/df.c.orig
|
||||
+++ src/df.c
|
||||
@@ -703,17 +703,17 @@ filter_mount_list (bool devices_only)
|
||||
}
|
||||
|
||||
/* Search a mount entry list for device id DEV.
|
||||
- Return the corresponding device name if found or NULL if not. */
|
||||
+ Return the corresponding mount entry if found or NULL if not. */
|
||||
|
||||
-static char const * _GL_ATTRIBUTE_PURE
|
||||
-devname_for_dev (dev_t dev)
|
||||
+static struct mount_entry const * _GL_ATTRIBUTE_PURE
|
||||
+me_for_dev (dev_t dev)
|
||||
{
|
||||
struct devlist *dl = device_list;
|
||||
|
||||
while (dl)
|
||||
{
|
||||
if (dl->dev_num == dev)
|
||||
- return dl->me->me_devname;
|
||||
+ return dl->me;
|
||||
dl = dl->next;
|
||||
}
|
||||
|
||||
@@ -928,12 +928,15 @@ get_dev (char const *disk, char const *m
|
||||
else if (process_all && show_all_fs)
|
||||
{
|
||||
/* Ensure we don't output incorrect stats for over-mounted directories.
|
||||
- Discard stats when the device name doesn't match. */
|
||||
+ Discard stats when the device name doesn't match. Though don't
|
||||
+ discard when used and current mount entries are both remote due
|
||||
+ to the possibility of aliased host names or exports. */
|
||||
struct stat sb;
|
||||
if (stat (stat_file, &sb) == 0)
|
||||
{
|
||||
- char const * devname = devname_for_dev (sb.st_dev);
|
||||
- if (devname && ! STREQ (devname, disk))
|
||||
+ struct mount_entry const * dev_me = me_for_dev (sb.st_dev);
|
||||
+ if (dev_me && ! STREQ (dev_me->me_devname, disk)
|
||||
+ && (! dev_me->me_remote || ! me_remote))
|
||||
{
|
||||
fstype = "-";
|
||||
fsu.fsu_blocksize = fsu.fsu_blocks = fsu.fsu_bfree =
|
@ -1,250 +0,0 @@
|
||||
Upstream patch for df(1) on top of v8.23, to be removed with v8.24.
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=2e81e6224340
|
||||
|
||||
From 2e81e62243409c5c574b899f52b08c000e4d99fd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Wed, 29 Oct 2014 02:49:17 +0000
|
||||
Subject: [PATCH] df: only suppress remote mounts of separate exports with
|
||||
--total
|
||||
|
||||
* src/df.c (filter_mount_list): Separate remote locations are
|
||||
generally explicitly mounted, so list each even if they share
|
||||
the same remote device and thus storage. However with --total
|
||||
keep the suppression to give a more accurate value for the
|
||||
total storage available.
|
||||
(usage): Expand on the new implications of --total and move
|
||||
it in the options list according to alphabetic order.
|
||||
doc/coreutils.texi (df invocation): Mention that --total impacts
|
||||
on deduplication of remote file systems and also move location
|
||||
according to alphabetic order.
|
||||
* tests/df/skip-duplicates.sh: Add remote test cases.
|
||||
* NEWS: Mention the change in behavior.
|
||||
|
||||
Reported in http://bugs.debian.org/737399
|
||||
Reported in http://bugzilla.redhat.com/920806
|
||||
Reported in http://bugzilla.opensuse.org/866010
|
||||
Reported in http://bugzilla.opensuse.org/901905
|
||||
---
|
||||
NEWS | 8 ++++++++
|
||||
doc/coreutils.texi | 28 +++++++++++++++-------------
|
||||
src/df.c | 41 ++++++++++++++++++++++++++++-------------
|
||||
tests/df/skip-duplicates.sh | 31 ++++++++++++++++++++++++++++---
|
||||
4 files changed, 79 insertions(+), 29 deletions(-)
|
||||
|
||||
Index: NEWS
|
||||
===================================================================
|
||||
--- NEWS.orig
|
||||
+++ NEWS
|
||||
@@ -1,5 +1,13 @@
|
||||
GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
+** Changes in behavior
|
||||
+
|
||||
+ df no longer suppresses separate exports of the same remote device, as
|
||||
+ these are generally explicitly mounted. The --total option does still
|
||||
+ suppress duplicate remote file systems.
|
||||
+ [suppression was introduced in coreutils-8.21]
|
||||
+
|
||||
+
|
||||
* Noteworthy changes in release 8.23 (2014-07-18) [stable]
|
||||
|
||||
** Bug fixes
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -11202,19 +11202,6 @@ due to permissions of the mount point et
|
||||
Scale sizes by @var{size} before printing them (@pxref{Block size}).
|
||||
For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes.
|
||||
|
||||
-@item --total
|
||||
-@opindex --total
|
||||
-@cindex grand total of disk size, usage and available space
|
||||
-Print a grand total of all arguments after all arguments have
|
||||
-been processed. This can be used to find out the total disk size, usage
|
||||
-and available space of all listed devices.
|
||||
-
|
||||
-For the grand total line, @command{df} prints @samp{"total"} into the
|
||||
-@var{source} column, and @samp{"-"} into the @var{target} column.
|
||||
-If there is no @var{source} column (see @option{--output}), then
|
||||
-@command{df} prints @samp{"total"} into the @var{target} column,
|
||||
-if present.
|
||||
-
|
||||
@optHumanReadable
|
||||
|
||||
@item -H
|
||||
@@ -11355,6 +11342,21 @@ some systems (notably SunOS), doing this
|
||||
but in general this option makes @command{df} much slower, especially when
|
||||
there are many or very busy file systems.
|
||||
|
||||
+@item --total
|
||||
+@opindex --total
|
||||
+@cindex grand total of disk size, usage and available space
|
||||
+Print a grand total of all arguments after all arguments have
|
||||
+been processed. This can be used to find out the total disk size, usage
|
||||
+and available space of all listed devices. If no arguments are specified
|
||||
+df will try harder to elide file systems insignificant to the total
|
||||
+available space, by suppressing duplicate remote file systems.
|
||||
+
|
||||
+For the grand total line, @command{df} prints @samp{"total"} into the
|
||||
+@var{source} column, and @samp{"-"} into the @var{target} column.
|
||||
+If there is no @var{source} column (see @option{--output}), then
|
||||
+@command{df} prints @samp{"total"} into the @var{target} column,
|
||||
+if present.
|
||||
+
|
||||
@item -t @var{fstype}
|
||||
@itemx --type=@var{fstype}
|
||||
@opindex -t
|
||||
Index: src/df.c
|
||||
===================================================================
|
||||
--- src/df.c.orig
|
||||
+++ src/df.c
|
||||
@@ -640,18 +640,28 @@ filter_mount_list (bool devices_only)
|
||||
|
||||
if (devlist)
|
||||
{
|
||||
- /* let "real" devices with '/' in the name win. */
|
||||
- if ((strchr (me->me_devname, '/')
|
||||
- && ! strchr (devlist->me->me_devname, '/'))
|
||||
- /* let a shorter mountdir win. */
|
||||
- || (strlen (devlist->me->me_mountdir)
|
||||
- > strlen (me->me_mountdir))
|
||||
- /* let an entry overmounted on a different device win... */
|
||||
- || (! STREQ (devlist->me->me_devname, me->me_devname)
|
||||
- /* ... but only when matching an existing mount point, to
|
||||
- avoid problematic replacement when given inaccurate mount
|
||||
- lists, seen with some chroot environments for example. */
|
||||
- && STREQ (me->me_mountdir, devlist->me->me_mountdir)))
|
||||
+ if (! print_grand_total && me->me_remote && devlist->me->me_remote
|
||||
+ && ! STREQ (devlist->me->me_devname, me->me_devname))
|
||||
+ {
|
||||
+ /* Don't discard remote entries with different locations,
|
||||
+ as these are more likely to be explicitly mounted.
|
||||
+ However avoid this when producing a total to give
|
||||
+ a more accurate value in that case. */
|
||||
+ }
|
||||
+ else if ((strchr (me->me_devname, '/')
|
||||
+ /* let "real" devices with '/' in the name win. */
|
||||
+ && ! strchr (devlist->me->me_devname, '/'))
|
||||
+ /* let a shorter mountdir win. */
|
||||
+ || (strlen (devlist->me->me_mountdir)
|
||||
+ > strlen (me->me_mountdir))
|
||||
+ /* let an entry overmounted on a new device win... */
|
||||
+ || (! STREQ (devlist->me->me_devname, me->me_devname)
|
||||
+ /* ... but only when matching an existing mnt point,
|
||||
+ to avoid problematic replacement when given
|
||||
+ inaccurate mount lists, seen with some chroot
|
||||
+ environments for example. */
|
||||
+ && STREQ (me->me_mountdir,
|
||||
+ devlist->me->me_mountdir)))
|
||||
{
|
||||
/* Discard mount entry for existing device. */
|
||||
discard_me = devlist->me;
|
||||
@@ -1403,7 +1413,6 @@ or all file systems by default.\n\
|
||||
-B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,\n\
|
||||
'-BM' prints sizes in units of 1,048,576 bytes;\n\
|
||||
see SIZE format below\n\
|
||||
- --total produce a grand total\n\
|
||||
-h, --human-readable print sizes in powers of 1024 (e.g., 1023M)\n\
|
||||
-H, --si print sizes in powers of 1000 (e.g., 1.1G)\n\
|
||||
"), stdout);
|
||||
@@ -1419,6 +1428,12 @@ or all file systems by default.\n\
|
||||
or print all fields if FIELD_LIST is omitted.\n\
|
||||
-P, --portability use the POSIX output format\n\
|
||||
--sync invoke sync before getting usage info\n\
|
||||
+"), stdout);
|
||||
+ fputs (_("\
|
||||
+ --total elide all entries insignificant to available space,\n\
|
||||
+ and produce a grand total\n\
|
||||
+"), stdout);
|
||||
+ fputs (_("\
|
||||
-t, --type=TYPE limit listing to file systems of type TYPE\n\
|
||||
-T, --print-type print file system type\n\
|
||||
-x, --exclude-type=TYPE limit listing to file systems not of type TYPE\n\
|
||||
Index: tests/df/skip-duplicates.sh
|
||||
===================================================================
|
||||
--- tests/df/skip-duplicates.sh.orig
|
||||
+++ tests/df/skip-duplicates.sh
|
||||
@@ -26,7 +26,12 @@ require_gcc_shared_
|
||||
df --local || skip_ "df fails"
|
||||
|
||||
export CU_NONROOT_FS=$(df --local --output=target 2>&1 | grep /. | head -n1)
|
||||
-test -z "$CU_NONROOT_FS" && unique_entries=1 || unique_entries=2
|
||||
+export CU_REMOTE_FS=$(df --local --output=target 2>&1 | grep /. |
|
||||
+ tail -n+2 | head -n1)
|
||||
+
|
||||
+unique_entries=1
|
||||
+test -z "$CU_NONROOT_FS" || unique_entries=$(expr $unique_entries + 1)
|
||||
+test -z "$CU_REMOTE_FS" || unique_entries=$(expr $unique_entries + 2)
|
||||
|
||||
grep '^#define HAVE_MNTENT_H 1' $CONFIG_HEADER > /dev/null \
|
||||
|| skip_ "no mntent.h available to confirm the interface"
|
||||
@@ -46,6 +51,7 @@ cat > k.c <<'EOF' || framework_failure_
|
||||
struct mntent *getmntent (FILE *fp)
|
||||
{
|
||||
static char *nonroot_fs;
|
||||
+ static char *remote_fs;
|
||||
static int done;
|
||||
|
||||
/* Prove that LD_PRELOAD works. */
|
||||
@@ -63,6 +69,9 @@ struct mntent *getmntent (FILE *fp)
|
||||
{.mnt_fsname="virtfs", .mnt_dir="/NONROOT", .mnt_type="fstype1"},
|
||||
{.mnt_fsname="virtfs2", .mnt_dir="/NONROOT", .mnt_type="fstype2"},
|
||||
{.mnt_fsname="netns", .mnt_dir="net:[1234567]"},
|
||||
+ {.mnt_fsname="rem:ote1",.mnt_dir="/REMOTE"},
|
||||
+ {.mnt_fsname="rem:ote1",.mnt_dir="/REMOTE"},
|
||||
+ {.mnt_fsname="rem:ote2",.mnt_dir="/REMOTE"},
|
||||
};
|
||||
|
||||
if (done == 1)
|
||||
@@ -70,17 +79,26 @@ struct mntent *getmntent (FILE *fp)
|
||||
nonroot_fs = getenv ("CU_NONROOT_FS");
|
||||
if (!nonroot_fs || !*nonroot_fs)
|
||||
nonroot_fs = "/"; /* merge into / entries. */
|
||||
+
|
||||
+ remote_fs = getenv ("CU_REMOTE_FS");
|
||||
}
|
||||
|
||||
if (done == 1 && !getenv ("CU_TEST_DUPE_INVALID"))
|
||||
done++; /* skip the first entry. */
|
||||
|
||||
- while (done++ <= 7)
|
||||
+ while (done++ <= 10)
|
||||
{
|
||||
if (!mntents[done-2].mnt_type)
|
||||
mntents[done-2].mnt_type = "-";
|
||||
if (STREQ (mntents[done-2].mnt_dir, "/NONROOT"))
|
||||
mntents[done-2].mnt_dir = nonroot_fs;
|
||||
+ if (STREQ (mntents[done-2].mnt_dir, "/REMOTE"))
|
||||
+ {
|
||||
+ if (!remote_fs || !*remote_fs)
|
||||
+ continue;
|
||||
+ else
|
||||
+ mntents[done-2].mnt_dir = remote_fs;
|
||||
+ }
|
||||
return &mntents[done-2];
|
||||
}
|
||||
|
||||
@@ -102,6 +120,12 @@ test -f x || skip_ "internal test failur
|
||||
LD_PRELOAD=./k.so df -T >out || fail=1
|
||||
test $(wc -l <out) -eq $(expr 1 + $unique_entries) || { fail=1; cat out; }
|
||||
|
||||
+# With --total we should suppress the duplicate but separate remote file system
|
||||
+LD_PRELOAD=./k.so df --total >out || fail=1
|
||||
+test "$CU_REMOTE_FS" && elide_remote=1 || elide_remote=0
|
||||
+test $(wc -l <out) -eq $(expr 2 + $unique_entries - $elide_remote) ||
|
||||
+ { fail=1; cat out; }
|
||||
+
|
||||
# Ensure we don't fail when unable to stat (currently) unavailable entries
|
||||
LD_PRELOAD=./k.so CU_TEST_DUPE_INVALID=1 df -T >out || fail=1
|
||||
test $(wc -l <out) -eq $(expr 1 + $unique_entries) || { fail=1; cat out; }
|
||||
@@ -118,7 +142,8 @@ test $(grep -c 'virtfs2.*fstype2' <out)
|
||||
|
||||
# Ensure that filtering duplicates does not affect -a processing.
|
||||
LD_PRELOAD=./k.so df -a >out || fail=1
|
||||
-test $(wc -l <out) -eq 6 || { fail=1; cat out; }
|
||||
+total_fs=6; test "$CU_REMOTE_FS" && total_fs=$(expr $total_fs + 3)
|
||||
+test $(wc -l <out) -eq $total_fs || { fail=1; cat out; }
|
||||
# Ensure placeholder "-" values used for the eclipsed "virtfs"
|
||||
test $(grep -c 'virtfs *-' <out) -eq 1 || { fail=1; cat out; }
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ gnulib-tests/gnulib.mk
|
||||
@@ -883,11 +883,11 @@ EXTRA_DIST += test-getloadavg.c signatur
|
||||
--- gnulib-tests/gnulib.mk.orig 2015-07-09 15:10:56.833805476 +0200
|
||||
+++ gnulib-tests/gnulib.mk 2015-07-09 15:10:56.851805050 +0200
|
||||
@@ -907,11 +907,11 @@ EXTRA_DIST += test-getloadavg.c signatur
|
||||
## end gnulib module getloadavg-tests
|
||||
|
||||
## begin gnulib module getlogin-tests
|
||||
|
@ -1,66 +0,0 @@
|
||||
Upstream patch on top of v8.23, i.e. to be removed with v8.24:
|
||||
Fixes https://bugzilla.opensuse.org/show_bug.cgi?id=933396
|
||||
|
||||
Upstream patch:
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=e4627416b4be
|
||||
|
||||
From e4627416b4be078a184372b9b0582517612a3c39 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Tue, 9 Sep 2014 02:05:45 +0100
|
||||
Subject: [PATCH] doc: adjust reference to info nodes in man pages
|
||||
|
||||
old form: coreutils '$cmd invocation'
|
||||
new form: '(coreutils) $cmd invocation'
|
||||
|
||||
The old form erroneously referenced the node for the 'coreutils'
|
||||
multi-call program. Now that problematic node name was renamed
|
||||
in commit v8.23-18-g72e470b, but the newer less ambiguous form
|
||||
also has the advantage of working with the pinfo viewer for example.
|
||||
Full discussion at http://bugs.gnu.org/18428
|
||||
|
||||
* man/local.mk: Adjust man page references to texinfo nodes.
|
||||
* src/system.h: Adjust --help references to texinfo nodes.
|
||||
---
|
||||
man/dummy-man | 2 +-
|
||||
man/local.mk | 2 +-
|
||||
src/system.h | 3 ++-
|
||||
3 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: man/dummy-man
|
||||
===================================================================
|
||||
--- man/dummy-man.orig
|
||||
+++ man/dummy-man
|
||||
@@ -69,5 +69,5 @@ The full documentation for
|
||||
is maintained as a Texinfo manual, which should be accessible
|
||||
on your system via the command
|
||||
.IP
|
||||
-.B info coreutils $bs(aq$progname invocation$bs(aq
|
||||
+.B info $bs(aq(coreutils) $progname invocation$bs(aq
|
||||
END
|
||||
Index: man/local.mk
|
||||
===================================================================
|
||||
--- man/local.mk.orig
|
||||
+++ man/local.mk
|
||||
@@ -102,7 +102,7 @@ man/dynamic-deps.mk: Makefile
|
||||
--source='$(PACKAGE_STRING)' \
|
||||
--include=$(srcdir)/man/$$name.x \
|
||||
--output=$$t/$$name.1 $$t/$$argv \
|
||||
- --info-page='coreutils \(aq'$$name' invocation\(aq' \
|
||||
+ --info-page='\(aq(coreutils) '$$name' invocation\(aq' \
|
||||
&& sed \
|
||||
-e 's|$*\.td/||g' \
|
||||
-e '/For complete documentation/d' \
|
||||
Index: src/system.h
|
||||
===================================================================
|
||||
--- src/system.h.orig
|
||||
+++ src/system.h
|
||||
@@ -582,7 +582,8 @@ emit_ancillary_info (void)
|
||||
last_component (program_name));
|
||||
}
|
||||
printf (_("For complete documentation, run: "
|
||||
- "info coreutils '%s invocation'\n"), last_component (program_name));
|
||||
+ "info '(coreutils) %s invocation'\n"),
|
||||
+ last_component (program_name));
|
||||
}
|
||||
|
||||
static inline void
|
@ -1,17 +0,0 @@
|
||||
---
|
||||
man/local.mk | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: man/local.mk
|
||||
===================================================================
|
||||
--- man/local.mk.orig
|
||||
+++ man/local.mk
|
||||
@@ -41,7 +41,7 @@ distclean-local:
|
||||
test x$(srcdir) = x$(builddir) || rm -f $(ALL_MANS)
|
||||
|
||||
# Dependencies common to all man pages. Updated below.
|
||||
-mandeps =
|
||||
+mandeps = $(PROGRAMS)
|
||||
|
||||
# Depend on this to get version number changes.
|
||||
mandeps += .version
|
@ -1,124 +0,0 @@
|
||||
From coreutils-bounces+pth=suse.de@gnu.org Tue Sep 16 00:19:14 2014
|
||||
Return-Path: <coreutils-bounces+pth=suse.de@gnu.org>
|
||||
X-Original-To: pth@wotan.suse.de
|
||||
Received: from relay1.suse.de (relay1.suse.de [149.44.160.133])
|
||||
by wotan.suse.de (Postfix) with ESMTP id 9E7716283
|
||||
for <pth@wotan.suse.de>; Tue, 16 Sep 2014 00:19:14 +0200 (CEST)
|
||||
Received: by relay1.suse.de (Postfix)
|
||||
id 9723D28DD; Tue, 16 Sep 2014 00:19:14 +0200 (CEST)
|
||||
Received: from localhost (localhost [127.0.0.1])
|
||||
by relay1.suse.de (Postfix) with ESMTP id 91A4228D9
|
||||
for <pth@suse.de>; Tue, 16 Sep 2014 00:19:14 +0200 (CEST)
|
||||
X-Virus-Scanned: by amavisd-new at localhost
|
||||
X-Spam-Flag: NO
|
||||
X-Spam-Score: -5.868
|
||||
X-Spam-Level:
|
||||
X-Spam-Status: No, score=-5.868 tagged_above=-9999 required=5
|
||||
tests=[BAYES_50=0.8, IS_MAILMAN_LIST=-1, RCVD_IN_DNSWL_HI=-5,
|
||||
RP_MATCHES_RCVD=-0.668] autolearn=disabled
|
||||
Received: from relay1.suse.de ([127.0.0.1])
|
||||
by localhost (localhost [127.0.0.1]) (amavisd-new, port 10026)
|
||||
with ESMTP id ChE53gAm38xF for <pth@suse.de>;
|
||||
Tue, 16 Sep 2014 00:19:14 +0200 (CEST)
|
||||
Received: from mx1.suse.de (cantor1.suse.de [195.135.220.2])
|
||||
(using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits))
|
||||
(No client certificate requested)
|
||||
by relay1.suse.de (Postfix) with ESMTPS id 3DFCE2030
|
||||
for <pth@suse.de>; Tue, 16 Sep 2014 00:19:14 +0200 (CEST)
|
||||
Received: from lists.gnu.org (lists.gnu.org [208.118.235.17])
|
||||
(using TLSv1 with cipher AES256-SHA (256/256 bits))
|
||||
(No client certificate requested)
|
||||
by mx1.suse.de (Postfix) with ESMTPS id 14E56AAC5
|
||||
for <pth@suse.de>; Tue, 16 Sep 2014 00:19:14 +0200 (CEST)
|
||||
Received: from localhost ([::1]:34619 helo=lists.gnu.org)
|
||||
by lists.gnu.org with esmtp (Exim 4.71)
|
||||
(envelope-from <coreutils-bounces+pth=suse.de@gnu.org>)
|
||||
id 1XTec5-00066K-6z
|
||||
for pth@suse.de; Mon, 15 Sep 2014 18:19:13 -0400
|
||||
Received: from eggs.gnu.org ([2001:4830:134:3::10]:44002)
|
||||
by lists.gnu.org with esmtp (Exim 4.71)
|
||||
(envelope-from <mail@bernhard-voelker.de>) id 1XTebt-0005zb-Ea
|
||||
for coreutils@gnu.org; Mon, 15 Sep 2014 18:19:08 -0400
|
||||
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
|
||||
(envelope-from <mail@bernhard-voelker.de>) id 1XTebh-0006mb-A2
|
||||
for coreutils@gnu.org; Mon, 15 Sep 2014 18:19:01 -0400
|
||||
Received: from mout.kundenserver.de ([212.227.126.130]:61454)
|
||||
by eggs.gnu.org with esmtp (Exim 4.71)
|
||||
(envelope-from <mail@bernhard-voelker.de>) id 1XTebh-0006m4-1Y
|
||||
for coreutils@gnu.org; Mon, 15 Sep 2014 18:18:49 -0400
|
||||
Received: from blackice.site (pD957CBB4.dip0.t-ipconnect.de [217.87.203.180])
|
||||
by mrelayeu.kundenserver.de (node=mreue007) with ESMTP (Nemesis)
|
||||
id 0MY0P5-1Xnddz1jeR-00WkzE; Tue, 16 Sep 2014 00:18:44 +0200
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
To: coreutils@gnu.org
|
||||
Subject: [PATCH] tests: fix false du failure on newer XFS
|
||||
Date: Tue, 16 Sep 2014 00:17:43 +0200
|
||||
Message-Id: <1410819463-5423-1-git-send-email-mail@bernhard-voelker.de>
|
||||
X-Mailer: git-send-email 1.8.4.5
|
||||
X-Provags-ID: V02:K0:qhDLt5+dLDL9ZojGDjR2JCZUT99RsLhoiyP2U0vHUVe
|
||||
6sFe6AEQdVdEBTcxwG3rxuMC20RiygA6M3jqShv8YrHI8aMVAd
|
||||
eE8xJ/hJz3vHhN5RsbqbiGh6bGodZh6z/8pEPo4nIZfvFj5/Oy
|
||||
IXHy4YysR6g0Ci11Fcpx0MH2q50tuGRgVct132icfAEbWFZM7o
|
||||
//TkmA8XFocuHSW4d1dv6YXnnf1OA1QDsTHrc7TrX3NwqGqTzl
|
||||
qIUlhT4OBcqPtunpPR5ty3yLNFY61T33c0Y4tB0LRpDgS7bbE7
|
||||
Gk8SkMUBH447xJjIFByTt+DQk+mgpo1h1Eo2vUlIFXzNzZrdaV
|
||||
BcRVj5v4GBKK1/e2y3rVH4VUBgbCZiJhb9TsicXKVwkF+Xejjb
|
||||
mCtjMo7wyvEjtHeCr0aBNLE18yA2j8FEEI=
|
||||
X-UI-Out-Filterresults: notjunk:1;
|
||||
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic]
|
||||
X-Received-From: 212.227.126.130
|
||||
Cc: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
X-BeenThere: coreutils@gnu.org
|
||||
X-Mailman-Version: 2.1.14
|
||||
Precedence: list
|
||||
List-Id: GNU coreutils General Discussion <coreutils.gnu.org>
|
||||
List-Unsubscribe: <https://lists.gnu.org/mailman/options/coreutils>,
|
||||
<mailto:coreutils-request@gnu.org?subject=unsubscribe>
|
||||
List-Archive: <http://lists.gnu.org/archive/html/coreutils>
|
||||
List-Post: <mailto:coreutils@gnu.org>
|
||||
List-Help: <mailto:coreutils-request@gnu.org?subject=help>
|
||||
List-Subscribe: <https://lists.gnu.org/mailman/listinfo/coreutils>,
|
||||
<mailto:coreutils-request@gnu.org?subject=subscribe>
|
||||
Errors-To: coreutils-bounces+pth=suse.de@gnu.org
|
||||
Sender: coreutils-bounces+pth=suse.de@gnu.org
|
||||
Status: RO
|
||||
Content-Length: 1239
|
||||
Lines: 40
|
||||
|
||||
* tests/du/2g.sh: Similar to the fix for a dd test (see commit
|
||||
v8.22-65-g7c03fe2), avoid speculative preallocation by creating
|
||||
the 'big' file in one go instead of appending to it in the loop.
|
||||
Remove debugging statements as the output with 'set -x' is
|
||||
sufficient nowadays.
|
||||
---
|
||||
tests/du/2g.sh | 17 ++++++++---------
|
||||
1 file changed, 8 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: tests/du/2g.sh
|
||||
===================================================================
|
||||
--- tests/du/2g.sh.orig
|
||||
+++ tests/du/2g.sh
|
||||
@@ -43,15 +43,14 @@ test $min_kb -lt $free_kb ||
|
||||
|
||||
big=big
|
||||
rm -f $big
|
||||
-test -t 1 || printf 'creating a 2GB file...\n'
|
||||
-for i in $(seq 100); do
|
||||
- # Note: 2147483648 == 2^31. Print floor(2^31/100) per iteration.
|
||||
- printf %21474836s x >> $big || fail=1
|
||||
- # On the final iteration, append the remaining 48 bytes.
|
||||
- test $i = 100 && { printf %48s x >> $big || fail=1; }
|
||||
- test -t 1 && printf 'creating a 2GB file: %d%% complete\r' $i
|
||||
-done
|
||||
-echo
|
||||
+{
|
||||
+ for i in $(seq 100); do
|
||||
+ # Note: 2147483648 == 2^31. Print floor(2^31/100) per iteration.
|
||||
+ printf %21474836s x || fail=1
|
||||
+ done
|
||||
+ # After the final iteration, append the remaining 48 bytes.
|
||||
+ printf %48s x || fail=1
|
||||
+} > $big || fail=1
|
||||
|
||||
du -k $big > out1 || fail=1
|
||||
rm -f $big
|
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,13 @@
|
||||
---
|
||||
gnulib-tests/test-isnanl.h | 4 +++-
|
||||
gnulib-tests/test-isnanl.h | 5 +++--
|
||||
tests/misc/help-version.sh | 1 +
|
||||
tests/other-fs-tmpdir | 3 +++
|
||||
3 files changed, 7 insertions(+), 1 deletion(-)
|
||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: gnulib-tests/test-isnanl.h
|
||||
===================================================================
|
||||
--- gnulib-tests/test-isnanl.h.orig
|
||||
+++ gnulib-tests/test-isnanl.h
|
||||
--- gnulib-tests/test-isnanl.h.orig 2015-07-09 14:59:20.897259261 +0200
|
||||
+++ gnulib-tests/test-isnanl.h 2015-07-09 15:04:01.173639553 +0200
|
||||
@@ -47,7 +47,7 @@ main ()
|
||||
/* Quiet NaN. */
|
||||
ASSERT (isnanl (NaNl ()));
|
||||
@ -22,22 +22,22 @@ Index: gnulib-tests/test-isnanl.h
|
||||
ASSERT (isnanl (x.value));
|
||||
}
|
||||
+#if 0
|
||||
/* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
|
||||
Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
|
||||
Intel IA-64 Architecture Software Developer's Manual, Volume 1:
|
||||
@@ -131,6 +132,7 @@ main ()
|
||||
ASSERT (isnanl (x.value));
|
||||
/* isnanl should return something for noncanonical values. */
|
||||
{ /* Pseudo-NaN. */
|
||||
static memory_long_double x =
|
||||
@@ -125,6 +126,6 @@ main ()
|
||||
ASSERT (isnanl (x.value) || !isnanl (x.value));
|
||||
}
|
||||
#endif
|
||||
-
|
||||
+#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
Index: tests/misc/help-version.sh
|
||||
===================================================================
|
||||
--- tests/misc/help-version.sh.orig
|
||||
+++ tests/misc/help-version.sh
|
||||
@@ -240,6 +240,7 @@ parted_setup () { args="-s $tmp_in mklab
|
||||
--- tests/misc/help-version.sh.orig 2015-07-09 14:59:20.897259261 +0200
|
||||
+++ tests/misc/help-version.sh 2015-07-09 14:59:27.227110899 +0200
|
||||
@@ -237,6 +237,7 @@ parted_setup () { args="-s $tmp_in mklab
|
||||
for i in $built_programs; do
|
||||
# Skip these.
|
||||
case $i in chroot|stty|tty|false|chcon|runcon|coreutils) continue;; esac
|
||||
@ -47,8 +47,8 @@ Index: tests/misc/help-version.sh
|
||||
echo z |gzip > $zin
|
||||
Index: tests/other-fs-tmpdir
|
||||
===================================================================
|
||||
--- tests/other-fs-tmpdir.orig
|
||||
+++ tests/other-fs-tmpdir
|
||||
--- tests/other-fs-tmpdir.orig 2015-07-09 14:59:20.898259238 +0200
|
||||
+++ tests/other-fs-tmpdir 2015-07-09 14:59:27.227110899 +0200
|
||||
@@ -43,6 +43,9 @@ for d in $CANDIDATE_TMP_DIRS; do
|
||||
|
||||
done
|
||||
|
@ -11,14 +11,14 @@ Subject: [PATCH 1/1] copy: add OCFS2 reflink support
|
||||
|
||||
Signed-off-by: Jie Liu <jeff....@oracle.com>
|
||||
---
|
||||
src/copy.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 90 insertions(+), 8 deletions(-)
|
||||
src/copy.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 91 insertions(+), 8 deletions(-)
|
||||
|
||||
Index: src/copy.c
|
||||
===================================================================
|
||||
--- src/copy.c.orig
|
||||
+++ src/copy.c
|
||||
@@ -229,6 +229,46 @@ sparse_copy (int src_fd, int dest_fd, ch
|
||||
--- src/copy.c.orig 2015-06-26 19:05:22.000000000 +0200
|
||||
+++ src/copy.c 2015-07-09 14:58:48.105027875 +0200
|
||||
@@ -324,6 +324,47 @@ sparse_copy (int src_fd, int dest_fd, ch
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -61,11 +61,12 @@ Index: src/copy.c
|
||||
+ return -1;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* Perform the O(1) btrfs clone operation, if possible.
|
||||
Upon success, return 0. Otherwise, return -1 and set errno. */
|
||||
static inline int
|
||||
@@ -938,6 +978,45 @@ copy_reg (char const *src_name, char con
|
||||
@@ -1040,6 +1081,45 @@ copy_reg (char const *src_name, char con
|
||||
goto close_src_desc;
|
||||
}
|
||||
|
||||
@ -111,7 +112,7 @@ Index: src/copy.c
|
||||
/* The semantics of the following open calls are mandated
|
||||
by the specs for both cp and mv. */
|
||||
if (! *new_dst)
|
||||
@@ -1083,17 +1162,20 @@ copy_reg (char const *src_name, char con
|
||||
@@ -1185,17 +1265,20 @@ copy_reg (char const *src_name, char con
|
||||
/* --attributes-only overrides --reflink. */
|
||||
if (data_copy_required && x->reflink_mode)
|
||||
{
|
||||
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
doc/coreutils.texi | 38 +-------------------------------------
|
||||
1 file changed, 1 insertion(+), 37 deletions(-)
|
||||
doc/coreutils.texi | 42 +-----------------------------------------
|
||||
1 file changed, 1 insertion(+), 41 deletions(-)
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
--- doc/coreutils.texi.orig 2015-06-26 19:05:22.000000000 +0200
|
||||
+++ doc/coreutils.texi 2015-07-09 14:53:28.486520508 +0200
|
||||
@@ -69,7 +69,6 @@
|
||||
* groups: (coreutils)groups invocation. Print group names a user is in.
|
||||
* head: (coreutils)head invocation. Output the first part of files.
|
||||
@ -23,7 +23,7 @@ Index: doc/coreutils.texi
|
||||
* SELinux context:: chcon runcon
|
||||
* Modified command invocation:: chroot env nice nohup stdbuf timeout
|
||||
* Process control:: kill
|
||||
@@ -421,7 +420,6 @@ System context
|
||||
@@ -420,7 +419,6 @@ System context
|
||||
* date invocation:: Print or set system date and time
|
||||
* nproc invocation:: Print the number of processors
|
||||
* uname invocation:: Print system information
|
||||
@ -31,7 +31,7 @@ Index: doc/coreutils.texi
|
||||
* hostid invocation:: Print numeric host identifier
|
||||
* uptime invocation:: Print system uptime and load
|
||||
|
||||
@@ -14922,7 +14920,6 @@ information.
|
||||
@@ -14793,7 +14791,6 @@ information.
|
||||
* arch invocation:: Print machine hardware name.
|
||||
* nproc invocation:: Print the number of processors.
|
||||
* uname invocation:: Print system information.
|
||||
@ -39,7 +39,7 @@ Index: doc/coreutils.texi
|
||||
* hostid invocation:: Print numeric host identifier.
|
||||
* uptime invocation:: Print system uptime and load.
|
||||
@end menu
|
||||
@@ -15744,15 +15741,6 @@ easily available, as is the case with Li
|
||||
@@ -15618,15 +15615,6 @@ easily available, as is the case with Li
|
||||
Print the machine hardware name (sometimes called the hardware class
|
||||
or hardware type).
|
||||
|
||||
@ -55,7 +55,7 @@ Index: doc/coreutils.texi
|
||||
@item -p
|
||||
@itemx --processor
|
||||
@opindex -p
|
||||
@@ -15806,30 +15794,6 @@ Print the kernel version.
|
||||
@@ -15680,34 +15668,6 @@ Print the kernel version.
|
||||
|
||||
@exitstatus
|
||||
|
||||
@ -81,6 +81,10 @@ Index: doc/coreutils.texi
|
||||
-The only options are @option{--help} and @option{--version}. @xref{Common
|
||||
-options}.
|
||||
-
|
||||
-@command{hostname} is not installed by default, and other packages
|
||||
-also supply a @command{hostname} command, so portable scripts should
|
||||
-not rely on its existence or on the exact behavior documented above.
|
||||
-
|
||||
-@exitstatus
|
||||
-
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
--- doc/coreutils.texi.orig 2015-07-09 14:53:50.295009198 +0200
|
||||
+++ doc/coreutils.texi 2015-07-09 14:54:48.805637437 +0200
|
||||
@@ -72,7 +72,6 @@
|
||||
* id: (coreutils)id invocation. Print user identity.
|
||||
* install: (coreutils)install invocation. Copy files and set attributes.
|
||||
@ -20,9 +20,9 @@ Index: doc/coreutils.texi
|
||||
* Modified command invocation:: chroot env nice nohup stdbuf timeout
|
||||
-* Process control:: kill
|
||||
* Delaying:: sleep
|
||||
* Numeric operations:: factor seq
|
||||
* Numeric operations:: factor numfmt seq
|
||||
* File permissions:: Access modes
|
||||
@@ -448,10 +446,6 @@ Modified command invocation
|
||||
@@ -447,10 +445,6 @@ Modified command invocation
|
||||
* stdbuf invocation:: Run a command with modified I/O buffering
|
||||
* timeout invocation:: Run a command with a time limit
|
||||
|
||||
@ -33,7 +33,7 @@ Index: doc/coreutils.texi
|
||||
Delaying
|
||||
|
||||
* sleep invocation:: Delay for a specified time
|
||||
@@ -16688,90 +16682,6 @@ the exit status of @var{command} otherwi
|
||||
@@ -16602,90 +16596,6 @@ the exit status of @var{command} otherwi
|
||||
@end display
|
||||
|
||||
|
||||
|
@ -19,9 +19,9 @@ with a diagnostic like:
|
||||
|
||||
Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ gnulib-tests/gnulib.mk
|
||||
@@ -2206,9 +2206,10 @@ EXTRA_DIST += test-time.c
|
||||
--- gnulib-tests/gnulib.mk.orig 2015-06-19 13:24:05.000000000 +0200
|
||||
+++ gnulib-tests/gnulib.mk 2015-07-09 15:11:24.099160681 +0200
|
||||
@@ -2238,9 +2238,10 @@ EXTRA_DIST += test-time.c
|
||||
|
||||
## begin gnulib module tls-tests
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
Index: tests/misc/shuf-reservoir.sh
|
||||
===================================================================
|
||||
--- tests/misc/shuf-reservoir.sh.orig
|
||||
+++ tests/misc/shuf-reservoir.sh
|
||||
--- tests/misc/shuf-reservoir.sh.orig 2015-07-09 16:52:02.577880662 +0200
|
||||
+++ tests/misc/shuf-reservoir.sh 2015-07-09 16:59:38.928158153 +0200
|
||||
@@ -37,8 +37,7 @@ run_shuf_n()
|
||||
|
||||
# Critical memory-related bugs will cause a segfault here
|
||||
|
@ -1,45 +0,0 @@
|
||||
Upstream patch on top of v8.23; to be removed in v8.24.
|
||||
Avoid a false positive failure of the coreutils-testsuite.
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=bfb4f5c8b7
|
||||
|
||||
Related execve() bug report:
|
||||
https://bugzilla.novell.com/show_bug.cgi?id=915889
|
||||
|
||||
From bfb4f5c8b791fdcc3cdba87a5182fc684fa8cd24 Mon Sep 17 00:00:00 2001
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
Date: Tue, 3 Feb 2015 01:52:04 +0100
|
||||
Subject: [PATCH] tests: avoid a FP on aarch64 when comparing env/printenv
|
||||
output
|
||||
|
||||
The following test fails on aarch64 on openSUSE's OpenBuildService
|
||||
due to glibc's execvp reversing the pointers of 'environ', i.e.,
|
||||
the output of "env|tac" equals "env env" on that platform.
|
||||
|
||||
* tests/misc/printenv.sh: Use 'env env' to work around the behavior
|
||||
on that platform.
|
||||
While at it, fix the grep pattern which suppressed all environment
|
||||
variables starting with an underscore "_" instead of "$_" (and
|
||||
"$LD_PRELOAD") only.
|
||||
---
|
||||
tests/misc/printenv.sh | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: tests/misc/printenv.sh
|
||||
===================================================================
|
||||
--- tests/misc/printenv.sh.orig
|
||||
+++ tests/misc/printenv.sh
|
||||
@@ -23,8 +23,12 @@ print_ver_ printenv
|
||||
# printenv as a builtin, so we must invoke it via "env".
|
||||
# But beware of $_, set by many shells to the last command run.
|
||||
# Also, filter out LD_PRELOAD, which is set when running under valgrind.
|
||||
-env | grep -Ev '^(_|LD_PRELOAD=)' > exp || framework_failure_
|
||||
-env -- printenv | grep -Ev '^(_|LD_PRELOAD=)' > out || fail=1
|
||||
+# Note the apparently redundant "env env": this is to ensure to get
|
||||
+# env's output the same way as that of printenv and works around a bug
|
||||
+# on aarch64 at least where libc's execvp reverses the order of the
|
||||
+# output.
|
||||
+env -- env | grep -Ev '^(_|LD_PRELOAD)=' > exp || framework_failure_
|
||||
+env -- printenv | grep -Ev '^(_|LD_PRELOAD)=' > out || fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
# POSIX is clear that environ may, but need not be, sorted.
|
@ -1,100 +0,0 @@
|
||||
Upstream patch on top of v8.23 (to be removed with v8.24).
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=111a2b91da
|
||||
|
||||
From 111a2b91da142bf6fb9edb7836c1979ba698cf6e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Wed, 29 Oct 2014 14:08:05 +0000
|
||||
Subject: [PATCH] tests: make inotify-rotate more robust and efficient
|
||||
|
||||
* tests/tail-2/inotify-rotate.sh: Use retry_delay_
|
||||
to employ an exponential backoff with a total delay of
|
||||
up to 25.5s. The 15s delay was seen to trigger a false
|
||||
failure in http://hydra.nixos.org/build/16546517
|
||||
Also remove the .1s sleep in each of the 50 iterations
|
||||
to reduce the running time of the test and thus the
|
||||
expensive_ tag on this test was removed.
|
||||
Also ensure that we use the standard exit procedure
|
||||
upon failure to avoid any erroneous diagnostics due
|
||||
to persistent files on NFS.
|
||||
---
|
||||
tests/tail-2/inotify-rotate.sh | 45 ++++++++++++++++++++++-------------------
|
||||
1 file changed, 25 insertions(+), 20 deletions(-)
|
||||
|
||||
Index: tests/tail-2/inotify-rotate.sh
|
||||
===================================================================
|
||||
--- tests/tail-2/inotify-rotate.sh.orig
|
||||
+++ tests/tail-2/inotify-rotate.sh
|
||||
@@ -22,48 +22,53 @@ if test "$VERBOSE" = yes; then
|
||||
fi
|
||||
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
-expensive_
|
||||
|
||||
-# Wait several seconds for grep REGEXP FILE to succeed.
|
||||
-# Usage: grep_timeout REGEXP FILE
|
||||
-grep_timeout()
|
||||
+check_tail_output()
|
||||
{
|
||||
- local j
|
||||
- for j in $(seq 150); do
|
||||
- grep $1 $2 > /dev/null && return 0
|
||||
- sleep 0.1
|
||||
- done
|
||||
- return 1
|
||||
+ local delay="$1"
|
||||
+ grep "$tail_re" out > /dev/null ||
|
||||
+ { sleep $delay; return 1; }
|
||||
}
|
||||
|
||||
+# Wait up to 25.5 seconds for grep REGEXP 'out' to succeed.
|
||||
+grep_timeout() { tail_re="$1" retry_delay_ check_tail_output .1 8; }
|
||||
+
|
||||
# For details, see
|
||||
# http://lists.gnu.org/archive/html/bug-coreutils/2009-11/msg00213.html
|
||||
|
||||
+cleanup_fail()
|
||||
+{
|
||||
+ cat out
|
||||
+ warn_ $1
|
||||
+ kill $pid
|
||||
+}
|
||||
+
|
||||
# Perform at least this many iterations, because on multi-core systems
|
||||
# the offending sequence of events can be surprisingly uncommon.
|
||||
for i in $(seq 50); do
|
||||
echo $i
|
||||
- rm -rf k x out
|
||||
+ rm -f k x out
|
||||
+
|
||||
# Normally less than a second is required here, but with heavy load
|
||||
# and a lot of disk activity, even 20 seconds is insufficient, which
|
||||
# leads to this timeout killing tail before the "ok" is written below.
|
||||
>k && >x || framework_failure_ failed to initialize files
|
||||
- timeout 40 tail -F k > out 2>&1 &
|
||||
+ timeout 60 tail -F k > out 2>&1 &
|
||||
pid=$!
|
||||
- sleep .1
|
||||
+
|
||||
echo b > k;
|
||||
# wait for b to appear in out
|
||||
- grep_timeout b out || fail_ failed to find b in out
|
||||
- while :; do grep b out > /dev/null && break; done
|
||||
+ grep_timeout 'b' || { cleanup_fail 'failed to find b in out'; break; }
|
||||
+
|
||||
mv x k
|
||||
# wait for tail to detect the rename
|
||||
- grep_timeout tail: out || { cat out; fail_ failed to detect rename; }
|
||||
+ grep_timeout 'tail:' || { cleanup_fail 'failed to detect rename'; break; }
|
||||
+
|
||||
echo ok >> k
|
||||
- found=0
|
||||
- # wait up to 10 seconds for "ok" to appear in out
|
||||
- grep_timeout ok out && found=1
|
||||
+ # wait for "ok" to appear in 'out'
|
||||
+ grep_timeout 'ok' || { cleanup_fail 'failed to detect echoed ok'; break; }
|
||||
+
|
||||
kill $pid
|
||||
- test $found = 0 && { cat out; fail_ failed to detect echoed '"ok"'; }
|
||||
done
|
||||
|
||||
wait
|
@ -1,20 +0,0 @@
|
||||
Avoid spurious false positives on OBS due to high load.
|
||||
Increase threshold, as most failures in the last 2 years
|
||||
have been seen with around 60-63 seconds.
|
||||
---
|
||||
tests/rm/ext3-perf.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: tests/rm/ext3-perf.sh
|
||||
===================================================================
|
||||
--- tests/rm/ext3-perf.sh.orig
|
||||
+++ tests/rm/ext3-perf.sh
|
||||
@@ -24,7 +24,7 @@ very_expensive_
|
||||
# Using rm -rf to remove a 400k-entry directory takes:
|
||||
# - 9 seconds with the patch, on a 2-yr-old system
|
||||
# - 350 seconds without the patch, on a high-end system (disk 20-30% faster)
|
||||
-threshold_seconds=60
|
||||
+threshold_seconds=90 # increased on OBS, was: 60
|
||||
|
||||
# The number of entries in our test directory.
|
||||
n=400000
|
@ -14,9 +14,9 @@ or arm6l. Strip the tests down from 37 to 3.
|
||||
|
||||
Index: tests/local.mk
|
||||
===================================================================
|
||||
--- tests/local.mk.orig
|
||||
+++ tests/local.mk
|
||||
@@ -662,14 +662,9 @@ all_tests = \
|
||||
--- tests/local.mk.orig 2015-07-09 15:10:56.769806990 +0200
|
||||
+++ tests/local.mk 2015-07-09 15:10:56.839805334 +0200
|
||||
@@ -678,14 +678,9 @@ all_tests = \
|
||||
# See tests/factor/create-test.sh.
|
||||
tf = tests/factor
|
||||
factor_tests = \
|
||||
|
@ -1,3 +1,181 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 16 01:28:36 UTC 2015 - mail@bernhard-voelker.de
|
||||
|
||||
- Sync I18N patch from semi-official repository (shared among
|
||||
distributions, maintained by Padraig Brady):
|
||||
https://github.com/pixelb/coreutils/tree/i18n
|
||||
* coreutils-i18n.patch: Improve cut(1) performance in field-mode
|
||||
in UTF8 locales. Squash in sort-keycompare-mb.patch.
|
||||
* sort-keycompare-mb.patch: Remove.
|
||||
|
||||
- coreutils-build-timeout-as-pie.patch: Refresh.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 9 15:12:10 CEST 2015 - pth@suse.de
|
||||
|
||||
- Update to 8.24:
|
||||
** Bug fixes
|
||||
|
||||
* dd supports more robust SIGINFO/SIGUSR1 handling for outputting statistics.
|
||||
Previously those signals may have inadvertently terminated the process.
|
||||
|
||||
* df --local no longer hangs with inaccessible remote mounts.
|
||||
[bug introduced in coreutils-8.21]
|
||||
|
||||
* du now silently ignores all directory cycles due to bind mounts.
|
||||
Previously it would issue a warning and exit with a failure status.
|
||||
[bug introduced in coreutils-8.1 and partially fixed in coreutils-8.23]
|
||||
|
||||
* chroot again calls chroot(DIR) and chdir("/"), even if DIR is "/".
|
||||
This handles separate bind mounted "/" trees, and environments
|
||||
depending on the implicit chdir("/").
|
||||
[bugs introduced in coreutils-8.23]
|
||||
|
||||
* cp no longer issues an incorrect warning about directory hardlinks when a
|
||||
source directory is specified multiple times. Now, consistent with other
|
||||
file types, a warning is issued for source directories with duplicate names,
|
||||
or with -H the directory is copied again using the symlink name.
|
||||
|
||||
* factor avoids writing partial lines, thus supporting parallel operation.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
* head, od, split, tac, tail, and wc no longer mishandle input from files in
|
||||
/proc and /sys file systems that report somewhat-incorrect file sizes.
|
||||
|
||||
* mkdir --parents -Z now correctly sets the context for the last component,
|
||||
even if the parent directory exists and has a different default context.
|
||||
[bug introduced with the -Z restorecon functionality in coreutils-8.22]
|
||||
|
||||
* numfmt no longer outputs incorrect overflowed values seen with certain
|
||||
large numbers, or with numbers with increased precision.
|
||||
[bug introduced when numfmt was added in coreutils-8.21]
|
||||
|
||||
* numfmt now handles leading zeros correctly, not counting them when
|
||||
settings processing limits, and making them optional with floating point.
|
||||
[bug introduced when numfmt was added in coreutils-8.21]
|
||||
|
||||
* paste no longer truncates output for large input files. This would happen
|
||||
for example with files larger than 4GiB on 32 bit systems with a '\n'
|
||||
character at the 4GiB position.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
* rm indicates the correct number of arguments in its confirmation prompt,
|
||||
on all platforms. [bug introduced in coreutils-8.22]
|
||||
|
||||
* shuf -i with a single redundant operand, would crash instead of issuing
|
||||
a diagnostic. [bug introduced in coreutils-8.22]
|
||||
|
||||
* tail releases inotify resources when unused. Previously it could exhaust
|
||||
resources with many files, or with -F if files were replaced many times.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
* tail -f again follows changes to a file after it's renamed.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
* tail --follow no longer misses changes to files if those files were
|
||||
replaced before inotify watches were created.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
* tail --follow consistently outputs all data for a truncated file.
|
||||
[bug introduced in the beginning]
|
||||
|
||||
* tail --follow=name correctly outputs headers for multiple files
|
||||
when those files are being created or renamed.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
** New features
|
||||
|
||||
* chroot accepts the new --skip-chdir option to not change the working directory
|
||||
to "/" after changing into the chroot(2) jail, thus retaining the current wor-
|
||||
king directory. The new option is only permitted if the new root directory is
|
||||
the old "/", and therefore is useful with the --group and --userspec options.
|
||||
|
||||
* dd accepts a new status=progress level to print data transfer statistics
|
||||
on stderr approximately every second.
|
||||
|
||||
* numfmt can now process multiple fields with field range specifications similar
|
||||
to cut, and supports setting the output precision with the --format option.
|
||||
|
||||
* split accepts a new --separator option to select a record separator character
|
||||
other than the default newline character.
|
||||
|
||||
* stty allows setting the "extproc" option where supported, which is
|
||||
a useful setting with high latency links.
|
||||
|
||||
* sync no longer ignores arguments, and syncs each specified file, or with the
|
||||
--file-system option, the file systems associated with each specified file.
|
||||
|
||||
* tee accepts a new --output-error option to control operation with pipes
|
||||
and output errors in general.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
* df no longer suppresses separate exports of the same remote device, as
|
||||
these are generally explicitly mounted. The --total option does still
|
||||
suppress duplicate remote file systems.
|
||||
[suppression was introduced in coreutils-8.21]
|
||||
|
||||
* mv no longer supports moving a file to a hardlink, instead issuing an error.
|
||||
The implementation was susceptible to races in the presence of multiple mv
|
||||
instances, which could result in both hardlinks being deleted. Also on case
|
||||
insensitive file systems like HFS, mv would just remove a hardlinked 'file'
|
||||
if called like `mv file File`. The feature was added in coreutils-5.0.1.
|
||||
|
||||
* numfmt --from-unit and --to-unit options now interpret suffixes as SI units,
|
||||
and IEC (power of 2) units are now specified by appending 'i'.
|
||||
|
||||
* tee will exit early if there are no more writable outputs.
|
||||
|
||||
* tee does not treat the file operand '-' as meaning standard output any longer,
|
||||
for better conformance to POSIX. This feature was added in coreutils-5.3.0.
|
||||
|
||||
* timeout --foreground no longer sends SIGCONT to the monitored process,
|
||||
which was seen to cause intermittent issues with GDB for example.
|
||||
|
||||
** Improvements
|
||||
|
||||
* cp,install,mv will convert smaller runs of NULs in the input to holes,
|
||||
and cp --sparse=always avoids speculative preallocation on XFS for example.
|
||||
|
||||
* cp will read sparse files more efficiently when the destination is a
|
||||
non regular file. For example when copying a disk image to a device node.
|
||||
|
||||
* mv will try a reflink before falling back to a standard copy, which is
|
||||
more efficient when moving files across BTRFS subvolume boundaries.
|
||||
|
||||
* stat and tail now know about IBRIX. stat -f --format=%T now reports the file
|
||||
system type, and tail -f uses polling for files on IBRIX file systems.
|
||||
|
||||
* wc -l processes short lines much more efficiently.
|
||||
|
||||
* References from --help and the man pages of utilities have been corrected
|
||||
in various cases, and more direct links to the corresponding online
|
||||
documentation are provided.
|
||||
|
||||
- Patches adapted because of changed sources:
|
||||
coreutils-disable_tests.patch
|
||||
coreutils-i18n.patch
|
||||
coreutils-misc.patch
|
||||
coreutils-ocfs2_reflinks.patch
|
||||
coreutils-remove_hostname_documentation.patch
|
||||
coreutils-remove_kill_documentation.patch
|
||||
coreutils-skip-gnulib-test-tls.patch
|
||||
coreutils-tests-shorten-extreme-factor-tests.patch
|
||||
sort-keycompare-mb.patch
|
||||
|
||||
- Patches removed because they're included in 8.24:
|
||||
coreutils-chroot-perform-chdir-unless-skip-chdir.patch
|
||||
coreutils-df-doc-df-a-includes-duplicate-file-systems.patch
|
||||
coreutils-df-improve-mount-point-selection.patch
|
||||
coreutils-df-show-all-remote-file-systems.patch
|
||||
coreutils-df-total-suppress-separate-remotes.patch
|
||||
coreutils-doc-adjust-reference-to-info-nodes-in-man-pages.patch
|
||||
coreutils-fix_false_du_failure_on_newer_xfs.patch
|
||||
coreutils-fix-man-deps.patch
|
||||
coreutils-tests-aarch64-env.patch
|
||||
coreutils-tests-make-inotify-rotate-more-robust-and-efficient.patch
|
||||
coreutils-tests-rm-ext3-perf-increase-timeout.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jun 3 10:56:39 UTC 2015 - mail@bernhard-voelker.de
|
||||
|
||||
|
@ -21,7 +21,7 @@ Summary: GNU Core Utilities
|
||||
License: GPL-3.0+
|
||||
Group: System/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.23
|
||||
Version: 8.24
|
||||
Release: 0
|
||||
|
||||
#################################################################
|
||||
@ -99,7 +99,6 @@ Source3: baselibs.conf
|
||||
Patch1: coreutils-remove_hostname_documentation.patch
|
||||
Patch3: coreutils-remove_kill_documentation.patch
|
||||
Patch4: coreutils-i18n.patch
|
||||
Patch5: sort-keycompare-mb.patch
|
||||
Patch8: coreutils-sysinfo.patch
|
||||
Patch16: coreutils-invalid-ids.patch
|
||||
|
||||
@ -115,12 +114,6 @@ Patch112: coreutils-getaddrinfo.patch
|
||||
# Assorted fixes
|
||||
Patch113: coreutils-misc.patch
|
||||
|
||||
# Upstream patches for df(1) on top of v8.23, thus aligning with SLES12.
|
||||
Patch201: coreutils-df-improve-mount-point-selection.patch
|
||||
Patch202: coreutils-df-doc-df-a-includes-duplicate-file-systems.patch
|
||||
Patch203: coreutils-df-show-all-remote-file-systems.patch
|
||||
Patch204: coreutils-df-total-suppress-separate-remotes.patch
|
||||
|
||||
# Skip 2 valgrind'ed sort tests on ppc/ppc64 which would fail due to
|
||||
# a glibc issue in mkstemp.
|
||||
Patch300: coreutils-skip-some-sort-tests-on-ppc.patch
|
||||
@ -132,34 +125,9 @@ Patch301: coreutils-skip-gnulib-test-tls.patch
|
||||
# tests: shorten extreme-expensive factor tests
|
||||
Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Fix the dependencies to generate man pages after linking.
|
||||
Patch400: coreutils-fix-man-deps.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Fixes a regression in chroot which did not chdir("/") in all cases.
|
||||
Patch401: coreutils-chroot-perform-chdir-unless-skip-chdir.patch
|
||||
|
||||
Patch416: coreutils-fix_false_du_failure_on_newer_xfs.patch
|
||||
|
||||
Patch500: coreutils-disable_tests.patch
|
||||
Patch501: coreutils-test_without_valgrind.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Avoids a spurious false positive failure due to high load.
|
||||
Patch502: coreutils-tests-make-inotify-rotate-more-robust-and-efficient.patch
|
||||
|
||||
# Avoid false positives on OBS due to high load; increase timeout.
|
||||
Patch503: coreutils-tests-rm-ext3-perf-increase-timeout.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Work around false positives of the testsuite on OBS/aarch64.
|
||||
Patch504: coreutils-tests-aarch64-env.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Fix reference to info pages in man pages (boo#933396).
|
||||
Patch505: coreutils-doc-adjust-reference-to-info-nodes-in-man-pages.patch
|
||||
|
||||
# ================================================
|
||||
%description
|
||||
These are the GNU core utilities. This package is the union of
|
||||
@ -180,7 +148,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%prep
|
||||
%setup -q -n coreutils-%{version}
|
||||
%patch4
|
||||
%patch5
|
||||
%patch1
|
||||
%patch3
|
||||
%patch8
|
||||
@ -193,11 +160,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%patch112
|
||||
%patch113
|
||||
|
||||
%patch201
|
||||
%patch202
|
||||
%patch203
|
||||
%patch204
|
||||
|
||||
%patch300
|
||||
|
||||
%ifarch %ix86 x86_64 ppc ppc64
|
||||
@ -205,16 +167,8 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%endif
|
||||
|
||||
%patch303
|
||||
%patch400
|
||||
%patch401
|
||||
%patch416
|
||||
%patch500
|
||||
%patch501
|
||||
%patch502
|
||||
%patch503
|
||||
|
||||
%patch504
|
||||
%patch505
|
||||
|
||||
#???## We need to statically link to gmp, otherwise we have a build loop
|
||||
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
|
||||
|
@ -1,3 +1,181 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 16 01:28:36 UTC 2015 - mail@bernhard-voelker.de
|
||||
|
||||
- Sync I18N patch from semi-official repository (shared among
|
||||
distributions, maintained by Padraig Brady):
|
||||
https://github.com/pixelb/coreutils/tree/i18n
|
||||
* coreutils-i18n.patch: Improve cut(1) performance in field-mode
|
||||
in UTF8 locales. Squash in sort-keycompare-mb.patch.
|
||||
* sort-keycompare-mb.patch: Remove.
|
||||
|
||||
- coreutils-build-timeout-as-pie.patch: Refresh.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 9 15:12:10 CEST 2015 - pth@suse.de
|
||||
|
||||
- Update to 8.24:
|
||||
** Bug fixes
|
||||
|
||||
* dd supports more robust SIGINFO/SIGUSR1 handling for outputting statistics.
|
||||
Previously those signals may have inadvertently terminated the process.
|
||||
|
||||
* df --local no longer hangs with inaccessible remote mounts.
|
||||
[bug introduced in coreutils-8.21]
|
||||
|
||||
* du now silently ignores all directory cycles due to bind mounts.
|
||||
Previously it would issue a warning and exit with a failure status.
|
||||
[bug introduced in coreutils-8.1 and partially fixed in coreutils-8.23]
|
||||
|
||||
* chroot again calls chroot(DIR) and chdir("/"), even if DIR is "/".
|
||||
This handles separate bind mounted "/" trees, and environments
|
||||
depending on the implicit chdir("/").
|
||||
[bugs introduced in coreutils-8.23]
|
||||
|
||||
* cp no longer issues an incorrect warning about directory hardlinks when a
|
||||
source directory is specified multiple times. Now, consistent with other
|
||||
file types, a warning is issued for source directories with duplicate names,
|
||||
or with -H the directory is copied again using the symlink name.
|
||||
|
||||
* factor avoids writing partial lines, thus supporting parallel operation.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
* head, od, split, tac, tail, and wc no longer mishandle input from files in
|
||||
/proc and /sys file systems that report somewhat-incorrect file sizes.
|
||||
|
||||
* mkdir --parents -Z now correctly sets the context for the last component,
|
||||
even if the parent directory exists and has a different default context.
|
||||
[bug introduced with the -Z restorecon functionality in coreutils-8.22]
|
||||
|
||||
* numfmt no longer outputs incorrect overflowed values seen with certain
|
||||
large numbers, or with numbers with increased precision.
|
||||
[bug introduced when numfmt was added in coreutils-8.21]
|
||||
|
||||
* numfmt now handles leading zeros correctly, not counting them when
|
||||
settings processing limits, and making them optional with floating point.
|
||||
[bug introduced when numfmt was added in coreutils-8.21]
|
||||
|
||||
* paste no longer truncates output for large input files. This would happen
|
||||
for example with files larger than 4GiB on 32 bit systems with a '\n'
|
||||
character at the 4GiB position.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
* rm indicates the correct number of arguments in its confirmation prompt,
|
||||
on all platforms. [bug introduced in coreutils-8.22]
|
||||
|
||||
* shuf -i with a single redundant operand, would crash instead of issuing
|
||||
a diagnostic. [bug introduced in coreutils-8.22]
|
||||
|
||||
* tail releases inotify resources when unused. Previously it could exhaust
|
||||
resources with many files, or with -F if files were replaced many times.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
* tail -f again follows changes to a file after it's renamed.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
* tail --follow no longer misses changes to files if those files were
|
||||
replaced before inotify watches were created.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
* tail --follow consistently outputs all data for a truncated file.
|
||||
[bug introduced in the beginning]
|
||||
|
||||
* tail --follow=name correctly outputs headers for multiple files
|
||||
when those files are being created or renamed.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
** New features
|
||||
|
||||
* chroot accepts the new --skip-chdir option to not change the working directory
|
||||
to "/" after changing into the chroot(2) jail, thus retaining the current wor-
|
||||
king directory. The new option is only permitted if the new root directory is
|
||||
the old "/", and therefore is useful with the --group and --userspec options.
|
||||
|
||||
* dd accepts a new status=progress level to print data transfer statistics
|
||||
on stderr approximately every second.
|
||||
|
||||
* numfmt can now process multiple fields with field range specifications similar
|
||||
to cut, and supports setting the output precision with the --format option.
|
||||
|
||||
* split accepts a new --separator option to select a record separator character
|
||||
other than the default newline character.
|
||||
|
||||
* stty allows setting the "extproc" option where supported, which is
|
||||
a useful setting with high latency links.
|
||||
|
||||
* sync no longer ignores arguments, and syncs each specified file, or with the
|
||||
--file-system option, the file systems associated with each specified file.
|
||||
|
||||
* tee accepts a new --output-error option to control operation with pipes
|
||||
and output errors in general.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
* df no longer suppresses separate exports of the same remote device, as
|
||||
these are generally explicitly mounted. The --total option does still
|
||||
suppress duplicate remote file systems.
|
||||
[suppression was introduced in coreutils-8.21]
|
||||
|
||||
* mv no longer supports moving a file to a hardlink, instead issuing an error.
|
||||
The implementation was susceptible to races in the presence of multiple mv
|
||||
instances, which could result in both hardlinks being deleted. Also on case
|
||||
insensitive file systems like HFS, mv would just remove a hardlinked 'file'
|
||||
if called like `mv file File`. The feature was added in coreutils-5.0.1.
|
||||
|
||||
* numfmt --from-unit and --to-unit options now interpret suffixes as SI units,
|
||||
and IEC (power of 2) units are now specified by appending 'i'.
|
||||
|
||||
* tee will exit early if there are no more writable outputs.
|
||||
|
||||
* tee does not treat the file operand '-' as meaning standard output any longer,
|
||||
for better conformance to POSIX. This feature was added in coreutils-5.3.0.
|
||||
|
||||
* timeout --foreground no longer sends SIGCONT to the monitored process,
|
||||
which was seen to cause intermittent issues with GDB for example.
|
||||
|
||||
** Improvements
|
||||
|
||||
* cp,install,mv will convert smaller runs of NULs in the input to holes,
|
||||
and cp --sparse=always avoids speculative preallocation on XFS for example.
|
||||
|
||||
* cp will read sparse files more efficiently when the destination is a
|
||||
non regular file. For example when copying a disk image to a device node.
|
||||
|
||||
* mv will try a reflink before falling back to a standard copy, which is
|
||||
more efficient when moving files across BTRFS subvolume boundaries.
|
||||
|
||||
* stat and tail now know about IBRIX. stat -f --format=%T now reports the file
|
||||
system type, and tail -f uses polling for files on IBRIX file systems.
|
||||
|
||||
* wc -l processes short lines much more efficiently.
|
||||
|
||||
* References from --help and the man pages of utilities have been corrected
|
||||
in various cases, and more direct links to the corresponding online
|
||||
documentation are provided.
|
||||
|
||||
- Patches adapted because of changed sources:
|
||||
coreutils-disable_tests.patch
|
||||
coreutils-i18n.patch
|
||||
coreutils-misc.patch
|
||||
coreutils-ocfs2_reflinks.patch
|
||||
coreutils-remove_hostname_documentation.patch
|
||||
coreutils-remove_kill_documentation.patch
|
||||
coreutils-skip-gnulib-test-tls.patch
|
||||
coreutils-tests-shorten-extreme-factor-tests.patch
|
||||
sort-keycompare-mb.patch
|
||||
|
||||
- Patches removed because they're included in 8.24:
|
||||
coreutils-chroot-perform-chdir-unless-skip-chdir.patch
|
||||
coreutils-df-doc-df-a-includes-duplicate-file-systems.patch
|
||||
coreutils-df-improve-mount-point-selection.patch
|
||||
coreutils-df-show-all-remote-file-systems.patch
|
||||
coreutils-df-total-suppress-separate-remotes.patch
|
||||
coreutils-doc-adjust-reference-to-info-nodes-in-man-pages.patch
|
||||
coreutils-fix_false_du_failure_on_newer_xfs.patch
|
||||
coreutils-fix-man-deps.patch
|
||||
coreutils-tests-aarch64-env.patch
|
||||
coreutils-tests-make-inotify-rotate-more-robust-and-efficient.patch
|
||||
coreutils-tests-rm-ext3-perf-increase-timeout.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jun 3 10:56:39 UTC 2015 - mail@bernhard-voelker.de
|
||||
|
||||
|
@ -21,7 +21,7 @@ Summary: GNU Core Utilities
|
||||
License: GPL-3.0+
|
||||
Group: System/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.23
|
||||
Version: 8.24
|
||||
Release: 0
|
||||
|
||||
#################################################################
|
||||
@ -99,7 +99,6 @@ Source3: baselibs.conf
|
||||
Patch1: coreutils-remove_hostname_documentation.patch
|
||||
Patch3: coreutils-remove_kill_documentation.patch
|
||||
Patch4: coreutils-i18n.patch
|
||||
Patch5: sort-keycompare-mb.patch
|
||||
Patch8: coreutils-sysinfo.patch
|
||||
Patch16: coreutils-invalid-ids.patch
|
||||
|
||||
@ -115,12 +114,6 @@ Patch112: coreutils-getaddrinfo.patch
|
||||
# Assorted fixes
|
||||
Patch113: coreutils-misc.patch
|
||||
|
||||
# Upstream patches for df(1) on top of v8.23, thus aligning with SLES12.
|
||||
Patch201: coreutils-df-improve-mount-point-selection.patch
|
||||
Patch202: coreutils-df-doc-df-a-includes-duplicate-file-systems.patch
|
||||
Patch203: coreutils-df-show-all-remote-file-systems.patch
|
||||
Patch204: coreutils-df-total-suppress-separate-remotes.patch
|
||||
|
||||
# Skip 2 valgrind'ed sort tests on ppc/ppc64 which would fail due to
|
||||
# a glibc issue in mkstemp.
|
||||
Patch300: coreutils-skip-some-sort-tests-on-ppc.patch
|
||||
@ -132,34 +125,9 @@ Patch301: coreutils-skip-gnulib-test-tls.patch
|
||||
# tests: shorten extreme-expensive factor tests
|
||||
Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Fix the dependencies to generate man pages after linking.
|
||||
Patch400: coreutils-fix-man-deps.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Fixes a regression in chroot which did not chdir("/") in all cases.
|
||||
Patch401: coreutils-chroot-perform-chdir-unless-skip-chdir.patch
|
||||
|
||||
Patch416: coreutils-fix_false_du_failure_on_newer_xfs.patch
|
||||
|
||||
Patch500: coreutils-disable_tests.patch
|
||||
Patch501: coreutils-test_without_valgrind.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Avoids a spurious false positive failure due to high load.
|
||||
Patch502: coreutils-tests-make-inotify-rotate-more-robust-and-efficient.patch
|
||||
|
||||
# Avoid false positives on OBS due to high load; increase timeout.
|
||||
Patch503: coreutils-tests-rm-ext3-perf-increase-timeout.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Work around false positives of the testsuite on OBS/aarch64.
|
||||
Patch504: coreutils-tests-aarch64-env.patch
|
||||
|
||||
# Upstream patch on top of v8.23 (to be removed in v8.24).
|
||||
# Fix reference to info pages in man pages (boo#933396).
|
||||
Patch505: coreutils-doc-adjust-reference-to-info-nodes-in-man-pages.patch
|
||||
|
||||
# ================================================
|
||||
%description
|
||||
These are the GNU core utilities. This package is the union of
|
||||
@ -180,7 +148,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%prep
|
||||
%setup -q -n coreutils-%{version}
|
||||
%patch4
|
||||
%patch5
|
||||
%patch1
|
||||
%patch3
|
||||
%patch8
|
||||
@ -193,11 +160,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%patch112
|
||||
%patch113
|
||||
|
||||
%patch201
|
||||
%patch202
|
||||
%patch203
|
||||
%patch204
|
||||
|
||||
%patch300
|
||||
|
||||
%ifarch %ix86 x86_64 ppc ppc64
|
||||
@ -205,16 +167,8 @@ the GNU fileutils, sh-utils, and textutils packages.
|
||||
%endif
|
||||
|
||||
%patch303
|
||||
%patch400
|
||||
%patch401
|
||||
%patch416
|
||||
%patch500
|
||||
%patch501
|
||||
%patch502
|
||||
%patch503
|
||||
|
||||
%patch504
|
||||
%patch505
|
||||
|
||||
#???## We need to statically link to gmp, otherwise we have a build loop
|
||||
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
|
||||
|
@ -1,95 +0,0 @@
|
||||
Subject: sort i18n: make sure to NUL-terminate the sort keys
|
||||
|
||||
Fixes http://bugs.gnu.org/18540
|
||||
|
||||
* src/sort.c (keycompare_mb): use the keys alone, i.e. null-terminated.
|
||||
Patch analogously to non-multibyte upstream patch:
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=b877ea4b3e
|
||||
|
||||
* tests/misc/sort.pl (23): Add test, taken from upstream patch:
|
||||
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=4d8c4dfc21
|
||||
(11a): Exempt from MB run, as the collation order in the French
|
||||
locale would provoke a false positive, because the strcoll() comparison
|
||||
between the trailing blank and tabs leads to a different result there.
|
||||
(11b): Likewise.
|
||||
|
||||
---
|
||||
src/sort.c | 22 ++++++++++++++++++++--
|
||||
tests/misc/sort.pl | 5 +++++
|
||||
2 files changed, 25 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/sort.c
|
||||
===================================================================
|
||||
--- src/sort.c.orig
|
||||
+++ src/sort.c
|
||||
@@ -3236,6 +3236,9 @@ keycompare_mb (const struct line *a, con
|
||||
size_t lena = lima <= texta ? 0 : lima - texta;
|
||||
size_t lenb = limb <= textb ? 0 : limb - textb;
|
||||
|
||||
+ char enda IF_LINT (= 0);
|
||||
+ char endb IF_LINT (= 0);
|
||||
+
|
||||
char const *translate = key->translate;
|
||||
bool const *ignore = key->ignore;
|
||||
|
||||
@@ -3255,6 +3258,12 @@ keycompare_mb (const struct line *a, con
|
||||
texta = copy_a; textb = copy_b;
|
||||
lena = new_len_a; lenb = new_len_b;
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ /* Use the keys in-place, temporarily null-terminated. */
|
||||
+ enda = texta[lena]; texta[lena] = '\0';
|
||||
+ endb = textb[lenb]; textb[lenb] = '\0';
|
||||
+ }
|
||||
|
||||
if (key->random)
|
||||
diff = compare_random (texta, lena, textb, lenb);
|
||||
@@ -3278,13 +3287,22 @@ keycompare_mb (const struct line *a, con
|
||||
diff = 1;
|
||||
else if (hard_LC_COLLATE && !folding)
|
||||
{
|
||||
- diff = xmemcoll0 (texta, lena, textb, lenb);
|
||||
+ diff = xmemcoll0 (texta, lena + 1, textb, lenb + 1);
|
||||
}
|
||||
else
|
||||
- diff = memcmp (texta, textb, MIN (lena + 1,lenb + 1));
|
||||
+ {
|
||||
+ diff = memcmp (texta, textb, MIN (lena, lenb));
|
||||
+ if (diff == 0)
|
||||
+ diff = lena < lenb ? -1 : lena != lenb;
|
||||
+ }
|
||||
|
||||
if (ignore || translate)
|
||||
free (texta);
|
||||
+ else
|
||||
+ {
|
||||
+ texta[lena] = enda;
|
||||
+ textb[lenb] = endb;
|
||||
+ }
|
||||
|
||||
if (diff)
|
||||
goto not_equal;
|
||||
Index: tests/misc/sort.pl
|
||||
===================================================================
|
||||
--- tests/misc/sort.pl.orig
|
||||
+++ tests/misc/sort.pl
|
||||
@@ -322,6 +322,10 @@ my @Tests =
|
||||
["22a", '-k 2,2fd -k 1,1r', {IN=>"3 b\n4 B\n"}, {OUT=>"4 B\n3 b\n"}],
|
||||
["22b", '-k 2,2d -k 1,1r', {IN=>"3 b\n4 b\n"}, {OUT=>"4 b\n3 b\n"}],
|
||||
|
||||
+# This fails in Fedora 20, per Göran Uddeborg in: http://bugs.gnu.org/18540
|
||||
+["23", '-s -k1,1 -t/', {IN=>"a b/x\na-b-c/x\n"}, {OUT=>"a b/x\na-b-c/x\n"},
|
||||
+ {ENV => "LC_ALL=$mb_locale"}],
|
||||
+
|
||||
["no-file1", 'no-file', {EXIT=>2}, {ERR=>$no_file}],
|
||||
# This test failed until 1.22f. Sort didn't give an error.
|
||||
# From Will Edgington.
|
||||
@@ -446,6 +450,7 @@ if ($mb_locale ne 'C')
|
||||
#disable several failing tests until investigation, disable all tests with envvars set
|
||||
next if (grep {ref $_ eq 'HASH' && exists $_->{ENV}} (@new_t));
|
||||
next if ($test_name =~ "18g" or $test_name =~ "sort-numeric" or $test_name =~ "08[ab]" or $test_name =~ "03[def]" or $test_name =~ "h4" or $test_name =~ "n1" or $test_name =~ "2[01]a");
|
||||
+ next if ($test_name =~ "11[ab]"); # avoid FP: expected result differs to MB result due to collation rules.
|
||||
push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}];
|
||||
}
|
||||
push @Tests, @new;
|
Loading…
Reference in New Issue
Block a user