mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-20 02:36:16 +02:00
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.
This commit is contained in:
2
NEWS
2
NEWS
@@ -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.
|
||||
|
||||
@@ -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. */
|
||||
|
||||
2
src/cp.c
2
src/cp.c
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user