about summary refs log tree commit diff
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2015-04-18T18·59-0400
committerShea Levy <shea@shealevy.com>2015-04-18T18·59-0400
commitfd6774e285760b384b0d8a0946b8ba8001b67b82 (patch)
treed756815cd9b71270639ad2e5f09dd43156f7428b
parent9b1866b721ba683ac9ec6b8b9a67da25e3183ebf (diff)
Revert "Add the pre-build hook."
Going to reimplement differently.

This reverts commit 1e4a4a2e9fc382f47f58b448f3ee034cdd28218a.
-rw-r--r--doc/manual/command-ref/conf-file.xml33
-rw-r--r--src/libstore/build.cc107
-rw-r--r--src/libstore/globals.cc1
-rw-r--r--src/libstore/globals.hh4
4 files changed, 0 insertions, 145 deletions
diff --git a/doc/manual/command-ref/conf-file.xml b/doc/manual/command-ref/conf-file.xml
index 329d2e485e07..89b8aac7834f 100644
--- a/doc/manual/command-ref/conf-file.xml
+++ b/doc/manual/command-ref/conf-file.xml
@@ -562,39 +562,6 @@ flag, e.g. <literal>--option gc-keep-outputs false</literal>.</para>
   </varlistentry>
 
 
-  <varlistentry xml:id="conf-pre-build-hook"><term><literal>pre-build-hook</literal></term>
-
-    <listitem>
-
-      <para>If set, the path to a program that can set extra
-      derivation-specific settings for this system. This is used for settings
-      that can't be captured by the derivation model itself and are too
-      variable between different versions of the same system to be hard-coded
-      into nix.</para>
-
-      <para>The hook listens on <literal>stdin</literal> for a derivation path.
-      It can then send a series of commands to modify various settings, followed
-      by an empty line to indicate completion. The currently recognized commands
-      are:</para>
-
-      <variablelist>
-        <varlistentry xml:id="extra-chroot-dirs"><term><literal>extra-chroot-dirs</literal></term>
-
-          <listitem>
-
-            <para>Pass a list of files and directories to be included in the
-            chroot for this build. One entry per line, terminated by an empty
-            line.</para>
-
-          </listitem>
-
-        </varlistentry>
-      </variablelist>
-    </listitem>
-
-  </varlistentry>
-
-
 </variablelist>
 
 </para>
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index de33e115412a..1fc5d4181d57 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -89,7 +89,6 @@ static string pathNullDevice = "/dev/null";
 /* Forward definition. */
 class Worker;
 struct HookInstance;
-struct PreBuildHookInstance;
 
 
 /* A pointer to a goal. */
@@ -270,8 +269,6 @@ public:
 
     std::shared_ptr<HookInstance> hook;
 
-    std::shared_ptr<PreBuildHookInstance> preBuildHook;
-
     Worker(LocalStore & store);
     ~Worker();
 
@@ -652,72 +649,6 @@ HookInstance::~HookInstance()
 //////////////////////////////////////////////////////////////////////
 
 
-struct PreBuildHookInstance
-{
-    /* Pipes for talking to the build hook. */
-    Pipe toHook;
-
-    /* Pipe for the hook's standard output/error. */
-    Pipe fromHook;
-
-    /* The process ID of the hook. */
-    Pid pid;
-
-    PreBuildHookInstance();
-
-    ~PreBuildHookInstance();
-};
-
-
-PreBuildHookInstance::PreBuildHookInstance()
-{
-    debug("starting pre-build hook");
-
-    /* Create a pipe to get the output of the child. */
-    fromHook.create();
-
-    /* Create the communication pipes. */
-    toHook.create();
-
-    /* Fork the hook. */
-    pid = startProcess([&]() {
-
-        commonChildInit(fromHook);
-
-        if (chdir("/") == -1) throw SysError("changing into /");
-
-        /* Dup the communication pipes. */
-        if (dup2(toHook.readSide, STDIN_FILENO) == -1)
-            throw SysError("dupping to-hook read side");
-
-        setenv("_NIX_OPTIONS", settings.pack().c_str(), 1);
-
-        execl(settings.preBuildHook.c_str(), settings.preBuildHook.c_str(),
-            NULL);
-
-        throw SysError(format("executing ‘%1%’") % settings.preBuildHook);
-    });
-
-    pid.setSeparatePG(true);
-    fromHook.writeSide.close();
-    toHook.readSide.close();
-}
-
-
-PreBuildHookInstance::~PreBuildHookInstance()
-{
-    try {
-        toHook.writeSide.close();
-        pid.kill(true);
-    } catch (...) {
-        ignoreException();
-    }
-}
-
-
-//////////////////////////////////////////////////////////////////////
-
-
 typedef map<string, string> HashRewrites;
 
 
