* Refactorings.
This commit is contained in:
parent
ab350eafd2
commit
6f1a0f948d
14 changed files with 635 additions and 605 deletions
|
|
@ -5,55 +5,13 @@ extern "C" {
|
|||
#include <aterm2.h>
|
||||
}
|
||||
|
||||
#include "hash.hh"
|
||||
#include "store.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* \section{Abstract syntax of Nix file system state expressions}
|
||||
|
||||
A Nix file system state expression, or FState, describes a
|
||||
(partial) state of the file system.
|
||||
|
||||
Slice : [Id] * [(Path, Id, [Id])] -> FState
|
||||
|
||||
(update)
|
||||
Path(path, content, refs) specifies a file object (its full path
|
||||
and contents), along with all file objects referenced by it (that
|
||||
is, that it has pointers to). We assume that all files are
|
||||
self-referential. This prevents us from having to deal with
|
||||
cycles.
|
||||
|
||||
Derive : [(Path, Id)] * [FStateId] * Path * [(String, String)] -> FState
|
||||
|
||||
(update)
|
||||
Derive(platform, builder, ins, outs, env) specifies the creation of
|
||||
new file objects (in paths declared by `outs') by the execution of
|
||||
a program `builder' on a platform `platform'. This execution takes
|
||||
place in a file system state given by `ins'. `env' specifies a
|
||||
mapping of strings to strings.
|
||||
|
||||
A FState expression is in {\em $f$-normal form} if all Derive nodes
|
||||
have been reduced to File nodes.
|
||||
|
||||
DISCUSSION: the idea is that a Regular/Directory is interchangeable
|
||||
with its CHash. This would appear to break referential
|
||||
transparency, e.g., Derive(..., ..., [...CHash(h)...], ...) can
|
||||
only be reduced in a context were the Regular/Directory equivalent
|
||||
of Hash(h) is known. However, CHash should be viewed strictly as a
|
||||
shorthand; that is, when we export an expression containing a
|
||||
CHash, we should also export the file object referenced by that
|
||||
CHash.
|
||||
|
||||
*/
|
||||
|
||||
typedef ATerm FState;
|
||||
typedef ATerm Content;
|
||||
/* Abstract syntax of fstate-expressions. */
|
||||
|
||||
typedef list<FSId> FSIds;
|
||||
|
||||
|
||||
struct SliceElem
|
||||
{
|
||||
string path;
|
||||
|
|
@ -69,6 +27,27 @@ struct Slice
|
|||
SliceElems elems;
|
||||
};
|
||||
|
||||
typedef pair<string, FSId> DeriveOutput;
|
||||
typedef pair<string, string> StringPair;
|
||||
typedef list<DeriveOutput> DeriveOutputs;
|
||||
typedef list<StringPair> StringPairs;
|
||||
|
||||
struct Derive
|
||||
{
|
||||
DeriveOutputs outputs;
|
||||
FSIds inputs;
|
||||
string builder;
|
||||
string platform;
|
||||
StringPairs env;
|
||||
};
|
||||
|
||||
struct FState
|
||||
{
|
||||
enum { fsSlice, fsDerive } type;
|
||||
Slice slice;
|
||||
Derive derive;
|
||||
};
|
||||
|
||||
|
||||
/* Return a canonical textual representation of an expression. */
|
||||
string printTerm(ATerm t);
|
||||
|
|
@ -81,28 +60,16 @@ Error badTerm(const format & f, ATerm t);
|
|||
Hash hashTerm(ATerm t);
|
||||
|
||||
/* Read an aterm from disk, given its id. */
|
||||
ATerm termFromId(const FSId & id, string * p = 0);
|
||||
ATerm termFromId(const FSId & id);
|
||||
|
||||
/* Write an aterm to the Nix store directory, and return its hash. */
|
||||
FSId writeTerm(ATerm t, const string & suffix, string * p = 0);
|
||||
FSId writeTerm(ATerm t, const string & suffix);
|
||||
|
||||
/* Register a successor. */
|
||||
void registerSuccessor(const FSId & id1, const FSId & id2);
|
||||
/* Parse an fstate-expression. */
|
||||
FState parseFState(ATerm t);
|
||||
|
||||
|
||||
/* Normalise an fstate-expression, that is, return an equivalent
|
||||
Slice. */
|
||||
Slice normaliseFState(FSId id);
|
||||
|
||||
/* Realise a Slice in the file system. */
|
||||
void realiseSlice(const Slice & slice);
|
||||
|
||||
/* Get the list of root (output) paths of the given
|
||||
fstate-expression. */
|
||||
Strings fstatePaths(const FSId & id, bool normalise);
|
||||
|
||||
/* Get the list of paths referenced by the given fstate-expression. */
|
||||
StringSet fstateRefs(const FSId & id);
|
||||
/* Parse an fstate-expression. */
|
||||
ATerm unparseFState(const FState & fs);
|
||||
|
||||
|
||||
#endif /* !__FSTATE_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue