diff --git a/coreutils-8.32-cp-reflink-auto.patch b/coreutils-8.32-cp-reflink-auto.patch new file mode 100644 index 0000000..a36c89c --- /dev/null +++ b/coreutils-8.32-cp-reflink-auto.patch @@ -0,0 +1,119 @@ +From 76126e2831580d0df20530f4d6f72189bd4f0b9a Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Thu, 18 Jun 2020 22:16:24 -0700 +Subject: [PATCH] cp: default to COW +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Likewise for ‘install’. Proposed in Bug#24400, and long past due. +* NEWS: +* doc/coreutils.texi (cp invocation): +* src/copy.h (enum Reflink_type): Document this. +* src/cp.c (cp_option_init): +* src/install.c (cp_option_init): Implement this. + +Upstream-commit: 25725f9d41735d176d73a757430739fb71c7d043 +Signed-off-by: Kamil Dudka +--- + doc/coreutils.texi | 19 ++++++++++++------- + src/copy.h | 4 ++-- + src/cp.c | 2 +- + src/install.c | 2 +- + 4 files changed, 16 insertions(+), 11 deletions(-) + +diff --git a/doc/coreutils.texi b/doc/coreutils.texi +index 02e0c1c..2382a16 100644 +--- a/doc/coreutils.texi ++++ b/doc/coreutils.texi +@@ -8854,12 +8854,14 @@ The @var{when} value can be one of the following: + + @table @samp + @item always +-The default behavior: if the copy-on-write operation is not supported ++If the copy-on-write operation is not supported + then report the failure for each file and exit with a failure status. ++Plain @option{--reflink} is equivalent to @option{--reflink=when}. + + @item auto + If the copy-on-write operation is not supported then fall back + to the standard copy behavior. ++This is the default if no @option{--reflink} option is given. + + @item never + Disable copy-on-write operation and use the standard copy behavior. +@@ -8868,12 +8870,6 @@ Disable copy-on-write operation and use the standard copy behavior. + This option is overridden by the @option{--link}, @option{--symbolic-link} + and @option{--attributes-only} options, thus allowing it to be used + to configure the default data copying behavior for @command{cp}. +-For example, with the following alias, @command{cp} will use the +-minimum amount of space supported by the file system. +- +-@example +-alias cp='cp --reflink=auto --sparse=always' +-@end example + + @item --remove-destination + @opindex --remove-destination +@@ -8918,6 +8914,15 @@ This is useful in creating a file for use with the @command{mkswap} command, + since such a file must not have any holes. + @end table + ++For example, with the following alias, @command{cp} will use the ++minimum amount of space supported by the file system. ++(Older versions of @command{cp} can also benefit from ++@option{--reflink=auto} here.) ++ ++@example ++alias cp='cp --sparse=always' ++@end example ++ + @optStripTrailingSlashes + + @item -s +diff --git a/src/copy.h b/src/copy.h +index 874d6f7..a0ad494 100644 +--- a/src/copy.h ++++ b/src/copy.h +@@ -46,10 +46,10 @@ enum Sparse_type + /* Control creation of COW files. */ + enum Reflink_type + { +- /* Default to a standard copy. */ ++ /* Do a standard copy. */ + REFLINK_NEVER, + +- /* Try a COW copy and fall back to a standard copy. */ ++ /* Try a COW copy and fall back to a standard copy; this is the default. */ + REFLINK_AUTO, + + /* Require a COW copy and fail if not available. */ +diff --git a/src/cp.c b/src/cp.c +index 0193df8..9e7ad14 100644 +--- a/src/cp.c ++++ b/src/cp.c +@@ -796,7 +796,7 @@ cp_option_init (struct cp_options *x) + x->move_mode = false; + x->install_mode = false; + x->one_file_system = false; +- x->reflink_mode = REFLINK_NEVER; ++ x->reflink_mode = REFLINK_AUTO; + + x->preserve_ownership = false; + x->preserve_links = false; +diff --git a/src/install.c b/src/install.c +index 4ab44a6..aef16ca 100644 +--- a/src/install.c ++++ b/src/install.c +@@ -264,7 +264,7 @@ cp_option_init (struct cp_options *x) + { + cp_options_default (x); + x->copy_as_regular = true; +- x->reflink_mode = REFLINK_NEVER; ++ x->reflink_mode = REFLINK_AUTO; + x->dereference = DEREF_ALWAYS; + x->unlink_dest_before_opening = true; + x->unlink_dest_after_failed_open = false; +-- +2.25.4 + diff --git a/coreutils.spec b/coreutils.spec index 5ce5ab6..b199bcb 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: A set of basic GNU tools commonly used in shell scripts Name: coreutils Version: 8.32 -Release: 10%{?dist} +Release: 11%{?dist} License: GPLv3+ Url: https://www.gnu.org/software/coreutils/ Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz @@ -19,6 +19,9 @@ Patch1: coreutils-8.32-ls-removed-dir.patch # du: simplify leaf optimization for XFS (#1823247) Patch2: coreutils-8.32-leaf-opt-xfs.patch +# cp: default to --reflink=auto (#1861108) +Patch3: coreutils-8.32-cp-reflink-auto.patch + # disable the test-lock gnulib test prone to deadlock Patch100: coreutils-8.26-test-lock.patch @@ -275,6 +278,9 @@ rm -f $RPM_BUILD_ROOT%{_infodir}/dir %license COPYING %changelog +* Thu Jul 30 2020 Kamil Dudka - 8.32-11 +- cp: default to --reflink=auto (#1861108) + * Mon Jul 27 2020 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild