* Add an option ‘build-use-substitutes’, which can be set to ‘false’

to disable use of substitutes; i.e., force building from source.
  Fixes Nix/221.
This commit is contained in:
Eelco Dolstra 2012-04-30 19:15:34 -04:00
parent 59a26360c7
commit db5b86ef13
6 changed files with 23 additions and 4 deletions

View file

@ -225,6 +225,15 @@ env-keep-derivations = false
</varlistentry> </varlistentry>
<varlistentry><term><literal>build-use-substitutes</literal></term>
<listitem><para>If set to <literal>true</literal> (default), Nix
will use binary substitutes if available. This option can be
disabled to force building from source.</para></listitem>
</varlistentry>
<varlistentry xml:id="conf-build-chroot-dirs"><term><literal>build-chroot-dirs</literal></term> <varlistentry xml:id="conf-build-chroot-dirs"><term><literal>build-chroot-dirs</literal></term>
<listitem><para>When builds are performed in a chroot environment, <listitem><para>When builds are performed in a chroot environment,

View file

@ -962,7 +962,7 @@ void DerivationGoal::haveDerivation()
foreach (PathSet::iterator, i, invalidOutputs) foreach (PathSet::iterator, i, invalidOutputs)
/* Don't bother creating a substitution goal if there are no /* Don't bother creating a substitution goal if there are no
substitutes. */ substitutes. */
if (worker.store.hasSubstitutes(*i)) if (queryBoolSetting("build-use-substitutes", true) && worker.store.hasSubstitutes(*i))
addWaitee(worker.makeSubstitutionGoal(*i)); addWaitee(worker.makeSubstitutionGoal(*i));
if (waitees.empty()) /* to prevent hang (no wake-up event) */ if (waitees.empty()) /* to prevent hang (no wake-up event) */

View file

@ -1,6 +1,7 @@
#include "misc.hh" #include "misc.hh"
#include "store-api.hh" #include "store-api.hh"
#include "local-store.hh" #include "local-store.hh"
#include "globals.hh"
namespace nix { namespace nix {
@ -69,7 +70,8 @@ void queryMissing(StoreAPI & store, const PathSet & targets,
bool mustBuild = false; bool mustBuild = false;
foreach (DerivationOutputs::iterator, i, drv.outputs) foreach (DerivationOutputs::iterator, i, drv.outputs)
if (!store.isValidPath(i->second.path) && !store.hasSubstitutes(i->second.path)) if (!store.isValidPath(i->second.path) &&
!(queryBoolSetting("build-use-substitutes", true) && store.hasSubstitutes(i->second.path)))
mustBuild = true; mustBuild = true;
if (mustBuild) { if (mustBuild) {

View file

@ -197,6 +197,9 @@ void RemoteStore::setOptions()
} }
if (GET_PROTOCOL_MINOR(daemonVersion) >= 6) if (GET_PROTOCOL_MINOR(daemonVersion) >= 6)
writeInt(buildCores, to); writeInt(buildCores, to);
if (GET_PROTOCOL_MINOR(daemonVersion) >= 10)
writeInt(queryBoolSetting("build-use-substitutes", true), to);
processStderr(); processStderr();
} }

View file

@ -8,7 +8,7 @@ namespace nix {
#define WORKER_MAGIC_1 0x6e697863 #define WORKER_MAGIC_1 0x6e697863
#define WORKER_MAGIC_2 0x6478696f #define WORKER_MAGIC_2 0x6478696f
#define PROTOCOL_VERSION 0x109 #define PROTOCOL_VERSION 0x10a
#define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00) #define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff) #define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)

View file

@ -513,8 +513,13 @@ static void performOp(unsigned int clientVersion,
logType = (LogType) readInt(from); logType = (LogType) readInt(from);
printBuildTrace = readInt(from) != 0; printBuildTrace = readInt(from) != 0;
} }
if (GET_PROTOCOL_MINOR(clientVersion) >= 6) { if (GET_PROTOCOL_MINOR(clientVersion) >= 6)
buildCores = readInt(from); buildCores = readInt(from);
if (GET_PROTOCOL_MINOR(clientVersion) >= 10) {
int x = readInt(from);
Strings ss;
ss.push_back(x == 0 ? "false" : "true");
overrideSetting("build-use-substitutes", ss);
} }
startWork(); startWork();
stopWork(); stopWork();