1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-07-25 10:16:53 +02:00

cp: issue correct warning and ignore duplicate source dirs

* src/copy.c (copy_internal): Handle the case where we have the
same destination directory as already encountered, which can only
be due to the corresponding source directory being specified multiple
times.
* tests/cp/duplicate-sources.sh: Add a test for the new multiply
specified directory case, and the existing multiply specified file case.
* tests/local.mk: Reference the new test.
* NEWS: Mention the bug fix.
This commit is contained in:
Pádraig Brady
2014-09-17 18:50:08 +01:00
parent 8e93dc6297
commit 90aa291c39
4 changed files with 53 additions and 0 deletions
+6
View File
@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*-
* Noteworthy changes in release ?.? (????-??-??) [?]
** Bug fixes
cp no longer issues an incorrect warning about directory hardlinks when a
source directory is specified multiple times. Instead a warning is issued
and the duplicate source directory is skipped, as already the case for files.
** New features
chroot accepts the new --skip-chdir option to not change the working directory
+11
View File
@@ -2187,6 +2187,17 @@ copy_internal (char const *src_name, char const *dst_name,
*copy_into_self = true;
goto un_backup;
}
else if (same_name (dst_name, earlier_file))
{
error (0, 0, _("warning: source directory %s "
"specified more than once"),
quote (top_level_src_name));
/* We only do backups in move mode and for non dirs,
and in move mode this won't be the issue as the source will
be missing for subsequent attempts.
There we just warn and return here. */
return true;
}
else if (x->dereference == DEREF_ALWAYS)
{
/* This happens when e.g., encountering a directory for the
+35
View File
@@ -0,0 +1,35 @@
#!/bin/sh
# Ensure cp warns about but otherwise ignores source
# items specified multiple times.
# Copyright (C) 2014 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ cp
mkdir a b || framework_failure_
touch f || framework_failure_
cp -a a a f f b 2>err || fail=1
cat <<EOF >exp
cp: warning: source directory 'a' specified more than once
cp: warning: source file 'f' specified more than once
EOF
compare exp err || fail=1
Exit $fail
+1
View File
@@ -427,6 +427,7 @@ all_tests = \
tests/cp/dir-rm-dest.sh \
tests/cp/dir-slash.sh \
tests/cp/dir-vs-file.sh \
tests/cp/duplicate-sources.sh \
tests/cp/existing-perm-dir.sh \
tests/cp/existing-perm-race.sh \
tests/cp/fail-perm.sh \