@@ -882,13 +813,6 @@ private:
     /* Is the build hook willing to perform the build? */
     HookReply tryBuildHook();
 
-    /* Run the pre-build hook, which can set system-specific
-       per-derivation settings too complex/volatile to hard-code
-       in nix itself */
-    void runPreBuildHook();
-
-    PathSet extraChrootDirs;
-
     /* Start building a derivation. */
     void startBuilder();
 
@@ -1254,9 +1178,6 @@ void DerivationGoal::inputsRealised()
     foreach (DerivationOutputs::iterator, i, drv.outputs)
         if (i->second.hash == "") fixedOutput = false;
 
-    /* Ask the pre-build hook for any required settings */
-    runPreBuildHook();
-
     /* Okay, try to build.  Note that here we don't wait for a build
        slot to become available, since we don't need one if there is a
        build hook. */
@@ -1873,7 +1794,6 @@ void DerivationGoal::startBuilder()
         PathSet dirs = tokenizeString<StringSet>(settings.get("build-chroot-dirs", defaultChrootDirs));
         PathSet dirs2 = tokenizeString<StringSet>(settings.get("build-extra-chroot-dirs", string("")));
         dirs.insert(dirs2.begin(), dirs2.end());
-        dirs.insert(extraChrootDirs.begin(), extraChrootDirs.end());
 
         for (auto & i : dirs) {
             size_t p = i.find('=');
@@ -2874,33 +2794,6 @@ Path DerivationGoal::addHashRewrite(const Path & path)
 }
 
 
-void DerivationGoal::runPreBuildHook()
-{
-    if (settings.preBuildHook == "")
-        return;
-
-    if (!worker.preBuildHook)
-        worker.preBuildHook = std::make_shared<PreBuildHookInstance>();
-
-    writeLine(worker.preBuildHook->toHook.writeSide, drvPath);
-    while (true) {
-        string s = readLine(worker.preBuildHook->fromHook.readSide);
-        if (s == "extra-chroot-dirs") {
-            while (true) {
-                string s = readLine(worker.preBuildHook->fromHook.readSide);
-                if (s == "")
-                    break;
-                extraChrootDirs.emplace(std::move(s));
-            }
-        } else if (s == "") {
-            break;
-        } else {
-            throw Error(format("unknown pre-build hook command ‘%1%’") % s);
-        }
-    }
-}
-
-
 //////////////////////////////////////////////////////////////////////
 
 
diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc
index d5615d93c7d0..052ca45ccc46 100644
--- a/src/libstore/globals.cc
+++ b/src/libstore/globals.cc
@@ -182,7 +182,6 @@ void Settings::update()
     _get(logServers, "log-servers");
     _get(enableImportNative, "allow-unsafe-native-code-during-evaluation");
     _get(useCaseHack, "use-case-hack");
-    _get(preBuildHook, "pre-build-hook");
 
     string subs = getEnv("NIX_SUBSTITUTERS", "default");
     if (subs == "default") {
diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh
index 60b11afe6088..195558dd3e99 100644
--- a/src/libstore/globals.hh
+++ b/src/libstore/globals.hh
@@ -206,10 +206,6 @@ struct Settings {
     /* Whether the importNative primop should be enabled */
     bool enableImportNative;
 
-    /* The hook to run just before a build to set derivation-specific
-       build settings */
-    Path preBuildHook;
-
 private:
     SettingsMap settings, overrides;