RsyncProject / rsync

An open source utility that provides fast incremental file transfer. It also has useful features for backup and restore operations among many other use cases.
https://rsync.samba.org
Other
2.72k stars 327 forks source link

Cygwin, failing `itemize` test #260

Open KillyMXI opened 2 years ago

KillyMXI commented 2 years ago

I'm following on my local machine with Cygwin the latest (atm) automated build: https://github.com/WayneD/rsync/runs/4392607951 (commit https://github.com/WayneD/rsync/commit/1f0e62f139565f39020e1f76700828b415b01bcf)

All goes fine except the itemize test:

test log ``` ----- itemize log follows Testing for symlinks using 'test -h' makepath /home/killy/rsync/testtmp/itemize/from/foo makepath /home/killy/rsync/testtmp/itemize/from/bar/baz Running: "/home/killy/rsync/rsync.exe -iplr '/home/killy/rsync/testtmp/itemize/from/' '/home/killy/rsync/testtmp/itemize/to/'" created directory /home/killy/rsync/testtmp/itemize/to cd+++++++++ ./ cd+++++++++ bar/ cd+++++++++ bar/baz/ >f+++++++++ bar/baz/rsync cd+++++++++ foo/ >f+++++++++ foo/config1 >f+++++++++ foo/config2 >f+++++++++ foo/extra cL+++++++++ foo/sym -> ../bar/baz/rsync Running: "/home/killy/rsync/rsync.exe -iplrH '/home/killy/rsync/testtmp/itemize/from/' '/home/killy/rsync/testtmp/itemize/to/'" >f..T...... bar/baz/rsync >f..T...... foo/config1 >f.sTp..... foo/config2 hf..T...... foo/extra => foo/config1 Running: "/home/killy/rsync/rsync.exe -iplrtc '/home/killy/rsync/testtmp/itemize/from/' '/home/killy/rsync/testtmp/itemize/to/'" .f..tp..... bar/baz/rsync .d..t...... foo/ .f..t...... foo/config1 >fcstp..... foo/config2 cLc.t...... foo/sym -> ../bar/baz/rsync Running: "/home/killy/rsync/rsync.exe -vvplrH '/home/killy/rsync/testtmp/itemize/from/' '/home/killy/rsync/testtmp/itemize/to/'" sending incremental file list delta-transmission disabled for local transfer or --whole-file bar/baz/rsync is uptodate foo/config1 is uptodate foo/extra is uptodate foo/sym is uptodate foo/config2 total: matches=0 hash_hits=0 false_alarms=0 data=45899 sent 46,208 bytes received 242 bytes 30,966.67 bytes/sec total size is 179,707 speedup is 3.87 Running: "/home/killy/rsync/rsync.exe -ivvplrtH '/home/killy/rsync/testtmp/itemize/from/' '/home/killy/rsync/testtmp/itemize/to/'" sending incremental file list delta-transmission disabled for local transfer or --whole-file .d ./ .d bar/ .d bar/baz/ .f...p..... bar/baz/rsync .d foo/ .f foo/config1 >f..t...... foo/config2 hf foo/extra .L foo/sym -> ../bar/baz/rsync total: matches=0 hash_hits=0 false_alarms=0 data=45899 sent 46,208 bytes received 134 bytes 30,894.67 bytes/sec total size is 179,707 speedup is 3.88 Running: "/home/killy/rsync/rsync.exe -vplrtH '/home/killy/rsync/testtmp/itemize/from/' '/home/killy/rsync/testtmp/itemize/to/'" sending incremental file list foo/config2 foo/extra sent 46,189 bytes received 48 bytes 92,474.00 bytes/sec total size is 179,707 speedup is 3.89 --- /home/killy/rsync/testtmp/itemize/rsync.chk 2021-12-02 15:06:38.531645800 +0300 +++ /home/killy/rsync/testtmp/itemize/rsync.out 2021-12-02 15:06:39.033307600 +0300 @@ -1 +1,2 @@ foo/config2 +foo/extra Failed: output differs ----- itemize log ends FAIL itemize ```

./configure output, just in case:

