src/shared/metadata.c — only handles mode, uid, gid, mtime_sec, mtime_nsec
src/shared/metadata.h — struct FileMetadata has no fields for ACLs, xattrs, hard links, or device info
src/shared/file.c — no ACL/xattr restore logic
Impact
Hard links: currently each hard link is transferred as a separate file copy, wasting bandwidth and disk space
ACLs/xattrs: lost on transfer, breaking permission models on systems that rely on them (NFSv4, SELinux, NFSv4 ACLs)
Sparse files: expanded to full size on disk when transferred
Device files: silently skipped or cause errors
Implementation notes
Hard links: scanner needs to track inode/dev pairs and emit a special marker; receiver creates link instead of writing data
ACLs/xattrs: require platform-specific syscalls (acl_get_fd/acl_set_fd on Linux)
Sparse: receiver-side optimization using lseek(SEEK_HOLE) or detecting zero runs
Wire format: metadata struct needs new optional fields with backward-compatible parsing
FastSync currently preserves basic POSIX metadata (mode, uid, gid, mtime) via `-M / --preserve`. Rsync can preserve much more. FastSync should support:
## Missing preservation flags
- `-H, --hard-links` — preserve hard links (detect and recreate same-inode files)
- `-A, --acls` — preserve POSIX ACLs
- `-X, --xattrs` — preserve extended attributes
- `--devices` — preserve device files (requires super-user)
- `--specials` — preserve special files (named sockets, fifos, etc.)
- `-S, --sparse` — handle sparse files efficiently (finding 19)
- `--preallocate` — pre-allocate destination files before writing
- `-O, --omit-dir-times` — omit directories from mtime preservation
- `--super` / `--fake-super` — receiver attempts super-user activities
## Current code
- `src/shared/metadata.c` — only handles mode, uid, gid, mtime_sec, mtime_nsec
- `src/shared/metadata.h` — struct `FileMetadata` has no fields for ACLs, xattrs, hard links, or device info
- `src/shared/file.c` — no ACL/xattr restore logic
## Impact
- Hard links: currently each hard link is transferred as a separate file copy, wasting bandwidth and disk space
- ACLs/xattrs: lost on transfer, breaking permission models on systems that rely on them (NFSv4, SELinux, NFSv4 ACLs)
- Sparse files: expanded to full size on disk when transferred
- Device files: silently skipped or cause errors
## Implementation notes
- Hard links: scanner needs to track inode/dev pairs and emit a special marker; receiver creates link instead of writing data
- ACLs/xattrs: require platform-specific syscalls (acl_get_fd/acl_set_fd on Linux)
- Sparse: receiver-side optimization using lseek(SEEK_HOLE) or detecting zero runs
- Wire format: metadata struct needs new optional fields with backward-compatible parsing
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
FastSync currently preserves basic POSIX metadata (mode, uid, gid, mtime) via
-M / --preserve. Rsync can preserve much more. FastSync should support:Missing preservation flags
-H, --hard-links— preserve hard links (detect and recreate same-inode files)-A, --acls— preserve POSIX ACLs-X, --xattrs— preserve extended attributes--devices— preserve device files (requires super-user)--specials— preserve special files (named sockets, fifos, etc.)-S, --sparse— handle sparse files efficiently (finding 19)--preallocate— pre-allocate destination files before writing-O, --omit-dir-times— omit directories from mtime preservation--super/--fake-super— receiver attempts super-user activitiesCurrent code
src/shared/metadata.c— only handles mode, uid, gid, mtime_sec, mtime_nsecsrc/shared/metadata.h— structFileMetadatahas no fields for ACLs, xattrs, hard links, or device infosrc/shared/file.c— no ACL/xattr restore logicImpact
Implementation notes