On 4/19/07, C Sights <[EMAIL PROTECTED]> wrote:
After reading what you both have said, and throwing in some things from
previous knowledge, it seems as though what rsync does can be broken up into
a number pieces.
[...]
It might make the rsync manual more understandable if the long options were
broken up into sections corresponding to these pieces (or other more fitting
pieces).  In each section rsync's default behavior is explained, followed by
the switches that change the default behavior.

I proposed essentially the same thing here:

http://lists.samba.org/archive/rsync/2007-February/017221.html

Let's work on an improved man page together!

To make it easier to explain how rsync works and easier to write the sections
I have diverged from rsync's actual behavior.  Mostly, the conscious changes
were made to the "how files updated" section (which is what started this
conversation).  I've added an imaginary --tweak option.  This option tweaks
metadata if that is the only thing that has changed and can be used with
any "detecting changed files" check.

I like letting the user choose whether to tweak or rewrite the file,
but IMNSHO, --tweak should remain the default behavior.  The only
times you would want --no-tweak are (1) when you never want a process
to see an intermediate state of a file with some but not all tweaks
performed and (2) when you don't want to affect other hard links, in
which case you could use a milder option --no-tweak-hlinked that I
proposed here:

http://lists.samba.org/archive/rsync/2006-September/016207.html

Most users currently in situation (2) elect to receive into a new
destination dir specifying the old one as a --link-dest basis dir,
which would have the same semantics as receiving into the original
destination with --no-tweak.

The conscious changes to the "detecting changed files" part of the manual is
to add that all metadata specified to be transferred is also used when
detecting changed files.  I believe this is how rsync behaves.
[...]
By default rsync checks that both the file's size, last modification time and
any selected metadata to be transferred match on the sender and receiver.  If
the size, last modification time, or any metadata does not match, the file is
transferred.

(The standard term for "selecting metadata to be transferred" is
preserving that metadata.)

That is not rsync's current default behavior.  It would be rsync's
default behavior if --no-tweak were made the default, except for one
technicality.  Rewriting due to a preserved metadata difference would
be considered a local creation rather than a transfer and itemized
with first character "c" rather than "<" or ">", just as with
--link-dest.

I would explain it like this:

By default, rsync considers a file's data to be unchanged if its size
and last modification time match.  If rsync considers the data
changed, it transfers the file.  If rsync considers the data unchanged
but preserved metadata differs, rsync applies the new metadata to the
existing file ("tweaks" the file) unless directed not to do so by
--no-tweak or --no-tweak-hlinked.  In this case, the receiver locally
copies the file, applies the new metadata to the copy, and moves the
copy over the original.

Options for changing what is transferred:

By default rsync transfers _____??_____.

...none of the below and allows the act of transferring (or, I
suppose, locally recreating) a file to set its last-modification time
to the current time.

-p, --perms
        long description here

I think you still mean something different by "transfer" than the rest
of us (and the existing man page) do.  "Transferring" refers only to a
regular file's *data*, not permissions, times, or anything like that.
(The "transfer" also sometimes refers to the entire file list or rsync
run, but Wayne has been moving away from this usage.)  Please refer to
these options as options for changing what is "preserved".

Options for changing how files are updated on the receiver:

By default rsync creates a temporary file on the receiver, deletes the old
file, then moves the temporary file to the place of the old file.

Again, this assumes --no-tweak is made the default.  IMNSHO, the
default should remain --tweak.

Options controlling how files are deleted on receiver:

By default rsync does not delete any files that exist on the receiver but not
the sender.

You could just say "By default rsync does not delete any files from
the destination".

--delete
        delete extraneous files from dest dirs before new files are transferred.
--delete-before
        same as --delete

Better to define --delete-before and say "--delete: same as
--delete-before", because I think Wayne is considering changing
--delete to mean --delete-during sometime in the future.

--delete-excluded
        long description here

I think this option would go better in the section about exclude
filters since the effect of --delete-excluded is essentially to make
"-" mean "H" instead of "H" plus "P".

So, using the motivating example (two files have same contents, (same size,)
different modtimes):
[examples]

All of your examples were accurate assuming --no-tweak is made the
default, except that --no_t should be --no-t (hyphen).

Matt
--
To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync
Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html

Reply via email to