patch/tests/read-only-files
Andreas Gruenbacher 910fecf695 Add missing feature tests to the test suite
Check for chmod, hardlink, symlink, and special character support to
prevent test suite failures in feature constrained environments.

Thanks to Bruno Haible and Nelson H. F. Beebe for their testing and
analysis.

* tests/test-lib.sh: Add new feature tests.
* tests/hardlinks: Split this hardlinks related test off from
tests/remember-backup-files.
* tests/Makefile.am (TESTS): Add new hardlinks test here.
* tests/file-create-modes, tests/file-modes, tests/read-only-files,
tests/preserve-mode-and-timestamp, tests/no-mode-change-git-diff: These
tests require chmod support.
* tests/hardlinks, tests/unmodified-files: These tests require hardlink
support.
* tests/symlinks: This test requires symlink support.
* tests/quoted-filenames: This test requires special character support
in filenames.
2024-11-11 22:21:27 +01:00

70 lines
1.4 KiB
Plaintext

# Copyright 2009-2024 Free Software Foundation, Inc.
#
# Copying and distribution of this file, with or without modification,
# in any medium, are permitted without royalty provided the copyright
# notice and this notice are preserved.
# Patching read-only files
. $srcdir/test-lib.sh
require cat
require chmod
use_local_patch
use_tmpdir
# --------------------------------------------------------------
: > read-only
chmod a-w read-only
if ( : 2> /dev/null > read-only ); then
echo "Files with read-only permissions are writable" \
"(probably running as superuser)" >&2
exit 77
fi
rm -f read-only
# ==============================================================
cat > f.diff <<EOF
--- f.orig
+++ f
@@ -1 +1 @@
-one
+two
--- f.orig
+++ f
@@ -1 +1 @@
-two
+three
EOF
echo one > f
chmod a=r f
check 'patch -p0 --read-only=fail < f.diff || echo "Status: $?"' <<EOF
File f is read-only; refusing to patch
1 out of 1 hunk ignored -- saving rejects to file f.rej
File f is read-only; refusing to patch
1 out of 1 hunk ignored -- saving rejects to file f.rej
Status: 1
EOF
rm -f f.rej
check 'patch -f -p0 --read-only=warn < f.diff || echo "Status: $?"' <<EOF
File f is read-only; trying to patch anyway
patching file f
File f is read-only; trying to patch anyway
patching file f
EOF
rm -f f
echo one > f
chmod a=r f
check 'patch -f -p0 --read-only=ignore < f.diff || echo "Status: $?"' <<EOF
patching file f
patching file f
EOF