mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 22:16:16 +02:00
Misc Windows fixes
1. Fix build by making the legacy SSH Storey's secret `logFD` setting not a setting on Windows. (It doesn't make sense to specify `void *` handles by integer cross-proccess, I don't think.) 2. Move some files that don't need to be Unix-only anymore back to their original locations.
This commit is contained in:
parent
802b4e403b
commit
e0b159549b
11 changed files with 36 additions and 17 deletions
|
@ -125,8 +125,8 @@
|
||||||
''^src/libfetchers/registry\.hh$''
|
''^src/libfetchers/registry\.hh$''
|
||||||
''^src/libfetchers/tarball\.cc$''
|
''^src/libfetchers/tarball\.cc$''
|
||||||
''^src/libfetchers/tarball\.hh$''
|
''^src/libfetchers/tarball\.hh$''
|
||||||
''^src/libfetchers/unix/git\.cc$''
|
''^src/libfetchers/git\.cc$''
|
||||||
''^src/libfetchers/unix/mercurial\.cc$''
|
''^src/libfetchers/mercurial\.cc$''
|
||||||
''^src/libmain/common-args\.cc$''
|
''^src/libmain/common-args\.cc$''
|
||||||
''^src/libmain/common-args\.hh$''
|
''^src/libmain/common-args\.hh$''
|
||||||
''^src/libmain/loggers\.cc$''
|
''^src/libmain/loggers\.cc$''
|
||||||
|
@ -237,11 +237,11 @@
|
||||||
''^src/libstore/build/substitution-goal\.hh$''
|
''^src/libstore/build/substitution-goal\.hh$''
|
||||||
''^src/libstore/build/worker\.cc$''
|
''^src/libstore/build/worker\.cc$''
|
||||||
''^src/libstore/build/worker\.hh$''
|
''^src/libstore/build/worker\.hh$''
|
||||||
''^src/libstore/unix/builtins/fetchurl\.cc$''
|
''^src/libstore/builtins/fetchurl\.cc$''
|
||||||
''^src/libstore/unix/builtins/unpack-channel\.cc$''
|
''^src/libstore/builtins/unpack-channel\.cc$''
|
||||||
''^src/libstore/gc\.cc$''
|
''^src/libstore/gc\.cc$''
|
||||||
''^src/libstore/unix/local-overlay-store\.cc$''
|
''^src/libstore/local-overlay-store\.cc$''
|
||||||
''^src/libstore/unix/local-overlay-store\.hh$''
|
''^src/libstore/local-overlay-store\.hh$''
|
||||||
''^src/libstore/local-store\.cc$''
|
''^src/libstore/local-store\.cc$''
|
||||||
''^src/libstore/local-store\.hh$''
|
''^src/libstore/local-store\.hh$''
|
||||||
''^src/libstore/unix/user-lock\.cc$''
|
''^src/libstore/unix/user-lock\.cc$''
|
||||||
|
|
|
@ -19,7 +19,10 @@
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
# include <sys/wait.h>
|
# include <sys/wait.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
@ -40,6 +43,7 @@ bool isCacheFileWithinTtl(time_t now, const struct stat & st)
|
||||||
|
|
||||||
bool touchCacheFile(const Path & path, time_t touch_time)
|
bool touchCacheFile(const Path & path, time_t touch_time)
|
||||||
{
|
{
|
||||||
|
#ifndef _WIN32 // TODO implement
|
||||||
struct timeval times[2];
|
struct timeval times[2];
|
||||||
times[0].tv_sec = touch_time;
|
times[0].tv_sec = touch_time;
|
||||||
times[0].tv_usec = 0;
|
times[0].tv_usec = 0;
|
||||||
|
@ -47,6 +51,9 @@ bool touchCacheFile(const Path & path, time_t touch_time)
|
||||||
times[1].tv_usec = 0;
|
times[1].tv_usec = 0;
|
||||||
|
|
||||||
return lutimes(path.c_str(), times) == 0;
|
return lutimes(path.c_str(), times) == 0;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Path getCachePath(std::string_view key, bool shallow)
|
Path getCachePath(std::string_view key, bool shallow)
|
||||||
|
@ -98,7 +105,15 @@ bool storeCachedHead(const std::string & actualUrl, const std::string & headRef)
|
||||||
try {
|
try {
|
||||||
runProgram("git", true, { "-C", cacheDir, "--git-dir", ".", "symbolic-ref", "--", "HEAD", headRef });
|
runProgram("git", true, { "-C", cacheDir, "--git-dir", ".", "symbolic-ref", "--", "HEAD", headRef });
|
||||||
} catch (ExecError &e) {
|
} catch (ExecError &e) {
|
||||||
if (!WIFEXITED(e.status)) throw;
|
if (
|
||||||
|
#ifndef WIN32 // TODO abstract over exit status handling on Windows
|
||||||
|
!WIFEXITED(e.status)
|
||||||
|
#else
|
||||||
|
e.status != 0
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
throw;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* No need to touch refs/HEAD, because `git symbolic-ref` updates the mtime. */
|
/* No need to touch refs/HEAD, because `git symbolic-ref` updates the mtime. */
|
||||||
|
@ -329,7 +344,13 @@ struct GitInputScheme : InputScheme
|
||||||
.program = "git",
|
.program = "git",
|
||||||
.args = {"-C", repoInfo.url, "--git-dir", repoInfo.gitDir, "check-ignore", "--quiet", std::string(path.rel())},
|
.args = {"-C", repoInfo.url, "--git-dir", repoInfo.gitDir, "check-ignore", "--quiet", std::string(path.rel())},
|
||||||
});
|
});
|
||||||
auto exitCode = WEXITSTATUS(result.first);
|
auto exitCode =
|
||||||
|
#ifndef WIN32 // TODO abstract over exit status handling on Windows
|
||||||
|
WEXITSTATUS(result.first)
|
||||||
|
#else
|
||||||
|
result.first
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
if (exitCode != 0) {
|
if (exitCode != 0) {
|
||||||
// The path is not `.gitignore`d, we can add the file.
|
// The path is not `.gitignore`d, we can add the file.
|
|
@ -5,16 +5,10 @@ libfetchers_NAME = libnixfetchers
|
||||||
libfetchers_DIR := $(d)
|
libfetchers_DIR := $(d)
|
||||||
|
|
||||||
libfetchers_SOURCES := $(wildcard $(d)/*.cc)
|
libfetchers_SOURCES := $(wildcard $(d)/*.cc)
|
||||||
ifdef HOST_UNIX
|
|
||||||
libfetchers_SOURCES += $(wildcard $(d)/unix/*.cc)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Not just for this library itself, but also for downstream libraries using this library
|
# Not just for this library itself, but also for downstream libraries using this library
|
||||||
|
|
||||||
INCLUDE_libfetchers := -I $(d)
|
INCLUDE_libfetchers := -I $(d)
|
||||||
ifdef HOST_UNIX
|
|
||||||
INCLUDE_libfetchers += -I $(d)/unix
|
|
||||||
endif
|
|
||||||
|
|
||||||
libfetchers_CXXFLAGS += $(INCLUDE_libutil) $(INCLUDE_libstore) $(INCLUDE_libfetchers)
|
libfetchers_CXXFLAGS += $(INCLUDE_libutil) $(INCLUDE_libstore) $(INCLUDE_libfetchers)
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,14 @@ struct LegacySSHStoreConfig : virtual CommonSSHStoreConfig
|
||||||
|
|
||||||
struct LegacySSHStore : public virtual LegacySSHStoreConfig, public virtual Store
|
struct LegacySSHStore : public virtual LegacySSHStoreConfig, public virtual Store
|
||||||
{
|
{
|
||||||
|
#ifndef _WIN32
|
||||||
// Hack for getting remote build log output.
|
// Hack for getting remote build log output.
|
||||||
// Intentionally not in `LegacySSHStoreConfig` so that it doesn't appear in
|
// Intentionally not in `LegacySSHStoreConfig` so that it doesn't appear in
|
||||||
// the documentation
|
// the documentation
|
||||||
const Setting<int> logFD{this, -1, "log-fd", "file descriptor to which SSH's stderr is connected"};
|
const Setting<int> logFD{this, INVALID_DESCRIPTOR, "log-fd", "file descriptor to which SSH's stderr is connected"};
|
||||||
|
#else
|
||||||
|
Descriptor logFD = INVALID_DESCRIPTOR;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct Connection;
|
struct Connection;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ libstore_DIR := $(d)
|
||||||
|
|
||||||
libstore_SOURCES := $(wildcard $(d)/*.cc $(d)/builtins/*.cc $(d)/build/*.cc)
|
libstore_SOURCES := $(wildcard $(d)/*.cc $(d)/builtins/*.cc $(d)/build/*.cc)
|
||||||
ifdef HOST_UNIX
|
ifdef HOST_UNIX
|
||||||
libstore_SOURCES += $(wildcard $(d)/unix/*.cc $(d)/unix/builtins/*.cc $(d)/unix/build/*.cc)
|
libstore_SOURCES += $(wildcard $(d)/unix/*.cc $(d)/unix/build/*.cc)
|
||||||
endif
|
endif
|
||||||
ifdef HOST_LINUX
|
ifdef HOST_LINUX
|
||||||
libstore_SOURCES += $(wildcard $(d)/linux/*.cc)
|
libstore_SOURCES += $(wildcard $(d)/linux/*.cc)
|
||||||
|
|
Loading…
Reference in a new issue