Date: Sun, 15 May 2016 23:30:42 -0700 From: NGie Cooper <yaneurabeya@gmail.com> To: Jilles Tjoelker <jilles@FreeBSD.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r299850 - in head/usr.bin/xinstall: . tests Message-ID: <74BD0EA9-0DE6-4253-8C2A-43B341F1E2F9@gmail.com> In-Reply-To: <201605151317.u4FDH6Ma038967@repo.freebsd.org> References: <201605151317.u4FDH6Ma038967@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> On May 15, 2016, at 06:17, Jilles Tjoelker <jilles@FreeBSD.org> wrote: >=20 > Author: jilles > Date: Sun May 15 13:17:05 2016 > New Revision: 299850 > URL: https://svnweb.freebsd.org/changeset/base/299850 >=20 > Log: > install: When preserving timestamps, also copy the nanoseconds part. >=20 > Modified: > head/usr.bin/xinstall/tests/install_test.sh > head/usr.bin/xinstall/xinstall.c This broke bootstrapping on stable/10, as seen with the recent Jenkins failu= res. > Modified: head/usr.bin/xinstall/tests/install_test.sh > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D > --- head/usr.bin/xinstall/tests/install_test.sh Sun May 15 08:36:12 201= 6 (r299849) > +++ head/usr.bin/xinstall/tests/install_test.sh Sun May 15 13:17:05 201= 6 (r299850) > @@ -64,6 +64,12 @@ copy_to_nonexistent_backup_safe_body() { > copy_to_nonexistent_with_opts -b -B.bak -S > } >=20 > +atf_test_case copy_to_nonexistent_preserving > +copy_to_nonexistent_preserving_body() { > + copy_to_nonexistent_with_opts -p > + [ ! testf -ot copyf ] || atf_fail "bad timestamp 2" > +} > + > copy_self_with_opts() { > printf 'test\n123\r456\r\n789\0z' >testf > printf 'test\n123\r456\r\n789\0z' >testf2 > @@ -307,6 +313,7 @@ atf_init_test_cases() { > atf_add_test_case copy_to_nonexistent_safe_comparing > atf_add_test_case copy_to_nonexistent_backup > atf_add_test_case copy_to_nonexistent_backup_safe > + atf_add_test_case copy_to_nonexistent_preserving > atf_add_test_case copy_self > atf_add_test_case copy_self_safe > atf_add_test_case copy_self_comparing >=20 > Modified: head/usr.bin/xinstall/xinstall.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D > --- head/usr.bin/xinstall/xinstall.c Sun May 15 08:36:12 2016 (r2998= 49) > +++ head/usr.bin/xinstall/xinstall.c Sun May 15 13:17:05 2016 (r2998= 50) > @@ -131,7 +131,7 @@ static void do_symlink(const char *, con > static void makelink(const char *, const char *, const struct stat *); > static void install(const char *, const char *, u_long, u_int); > static void install_dir(char *); > -static void metadata_log(const char *, const char *, struct timeval *,= > +static void metadata_log(const char *, const char *, struct timespec *= , > const char *, const char *, off_t); > static int parseid(const char *, id_t *); > static void strip(const char *); > @@ -722,7 +722,7 @@ static void > install(const char *from_name, const char *to_name, u_long fset, u_int fla= gs) > { > struct stat from_sb, temp_sb, to_sb; > - struct timeval tvb[2]; > + struct timespec tsb[2]; > int devnull, files_match, from_fd, serrno, target; > int tempcopy, temp_fd, to_fd; > char backup[MAXPATHLEN], *p, pathbuf[MAXPATHLEN], tempfile[MAXPATHLEN];= > @@ -857,11 +857,9 @@ install(const char *from_name, const cha > * Need to preserve target file times, though. > */ > if (to_sb.st_nlink !=3D 1) { > - tvb[0].tv_sec =3D to_sb.st_atime; > - tvb[0].tv_usec =3D 0; > - tvb[1].tv_sec =3D to_sb.st_mtime; > - tvb[1].tv_usec =3D 0; > - (void)utimes(tempfile, tvb); > + tsb[0] =3D to_sb.st_atim; > + tsb[1] =3D to_sb.st_mtim; > + (void)utimensat(AT_FDCWD, tempfile, tsb, 0); > } else { > files_match =3D 1; > (void)unlink(tempfile); > @@ -916,11 +914,9 @@ install(const char *from_name, const cha > * Preserve the timestamp of the source file if necessary. > */ > if (dopreserve && !files_match && !devnull) { > - tvb[0].tv_sec =3D from_sb.st_atime; > - tvb[0].tv_usec =3D 0; > - tvb[1].tv_sec =3D from_sb.st_mtime; > - tvb[1].tv_usec =3D 0; > - (void)utimes(to_name, tvb); > + tsb[0] =3D from_sb.st_atim; > + tsb[1] =3D from_sb.st_mtim; > + (void)utimensat(AT_FDCWD, to_name, tsb, 0); > } >=20 > if (fstat(to_fd, &to_sb) =3D=3D -1) { > @@ -989,7 +985,7 @@ install(const char *from_name, const cha > if (!devnull) > (void)close(from_fd); >=20 > - metadata_log(to_name, "file", tvb, NULL, digestresult, to_sb.st_size)= ; > + metadata_log(to_name, "file", tsb, NULL, digestresult, to_sb.st_size)= ; > free(digestresult); > } >=20 > @@ -1301,7 +1297,7 @@ again: > * or to allow integrity checks to be performed. > */ > static void > -metadata_log(const char *path, const char *type, struct timeval *tv, > +metadata_log(const char *path, const char *type, struct timespec *ts, > const char *slink, const char *digestresult, off_t size) > { > static const char extra[] =3D { ' ', '\t', '\n', '\\', '#', '\0' }; > @@ -1355,9 +1351,9 @@ metadata_log(const char *path, const cha > } > if (*type =3D=3D 'f') /* type=3Dfile */ > fprintf(metafp, " size=3D%lld", (long long)size); > - if (tv !=3D NULL && dopreserve) > - fprintf(metafp, " time=3D%lld.%ld", > - (long long)tv[1].tv_sec, (long)tv[1].tv_usec); > + if (ts !=3D NULL && dopreserve) > + fprintf(metafp, " time=3D%lld.%09ld", > + (long long)ts[1].tv_sec, ts[1].tv_nsec); > if (digestresult && digest) > fprintf(metafp, " %s=3D%s", digest, digestresult); > if (fflags) >=20
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?74BD0EA9-0DE6-4253-8C2A-43B341F1E2F9>