rclone/fs/operations
nielash 87ec26001f local: add server-side copy with xattrs on macOS (part-fix #1710)
Before this change, macOS-specific metadata was not preserved by rclone, even for
local-to-local transfers (it does not use the "user." prefix, nor is Mac metadata
limited to xattrs.) Additionally, rclone did not take advantage of APFS's native
"cloning" functionality for fast and deduplicated transfers.

After this change, local (on macOS only) supports "server-side copy" similarly to
other remotes, and achieves this by using (when possible) macOS's native APFS
"cloning", which is the same underlying mechanism deployed when a user
duplicates a file via the Finder UI. This has several advantages over the
previous behavior:

- It is extremely fast (even large files can be cloned instantly)
- It is very efficient in terms of storage, as it automatically deduplicates when
possible (i.e. so that having two identical files does not consume more storage
than having just one.) (The concept is similar to a "hard link", but subsequent
modifications will not affect the original file.)
- It preserves Mac-specific metadata to the maximum degree, including not only
xattrs but also metadata not easily settable by other methods, including Finder
and Spotlight params.

When server-side "clone" is not available (for example, on non-APFS volumes), it
falls back to server-side "copy" (still preserving metadata but using more disk
storage.) It is only used when both remotes are local (and not wrapped by other
remotes, such as crypt.) The behavior of local on non-mac systems is unchanged.
2024-08-15 15:36:38 +01:00
..
operationsflags sync: report list of synced paths to file -- see #7282 2024-01-20 14:50:08 -05:00
check.go vfs: fix unicode normalization on macOS - fixes #7072 2024-03-06 16:12:13 +00:00
check_test.go operations: skip backends incapable of testing TestApplyTransforms - #7591 2024-02-13 15:07:41 -05:00
copy.go operations: ensure SrcFsType is set correctly when using --metadata-mapper 2024-05-20 18:16:54 +01:00
copy_test.go local: add server-side copy with xattrs on macOS (part-fix #1710) 2024-08-15 15:36:38 +01:00
dedupe.go accounting: Make checkers show what they are doing 2023-03-01 11:10:38 +00:00
dedupe_test.go test: replace defer cleanup with t.Cleanup 2022-12-09 14:38:05 +00:00
listdirsorted_test.go test: replace defer cleanup with t.Cleanup 2022-12-09 14:38:05 +00:00
logger.go operations: remove stray debug 2024-03-07 17:15:43 +00:00
lsjson.go operations: fix lsjson --encrypted when using --crypt-XXX parameters 2024-05-13 17:59:58 +01:00
lsjson_test.go lsjson,lsf: make sure metadata appears for directories 2024-02-28 16:26:14 +00:00
multithread.go operations: fix incorrect modtime on some multipart transfers 2024-06-08 17:44:11 +01:00
multithread_test.go operations: fix hashing problem in integration tests 2024-06-12 11:11:54 +01:00
operations.go build: fix govet lint errors with golangci-lint v1.60.1 2024-08-14 18:25:40 +01:00
operations_internal_test.go fs: deglobalise the config #4685 2020-11-26 16:40:12 +00:00
operations_test.go operations: add operations.ReadFile to read the contents of a file into memory 2024-06-13 12:48:46 +01:00
rc.go rc: fix stats groups being ignored in operations/check 2024-03-26 11:23:40 +00:00
rc_test.go operations: add operations/hashsum to the rc as rclone hashsum equivalent 2024-02-29 16:21:42 +00:00
reopen.go operations: fix retries downloading too much data with certain backends 2024-04-13 19:25:15 +01:00
reopen_test.go operations: fix retries downloading too much data with certain backends 2024-04-13 19:25:15 +01:00