about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-12-01T20·51+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-12-01T20·51+0000
commita824d58b566752b2a89a718fd628053754968d72 (patch)
treeff624d24dbbc61e199d699aa32e7bcf54773de39
parentceb982a1be381d59532d0405451f38d263abb617 (diff)
* Merge addToStore and addToStoreFixed.
* addToStore now adds unconditionally, it doesn't use readOnlyMode.
  Read-only operation is up to the caller (who can call
  computeStorePathForPath).

-rw-r--r--src/Makefile.am2
-rw-r--r--src/libexpr/eval.cc5
-rw-r--r--src/libstore/local-store.cc26
-rw-r--r--src/libstore/local-store.hh24
-rw-r--r--src/libstore/remote-store.cc32
-rw-r--r--src/libstore/remote-store.hh6
-rw-r--r--src/libstore/store-api.cc4
-rw-r--r--src/libstore/store-api.hh17
-rw-r--r--src/libstore/worker-protocol.hh1
-rw-r--r--src/nix-store/main.cc2
-rw-r--r--src/nix-worker/main.cc17
11 files changed, 40 insertions, 96 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 601e0726b9..92a7b6e153 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,5 +2,3 @@ SUBDIRS = bin2c boost libutil libstore libmain nix-store nix-hash \
  libexpr nix-instantiate nix-env nix-worker nix-log2xml bsdiff-4.3
 
 EXTRA_DIST = aterm-helper.pl
-
-#SETUID_PROGS = nix-store nix-instantiate nix-env
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 04712e74b5..e58ff695c5 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -5,6 +5,7 @@
 #include "store-api.hh"
 #include "derivations.hh"
 #include "nixexpr-ast.hh"
