libxbps: apply file timestamps to unmodified files on-disk while unpacking.
This commit is contained in:
parent
b133b9023c
commit
cbe493858c
4
NEWS
4
NEWS
@ -1,5 +1,9 @@
|
|||||||
xbps-0.44 (???):
|
xbps-0.44 (???):
|
||||||
|
|
||||||
|
* libxbps: while unpacking pkg files that were not modified (sha256 hash matched),
|
||||||
|
do not forget to also update the file timestamps on disk, to match
|
||||||
|
what the binary package has stored in the metadata.
|
||||||
|
|
||||||
* xbps-pkgdb(8): this now checks the modification time of pkg files
|
* xbps-pkgdb(8): this now checks the modification time of pkg files
|
||||||
(iff the pkg metadata has that information).
|
(iff the pkg metadata has that information).
|
||||||
|
|
||||||
|
@ -392,6 +392,33 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
"mode to %s.\n", pkgver, entry_pname,
|
"mode to %s.\n", pkgver, entry_pname,
|
||||||
archive_entry_strmode(entry));
|
archive_entry_strmode(entry));
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Check if current file mtime differs from archive entry
|
||||||
|
* in binpkg and apply mtime if true.
|
||||||
|
*/
|
||||||
|
if (!force && file_exists && skip_extract &&
|
||||||
|
(archive_entry_mtime_nsec(entry) != st.st_mtime)) {
|
||||||
|
struct timespec ts[2];
|
||||||
|
|
||||||
|
ts[0].tv_sec = archive_entry_atime(entry);
|
||||||
|
ts[0].tv_nsec = archive_entry_atime_nsec(entry);
|
||||||
|
ts[1].tv_sec = archive_entry_mtime(entry);
|
||||||
|
ts[1].tv_nsec = archive_entry_mtime_nsec(entry);
|
||||||
|
|
||||||
|
if (utimensat(AT_FDCWD, entry_pname, ts,
|
||||||
|
AT_SYMLINK_NOFOLLOW) == -1) {
|
||||||
|
xbps_dbg_printf(xhp,
|
||||||
|
"%s: failed "
|
||||||
|
"to set mtime %ju to %s: %s\n",
|
||||||
|
pkgver, archive_entry_mtime_nsec(entry),
|
||||||
|
entry_pname,
|
||||||
|
strerror(errno));
|
||||||
|
rv = EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
xbps_dbg_printf(xhp, "%s: updated file timestamps to %s\n",
|
||||||
|
pkgver, entry_pname);
|
||||||
|
}
|
||||||
if (!force && skip_extract) {
|
if (!force && skip_extract) {
|
||||||
archive_read_data_skip(ar);
|
archive_read_data_skip(ar);
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user