mirror of
https://github.com/NixOS/nix
synced 2025-06-29 06:21:14 +02:00
Patch libzip to return timestamps in the Unix epoch
We're not even using those timestamps, but doing the conversion to local time takes a lot of time. For instance, this patch speeds up 'nix flake metadata nixpkgs` from 0.542s to 0.094s.
This commit is contained in:
parent
0286edb588
commit
1483c56582
3 changed files with 21 additions and 11 deletions
|
@ -115,6 +115,7 @@
|
||||||
(libzip.overrideDerivation (old: {
|
(libzip.overrideDerivation (old: {
|
||||||
# Temporary workaround for https://github.com/NixOS/nixpkgs/pull/178755
|
# Temporary workaround for https://github.com/NixOS/nixpkgs/pull/178755
|
||||||
cmakeFlags = old.cmakeFlags or [] ++ [ "-DBUILD_REGRESS=0" ];
|
cmakeFlags = old.cmakeFlags or [] ++ [ "-DBUILD_REGRESS=0" ];
|
||||||
|
patches = [ ./libzip-unix-time.patch ];
|
||||||
}))
|
}))
|
||||||
boost
|
boost
|
||||||
lowdown-nix
|
lowdown-nix
|
||||||
|
|
19
libzip-unix-time.patch
Normal file
19
libzip-unix-time.patch
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
commit 26e8c76ca84999fa5c0e46a9fc3aa7de80be2e9c
|
||||||
|
Author: Eelco Dolstra <edolstra@gmail.com>
|
||||||
|
Date: Mon Oct 10 17:12:47 2022 +0200
|
||||||
|
|
||||||
|
Return time_t in the Unix epoch
|
||||||
|
|
||||||
|
diff --git a/lib/zip_dirent.c b/lib/zip_dirent.c
|
||||||
|
index 7fd2f7ce..5c050b4c 100644
|
||||||
|
--- a/lib/zip_dirent.c
|
||||||
|
+++ b/lib/zip_dirent.c
|
||||||
|
@@ -1018,7 +1018,7 @@ _zip_d2u_time(zip_uint16_t dtime, zip_uint16_t ddate) {
|
||||||
|
tm.tm_min = (dtime >> 5) & 63;
|
||||||
|
tm.tm_sec = (dtime << 1) & 62;
|
||||||
|
|
||||||
|
- return mktime(&tm);
|
||||||
|
+ return timegm(&tm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ struct ZipInputAccessor : InputAccessor
|
||||||
: zipPath(_zipPath)
|
: zipPath(_zipPath)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
zipFile = zip_open(zipPath.c_str(), 0, &error);
|
zipFile = zip_open(zipPath.c_str(), ZIP_RDONLY, &error);
|
||||||
if (!zipFile) {
|
if (!zipFile) {
|
||||||
char errorMsg[1024];
|
char errorMsg[1024];
|
||||||
zip_error_to_str(errorMsg, sizeof errorMsg, error, errno);
|
zip_error_to_str(errorMsg, sizeof errorMsg, error, errno);
|
||||||
|
@ -68,16 +68,6 @@ struct ZipInputAccessor : InputAccessor
|
||||||
if (!slash) continue;
|
if (!slash) continue;
|
||||||
members.emplace(slash, sb);
|
members.emplace(slash, sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* Sigh, libzip returns a local time, so convert to Unix
|
|
||||||
time. */
|
|
||||||
if (lastModified) {
|
|
||||||
struct tm tm;
|
|
||||||
localtime_r(&lastModified, &tm);
|
|
||||||
lastModified = timegm(&tm);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~ZipInputAccessor()
|
~ZipInputAccessor()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue