diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2020-06-18 22:16:24 -0700 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2020-06-18 22:38:06 -0700 |
| commit | 25725f9d41735d176d73a757430739fb71c7d043 (patch) | |
| tree | e4df3c3da0aa989125a2b2002fb4cedf7530d691 | |
| parent | 0fe9fdece735234819ead2cad7902ba9a6cd8487 (diff) | |
| download | coreutils-25725f9d41735d176d73a757430739fb71c7d043.tar.gz | |
cp: default to COW
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.
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | doc/coreutils.texi | 19 | ||||
| -rw-r--r-- | src/copy.h | 4 | ||||
| -rw-r--r-- | src/cp.c | 2 | ||||
| -rw-r--r-- | src/install.c | 2 |
5 files changed, 18 insertions, 11 deletions
@@ -15,6 +15,8 @@ GNU coreutils NEWS -*- outline -*- ** Changes in behavior + cp and install now default to copy-on-write (COW) if available. + On GNU/Linux systems, ls no longer issues an error message on directory merely because it was removed. This reverts a change that was made in release 8.32. diff --git a/doc/coreutils.texi b/doc/coreutils.texi index 3432fb2..4bbb960 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -8864,12 +8864,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. @@ -8878,12 +8880,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 @@ -8928,6 +8924,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 @@ -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. */ @@ -793,7 +793,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 22124d5..a94053f 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; |
