diff --git a/rsync-3.2.3-atimes.patch b/rsync-3.2.3-atimes.patch new file mode 100644 index 0000000..aeba803 --- /dev/null +++ b/rsync-3.2.3-atimes.patch @@ -0,0 +1,48 @@ +diff --git a/rsync.c b/rsync.c +index bcecac63..ff9489be 100644 +--- a/rsync.c ++++ b/rsync.c +@@ -63,8 +63,7 @@ extern char *iconv_opt; + #define UPDATED_ATIME (1<<3) + #define UPDATED_ACLS (1<<4) + #define UPDATED_MODE (1<<5) +- +-#define UPDATED_TIMES (UPDATED_MTIME|UPDATED_ATIME) ++#define UPDATED_CRTIME (1<<6) + + #ifdef ICONV_CONST + iconv_t ic_chck = (iconv_t)-1; +@@ -576,10 +575,11 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, + set_xattr(fname, file, fnamecmp, sxp); + #endif + +- if (!preserve_times +- || (!(preserve_times & PRESERVE_DIR_TIMES) && S_ISDIR(sxp->st.st_mode)) +- || (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(sxp->st.st_mode))) +- flags |= ATTRS_SKIP_MTIME | ATTRS_SKIP_ATIME; ++ if (!preserve_times) ++ flags |= ATTRS_SKIP_MTIME | (atimes_ndx ? 0 : ATTRS_SKIP_ATIME) | (crtimes_ndx ? 0 : ATTRS_SKIP_CRTIME); ++ else if ((!(preserve_times & PRESERVE_DIR_TIMES) && S_ISDIR(sxp->st.st_mode)) ++ || (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(sxp->st.st_mode))) ++ flags |= ATTRS_SKIP_MTIME | ATTRS_SKIP_ATIME | ATTRS_SKIP_CRTIME; + else if (sxp != &sx2) + memcpy(&sx2.st, &sxp->st, sizeof (sx2.st)); + if (!atimes_ndx || S_ISDIR(sxp->st.st_mode)) +@@ -606,7 +606,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, + updated |= UPDATED_ATIME; + } + } +- if (updated & UPDATED_TIMES) { ++ if (updated & (UPDATED_MTIME|UPDATED_ATIME)) { + int ret = set_times(fname, &sx2.st); + if (ret < 0) { + rsyserr(FERROR_XFER, errno, "failed to set times on %s", +@@ -614,7 +614,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, + goto cleanup; + } + if (ret > 0) { /* ret == 1 if symlink could not be set */ +- updated &= ~UPDATED_TIMES; ++ updated &= ~(UPDATED_MTIME|UPDATED_ATIME); + file->flags |= FLAG_TIME_FAILED; + } + } diff --git a/rsync.spec b/rsync.spec index df6d34f..b4284c3 100644 --- a/rsync.spec +++ b/rsync.spec @@ -10,7 +10,7 @@ Summary: A program for synchronizing files over a network Name: rsync Version: 3.2.3 -Release: 12%{?dist} +Release: 13%{?dist} URL: https://rsync.samba.org/ Source0: https://download.samba.org/pub/rsync/src/rsync-%{version}%{?prerelease}.tar.gz @@ -37,6 +37,7 @@ Patch2: rsync-3.2.3-lchmod.patch Patch3: rsync-3.2.3-append-mode.patch Patch4: rsync-3.2.3-xattr.patch Patch5: rsync-3.2.3-segfault.patch +Patch6: rsync-3.2.3-atimes.patch %description Rsync uses a reliable algorithm to bring remote and host files into @@ -76,6 +77,7 @@ patch -p1 -i patches/copy-devices.diff %patch3 -p1 -b .append-mode %patch4 -p1 -b .xattr %patch5 -p1 -b .segfault +%patch6 -p1 -b .atimes %build %configure --disable-xxhash @@ -122,6 +124,9 @@ install -D -m644 %{SOURCE6} $RPM_BUILD_ROOT/%{_unitdir}/rsyncd@.service %systemd_postun_with_restart rsyncd.service %changelog +* Wed May 11 2022 Michal Ruprich - 3.2.3-13 +- Resolves: #2079639 - rsync --atimes doesn't work + * Tue May 03 2022 Michal Ruprich - 3.2.3-12 - Resolves: #2081296 - Enable fmf tests in centos stream