From a824d58b566752b2a89a718fd628053754968d72 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 1 Dec 2006 20:51:18 +0000 Subject: * 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). --- src/libstore/local-store.cc | 26 +++++++------------------- src/libstore/local-store.hh | 24 ++++++++---------------- src/libstore/remote-store.cc | 32 ++++---------------------------- src/libstore/remote-store.hh | 6 ++---- src/libstore/store-api.cc | 4 ++-- src/libstore/store-api.hh | 17 +++++++---------- src/libstore/worker-protocol.hh | 1 - 7 files changed, 30 insertions(+), 80 deletions(-) (limited to 'src/libstore') diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index ed948cf4e..2f2a1b436 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 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(dstPath)); diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index e41e43683..3a7b22048 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 e04bb6713..bcae21bf7 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 #include @@ -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 eaa9b82ee..62feee0ea 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 e00f01bfd..a560b3f55 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -93,8 +93,8 @@ Path makeFixedOutputPath(bool recursive, } -std::pair computeStorePathForPath(bool fixed, bool recursive, - string hashAlgo, const Path & srcPath) +std::pair 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 cbf2f7ef2..6fbe97931 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 computeStorePathForPath(bool fixed, bool recursive, - string hashAlgo, const Path & srcPath); +std::pair 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 16b616c80..65f5fc100 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, -- cgit v1.2.3