From e5fbf5804192fa62d0edab0f6b323cc0c8d890f9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 10 Jul 2003 18:48:11 +0000 Subject: [PATCH] * A command to register successor fstate expressions. Unifying substitutes and successors isn't very feasible for now, since substitutes are only used when no path with a certain is known. Therefore, a normal form of some expression stored as a substitute would not be used unless the expression itself was missing. --- src/fstate.cc | 8 +++++++- src/fstate.hh | 3 +++ src/nix.cc | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/fstate.cc b/src/fstate.cc index 97532c162..a597b6df6 100644 --- a/src/fstate.cc +++ b/src/fstate.cc @@ -179,6 +179,12 @@ Hash writeTerm(ATerm t, const string & suffix, string * p) } +void registerSuccessor(const Hash & fsHash, const Hash & scHash) +{ + setDB(nixDB, dbSuccessors, fsHash, scHash); +} + + FState storeSuccessor(FState fs, FState sc, StringSet & paths) { if (fs == sc) return sc; @@ -186,7 +192,7 @@ FState storeSuccessor(FState fs, FState sc, StringSet & paths) string path; Hash fsHash = hashTerm(fs); Hash scHash = writeTerm(sc, "-s-" + (string) fsHash, &path); - setDB(nixDB, dbSuccessors, fsHash, scHash); + registerSuccessor(fsHash, scHash); paths.insert(path); #if 0 diff --git a/src/fstate.hh b/src/fstate.hh index 8a873a5ac..9a8955aeb 100644 --- a/src/fstate.hh +++ b/src/fstate.hh @@ -93,5 +93,8 @@ ATerm termFromHash(const Hash & hash, string * p = 0); /* Write an aterm to the Nix store directory, and return its hash. */ Hash writeTerm(ATerm t, const string & suffix, string * p = 0); +/* Register a successor. */ +void registerSuccessor(const Hash & fsHash, const Hash & scHash); + #endif /* !__EVAL_H */ diff --git a/src/nix.cc b/src/nix.cc index 53057328d..19c73165c 100644 --- a/src/nix.cc +++ b/src/nix.cc @@ -26,6 +26,7 @@ static ArgType argType = atpUnknown; --add / -A: copy a path to the Nix store --query / -q: query information + --successor: register a successor expression --substitute: register a substitute expression --dump: dump a path as a Nix archive @@ -183,6 +184,21 @@ static void opQuery(Strings opFlags, Strings opArgs) } +static void opSuccessor(Strings opFlags, Strings opArgs) +{ + if (!opFlags.empty()) throw UsageError("unknown flag"); + if (opArgs.size() % 2) throw UsageError("expecting even number of arguments"); + + for (Strings::iterator i = opArgs.begin(); + i != opArgs.end(); ) + { + Hash fsHash = parseHash(*i++); + Hash scHash = parseHash(*i++); + registerSuccessor(fsHash, scHash); + } +} + + static void opSubstitute(Strings opFlags, Strings opArgs) { if (!opFlags.empty()) throw UsageError("unknown flag"); @@ -288,6 +304,8 @@ void run(Strings args) op = opAdd; else if (arg == "--query" || arg == "-q") op = opQuery; + else if (arg == "--successor") + op = opSuccessor; else if (arg == "--substitute") op = opSubstitute; else if (arg == "--dump")