summaryrefslogtreecommitdiff
path: root/tests/mv/update.sh
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2023-04-01 16:27:52 +0100
committerPádraig Brady <P@draigBrady.com>2023-04-08 12:11:50 +0100
commitdb28af406f311ac8f78604cc5906613866aecef5 (patch)
tree23c7a3ab85ed425be66ee0ddc8b298769171445d /tests/mv/update.sh
parent5891d28edebe229f1a6057275e281b10c1f2247b (diff)
downloadcoreutils-db28af406f311ac8f78604cc5906613866aecef5.tar.gz
cp,mv: add --update=none to always skip existing files
Add --update=none which is equivalent to the --no-clobber behavior from before coreutils 9.2. I.e. existing files are unconditionally skipped, and them not being replaced does not affect the exit status. * src/copy.h [enum Update_type]: A new type to support parameters to the --update command line option. [enum Interactive]: Add I_ALWAYS_SKIP. * src/copy.c: Treat I_ALWAYS_SKIP like I_ALWAYS_NO (-n), except that we don't fail when skipping. * src/system.h (emit_update_parameters_note): A new function to output the description of the new --update parameters. * src/cp.c (main): Parse --update arguments, ensuring that -n takes precedence if specified. (usage): Describe the new option. Also allude that -u is related in the -n description. * src/mv.c: Accept the new --update parameters and update usage() accordingly. * doc/coreutils.texi (cp invocation): Describe the new --update parameters. Also reference --update from the --no-clobber description. (mv invocation): Likewise. * tests/mv/update.sh: Test the new parameters. * NEWS: Mention the new feature. Addresses https://bugs.gnu.org/62572
Diffstat (limited to 'tests/mv/update.sh')
-rwxr-xr-xtests/mv/update.sh47
1 files changed, 31 insertions, 16 deletions
diff --git a/tests/mv/update.sh b/tests/mv/update.sh
index d3ec6120c..ab7309f06 100755
--- a/tests/mv/update.sh
+++ b/tests/mv/update.sh
@@ -19,11 +19,13 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ cp mv
-echo old > old || framework_failure_
-touch -d yesterday old || framework_failure_
-echo new > new || framework_failure_
-
+test_reset() {
+ echo old > old || framework_failure_
+ touch -d yesterday old || framework_failure_
+ echo new > new || framework_failure_
+}
+test_reset
for interactive in '' -i; do
for cp_or_mv in cp mv; do
# This is a no-op, with no prompt.
@@ -36,19 +38,32 @@ for interactive in '' -i; do
done
done
-# This will actually perform the rename.
-mv --update new old || fail=1
-test -f new && fail=1
-case "$(cat old)" in new) ;; *) fail=1 ;; esac
+# These should perform the rename / copy
+for update_option in '--update' '--update=older' '--update=all' \
+ '--update=none --update=all'; do
+ test_reset
+ mv $update_option new old || fail=1
+ test -f new && fail=1
+ case "$(cat old)" in new) ;; *) fail=1 ;; esac
+
+ test_reset
+ cp $update_option new old || fail=1
+ case "$(cat old)" in new) ;; *) fail=1 ;; esac
+ case "$(cat new)" in new) ;; *) fail=1 ;; esac
+done
-# Restore initial conditions.
-echo old > old || framework_failure_
-touch -d yesterday old || fail=1
-echo new > new || framework_failure_
+# These should not perform the rename / copy
+for update_option in '--update=none' \
+ '--update=all --update=none'; do
+ test_reset
+ mv $update_option new old || fail=1
+ case "$(cat new)" in new) ;; *) fail=1 ;; esac
+ case "$(cat old)" in old) ;; *) fail=1 ;; esac
-# This will actually perform the copy.
-cp --update new old || fail=1
-case "$(cat old)" in new) ;; *) fail=1 ;; esac
-case "$(cat new)" in new) ;; *) fail=1 ;; esac
+ test_reset
+ cp $update_option new old || fail=1
+ case "$(cat new)" in new) ;; *) fail=1 ;; esac
+ case "$(cat old)" in old) ;; *) fail=1 ;; esac
+done
Exit $fail