+#include "globals.hh"
 
 
 namespace nix {
@@ -251,7 +252,9 @@ string coerceToString(EvalState & state, Expr e, PathSet & context,
         if (state.srcToStore[path] != "")
             dstPath = state.srcToStore[path];
         else {
-            dstPath = store->addToStore(path);
+            dstPath = readOnlyMode
+                ? computeStorePathForPath(path).first
+                : store->addToStore(path);
             state.srcToStore[path] = dstPath;
             printMsg(lvlChatty, format("copied source `%1%' -> `%2%'")
                 % path % dstPath);
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index ed948cf4e5..2f2a1b4366 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -619,20 +619,20 @@ static void invalidatePath(Transaction & txn, const Path & path)
 }
 
 
-Path LocalStore::_addToStore(bool fixed, bool recursive,
-    string hashAlgo, const Path & _srcPath)
+Path LocalStore::addToStore(const Path & _srcPath, bool fixed,
+    bool recursive, string hashAlgo)
 {
     Path srcPath(absPath(_srcPath));
     debug(format("adding `%1%' to the store") % srcPath);
 
     std::pair<Path, Hash> pr =
-        computeStorePathForPath(fixed, recursive, hashAlgo, srcPath);
+        computeStorePathForPath(srcPath, fixed, recursive, hashAlgo);
     Path & dstPath(pr.first);
     Hash & h(pr.second);
 
-    if (!readOnlyMode) addTempRoot(dstPath);
+    addTempRoot(dstPath);
 
-    if (!readOnlyMode && !isValidPath(dstPath)) {
+    if (!isValidPath(dstPath)) {
 
         /* The first check above is an optimisation to prevent
            unnecessary lock acquisition. */
@@ -664,26 +664,14 @@ Path LocalStore::_addToStore(bool fixed, bool recursive,
 }
 
 
-Path LocalStore::addToStore(const Path & srcPath)
-{
-    return _addToStore(false, false, "", srcPath);
-}
-
-
-Path LocalStore::addToStoreFixed(bool recursive, string hashAlgo, const Path & srcPath)
-{
-    return _addToStore(true, recursive, hashAlgo, srcPath);
-}
-
-
 Path LocalStore::addTextToStore(const string & suffix, const string & s,
     const PathSet & references)
 {
     Path dstPath = computeStorePathForText(suffix, s);
     
-    if (!readOnlyMode) addTempRoot(dstPath);
+    addTempRoot(dstPath);
 
-    if (!readOnlyMode && !isValidPath(dstPath)) {
+    if (!isValidPath(dstPath)) {
 
         PathLocks outputLock(singleton<PathSet, Path>(dstPath));
 
diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh
index e41e436839..3a7b22048e 100644
--- a/src/libstore/local-store.hh
+++ b/src/libstore/local-store.hh
@@ -45,27 +45,19 @@ public:
 
     Hash queryPathHash(const Path & path);
 
-    void queryReferences(const Path & storePath,
-        PathSet & references);
+    void queryReferences(const Path & path, PathSet & references);
 
-    void queryReferrers(const Path & storePath,
-        PathSet & referrers);
+    void queryReferrers(const Path & path, PathSet & referrers);
 
-    Path addToStore(const Path & srcPath);
-
-    Path addToStoreFixed(bool recursive, string hashAlgo,
-        const Path & srcPath);
+    Path addToStore(const Path & srcPath, bool fixed = false,
+        bool recursive = false, string hashAlgo = "");
 
     Path addTextToStore(const string & suffix, const string & s,
         const PathSet & references);
 
     void buildDerivations(const PathSet & drvPaths);
 
-    void ensurePath(const Path & storePath);
-
-private:
-    Path _addToStore(bool fixed, bool recursive,
-        string hashAlgo, const Path & _srcPath);
+    void ensurePath(const Path & path);
 };
 
 
@@ -120,16 +112,16 @@ bool isValidPathTxn(const Transaction & txn, const Path & path);
 
 /* Sets the set of outgoing FS references for a store path.  Use with
    care! */
-void setReferences(const Transaction & txn, const Path & storePath,
+void setReferences(const Transaction & txn, const Path & path,
     const PathSet & references);
 
 /* Sets the deriver of a store path.  Use with care! */
-void setDeriver(const Transaction & txn, const Path & storePath,
+void setDeriver(const Transaction & txn, const Path & path,
     const Path & deriver);
 
 /* Query the deriver of a store path.  Return the empty string if no
    deriver has been set. */
-Path queryDeriver(const Transaction & txn, const Path & storePath);
+Path queryDeriver(const Transaction & txn, const Path & path);
 
 /* Delete a value from the nixStore directory. */
 void deleteFromStore(const Path & path, unsigned long long & bytesFreed);
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index e04bb67139..bcae21bf76 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -3,7 +3,6 @@
 #include "remote-store.hh"
 #include "worker-protocol.hh"
 #include "archive.hh"
-#include "globals.hh"
 
 #include <iostream>
 #include <unistd.h>
@@ -123,33 +122,14 @@ void RemoteStore::queryReferrers(const Path & path,
 }
 
 
-Path RemoteStore::addToStore(const Path & srcPath)
+Path RemoteStore::addToStore(const Path & _srcPath, bool fixed,
+    bool recursive, string hashAlgo)
 {
-    if (readOnlyMode) {
-        /* No sense in making a round trip, we can just compute the
-           path here. */
-        return computeStorePathForPath(false, false, "", srcPath).first;
-    }
+    Path srcPath(absPath(_srcPath));
     
     writeInt(wopAddToStore, to);
     writeString(baseNameOf(srcPath), to);
-    dumpPath(srcPath, to);
-    Path path = readString(from);
-    return path;
-}
-
-
-Path RemoteStore::addToStoreFixed(bool recursive, string hashAlgo,
-    const Path & srcPath)
-{
-    if (readOnlyMode) {
-        /* No sense in making a round trip, we can just compute the
-           path here. */
-        return computeStorePathForPath(true, recursive, hashAlgo, srcPath).first;
-    }
-    
-    writeInt(wopAddToStoreFixed, to);
-    writeString(baseNameOf(srcPath), to);
+    writeInt(fixed ? 1 : 0, to);
     writeInt(recursive ? 1 : 0, to);
     writeString(hashAlgo, to);
     dumpPath(srcPath, to);
@@ -161,10 +141,6 @@ Path RemoteStore::addToStoreFixed(bool recursive, string hashAlgo,
 Path RemoteStore::addTextToStore(const string & suffix, const string & s,
     const PathSet & references)
 {
-    if (readOnlyMode) {
-        return computeStorePathForText(suffix, s);
-    }
-    
     writeInt(wopAddTextToStore, to);
     writeString(suffix, to);
     writeString(s, to);
diff --git a/src/libstore/remote-store.hh b/src/libstore/remote-store.hh
index eaa9b82ee6..62feee0eac 100644
--- a/src/libstore/remote-store.hh
+++ b/src/libstore/remote-store.hh
@@ -37,10 +37,8 @@ public:
 
     void queryReferrers(const Path & path, PathSet & referrers);
 
-    Path addToStore(const Path & srcPath);
-
-    Path addToStoreFixed(bool recursive, string hashAlgo,
-        const Path & srcPath);
+    Path addToStore(const Path & srcPath, bool fixed = false,
+        bool recursive = false, string hashAlgo = "");
 
     Path addTextToStore(const string & suffix, const string & s,
         const PathSet & references);
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index e00f01bfd4..a560b3f55b 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -93,8 +93,8 @@ Path makeFixedOutputPath(bool recursive,
 }
 
 
-std::pair<Path, Hash> computeStorePathForPath(bool fixed, bool recursive,
-    string hashAlgo, const Path & srcPath)
+std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
+    bool fixed, bool recursive, string hashAlgo)
 {
     Hash h(htSHA256);
     {
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index cbf2f7ef29..6fbe979316 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -63,14 +63,11 @@ public:
         PathSet & referrers) = 0;
 
     /* Copy the contents of a path to the store and register the
-       validity the resulting path.  The resulting path is
-       returned. */
-    virtual Path addToStore(const Path & srcPath) = 0;
-
-    /* Like addToStore(), but for pre-adding the outputs of
-       fixed-output derivations. */
-    virtual Path addToStoreFixed(bool recursive, string hashAlgo,
-        const Path & srcPath) = 0;
+       validity the resulting path.  The resulting path is returned.
+       If `fixed' is true, then the output of a fixed-output
+       derivation is pre-loaded into the Nix store. */
+    virtual Path addToStore(const Path & srcPath, bool fixed = false,
+        bool recursive = false, string hashAlgo = "") = 0;
 
     /* Like addToStore, but the contents written to the output path is
        a regular file containing the given string. */
@@ -119,8 +116,8 @@ Path makeFixedOutputPath(bool recursive,
    it computes the store path to which srcPath is to be copied.
    Returns the store path and the cryptographic hash of the
    contents of srcPath. */
-std::pair<Path, Hash> computeStorePathForPath(bool fixed, bool recursive,
-    string hashAlgo, const Path & srcPath);
+std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
+    bool fixed = false, bool recursive = false, string hashAlgo = "");
 
 /* Preparatory part of addTextToStore().
 
diff --git a/src/libstore/worker-protocol.hh b/src/libstore/worker-protocol.hh
index 16b616c80c..65f5fc100a 100644
--- a/src/libstore/worker-protocol.hh
+++ b/src/libstore/worker-protocol.hh
@@ -15,7 +15,6 @@ typedef enum {
     wopQueryReferences,
     wopQueryReferrers,
     wopAddToStore,
-    wopAddToStoreFixed,
     wopAddTextToStore,
     wopBuildDerivations,
     wopEnsurePath,
diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc
index c3755c2a1e..ad346c91fc 100644
--- a/src/nix-store/main.cc
+++ b/src/nix-store/main.cc
@@ -133,7 +133,7 @@ static void opAddFixed(Strings opFlags, Strings opArgs)
     opArgs.pop_front();
 
     for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); ++i)
-        cout << format("%1%\n") % store->addToStoreFixed(recursive, hashAlgo, *i);
+        cout << format("%1%\n") % store->addToStore(*i, true, recursive, hashAlgo);
 }
 
 
diff --git a/src/nix-worker/main.cc b/src/nix-worker/main.cc
index 3642697dcf..6d6571536b 100644
--- a/src/nix-worker/main.cc
+++ b/src/nix-worker/main.cc
@@ -79,25 +79,18 @@ void processConnection(Source & from, Sink & to)
             break;
         }
 
-        case wopAddToStore:
-        case wopAddToStoreFixed: {
+        case wopAddToStore: {
             /* !!! uberquick hack */
             string baseName = readString(from);
-            bool recursive = false;
-            string hashAlgo;
-            if (op == wopAddToStoreFixed) {
-                recursive = readInt(from) == 1;
-                hashAlgo = readString(from);
-            }
+            bool fixed = readInt(from) == 1;
+            bool recursive = readInt(from) == 1;
+            string hashAlgo = readString(from);
 
             Path tmp = createTempDir();
             Path tmp2 = tmp + "/" + baseName;
             restorePath(tmp2, from);
 
-            if (op == wopAddToStoreFixed)
-                writeString(store->addToStoreFixed(recursive, hashAlgo, tmp2), to);
-            else
-                writeString(store->addToStore(tmp2), to);
+            writeString(store->addToStore(tmp2, fixed, recursive, hashAlgo), to);
             
             deletePath(tmp);
             break;