1
0
mirror of https://github.com/rclone/rclone.git synced 2025-01-13 20:38:12 +02:00
rclone/fs
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
..
accounting accounting: fix race detected by the race detector 2024-08-14 21:13:09 +01:00
asyncreader
cache fs/cache: add PutErr to add an fs.Fs with an fs.ErrorIsFile error to the cache 2024-02-29 16:21:41 +00:00
chunkedreader chunkedreader: add --vfs-read-chunk-streams to parallel read chunks 2024-08-14 21:13:09 +01:00
chunksize
config listremotes: added options for filtering, ordering and json output 2024-08-08 13:41:31 +01:00
dirtree
driveletter build: remove build constraint syntax for go 1.16 and older 2024-04-18 16:53:55 +02:00
filter filter: add options for glob to regexp without anchors and special path rules 2024-08-08 13:41:31 +01:00
fserrors build: fix linting issues reported by running golangci-lint with different GOOS 2024-04-22 19:29:12 +02:00
fshttp webdav: add --webdav-unix-socket-path to connect to a unix socket 2024-08-15 15:14:51 +01:00
fspath build: remove build constraint syntax for go 1.16 and older 2024-04-18 16:53:55 +02:00
hash hash: allow runtime configuration of supported hashes for testing 2023-11-24 11:19:58 +00:00
list fs: allow Metadata calls to be called with Directory or Object 2024-02-27 10:56:19 +00:00
log fs: convert main options to new config system 2024-07-15 11:09:54 +01:00
logger fs/logger: make the tests deterministic 2024-06-12 16:39:30 +01:00
march march: Fix excessive parallelism when using --no-traverse 2023-11-20 17:36:31 +00:00
object operations: ensure SrcFsType is set correctly when using --metadata-mapper 2024-05-20 18:16:54 +01:00
operations local: add server-side copy with xattrs on macOS (part-fix #1710) 2024-08-15 15:36:38 +01:00
rc build: fix govet lint errors with golangci-lint v1.60.1 2024-08-14 18:25:40 +01:00
sync local: add server-side copy with xattrs on macOS (part-fix #1710) 2024-08-15 15:36:38 +01:00
walk fs/test: fix erratic test 2024-07-15 11:09:54 +01:00
backend_config_test.go
backend_config.go
bits_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
bits.go fs: fix docs for Bits 2023-10-23 15:43:55 +01:00
bwtimetable_test.go fs: Allow semicolons as well as spaces in --bwlimit timetable parsing - fixes #7595 2024-07-17 11:04:01 +01:00
bwtimetable.go fs: Allow semicolons as well as spaces in --bwlimit timetable parsing - fixes #7595 2024-07-17 11:04:01 +01:00
config_list_test.go
config_list.go
config_test.go
config.go fs: convert main options to new config system 2024-07-15 11:09:54 +01:00
configmap.go fs: fix the defaults overriding the actual config 2024-07-15 11:09:54 +01:00
countsuffix_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
countsuffix.go
cutoffmode_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
cutoffmode.go fs: re-implement CutoffMode, LogLevel, TerminalColorMode with Enum 2023-10-03 15:14:24 +01:00
daemon_other.go build: remove build constraint syntax for go 1.16 and older 2024-04-18 16:53:55 +02:00
daemon_unix.go build: remove build constraint syntax for go 1.16 and older 2024-04-18 16:53:55 +02:00
deletemode.go
dir_wrapper.go combine: fix CopyDirMetadata error on upstream root 2024-03-07 11:09:07 +00:00
dir.go fs: allow Metadata calls to be called with Directory or Object 2024-02-27 10:56:19 +00:00
direntries_test.go
direntries.go
dump_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
dump.go fs: implement --metadata-mapper to transform metatadata with a user supplied program 2023-11-18 17:49:35 +00:00
enum_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
enum.go fs: re-implement CutoffMode, LogLevel, TerminalColorMode with Enum 2023-10-03 15:14:24 +01:00
features.go fs: add Directory Metadata flags for backends and interfaces 2024-02-27 10:56:19 +00:00
fingerprint_test.go
fingerprint.go
fs_test.go rc: add options/info call to enumerate options 2024-07-15 11:09:54 +01:00
fs.go
log_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
log.go fs: convert main options to new config system 2024-07-15 11:09:54 +01:00
metadata_mapper_code.go build: remove build constraint syntax for go 1.16 and older 2024-04-18 16:53:55 +02:00
metadata_test.go fs: implement --metadata-mapper to transform metatadata with a user supplied program 2023-11-18 17:49:35 +00:00
metadata.go fs: allow Metadata calls to be called with Directory or Object 2024-02-27 10:56:19 +00:00
mimetype.go fs: allow Metadata calls to be called with Directory or Object 2024-02-27 10:56:19 +00:00
mount_helper_test.go
mount_helper.go
newfs_test.go
newfs.go fs: refactor fs.ConfigMap to take a prefix and Options rather than an fs.RegInfo 2024-07-15 11:09:53 +01:00
open_options_test.go
open_options.go fs: add MetadataAsOpenOptions 2024-03-07 14:44:45 +00:00
override_dir_test.go
override_dir.go
override_test.go
override.go
pacer.go
parseduration_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
parseduration.go fs: improve JSON Unmarshalling for Duration 2024-03-13 18:08:59 +00:00
parsetime_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
parsetime.go
registry.go fs: make sure we load the options defaults to start with 2024-07-15 11:09:54 +01:00
sizesuffix_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
sizesuffix.go
terminalcolormode_test.go fs: re-implement CutoffMode, LogLevel, TerminalColorMode with Enum 2023-10-03 15:14:24 +01:00
terminalcolormode.go fs: re-implement CutoffMode, LogLevel, TerminalColorMode with Enum 2023-10-03 15:14:24 +01:00
tristate_test.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
tristate.go
types.go fs: make Flagger and FlaggerNP interfaces public so we can test flags elsewhere 2024-07-15 11:09:54 +01:00
version.go
versioncheck.go build: update to go1.23rc1 and make go1.21 the minimum required version 2024-07-20 10:54:47 +01:00
versionsuffix.go
versiontag.go Start v1.68.0-DEV development 2024-06-14 17:54:27 +01:00