The branch, master has been updated via 14c4656f A couple more NEWS updates. via 13cec31f Set LANG to C to help with some remote build hosts. via 5db7e4b1 Use linkat() if available via 54693fa9 Add a few more skip-compress suffixes. via 3f83bcb4 Make the `--append*` options have more warnings. via e1e546d6 Don't allow a completely empty source arg. from 3714084f Mention an implied option.
https://git.samba.org/?p=rsync.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 14c4656fb8ecd2b41035cb3e1c264ec03f26dcc0 Author: Wayne Davison <wa...@opencoder.net> Date: Mon Jul 27 16:50:47 2020 -0700 A couple more NEWS updates. commit 13cec31f7f80c4e486380ff0b40b3061df5216d2 Author: Wayne Davison <wa...@opencoder.net> Date: Mon Jul 27 16:48:48 2020 -0700 Set LANG to C to help with some remote build hosts. commit 5db7e4b1eefb3fab6a5e5808d718bfe74ee79bc0 Author: Wayne Davison <wa...@opencoder.net> Date: Mon Jul 27 16:36:55 2020 -0700 Use linkat() if available Some OSes have a more capable linkat() function that can hard-link syslinks, so use linkat() when it is available. commit 54693fa992f6c8f66a6caee164117d752ab89cad Author: Wayne Davison <wa...@opencoder.net> Date: Mon Jul 27 15:56:48 2020 -0700 Add a few more skip-compress suffixes. commit 3f83bcb4af0aecaab0107d18897491f0f6e41d89 Author: Wayne Davison <wa...@opencoder.net> Date: Mon Jul 27 15:05:11 2020 -0700 Make the `--append*` options have more warnings. commit e1e546d67e72a83d6e6b6d9ed54f2a4d7e1a6d27 Author: Wayne Davison <wa...@opencoder.net> Date: Mon Jul 27 14:42:21 2020 -0700 Don't allow a completely empty source arg. ----------------------------------------------------------------------- Summary of changes: NEWS.md | 8 ++++++ configure.ac | 11 +++++++- main.c | 7 +++++ packaging/smart-make | 2 ++ rsync.1.md | 79 ++++++++++++++++++++++++++++++++++++++-------------- syscall.c | 6 +++- 6 files changed, 90 insertions(+), 23 deletions(-) Changeset truncated at 500 lines: diff --git a/NEWS.md b/NEWS.md index 66b88758..49eafefb 100644 --- a/NEWS.md +++ b/NEWS.md @@ -26,6 +26,9 @@ - Rsync now complains about a missing `--temp-dir` before starting any file transfers. + - A completely empty source arg is now a fatal error. This doesn't change + the handling of implied dot-dir args such as "localhost:" and such. + ### ENHANCEMENTS: - Allow `--max-alloc=0` to specify no limit to the alloc sanity check. @@ -69,6 +72,9 @@ `hosts deny` daemon parameters. This is a finalized version of the netgroup-auth patch from the patches repo. + - Rsync can now hard-link symlinks on FreeBSD due to it making ues of the + linkat() function when it is available. + - Output file+line info on out-of-memory & overflow errors while also avoiding the output of alternate build-dir path info that is not useful to the user. @@ -80,6 +86,8 @@ - Improved the INSTALL.md info. + - Added a few more suffixes to the default skip-compress list. + ### INTERNAL: - Use a simpler overflow check idiom in a few spots. diff --git a/configure.ac b/configure.ac index 8030eebc..b271e363 100644 --- a/configure.ac +++ b/configure.ac @@ -822,7 +822,7 @@ AC_FUNC_UTIME_NULL AC_FUNC_ALLOCA AC_CHECK_FUNCS(waitpid wait4 getcwd chown chmod lchmod mknod mkfifo \ fchmod fstat ftruncate strchr readlink link utime utimes lutimes strftime \ - chflags getattrlist mktime innetgr \ + chflags getattrlist mktime innetgr linkat \ memmove lchown vsnprintf snprintf vasprintf asprintf setsid strpbrk \ strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \ setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ @@ -946,6 +946,11 @@ fi AC_CACHE_CHECK([whether link() can hard-link symlinks],rsync_cv_can_hardlink_symlink,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#ifdef HAVE_FCNTL_H +# include <fcntl.h> +#elif defined HAVE_SYS_FCNTL_H +# include <sys/fcntl.h> +#endif #if HAVE_UNISTD_H # include <unistd.h> #endif @@ -956,7 +961,11 @@ int main(void) { unlink(FILENAME); if (symlink("conftest.no-such", FILENAME) < 0) abort(); unlink(FILENAME "2"); +#ifdef HAVE_LINKAT + if (linkat(AT_FDCWD, FILENAME, AT_FDCWD, FILENAME "2", 0) < 0) return 1; +#else if (link(FILENAME, FILENAME "2") < 0) return 1; +#endif return 0; }]])],[rsync_cv_can_hardlink_symlink=yes],[rsync_cv_can_hardlink_symlink=no],[rsync_cv_can_hardlink_symlink=no])]) if test $rsync_cv_can_hardlink_symlink = yes; then diff --git a/main.c b/main.c index bfb69797..46b97b58 100644 --- a/main.c +++ b/main.c @@ -1482,8 +1482,15 @@ static int start_client(int argc, char *argv[]) char *dummy_host; int dummy_port = rsync_port; int i; + if (!argv[0][0]) + goto invalid_empty; /* For local source, extra source args must not have hostspec. */ for (i = 1; i < argc; i++) { + if (!argv[i][0]) { + invalid_empty: + rprintf(FERROR, "Empty source arg specified.\n"); + exit_cleanup(RERR_SYNTAX); + } if (check_for_hostspec(argv[i], &dummy_host, &dummy_port)) { rprintf(FERROR, "Unexpected remote arg: %s\n", argv[i]); exit_cleanup(RERR_SYNTAX); diff --git a/packaging/smart-make b/packaging/smart-make index 6b7aa9bf..6f634d64 100755 --- a/packaging/smart-make +++ b/packaging/smart-make @@ -2,6 +2,8 @@ set -e +export LANG=C + make=`which gmake 2>/dev/null` || make=`which make 2>/dev/null` branch=`packaging/prep-auto-dir` diff --git a/rsync.1.md b/rsync.1.md index 6c2b565a..b1ef84e1 100644 --- a/rsync.1.md +++ b/rsync.1.md @@ -938,30 +938,31 @@ your home directory (remove the '=' for that). 0. `--append` - This causes rsync to update a file by appending data onto the end of the - file, which presumes that the data that already exists on the receiving - side is identical with the start of the file on the sending side. If a - file needs to be transferred and its size on the receiver is the same or - longer than the size on the sender, the file is skipped. This does not - interfere with the updating of a file's non-content attributes (e.g. - permissions, ownership, etc.) when the file does not need to be - transferred, nor does it affect the updating of any non-regular files. - Implies `--inplace`. - - The use of `--append` can be dangerous if you aren't 100% sure that the - files that are longer have only grown by the appending of data onto the - end. You should thus use include/exclude/filter rules to ensure that such - a transfer is only affecting files that you know to be growing via appended - data. + This special copy mode only works to efficiently update files that are + known to be growing larger where any existing content on the receiving side + is also known to be the same as the content on the sender. The use of + `--append` **can be dangerous** if you aren't 100% sure that all the files + in the transfer are shared, growing files. You should thus use filter + rules to ensure that you weed out any files that do not fit this criteria. + + Rsync updates these growing file in-place without verifying any of the + existing content in the file (it only verifies the content that it is + appending). Rsync skips any files that exist on the receiving side that + are not shorter than the associated file on the sending side (which means + that new files are trasnferred). + + This does not interfere with the updating of a file's non-content + attributes (e.g. permissions, ownership, etc.) when the file does not need + to be transferred, nor does it affect the updating of any directories or + non-regular files. 0. `--append-verify` - This works just like the `--append` option, but the existing data on the - receiving side is included in the full-file checksum verification step, - which will cause a file to be resent if the final verification step fails - (rsync uses a normal, non-appending `--inplace` transfer for the resend). - It otherwise has the exact same caveats for files that have not grown - larger, so don't use this for a general copy. + This special copy mode works like `--append` except that all the data in + the file is included in the checksum verification (making it much less + efficient but also potentially safer). This option **can be dangerous** if + you aren't 100% sure that all the files in the transfer are shared, growing + files. See the `--append` option for more details. Note: prior to rsync 3.0.0, the `--append` option worked like `--append-verify`, so if you are interacting with an older rsync (or the @@ -2459,27 +2460,53 @@ your home directory (remove the '=' for that). [comment]: # (This list gets used for the default-dont-compress.h file.) + > 3g2 + > 3gp > 7z + > aac > ace > apk > avi > bz2 > deb + > dmg + > ear + > f4v > flac + > flv > gpg > gz > iso > jar > jpeg > jpg + > lrz > lz > lz4 > lzma > lzo + > m1a + > m1v + > m2a + > m2ts + > m2v + > m4a + > m4b + > m4p + > m4r + > m4v + > mka > mkv > mov + > mp1 + > mp2 > mp3 > mp4 + > mpa + > mpeg + > mpg + > mpv + > mts > odb > odf > odg @@ -2488,8 +2515,11 @@ your home directory (remove the '=' for that). > odp > ods > odt + > oga > ogg + > ogm > ogv + > ogx > opus > otg > oth @@ -2498,21 +2528,28 @@ your home directory (remove the '=' for that). > ott > oxt > png + > qt > rar > rpm > rz > rzip + > spx > squashfs > sxc > sxd > sxg > sxm > sxw + > sz > tbz + > tbz2 > tgz > tlz + > ts > txz > tzo + > vob + > war > webm > webp > xz diff --git a/syscall.c b/syscall.c index 80cac204..b9c3b4ef 100644 --- a/syscall.c +++ b/syscall.c @@ -129,12 +129,16 @@ ssize_t do_readlink(const char *path, char *buf, size_t bufsiz) #endif #endif -#ifdef HAVE_LINK +#if defined HAVE_LINK || defined HAVE_LINKAT int do_link(const char *old_path, const char *new_path) { if (dry_run) return 0; RETURN_ERROR_IF_RO_OR_LO; +#ifdef HAVE_LINKAT + return linkat(AT_FDCWD, old_path, AT_FDCWD, new_path, 0); +#else return link(old_path, new_path); +#endif } #endif -- The rsync repository. _______________________________________________ rsync-cvs mailing list rsync-cvs@lists.samba.org https://lists.samba.org/mailman/listinfo/rsync-cvs