`./configure` output ``` aclocal -I m4 autoconf -o configure.sh autoheader && touch config.h.in checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.exe checking for suffix of executables... .exe checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking whether byte ordering is bigendian... no checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking whether time.h and sys/time.h may both be included... yes checking for sys/wait.h that is POSIX.1 compatible... yes checking sys/fcntl.h usability... yes checking sys/fcntl.h presence... yes checking for sys/fcntl.h... yes checking sys/select.h usability... yes checking sys/select.h presence... yes checking for sys/select.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking sys/unistd.h usability... yes checking sys/unistd.h presence... yes checking for sys/unistd.h... yes checking for unistd.h... (cached) yes checking utime.h usability... yes checking utime.h presence... yes checking for utime.h... yes checking compat.h usability... no checking compat.h presence... no checking for compat.h... no checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking ctype.h usability... yes checking ctype.h presence... yes checking for ctype.h... yes checking for sys/wait.h... (cached) yes checking for sys/stat.h... (cached) yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/filio.h usability... no checking sys/filio.h presence... no checking for sys/filio.h... no checking for string.h... (cached) yes checking for stdlib.h... (cached) yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking sys/mode.h usability... no checking sys/mode.h presence... no checking for sys/mode.h... no checking grp.h usability... yes checking grp.h presence... yes checking for grp.h... yes checking sys/un.h usability... yes checking sys/un.h presence... yes checking for sys/un.h... yes checking sys/attr.h usability... no checking sys/attr.h presence... no checking for sys/attr.h... no checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking arpa/nameser.h usability... yes checking arpa/nameser.h presence... yes checking for arpa/nameser.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking for sys/types.h... (cached) yes checking netdb.h usability... yes checking netdb.h presence... yes checking for netdb.h... yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking float.h usability... yes checking float.h presence... yes checking for float.h... yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking iconv.h usability... no checking iconv.h presence... no checking for iconv.h... no checking libcharset.h usability... no checking libcharset.h presence... no checking for libcharset.h... no checking langinfo.h usability... yes checking langinfo.h presence... yes checking for langinfo.h... yes checking mcheck.h usability... no checking mcheck.h presence... no checking for mcheck.h... no checking sys/acl.h usability... yes checking sys/acl.h presence... yes checking for sys/acl.h... yes checking acl/libacl.h usability... yes checking acl/libacl.h presence... yes checking for acl/libacl.h... yes checking attr/xattr.h usability... yes checking attr/xattr.h presence... yes checking for attr/xattr.h... yes checking sys/xattr.h usability... yes checking sys/xattr.h presence... yes checking for sys/xattr.h... yes checking sys/extattr.h usability... no checking sys/extattr.h presence... no checking for sys/extattr.h... no checking dl.h usability... no checking dl.h presence... no checking for dl.h... no checking popt.h usability... no checking popt.h presence... no checking for popt.h... no checking popt/popt.h usability... no checking popt/popt.h presence... no checking for popt/popt.h... no checking linux/falloc.h usability... no checking linux/falloc.h presence... no checking for linux/falloc.h... no checking netinet/in_systm.h usability... yes checking netinet/in_systm.h presence... yes checking for netinet/in_systm.h... yes checking netgroup.h usability... no checking netgroup.h presence... no checking for netgroup.h... no checking zlib.h usability... no checking zlib.h presence... no checking for zlib.h... no checking xxhash.h usability... yes checking xxhash.h presence... yes checking for xxhash.h... yes checking openssl/md4.h usability... yes checking openssl/md4.h presence... yes checking for openssl/md4.h... yes checking openssl/md5.h usability... yes checking openssl/md5.h presence... yes checking for openssl/md5.h... yes checking zstd.h usability... yes checking zstd.h presence... yes checking for zstd.h... yes checking lz4.h usability... yes checking lz4.h presence... yes checking for lz4.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking for netinet/ip.h... yes checking whether sys/types.h defines makedev... yes configure.sh: Configuring rsync 3.2.4dev checking build system type... x86_64-pc-cygwin checking host system type... x86_64-pc-cygwin checking whether to include debugging symbols... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking how to run the C preprocessor... gcc -E checking for g++... no checking for c++... no checking for gpp... no checking for aCC... no checking for CC... CC checking whether we are using the GNU C++ compiler... no checking whether CC accepts -g... no checking for gawk... gawk checking for egrep... (cached) /usr/bin/grep -E checking for a BSD-compatible install... /usr/bin/install -c checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gcc option to accept ISO C99... none needed checking for gcc option to accept ISO Standard C... (cached) none needed checking for perl... /usr/bin/perl checking for python3... /usr/bin/python3 checking if md2man can create man pages... yes checking if we require man-page building... required checking for remsh... 0 checking for sh... /usr/bin/sh checking for fakeroot... /usr/bin/fakeroot checking the group for user "nobody"... nobody checking whether to enable SIMD optimizations... no checking if assembler accepts noexecstack... no checking whether to enable ASM optimizations... no checking for broken largefile support... no checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking whether to enable ipv6... yes checking whether to call shutdown on all sockets... yes checking whether to enable use of openssl crypto library... yes checking for library containing MD5_Init... -lcrypto checking whether to enable xxhash checksum support... yes checking for library containing XXH64_createState... -lxxhash checking whether to enable zstd compression... yes checking for library containing ZSTD_minCLevel... -lzstd checking whether to enable LZ4 compression... yes checking for library containing LZ4_compress_default... -llz4 checking if makedev takes 3 args... no checking size of int... 4 checking size of long... 8 checking size of long long... 8 checking size of short... 2 checking size of int16_t... 2 checking size of uint16_t... 2 checking size of int32_t... 4 checking size of uint32_t... 4 checking size of int64_t... 8 checking size of off_t... 8 checking size of off64_t... 0 checking size of time_t... 8 checking size of char*... 8 checking for inline... inline checking for long double with more range or precision than double... yes checking for uid_t in sys/types.h... yes checking for mode_t... yes checking for off_t... yes checking for size_t... yes checking for pid_t... yes checking for id_t... yes checking type of array argument to getgroups... gid_t checking for struct stat.st_rdev... yes checking for struct stat.st_mtimensec... no checking for struct stat.st_mtimespec.tv_nsec... no checking for struct stat.st_mtim.tv_nsec... yes checking for socklen_t... yes checking for errno in errno.h... yes checking for connect... yes checking for library containing inet_ntop... none required checking for library containing iconv_open... no checking for library containing libiconv_open... no checking for iconv declaration... extern size_t iconv (iconv_t cd, const char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); checking for inet_ntop... yes checking for inet_pton... yes checking for struct addrinfo... yes checking for struct sockaddr_storage... yes checking whether defines needed by getaddrinfo exist... yes checking for getaddrinfo... yes checking for struct sockaddr.sa_len... no checking for struct sockaddr_in.sin_len... no checking for struct sockaddr_un.sun_len... no checking for struct sockaddr_in6.sin6_scope_id... yes checking for struct stat64... no checking for strcasecmp... yes checking for aclsort... yes checking for utime.h... (cached) yes checking whether utime accepts a null argument... yes checking for size_t... (cached) yes checking for working alloca.h... yes checking for alloca... yes checking for waitpid... yes checking for wait4... yes checking for getcwd... yes checking for chown... yes checking for chmod... yes checking for lchmod... no checking for mknod... yes checking for mkfifo... yes checking for fchmod... yes checking for fstat... yes checking for ftruncate... yes checking for strchr... yes checking for readlink... yes checking for link... yes checking for utime... yes checking for utimes... yes checking for lutimes... yes checking for strftime... yes checking for chflags... no checking for getattrlist... no checking for mktime... yes checking for innetgr... no checking for linkat... yes checking for memmove... yes checking for lchown... yes checking for vsnprintf... yes checking for snprintf... yes checking for vasprintf... yes checking for asprintf... yes checking for setsid... yes checking for strpbrk... yes checking for strlcat... yes checking for strlcpy... yes checking for strtol... yes checking for mallinfo... yes checking for getgroups... yes checking for setgroups... yes checking for geteuid... yes checking for getegid... yes checking for setlocale... yes checking for setmode... no checking for open64... no checking for lseek64... no checking for mkstemp64... no checking for mtrace... no checking for va_copy... no checking for __va_copy... no checking for seteuid... yes checking for strerror... yes checking for putenv... yes checking for iconv_open... no checking for locale_charset... no checking for nl_langinfo... yes checking for getxattr... yes checking for extattr_get_link... no checking for sigaction... yes checking for sigprocmask... yes checking for setattrlist... no checking for getgrouplist... yes checking for initgroups... yes checking for utimensat... yes checking for posix_fallocate... yes checking for attropen... no checking for setvbuf... yes checking for nanosleep... yes checking for usleep... yes checking for setenv... yes checking for unsetenv... yes checking for libiconv_open... no checking for useable fallocate... no checking for FALLOC_FL_PUNCH_HOLE... no checking for FALLOC_FL_ZERO_RANGE... no checking for SYS_fallocate... no checking whether posix_fallocate is efficient... yes checking for getpgrp... yes checking for tcgetpgrp... yes checking whether getpgrp requires zero arguments... yes checking whether chown() modifies symlinks... no checking whether link() can hard-link symlinks... yes checking whether link() can hard-link special files... no checking for working socketpair... yes checking for getpass... yes checking for poptGetContext in -lpopt... no checking whether to use included libpopt... ./popt checking whether to use included zlib... ./zlib checking for unsigned char... yes checking for broken readdir... no checking for utimbuf... yes checking if gettimeofday takes tz argument... yes checking for C99 vsnprintf... yes checking for secure mkstemp... yes checking if mknod creates FIFOs... yes checking if mknod creates sockets... (-1 22) no checking whether -c -o works... yes checking for _acl... no checking for __acl... no checking for _facl... no checking for __facl... no checking whether to support ACLs... running tests: checking for acl_get_file in -lacl... yes checking for ACL support... yes checking ACL test results... Using posix ACLs checking for acl_get_perm_np... no checking whether to support extended attributes... Using Linux xattrs checking for getxattr in -lattr... yes checking whether gcc supports -Wno-unused-parameter... yes configure.sh: creating ./config.status config.status: creating Makefile config.status: creating lib/dummy config.status: creating zlib/dummy config.status: creating popt/dummy config.status: creating shconfig config.status: creating config.h rsync 3.2.4dev configuration successful ```

Any guesses what might be wrong?

Update: I then tried to replace the binaries with the ones from the GitHub build artefact and the itemize test is still failing. So my build seems fine, rsync or the test seems to be sensitive to some environment difference. What that might be?

WayneD commented 2 years ago

This is succeeding on my local Windows/Cygwin host and on the Cygwin CI run, and I can't see any obvious reason why it would be weird for you. My only guess is that you're using a different filesystem that is not handling the hard-linked file in the same manner. You might look around (either in the testtmp subdirs or by running the failing commands manually) and see if the file gets hard-linked correctly. Maybe the hardlinking is causing the modified time to get updated?