* Use a proper namespace.
* Optimise header file usage a bit. * Compile the parser as C++.
This commit is contained in:
		
							parent
							
								
									aab8812732
								
							
						
					
					
						commit
						75068e7d75
					
				
					 61 changed files with 650 additions and 268 deletions
				
			
		|  | @ -40,6 +40,11 @@ my $initFun = "init"; | ||||||
| open HEADER, ">$ARGV[0]"; | open HEADER, ">$ARGV[0]"; | ||||||
| open IMPL, ">$ARGV[1]"; | open IMPL, ">$ARGV[1]"; | ||||||
| 
 | 
 | ||||||
|  | print HEADER "#ifdef __cplusplus\n"; | ||||||
|  | print HEADER "namespace nix {\n"; | ||||||
|  | print HEADER "#endif\n\n\n"; | ||||||
|  | print IMPL "namespace nix {\n"; | ||||||
|  | 
 | ||||||
| while (<STDIN>) { | while (<STDIN>) { | ||||||
|     next if (/^\s*$/); |     next if (/^\s*$/); | ||||||
|      |      | ||||||
|  | @ -162,5 +167,10 @@ print IMPL "void $initFun() {\n"; | ||||||
| print IMPL "$init"; | print IMPL "$init"; | ||||||
| print IMPL "}\n"; | print IMPL "}\n"; | ||||||
| 
 | 
 | ||||||
|  | print HEADER "#ifdef __cplusplus\n"; | ||||||
|  | print HEADER "}\n"; | ||||||
|  | print HEADER "#endif\n\n\n"; | ||||||
|  | print IMPL "}\n"; | ||||||
|  | 
 | ||||||
| close HEADER; | close HEADER; | ||||||
| close IMPL; | close IMPL; | ||||||
|  |  | ||||||
|  | @ -2,13 +2,13 @@ pkglib_LTLIBRARIES = libexpr.la | ||||||
| 
 | 
 | ||||||
| libexpr_la_SOURCES = nixexpr.cc nixexpr.hh parser.cc parser.hh \ | libexpr_la_SOURCES = nixexpr.cc nixexpr.hh parser.cc parser.hh \ | ||||||
|  eval.cc eval.hh primops.cc \ |  eval.cc eval.hh primops.cc \ | ||||||
|  lexer-tab.c lexer-tab.h parser-tab.c parser-tab.h \ |  lexer-tab.c lexer-tab.h parser-tab.cc parser-tab.hh \ | ||||||
|  get-drvs.cc get-drvs.hh \ |  get-drvs.cc get-drvs.hh \ | ||||||
|  attr-path.cc attr-path.hh \ |  attr-path.cc attr-path.hh \ | ||||||
|  expr-to-xml.cc expr-to-xml.hh  |  expr-to-xml.cc expr-to-xml.hh  | ||||||
| 
 | 
 | ||||||
| BUILT_SOURCES = nixexpr-ast.cc nixexpr-ast.hh \ | BUILT_SOURCES = nixexpr-ast.cc nixexpr-ast.hh \ | ||||||
|  parser-tab.h lexer-tab.h parser-tab.c lexer-tab.c |  parser-tab.hh lexer-tab.h parser-tab.cc lexer-tab.c | ||||||
| 
 | 
 | ||||||
| EXTRA_DIST = lexer.l parser.y nixexpr-ast.def nixexpr-ast.cc | EXTRA_DIST = lexer.l parser.y nixexpr-ast.def nixexpr-ast.cc | ||||||
| 
 | 
 | ||||||
|  | @ -21,8 +21,8 @@ AM_CFLAGS = \ | ||||||
| 
 | 
 | ||||||
| # Parser generation. | # Parser generation. | ||||||
| 
 | 
 | ||||||
| parser-tab.c parser-tab.h: parser.y | parser-tab.cc parser-tab.hh: parser.y | ||||||
| 	$(bison) -v -o parser-tab.c $(srcdir)/parser.y -d | 	$(bison) -v -o parser-tab.cc $(srcdir)/parser.y -d | ||||||
| 
 | 
 | ||||||
| lexer-tab.c lexer-tab.h: lexer.l | lexer-tab.c lexer-tab.h: lexer.l | ||||||
| 	$(flex) --outfile lexer-tab.c --header-file=lexer-tab.h $(srcdir)/lexer.l  | 	$(flex) --outfile lexer-tab.c --header-file=lexer-tab.h $(srcdir)/lexer.l  | ||||||
|  |  | ||||||
|  | @ -1,5 +1,9 @@ | ||||||
| #include "attr-path.hh" | #include "attr-path.hh" | ||||||
| #include "nixexpr-ast.hh" | #include "nixexpr-ast.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| bool isAttrs(EvalState & state, Expr e, ATermMap & attrs) | bool isAttrs(EvalState & state, Expr e, ATermMap & attrs) | ||||||
|  | @ -73,3 +77,6 @@ Expr findAlongAttrPath(EvalState & state, const string & attrPath, | ||||||
|      |      | ||||||
|     return e; |     return e; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -7,8 +7,14 @@ | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  |      | ||||||
| Expr findAlongAttrPath(EvalState & state, const string & attrPath, | Expr findAlongAttrPath(EvalState & state, const string & attrPath, | ||||||
|     const ATermMap & autoArgs, Expr e); |     const ATermMap & autoArgs, Expr e); | ||||||
| 
 | 
 | ||||||
|      |      | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__ATTR_PATH_H */ | #endif /* !__ATTR_PATH_H */ | ||||||
|  |  | ||||||
|  | @ -1,8 +1,13 @@ | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| #include "parser.hh" | #include "parser.hh" | ||||||
|  | #include "hash.hh" | ||||||
|  | #include "util.hh" | ||||||
| #include "nixexpr-ast.hh" | #include "nixexpr-ast.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  |      | ||||||
|  | 
 | ||||||
| EvalState::EvalState() | EvalState::EvalState() | ||||||
|     : normalForms(32768), primOps(128) |     : normalForms(32768), primOps(128) | ||||||
| { | { | ||||||
|  | @ -271,7 +276,7 @@ Expr wrapInContext(ATermList context, Expr e) | ||||||
| static ATerm concatStrings(EvalState & state, const ATermVector & args) | static ATerm concatStrings(EvalState & state, const ATermVector & args) | ||||||
| { | { | ||||||
|     ATermList context = ATempty; |     ATermList context = ATempty; | ||||||
|     ostringstream s; |     std::ostringstream s; | ||||||
|     bool isPath = false; |     bool isPath = false; | ||||||
| 
 | 
 | ||||||
|     for (ATermVector::const_iterator i = args.begin(); i != args.end(); ++i) { |     for (ATermVector::const_iterator i = args.begin(); i != args.end(); ++i) { | ||||||
|  | @ -666,3 +671,6 @@ void printEvalStats(EvalState & state) | ||||||
|     if (showStats) |     if (showStats) | ||||||
|         printATermMapStats(); |         printATermMapStats(); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -4,16 +4,21 @@ | ||||||
| #include <map> | #include <map> | ||||||
| 
 | 
 | ||||||
| #include "aterm.hh" | #include "aterm.hh" | ||||||
| #include "hash.hh" |  | ||||||
| #include "nixexpr.hh" | #include "nixexpr.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| typedef map<Path, PathSet> DrvRoots; | namespace nix { | ||||||
| typedef map<Path, Hash> DrvHashes; | 
 | ||||||
|  | 
 | ||||||
|  | class Hash; | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  | typedef std::map<Path, PathSet> DrvRoots; | ||||||
|  | typedef std::map<Path, Hash> DrvHashes; | ||||||
| 
 | 
 | ||||||
| /* Cache for calls to addToStore(); maps source paths to the store
 | /* Cache for calls to addToStore(); maps source paths to the store
 | ||||||
|    paths. */ |    paths. */ | ||||||
| typedef map<Path, Path> SrcToStore; | typedef std::map<Path, Path> SrcToStore; | ||||||
| 
 | 
 | ||||||
| struct EvalState; | struct EvalState; | ||||||
| 
 | 
 | ||||||
|  | @ -75,4 +80,7 @@ Expr autoCallFunction(Expr e, const ATermMap & args); | ||||||
| void printEvalStats(EvalState & state); | void printEvalStats(EvalState & state); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__EVAL_H */ | #endif /* !__EVAL_H */ | ||||||
|  |  | ||||||
|  | @ -1,10 +1,12 @@ | ||||||
| #include "expr-to-xml.hh" | #include "expr-to-xml.hh" | ||||||
| 
 |  | ||||||
| #include "xml-writer.hh" | #include "xml-writer.hh" | ||||||
| #include "nixexpr-ast.hh" | #include "nixexpr-ast.hh" | ||||||
| #include "aterm.hh" | #include "aterm.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  |      | ||||||
| static XMLAttrs singletonAttrs(const string & name, const string & value) | static XMLAttrs singletonAttrs(const string & name, const string & value) | ||||||
| { | { | ||||||
|     XMLAttrs attrs; |     XMLAttrs attrs; | ||||||
|  | @ -84,9 +86,12 @@ static void printTermAsXML(Expr e, XMLWriter & doc) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void printTermAsXML(Expr e, ostream & out) | void printTermAsXML(Expr e, std::ostream & out) | ||||||
| { | { | ||||||
|     XMLWriter doc(true, out); |     XMLWriter doc(true, out); | ||||||
|     XMLOpenElement root(doc, "expr"); |     XMLOpenElement root(doc, "expr"); | ||||||
|     printTermAsXML(e, doc); |     printTermAsXML(e, doc); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -6,8 +6,10 @@ | ||||||
| 
 | 
 | ||||||
| #include "nixexpr.hh" | #include "nixexpr.hh" | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| void printTermAsXML(Expr e, ostream & out); | void printTermAsXML(Expr e, std::ostream & out); | ||||||
|      |      | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| #endif /* !__EXPR_TO_XML_H */ | #endif /* !__EXPR_TO_XML_H */ | ||||||
|  |  | ||||||
|  | @ -1,5 +1,9 @@ | ||||||
| #include "get-drvs.hh" | #include "get-drvs.hh" | ||||||
| #include "nixexpr-ast.hh" | #include "nixexpr-ast.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| string DrvInfo::queryDrvPath(EvalState & state) const | string DrvInfo::queryDrvPath(EvalState & state) const | ||||||
|  | @ -66,7 +70,7 @@ static bool getDerivation(EvalState & state, Expr e, | ||||||
|         e = evalExpr(state, e); |         e = evalExpr(state, e); | ||||||
|         if (!matchAttrs(e, es)) return true; |         if (!matchAttrs(e, es)) return true; | ||||||
| 
 | 
 | ||||||
|         shared_ptr<ATermMap> attrs(new ATermMap(32)); /* !!! */ |         boost::shared_ptr<ATermMap> attrs(new ATermMap(32)); /* !!! */ | ||||||
|         queryAllAttrs(e, *attrs, false); |         queryAllAttrs(e, *attrs, false); | ||||||
|      |      | ||||||
|         Expr a = attrs->get(toATerm("type")); |         Expr a = attrs->get(toATerm("type")); | ||||||
|  | @ -183,3 +187,6 @@ void getDerivations(EvalState & state, Expr e, const string & pathPrefix, | ||||||
|     Exprs doneExprs; |     Exprs doneExprs; | ||||||
|     getDerivations(state, e, pathPrefix, autoArgs, drvs, doneExprs); |     getDerivations(state, e, pathPrefix, autoArgs, drvs, doneExprs); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -9,7 +9,10 @@ | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| typedef map<string, string> MetaInfo; | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | typedef std::map<string, string> MetaInfo; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| struct DrvInfo | struct DrvInfo | ||||||
|  | @ -23,7 +26,7 @@ public: | ||||||
|     string attrPath; /* path towards the derivation */ |     string attrPath; /* path towards the derivation */ | ||||||
|     string system; |     string system; | ||||||
| 
 | 
 | ||||||
|     shared_ptr<ATermMap> attrs; |     boost::shared_ptr<ATermMap> attrs; | ||||||
| 
 | 
 | ||||||
|     string queryDrvPath(EvalState & state) const; |     string queryDrvPath(EvalState & state) const; | ||||||
|     string queryOutPath(EvalState & state) const; |     string queryOutPath(EvalState & state) const; | ||||||
|  | @ -53,4 +56,7 @@ void getDerivations(EvalState & state, Expr e, const string & pathPrefix, | ||||||
|     const ATermMap & autoArgs, DrvInfos & drvs); |     const ATermMap & autoArgs, DrvInfos & drvs); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__GET_DRVS_H */ | #endif /* !__GET_DRVS_H */ | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ | ||||||
| %{ | %{ | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
| #include "parser-tab.h" | #include "parser-tab.hh" | ||||||
| 
 | 
 | ||||||
| static void initLoc(YYLTYPE * loc) | static void initLoc(YYLTYPE * loc) | ||||||
| { | { | ||||||
|  | @ -35,7 +35,11 @@ static void adjustLoc(YYLTYPE * loc, const char * s, size_t len) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ATerm toATerm(const char * s); | ATerm toATerm(const char * s) | ||||||
|  | { | ||||||
|  |     return (ATerm) ATmakeAppl0(ATmakeAFun((char *) s, 0, ATtrue)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| ATerm unescapeStr(const char * s); | ATerm unescapeStr(const char * s); | ||||||
| 
 | 
 | ||||||
| #define YY_USER_INIT initLoc(yylloc) | #define YY_USER_INIT initLoc(yylloc) | ||||||
|  |  | ||||||
|  | @ -1,11 +1,14 @@ | ||||||
| #include "nixexpr.hh" | #include "nixexpr.hh" | ||||||
| #include "derivations.hh" | #include "derivations.hh" | ||||||
| 
 | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| #include "nixexpr-ast.hh" | #include "nixexpr-ast.hh" | ||||||
| #include "nixexpr-ast.cc" | #include "nixexpr-ast.cc" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  |      | ||||||
|  | 
 | ||||||
| string showPos(ATerm pos) | string showPos(ATerm pos) | ||||||
| { | { | ||||||
|     ATerm path; |     ATerm path; | ||||||
|  | @ -332,3 +335,6 @@ string showValue(Expr e) | ||||||
|     /* !!! incomplete */ |     /* !!! incomplete */ | ||||||
|     return "<unknown>"; |     return "<unknown>"; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,10 @@ | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
| 
 | 
 | ||||||
| #include "aterm-map.hh" | #include "aterm-map.hh" | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| MakeError(EvalError, Error) | MakeError(EvalError, Error) | ||||||
|  | @ -96,4 +99,7 @@ string showType(Expr e); | ||||||
| string showValue(Expr e); | string showValue(Expr e); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__NIXEXPR_H */ | #endif /* !__NIXEXPR_H */ | ||||||
|  |  | ||||||
|  | @ -1,3 +1,8 @@ | ||||||
|  | #include "parser.hh" | ||||||
|  | #include "aterm.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | #include "nixexpr-ast.hh" | ||||||
|  |      | ||||||
| #include <sstream> | #include <sstream> | ||||||
| 
 | 
 | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
|  | @ -5,9 +10,15 @@ | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| #include "aterm.hh" | 
 | ||||||
| #include "parser.hh" | extern "C" { | ||||||
| #include "nixexpr-ast.hh" | 
 | ||||||
|  | #include "parser-tab.hh" | ||||||
|  | #include "lexer-tab.h" | ||||||
|  |      | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| struct ParseData  | struct ParseData  | ||||||
|  | @ -18,15 +29,14 @@ struct ParseData | ||||||
|     string error; |     string error; | ||||||
| }; | }; | ||||||
|   |   | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| extern "C" { |  | ||||||
| 
 | 
 | ||||||
| #include "parser-tab.h" | int yyparse(yyscan_t scanner, nix::ParseData * data); | ||||||
| #include "lexer-tab.h" | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| /* Callbacks for getting from C to C++.  Due to a (small) bug in the
 |  | ||||||
|    GLR code of Bison we cannot currently compile the parser as C++ |  | ||||||
|    code. */ |  | ||||||
| 
 | 
 | ||||||
| void setParseResult(ParseData * data, ATerm t) | void setParseResult(ParseData * data, ATerm t) | ||||||
| { | { | ||||||
|  | @ -71,6 +81,7 @@ const char * getPath(ParseData * data) | ||||||
|     return data->path.c_str(); |     return data->path.c_str(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | extern "C" { | ||||||
| Expr unescapeStr(const char * s) | Expr unescapeStr(const char * s) | ||||||
| { | { | ||||||
|     string t; |     string t; | ||||||
|  | @ -93,11 +104,7 @@ Expr unescapeStr(const char * s) | ||||||
|     } |     } | ||||||
|     return makeStr(toATerm(t)); |     return makeStr(toATerm(t)); | ||||||
| } | } | ||||||
| 
 | } | ||||||
| int yyparse(yyscan_t scanner, ParseData * data); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| } /* end of C functions */ |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static void checkAttrs(ATermMap & names, ATermList bnds) | static void checkAttrs(ATermMap & names, ATermList bnds) | ||||||
|  | @ -232,3 +239,6 @@ Expr parseExprFromString(EvalState & state, | ||||||
| { | { | ||||||
|     return parse(state, s.c_str(), "(string)", basePath); |     return parse(state, s.c_str(), "(string)", basePath); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /* Parse a Nix expression from the specified file.  If `path' refers
 | /* Parse a Nix expression from the specified file.  If `path' refers
 | ||||||
|    to a directory, the "/default.nix" is appended. */ |    to a directory, the "/default.nix" is appended. */ | ||||||
| Expr parseExprFromFile(EvalState & state, Path path); | Expr parseExprFromFile(EvalState & state, Path path); | ||||||
|  | @ -13,4 +16,7 @@ Expr parseExprFromString(EvalState & state, const string & s, | ||||||
|     const Path & basePath); |     const Path & basePath); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__PARSER_H */ | #endif /* !__PARSER_H */ | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| %locations | %locations | ||||||
| %error-verbose | %error-verbose | ||||||
| %parse-param { yyscan_t scanner } | %parse-param { yyscan_t scanner } | ||||||
| %parse-param { void * data } | %parse-param { ParseData * data } | ||||||
| %lex-param { yyscan_t scanner } | %lex-param { yyscan_t scanner } | ||||||
| 
 | 
 | ||||||
| %{ | %{ | ||||||
|  | @ -12,34 +12,47 @@ | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
| 
 | 
 | ||||||
| #include "parser-tab.h" | #include "parser-tab.hh" | ||||||
|  | extern "C" { | ||||||
| #include "lexer-tab.h" | #include "lexer-tab.h" | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| typedef ATerm Expr; | #include "aterm.hh" | ||||||
| typedef ATerm ValidValues; |  | ||||||
| typedef ATerm DefaultValue; |  | ||||||
| typedef ATerm Pos; |  | ||||||
|      |      | ||||||
|  | #include "nixexpr.hh" | ||||||
| #include "nixexpr-ast.hh" | #include "nixexpr-ast.hh" | ||||||
| 
 | 
 | ||||||
| void setParseResult(void * data, ATerm t); | using namespace nix; | ||||||
| void parseError(void * data, char * error, int line, int column); |  | ||||||
| ATerm absParsedPath(void * data, ATerm t); |  | ||||||
| ATerm fixAttrs(int recursive, ATermList as); |  | ||||||
| const char * getPath(void * data); |  | ||||||
| void backToString(yyscan_t scanner); |  | ||||||
| 
 | 
 | ||||||
| void yyerror(YYLTYPE * loc, yyscan_t scanner, void * data, char * s) | namespace nix { | ||||||
|  |   | ||||||
|  | struct ParseData  | ||||||
|  | { | ||||||
|  |     Expr result; | ||||||
|  |     Path basePath; | ||||||
|  |     Path path; | ||||||
|  |     string error; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | void setParseResult(ParseData * data, ATerm t); | ||||||
|  | void parseError(ParseData * data, char * error, int line, int column); | ||||||
|  | ATerm absParsedPath(ParseData * data, ATerm t); | ||||||
|  | ATerm fixAttrs(int recursive, ATermList as); | ||||||
|  | const char * getPath(ParseData * data); | ||||||
|  | Expr unescapeStr(const char * s); | ||||||
|  |   | ||||||
|  | extern "C" { | ||||||
|  |     void backToString(yyscan_t scanner); | ||||||
|  | } | ||||||
|  |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void yyerror(YYLTYPE * loc, yyscan_t scanner, ParseData * data, char * s) | ||||||
| { | { | ||||||
|     parseError(data, s, loc->first_line, loc->first_column); |     parseError(data, s, loc->first_line, loc->first_column); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ATerm toATerm(const char * s) | static Pos makeCurPos(YYLTYPE * loc, ParseData * data) | ||||||
| { |  | ||||||
|     return (ATerm) ATmakeAppl0(ATmakeAFun((char *) s, 0, ATtrue)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static Pos makeCurPos(YYLTYPE * loc, void * data) |  | ||||||
| { | { | ||||||
|     return makePos(toATerm(getPath(data)), |     return makePos(toATerm(getPath(data)), | ||||||
|         loc->first_line, loc->first_column); |         loc->first_line, loc->first_column); | ||||||
|  |  | ||||||
|  | @ -1,11 +1,16 @@ | ||||||
| #include <algorithm> |  | ||||||
| 
 |  | ||||||
| #include "build.hh" | #include "build.hh" | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
| #include "eval.hh" | #include "eval.hh" | ||||||
| #include "globals.hh" | #include "globals.hh" | ||||||
| #include "nixexpr-ast.hh" | #include "store.hh" | ||||||
|  | #include "util.hh" | ||||||
| #include "expr-to-xml.hh" | #include "expr-to-xml.hh" | ||||||
|  | #include "nixexpr-ast.hh" | ||||||
|  | 
 | ||||||
|  | #include <algorithm> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static Expr primBuiltins(EvalState & state, const ATermVector & args) | static Expr primBuiltins(EvalState & state, const ATermVector & args) | ||||||
|  | @ -472,7 +477,7 @@ static Expr primToString(EvalState & state, const ATermVector & args) | ||||||
|    be sensibly or completely represented (e.g., functions). */ |    be sensibly or completely represented (e.g., functions). */ | ||||||
| static Expr primToXML(EvalState & state, const ATermVector & args) | static Expr primToXML(EvalState & state, const ATermVector & args) | ||||||
| { | { | ||||||
|     ostringstream out; |     std::ostringstream out; | ||||||
|     printTermAsXML(strictEvalExpr(state, args[0]), out); |     printTermAsXML(strictEvalExpr(state, args[0]), out); | ||||||
|     return makeStr(toATerm(out.str())); |     return makeStr(toATerm(out.str())); | ||||||
| } | } | ||||||
|  | @ -746,3 +751,6 @@ void EvalState::addPrimOps() | ||||||
|     addPrimOp("removeAttrs", 2, primRemoveAttrs); |     addPrimOp("removeAttrs", 2, primRemoveAttrs); | ||||||
|     addPrimOp("relativise", 2, primRelativise); |     addPrimOp("relativise", 2, primRelativise); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,3 +1,11 @@ | ||||||
|  | #include "shared.hh" | ||||||
|  | #include "globals.hh" | ||||||
|  | #include "gc.hh" | ||||||
|  | #include "store.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
|  | #include "config.h" | ||||||
|  | 
 | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <cctype> | #include <cctype> | ||||||
| 
 | 
 | ||||||
|  | @ -12,12 +20,8 @@ extern "C" { | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #include "globals.hh" |  | ||||||
| #include "gc.hh" |  | ||||||
| #include "store.hh" |  | ||||||
| #include "shared.hh" |  | ||||||
| 
 | 
 | ||||||
| #include "config.h" | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| volatile sig_atomic_t blockInt = 0; | volatile sig_atomic_t blockInt = 0; | ||||||
|  | @ -173,7 +177,7 @@ static void initAndRun(int argc, char * * argv) | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         else if (arg == "--version") { |         else if (arg == "--version") { | ||||||
|             cout << format("%1% (Nix) %2%") % programId % NIX_VERSION << endl; |             std::cout << format("%1% (Nix) %2%") % programId % NIX_VERSION << std::endl; | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         else if (arg == "--keep-failed" || arg == "-K") |         else if (arg == "--keep-failed" || arg == "-K") | ||||||
|  | @ -338,10 +342,15 @@ void switchToNixUser() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| static char buf[1024]; | static char buf[1024]; | ||||||
| 
 | 
 | ||||||
| int main(int argc, char * * argv) | int main(int argc, char * * argv) | ||||||
| { | { | ||||||
|  |     using namespace nix; | ||||||
|  |      | ||||||
|     /* If we are setuid root, we have to get rid of the excess
 |     /* If we are setuid root, we have to get rid of the excess
 | ||||||
|        privileges ASAP. */ |        privileges ASAP. */ | ||||||
|     switchToNixUser(); |     switchToNixUser(); | ||||||
|  | @ -352,7 +361,7 @@ int main(int argc, char * * argv) | ||||||
| 
 | 
 | ||||||
|     /* Turn on buffering for cerr. */ |     /* Turn on buffering for cerr. */ | ||||||
| #if HAVE_PUBSETBUF | #if HAVE_PUBSETBUF | ||||||
|     cerr.rdbuf()->pubsetbuf(buf, sizeof(buf)); |     std::cerr.rdbuf()->pubsetbuf(buf, sizeof(buf)); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     try { |     try { | ||||||
|  | @ -377,10 +386,12 @@ int main(int argc, char * * argv) | ||||||
|     } catch (Error & e) { |     } catch (Error & e) { | ||||||
|         printMsg(lvlError, format("error: %1%") % e.msg()); |         printMsg(lvlError, format("error: %1%") % e.msg()); | ||||||
|         return 1; |         return 1; | ||||||
|     } catch (exception & e) { |     } catch (std::exception & e) { | ||||||
|         printMsg(lvlError, format("error: %1%") % e.what()); |         printMsg(lvlError, format("error: %1%") % e.what()); | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  |  | ||||||
|  | @ -1,9 +1,7 @@ | ||||||
| #ifndef __SHARED_H | #ifndef __SHARED_H | ||||||
| #define __SHARED_H | #define __SHARED_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| 
 |  | ||||||
| #include "util.hh" |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* These are not implemented here, but must be implemented by a
 | /* These are not implemented here, but must be implemented by a
 | ||||||
|  | @ -12,17 +10,21 @@ | ||||||
| /* Main program.  Called by main() after the ATerm library has been
 | /* Main program.  Called by main() after the ATerm library has been
 | ||||||
|    initialised and some default arguments have been processed (and |    initialised and some default arguments have been processed (and | ||||||
|    removed from `args').  main() will catch all exceptions. */ |    removed from `args').  main() will catch all exceptions. */ | ||||||
| void run(Strings args); | void run(nix::Strings args); | ||||||
| 
 | 
 | ||||||
| /* Should print a help message to stdout and return. */ | /* Should print a help message to stdout and return. */ | ||||||
| void printHelp(); | void printHelp(); | ||||||
| 
 | 
 | ||||||
|  | extern std::string programId; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
| /* Ugh.  No better place to put this. */ | /* Ugh.  No better place to put this. */ | ||||||
| Path makeRootName(const Path & gcRoot, int & counter); | Path makeRootName(const Path & gcRoot, int & counter); | ||||||
| void printGCWarning(); | void printGCWarning(); | ||||||
| 
 | 
 | ||||||
| 
 | } | ||||||
| extern string programId; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif /* !__SHARED_H */ | #endif /* !__SHARED_H */ | ||||||
|  |  | ||||||
|  | @ -1,3 +1,13 @@ | ||||||
|  | #include "build.hh" | ||||||
|  | #include "references.hh" | ||||||
|  | #include "pathlocks.hh" | ||||||
|  | #include "misc.hh" | ||||||
|  | #include "globals.hh" | ||||||
|  | #include "gc.hh" | ||||||
|  | #include "store.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
| #include <map> | #include <map> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  | @ -15,12 +25,10 @@ | ||||||
| #include <pwd.h> | #include <pwd.h> | ||||||
| #include <grp.h> | #include <grp.h> | ||||||
| 
 | 
 | ||||||
| #include "build.hh" | 
 | ||||||
| #include "references.hh" | namespace nix { | ||||||
| #include "pathlocks.hh" | 
 | ||||||
| #include "misc.hh" | using std::map; | ||||||
| #include "globals.hh" |  | ||||||
| #include "gc.hh" |  | ||||||
|      |      | ||||||
| 
 | 
 | ||||||
| /* !!! TODO derivationFromPath shouldn't be used here */ | /* !!! TODO derivationFromPath shouldn't be used here */ | ||||||
|  | @ -38,8 +46,8 @@ class Worker; | ||||||
| 
 | 
 | ||||||
| /* A pointer to a goal. */ | /* A pointer to a goal. */ | ||||||
| class Goal; | class Goal; | ||||||
| typedef shared_ptr<Goal> GoalPtr; | typedef boost::shared_ptr<Goal> GoalPtr; | ||||||
| typedef weak_ptr<Goal> WeakGoalPtr; | typedef boost::weak_ptr<Goal> WeakGoalPtr; | ||||||
| 
 | 
 | ||||||
| /* Set of goals. */ | /* Set of goals. */ | ||||||
| typedef set<GoalPtr> Goals; | typedef set<GoalPtr> Goals; | ||||||
|  | @ -50,7 +58,7 @@ typedef map<Path, WeakGoalPtr> WeakGoalMap; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Goal : public enable_shared_from_this<Goal> | class Goal : public boost::enable_shared_from_this<Goal> | ||||||
| { | { | ||||||
| public: | public: | ||||||
|     typedef enum {ecBusy, ecSuccess, ecFailed} ExitCode; |     typedef enum {ecBusy, ecSuccess, ecFailed} ExitCode; | ||||||
|  | @ -447,8 +455,8 @@ static void killUser(uid_t uid) | ||||||
|             if (kill(-1, SIGKILL) == -1) |             if (kill(-1, SIGKILL) == -1) | ||||||
|                 throw SysError(format("cannot kill processes for UID `%1%'") % uid); |                 throw SysError(format("cannot kill processes for UID `%1%'") % uid); | ||||||
|          |          | ||||||
|         } catch (exception & e) { |         } catch (std::exception & e) { | ||||||
|             cerr << format("build error: %1%\n") % e.what(); |             std::cerr << format("build error: %1%\n") % e.what(); | ||||||
|             quickExit(1); |             quickExit(1); | ||||||
|         } |         } | ||||||
|         quickExit(0); |         quickExit(0); | ||||||
|  | @ -930,8 +938,8 @@ DerivationGoal::HookReply DerivationGoal::tryBuildHook() | ||||||
|              |              | ||||||
|             throw SysError(format("executing `%1%'") % buildHook); |             throw SysError(format("executing `%1%'") % buildHook); | ||||||
|              |              | ||||||
|         } catch (exception & e) { |         } catch (std::exception & e) { | ||||||
|             cerr << format("build error: %1%\n") % e.what(); |             std::cerr << format("build error: %1%\n") % e.what(); | ||||||
|         } |         } | ||||||
|         quickExit(1); |         quickExit(1); | ||||||
|     } |     } | ||||||
|  | @ -1326,8 +1334,8 @@ void DerivationGoal::startBuilder() | ||||||
|             throw SysError(format("executing `%1%'") |             throw SysError(format("executing `%1%'") | ||||||
|                 % drv.builder); |                 % drv.builder); | ||||||
|              |              | ||||||
|         } catch (exception & e) { |         } catch (std::exception & e) { | ||||||
|             cerr << format("build error: %1%\n") % e.what(); |             std::cerr << format("build error: %1%\n") % e.what(); | ||||||
|         } |         } | ||||||
|         quickExit(1); |         quickExit(1); | ||||||
|     } |     } | ||||||
|  | @ -1593,7 +1601,7 @@ private: | ||||||
|     Pid pid; |     Pid pid; | ||||||
| 
 | 
 | ||||||
|     /* Lock on the store path. */ |     /* Lock on the store path. */ | ||||||
|     shared_ptr<PathLocks> outputLock; |     boost::shared_ptr<PathLocks> outputLock; | ||||||
|      |      | ||||||
|     typedef void (SubstitutionGoal::*GoalState)(); |     typedef void (SubstitutionGoal::*GoalState)(); | ||||||
|     GoalState state; |     GoalState state; | ||||||
|  | @ -1719,7 +1727,7 @@ void SubstitutionGoal::tryToRun() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* Acquire a lock on the output path. */ |     /* Acquire a lock on the output path. */ | ||||||
|     outputLock = shared_ptr<PathLocks>(new PathLocks); |     outputLock = boost::shared_ptr<PathLocks>(new PathLocks); | ||||||
|     outputLock->lockPaths(singleton<PathSet>(storePath), |     outputLock->lockPaths(singleton<PathSet>(storePath), | ||||||
|         (format("waiting for lock on `%1%'") % storePath).str()); |         (format("waiting for lock on `%1%'") % storePath).str()); | ||||||
| 
 | 
 | ||||||
|  | @ -1767,8 +1775,8 @@ void SubstitutionGoal::tryToRun() | ||||||
|              |              | ||||||
|             throw SysError(format("executing `%1%'") % sub.program); |             throw SysError(format("executing `%1%'") % sub.program); | ||||||
|              |              | ||||||
|         } catch (exception & e) { |         } catch (std::exception & e) { | ||||||
|             cerr << format("substitute error: %1%\n") % e.what(); |             std::cerr << format("substitute error: %1%\n") % e.what(); | ||||||
|         } |         } | ||||||
|         quickExit(1); |         quickExit(1); | ||||||
|     } |     } | ||||||
|  | @ -1930,8 +1938,8 @@ static void removeGoal(GoalPtr goal, WeakGoalMap & goalMap) | ||||||
| 
 | 
 | ||||||
| void Worker::removeGoal(GoalPtr goal) | void Worker::removeGoal(GoalPtr goal) | ||||||
| { | { | ||||||
|     ::removeGoal(goal, derivationGoals); |     nix::removeGoal(goal, derivationGoals); | ||||||
|     ::removeGoal(goal, substitutionGoals); |     nix::removeGoal(goal, substitutionGoals); | ||||||
|     if (topGoals.find(goal) != topGoals.end()) { |     if (topGoals.find(goal) != topGoals.end()) { | ||||||
|         topGoals.erase(goal); |         topGoals.erase(goal); | ||||||
|         /* If a top-level goal failed, then kill all other goals
 |         /* If a top-level goal failed, then kill all other goals
 | ||||||
|  | @ -2160,3 +2168,6 @@ void ensurePath(const Path & path) | ||||||
|     if (goal->getExitCode() != Goal::ecSuccess) |     if (goal->getExitCode() != Goal::ecSuccess) | ||||||
|         throw Error(format("path `%1%' does not exist and cannot be created") % path); |         throw Error(format("path `%1%' does not exist and cannot be created") % path); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,12 @@ | ||||||
| #ifndef __BUILD_H | #ifndef __BUILD_H | ||||||
| #define __BUILD_H | #define __BUILD_H | ||||||
| 
 | 
 | ||||||
| #include "derivations.hh" | 
 | ||||||
|  | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|      |      | ||||||
| /* Ensure that the output paths of the derivation are valid.  If they
 | /* Ensure that the output paths of the derivation are valid.  If they
 | ||||||
|    are already valid, this is a no-op.  Otherwise, validity can |    are already valid, this is a no-op.  Otherwise, validity can | ||||||
|  | @ -16,5 +21,7 @@ void buildDerivations(const PathSet & drvPaths); | ||||||
| void ensurePath(const Path & storePath); | void ensurePath(const Path & storePath); | ||||||
| 
 | 
 | ||||||
|      |      | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| #endif /* !__BUILD_H */ | #endif /* !__BUILD_H */ | ||||||
|  |  | ||||||
|  | @ -1,3 +1,7 @@ | ||||||
|  | #include "db.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | #include "pathlocks.hh" | ||||||
|  | 
 | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
|  | @ -7,9 +11,8 @@ | ||||||
| 
 | 
 | ||||||
| #include <db_cxx.h> | #include <db_cxx.h> | ||||||
| 
 | 
 | ||||||
| #include "db.hh" | 
 | ||||||
| #include "util.hh" | namespace nix { | ||||||
| #include "pathlocks.hh" |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Wrapper class to ensure proper destruction. */ | /* Wrapper class to ensure proper destruction. */ | ||||||
|  | @ -112,7 +115,7 @@ Db * Database::getDb(TableId table) | ||||||
|     if (table == 0) |     if (table == 0) | ||||||
|         throw Error("database table is not open " |         throw Error("database table is not open " | ||||||
|             "(maybe you don't have sufficient permission?)"); |             "(maybe you don't have sufficient permission?)"); | ||||||
|     map<TableId, Db *>::iterator i = tables.find(table); |     std::map<TableId, Db *>::iterator i = tables.find(table); | ||||||
|     if (i == tables.end()) |     if (i == tables.end()) | ||||||
|         throw Error("unknown table id"); |         throw Error("unknown table id"); | ||||||
|     return i->second; |     return i->second; | ||||||
|  | @ -263,10 +266,10 @@ void Database::close() | ||||||
| 
 | 
 | ||||||
|     try { |     try { | ||||||
| 
 | 
 | ||||||
|         for (map<TableId, Db *>::iterator i = tables.begin(); |         for (std::map<TableId, Db *>::iterator i = tables.begin(); | ||||||
|              i != tables.end(); ) |              i != tables.end(); ) | ||||||
|         { |         { | ||||||
|             map<TableId, Db *>::iterator j = i; |             std::map<TableId, Db *>::iterator j = i; | ||||||
|             ++j; |             ++j; | ||||||
|             closeTable(i->first); |             closeTable(i->first); | ||||||
|             i = j; |             i = j; | ||||||
|  | @ -433,3 +436,6 @@ void Database::enumTable(const Transaction & txn, TableId table, | ||||||
| 
 | 
 | ||||||
|     } catch (DbException e) { rethrow(e); } |     } catch (DbException e) { rethrow(e); } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,14 +1,10 @@ | ||||||
| #ifndef __DB_H | #ifndef __DB_H | ||||||
| #define __DB_H | #define __DB_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| #include <list> | 
 | ||||||
| #include <map> | #include <map> | ||||||
| 
 | 
 | ||||||
| #include "util.hh" |  | ||||||
| 
 |  | ||||||
| using namespace std; |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| /* Defined externally. */ | /* Defined externally. */ | ||||||
| class DbTxn; | class DbTxn; | ||||||
|  | @ -16,6 +12,9 @@ class DbEnv; | ||||||
| class Db; | class Db; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class Database; | class Database; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -53,7 +52,7 @@ private: | ||||||
|     DbEnv * env; |     DbEnv * env; | ||||||
| 
 | 
 | ||||||
|     TableId nextId; |     TableId nextId; | ||||||
|     map<TableId, Db *> tables; |     std::map<TableId, Db *> tables; | ||||||
| 
 | 
 | ||||||
|     void requireEnv(); |     void requireEnv(); | ||||||
| 
 | 
 | ||||||
|  | @ -100,4 +99,7 @@ public: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__DB_H */ | #endif /* !__DB_H */ | ||||||
|  |  | ||||||
|  | @ -1,11 +1,13 @@ | ||||||
| #include "derivations.hh" | #include "derivations.hh" | ||||||
| #include "globals.hh" |  | ||||||
| #include "store.hh" | #include "store.hh" | ||||||
| 
 | 
 | ||||||
| #include "derivations-ast.hh" | #include "derivations-ast.hh" | ||||||
| #include "derivations-ast.cc" | #include "derivations-ast.cc" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| Hash hashTerm(ATerm t) | Hash hashTerm(ATerm t) | ||||||
| { | { | ||||||
|     return hashString(htSHA256, atPrint(t)); |     return hashString(htSHA256, atPrint(t)); | ||||||
|  | @ -170,3 +172,6 @@ bool isDerivation(const string & fileName) | ||||||
|         fileName.size() >= drvExtension.size() && |         fileName.size() >= drvExtension.size() && | ||||||
|         string(fileName, fileName.size() - drvExtension.size()) == drvExtension; |         string(fileName, fileName.size() - drvExtension.size()) == drvExtension; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -2,7 +2,12 @@ | ||||||
| #define __DERIVATIONS_H | #define __DERIVATIONS_H | ||||||
| 
 | 
 | ||||||
| #include "aterm.hh" | #include "aterm.hh" | ||||||
| #include "store.hh" | #include "hash.hh" | ||||||
|  | 
 | ||||||
|  | #include <map> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Extension of derivations in the Nix store. */ | /* Extension of derivations in the Nix store. */ | ||||||
|  | @ -27,13 +32,13 @@ struct DerivationOutput | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef map<string, DerivationOutput> DerivationOutputs; | typedef std::map<string, DerivationOutput> DerivationOutputs; | ||||||
| 
 | 
 | ||||||
| /* For inputs that are sub-derivations, we specify exactly which
 | /* For inputs that are sub-derivations, we specify exactly which
 | ||||||
|    output IDs we are interested in. */ |    output IDs we are interested in. */ | ||||||
| typedef map<Path, StringSet> DerivationInputs; | typedef std::map<Path, StringSet> DerivationInputs; | ||||||
| 
 | 
 | ||||||
| typedef map<string, string> StringPairs; | typedef std::map<string, string> StringPairs; | ||||||
| 
 | 
 | ||||||
| struct Derivation | struct Derivation | ||||||
| { | { | ||||||
|  | @ -64,4 +69,7 @@ ATerm unparseDerivation(const Derivation & drv); | ||||||
| bool isDerivation(const string & fileName); | bool isDerivation(const string & fileName); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__DERIVATIONS_H */ | #endif /* !__DERIVATIONS_H */ | ||||||
|  |  | ||||||
|  | @ -1,7 +1,10 @@ | ||||||
| #include "globals.hh" |  | ||||||
| #include "gc.hh" | #include "gc.hh" | ||||||
|  | #include "globals.hh" | ||||||
| #include "misc.hh" | #include "misc.hh" | ||||||
| #include "pathlocks.hh" | #include "pathlocks.hh" | ||||||
|  | #include "store.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| #include <boost/shared_ptr.hpp> | #include <boost/shared_ptr.hpp> | ||||||
| 
 | 
 | ||||||
|  | @ -17,6 +20,9 @@ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| static string gcLockName = "gc.lock"; | static string gcLockName = "gc.lock"; | ||||||
| static string tempRootsDir = "temproots"; | static string tempRootsDir = "temproots"; | ||||||
| static string gcRootsDir = "gcroots"; | static string gcRootsDir = "gcroots"; | ||||||
|  | @ -192,7 +198,7 @@ void removeTempRoots() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| typedef shared_ptr<AutoCloseFD> FDPtr; | typedef boost::shared_ptr<AutoCloseFD> FDPtr; | ||||||
| typedef list<FDPtr> FDs; | typedef list<FDPtr> FDs; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -558,3 +564,6 @@ void collectGarbage(GCAction action, const PathSet & pathsToDelete, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,10 @@ | ||||||
| #ifndef __GC_H | #ifndef __GC_H | ||||||
| #define __GC_H | #define __GC_H | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Garbage collector operation. */ | /* Garbage collector operation. */ | ||||||
|  | @ -39,4 +42,7 @@ Path addPermRoot(const Path & storePath, const Path & gcRoot, | ||||||
|     bool indirect); |     bool indirect); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__GC_H */ | #endif /* !__GC_H */ | ||||||
|  |  | ||||||
|  | @ -1,9 +1,13 @@ | ||||||
| #include "globals.hh" | #include "globals.hh" | ||||||
|  | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| #include <map> | #include <map> | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| string nixStore = "/UNINIT"; | string nixStore = "/UNINIT"; | ||||||
| string nixDataDir = "/UNINIT"; | string nixDataDir = "/UNINIT"; | ||||||
| string nixLogDir = "/UNINIT"; | string nixLogDir = "/UNINIT"; | ||||||
|  | @ -23,7 +27,7 @@ string thisSystem = "unset"; | ||||||
| 
 | 
 | ||||||
| static bool settingsRead = false; | static bool settingsRead = false; | ||||||
| 
 | 
 | ||||||
| static map<string, Strings> settings; | static std::map<string, Strings> settings; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| string & at(Strings & ss, unsigned int n) | string & at(Strings & ss, unsigned int n) | ||||||
|  | @ -72,7 +76,7 @@ static void readSettings() | ||||||
| Strings querySetting(const string & name, const Strings & def) | Strings querySetting(const string & name, const Strings & def) | ||||||
| { | { | ||||||
|     if (!settingsRead) readSettings(); |     if (!settingsRead) readSettings(); | ||||||
|     map<string, Strings>::iterator i = settings.find(name); |     std::map<string, Strings>::iterator i = settings.find(name); | ||||||
|     return i == settings.end() ? def : i->second; |     return i == settings.end() ? def : i->second; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -98,3 +102,6 @@ bool queryBoolSetting(const string & name, bool def) | ||||||
|     else throw Error(format("configuration option `%1%' should be either `true' or `false', not `%2%'") |     else throw Error(format("configuration option `%1%' should be either `true' or `false', not `%2%'") | ||||||
|         % name % v); |         % name % v); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| #ifndef __GLOBALS_H | #ifndef __GLOBALS_H | ||||||
| #define __GLOBALS_H | #define __GLOBALS_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| #include <set> | 
 | ||||||
| #include "util.hh" | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| using namespace std; |  | ||||||
| 
 | 
 | ||||||
| /* Path names. */ | /* Path names. */ | ||||||
| 
 | 
 | ||||||
|  | @ -68,4 +68,7 @@ string querySetting(const string & name, const string & def); | ||||||
| bool queryBoolSetting(const string & name, bool def); | bool queryBoolSetting(const string & name, bool def); | ||||||
| 
 | 
 | ||||||
|      |      | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__GLOBALS_H */ | #endif /* !__GLOBALS_H */ | ||||||
|  |  | ||||||
|  | @ -1,4 +1,10 @@ | ||||||
|  | #include "misc.hh" | ||||||
|  | #include "store.hh" | ||||||
| #include "build.hh" | #include "build.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Derivation derivationFromPath(const Path & drvPath) | Derivation derivationFromPath(const Path & drvPath) | ||||||
|  | @ -81,3 +87,6 @@ void queryMissing(const PathSet & targets, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| #include "derivations.hh" | #include "derivations.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /* Read a derivation, after ensuring its existence through
 | /* Read a derivation, after ensuring its existence through
 | ||||||
|    ensurePath(). */ |    ensurePath(). */ | ||||||
| Derivation derivationFromPath(const Path & drvPath); | Derivation derivationFromPath(const Path & drvPath); | ||||||
|  | @ -29,4 +32,7 @@ void queryMissing(const PathSet & targets, | ||||||
|     PathSet & willBuild, PathSet & willSubstitute); |     PathSet & willBuild, PathSet & willSubstitute); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__MISC_H */ | #endif /* !__MISC_H */ | ||||||
|  |  | ||||||
|  | @ -1,17 +1,21 @@ | ||||||
|  | #include "pathlocks.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
| #include <cerrno> | #include <cerrno> | ||||||
| 
 | 
 | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| 
 | 
 | ||||||
| #include "pathlocks.hh" |  | ||||||
| 
 |  | ||||||
| #ifdef __CYGWIN__ | #ifdef __CYGWIN__ | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| #include <sys/cygwin.h> | #include <sys/cygwin.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| int openLockFile(const Path & path, bool create) | int openLockFile(const Path & path, bool create) | ||||||
| { | { | ||||||
|     AutoCloseFD fd; |     AutoCloseFD fd; | ||||||
|  | @ -220,3 +224,6 @@ void PathLocks::setDeletion(bool deletePaths) | ||||||
| { | { | ||||||
|     this->deletePaths = deletePaths; |     this->deletePaths = deletePaths; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,10 @@ | ||||||
| #ifndef __PATHLOCKS_H | #ifndef __PATHLOCKS_H | ||||||
| #define __PATHLOCKS_H | #define __PATHLOCKS_H | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Open (possibly create) a lock file and return the file descriptor.
 | /* Open (possibly create) a lock file and return the file descriptor.
 | ||||||
|  | @ -22,7 +25,7 @@ bool lockFile(int fd, LockType lockType, bool wait); | ||||||
| class PathLocks  | class PathLocks  | ||||||
| { | { | ||||||
| private: | private: | ||||||
|     typedef pair<int, Path> FDPair; |     typedef std::pair<int, Path> FDPair; | ||||||
|     list<FDPair> fds; |     list<FDPair> fds; | ||||||
|     bool deletePaths; |     bool deletePaths; | ||||||
| 
 | 
 | ||||||
|  | @ -37,4 +40,7 @@ public: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__PATHLOCKS_H */ | #endif /* !__PATHLOCKS_H */ | ||||||
|  |  | ||||||
|  | @ -1,3 +1,7 @@ | ||||||
|  | #include "references.hh" | ||||||
|  | #include "hash.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
| #include <cerrno> | #include <cerrno> | ||||||
| #include <map> | #include <map> | ||||||
| 
 | 
 | ||||||
|  | @ -7,8 +11,8 @@ | ||||||
| #include <dirent.h> | #include <dirent.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| 
 | 
 | ||||||
| #include "references.hh" | 
 | ||||||
| #include "hash.hh" | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static unsigned int refLength = 32; /* characters */ | static unsigned int refLength = 32; /* characters */ | ||||||
|  | @ -90,7 +94,7 @@ void checkPath(const string & path, | ||||||
| 
 | 
 | ||||||
| PathSet scanForReferences(const string & path, const PathSet & paths) | PathSet scanForReferences(const string & path, const PathSet & paths) | ||||||
| { | { | ||||||
|     map<string, Path> backMap; |     std::map<string, Path> backMap; | ||||||
|     StringSet ids; |     StringSet ids; | ||||||
|     StringSet seen; |     StringSet seen; | ||||||
| 
 | 
 | ||||||
|  | @ -114,10 +118,13 @@ PathSet scanForReferences(const string & path, const PathSet & paths) | ||||||
| 
 | 
 | ||||||
|     PathSet found; |     PathSet found; | ||||||
|     for (StringSet::iterator i = seen.begin(); i != seen.end(); i++) { |     for (StringSet::iterator i = seen.begin(); i != seen.end(); i++) { | ||||||
|         map<string, Path>::iterator j; |         std::map<string, Path>::iterator j; | ||||||
|         if ((j = backMap.find(*i)) == backMap.end()) abort(); |         if ((j = backMap.find(*i)) == backMap.end()) abort(); | ||||||
|         found.insert(j->second); |         found.insert(j->second); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return found; |     return found; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,12 @@ | ||||||
| #ifndef __REFERENCES_H | #ifndef __REFERENCES_H | ||||||
| #define __REFERENCES_H | #define __REFERENCES_H | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| PathSet scanForReferences(const Path & path, const PathSet & refs); | PathSet scanForReferences(const Path & path, const PathSet & refs); | ||||||
|      |      | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| #endif /* !__REFERENCES_H */ | #endif /* !__REFERENCES_H */ | ||||||
|  |  | ||||||
|  | @ -1,3 +1,13 @@ | ||||||
|  | #include "store.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | #include "globals.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | #include "archive.hh" | ||||||
|  | #include "pathlocks.hh" | ||||||
|  | #include "gc.hh" | ||||||
|  | #include "aterm.hh" | ||||||
|  | #include "derivations-ast.hh" | ||||||
|  |      | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
|  | @ -6,12 +16,7 @@ | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include <utime.h> | #include <utime.h> | ||||||
| 
 | 
 | ||||||
| #include "store.hh" | namespace nix { | ||||||
| #include "globals.hh" |  | ||||||
| #include "db.hh" |  | ||||||
| #include "archive.hh" |  | ||||||
| #include "pathlocks.hh" |  | ||||||
| #include "gc.hh" |  | ||||||
| 
 | 
 | ||||||
|      |      | ||||||
| /* Nix database. */ | /* Nix database. */ | ||||||
|  | @ -956,10 +961,6 @@ void verifyStore(bool checkContents) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include "aterm.hh" |  | ||||||
| #include "derivations-ast.hh" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* Upgrade from schema 1 (Nix <= 0.7) to schema 2 (Nix >= 0.8). */ | /* Upgrade from schema 1 (Nix <= 0.7) to schema 2 (Nix >= 0.8). */ | ||||||
| static void upgradeStore07() | static void upgradeStore07() | ||||||
| { | { | ||||||
|  | @ -971,7 +972,7 @@ static void upgradeStore07() | ||||||
|     nixDB.enumTable(txn, dbValidPaths, validPaths2); |     nixDB.enumTable(txn, dbValidPaths, validPaths2); | ||||||
|     PathSet validPaths(validPaths2.begin(), validPaths2.end()); |     PathSet validPaths(validPaths2.begin(), validPaths2.end()); | ||||||
| 
 | 
 | ||||||
|     cerr << "hashing paths..."; |     std::cerr << "hashing paths..."; | ||||||
|     int n = 0; |     int n = 0; | ||||||
|     for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) { |     for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) { | ||||||
|         checkInterrupt(); |         checkInterrupt(); | ||||||
|  | @ -980,20 +981,20 @@ static void upgradeStore07() | ||||||
|         if (s == "") { |         if (s == "") { | ||||||
|             Hash hash = hashPath(htSHA256, *i); |             Hash hash = hashPath(htSHA256, *i); | ||||||
|             setHash(txn, *i, hash); |             setHash(txn, *i, hash); | ||||||
|             cerr << "."; |             std::cerr << "."; | ||||||
|             if (++n % 1000 == 0) { |             if (++n % 1000 == 0) { | ||||||
|                 txn.commit(); |                 txn.commit(); | ||||||
|                 txn.begin(nixDB); |                 txn.begin(nixDB); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     cerr << "\n"; |     std::cerr << std::endl; | ||||||
| 
 | 
 | ||||||
|     txn.commit(); |     txn.commit(); | ||||||
| 
 | 
 | ||||||
|     txn.begin(nixDB); |     txn.begin(nixDB); | ||||||
|      |      | ||||||
|     cerr << "processing closures..."; |     std::cerr << "processing closures..."; | ||||||
|     for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) { |     for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) { | ||||||
|         checkInterrupt(); |         checkInterrupt(); | ||||||
|         if (i->size() > 6 && string(*i, i->size() - 6) == ".store") { |         if (i->size() > 6 && string(*i, i->size() - 6) == ".store") { | ||||||
|  | @ -1037,10 +1038,10 @@ static void upgradeStore07() | ||||||
|                     setReferences(txn, path, references); |                     setReferences(txn, path, references); | ||||||
|             } |             } | ||||||
|              |              | ||||||
|             cerr << "."; |             std::cerr << "."; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     cerr << "\n"; |     std::cerr << std::endl; | ||||||
| 
 | 
 | ||||||
|     /* !!! maybe this transaction is way too big */ |     /* !!! maybe this transaction is way too big */ | ||||||
|     txn.commit(); |     txn.commit(); | ||||||
|  | @ -1061,7 +1062,7 @@ static void upgradeStore09() | ||||||
| 
 | 
 | ||||||
|     Transaction txn(nixDB); |     Transaction txn(nixDB); | ||||||
| 
 | 
 | ||||||
|     cerr << "converting referers to referrers..."; |     std::cerr << "converting referers to referrers..."; | ||||||
| 
 | 
 | ||||||
|     TableId dbReferers = nixDB.openTable("referers"); /* sic! */ |     TableId dbReferers = nixDB.openTable("referers"); /* sic! */ | ||||||
| 
 | 
 | ||||||
|  | @ -1080,16 +1081,19 @@ static void upgradeStore09() | ||||||
|         if (++n % 1000 == 0) { |         if (++n % 1000 == 0) { | ||||||
|             txn.commit(); |             txn.commit(); | ||||||
|             txn.begin(nixDB); |             txn.begin(nixDB); | ||||||
|             cerr << "|"; |             std::cerr << "|"; | ||||||
|         } |         } | ||||||
|         cerr << "."; |         std::cerr << "."; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     txn.commit(); |     txn.commit(); | ||||||
|      |      | ||||||
|     cerr << "\n"; |     std::cerr << std::endl; | ||||||
| 
 | 
 | ||||||
|     nixDB.closeTable(dbReferers); |     nixDB.closeTable(dbReferers); | ||||||
| 
 | 
 | ||||||
|     nixDB.deleteTable("referers"); |     nixDB.deleteTable("referers"); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -4,9 +4,12 @@ | ||||||
| #include <string> | #include <string> | ||||||
| 
 | 
 | ||||||
| #include "hash.hh" | #include "hash.hh" | ||||||
| #include "db.hh" |  | ||||||
| 
 | 
 | ||||||
| using namespace std; | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Transaction; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Nix store and database schema version.  Version 1 (or 0) was Nix <=
 | /* Nix store and database schema version.  Version 1 (or 0) was Nix <=
 | ||||||
|  | @ -169,4 +172,7 @@ void deleteFromStore(const Path & path, unsigned long long & bytesFreed); | ||||||
| void verifyStore(bool checkContents); | void verifyStore(bool checkContents); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__STORE_H */ | #endif /* !__STORE_H */ | ||||||
|  |  | ||||||
|  | @ -3,7 +3,8 @@ pkglib_LTLIBRARIES = libutil.la | ||||||
| libutil_la_SOURCES = util.cc util.hh hash.cc hash.hh \ | libutil_la_SOURCES = util.cc util.hh hash.cc hash.hh \ | ||||||
|  archive.cc archive.hh aterm.cc aterm.hh \ |  archive.cc archive.hh aterm.cc aterm.hh \ | ||||||
|  aterm-map.cc aterm-map.hh \ |  aterm-map.cc aterm-map.hh \ | ||||||
|  xml-writer.cc xml-writer.hh |  xml-writer.cc xml-writer.hh \ | ||||||
|  |  types.hh | ||||||
| 
 | 
 | ||||||
| if !HAVE_OPENSSL | if !HAVE_OPENSSL | ||||||
| libutil_la_SOURCES += \ | libutil_la_SOURCES += \ | ||||||
|  |  | ||||||
|  | @ -12,6 +12,9 @@ | ||||||
| #include "util.hh" | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| static string archiveVersion1 = "nix-archive-1"; | static string archiveVersion1 = "nix-archive-1"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -319,3 +322,5 @@ void restorePath(const Path & path, RestoreSource & source) | ||||||
|     restore(path, source); |     restore(path, source); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,6 +1,10 @@ | ||||||
| #include <string> | #ifndef __ARCHIVE_H | ||||||
|  | #define __ARCHIVE_H | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* dumpPath creates a Nix archive of the specified path.  The format
 | /* dumpPath creates a Nix archive of the specified path.  The format
 | ||||||
|  | @ -61,3 +65,9 @@ struct RestoreSource | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void restorePath(const Path & path, RestoreSource & source); | void restorePath(const Path & path, RestoreSource & source); | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif /* !__ARCHIVE_H */ | ||||||
|  |  | ||||||
|  | @ -1,9 +1,14 @@ | ||||||
| #include "aterm-map.hh" | #include "aterm-map.hh" | ||||||
| 
 | 
 | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| static const unsigned int maxLoadFactor = /* 1 / */ 3; | static const unsigned int maxLoadFactor = /* 1 / */ 3; | ||||||
| static unsigned int nrResizes = 0; | static unsigned int nrResizes = 0; | ||||||
| static unsigned int sizeTotalAlloc = 0; | static unsigned int sizeTotalAlloc = 0; | ||||||
|  | @ -214,10 +219,11 @@ unsigned int ATermMap::size() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include <iostream> |  | ||||||
| 
 |  | ||||||
| void printATermMapStats() | void printATermMapStats() | ||||||
| { | { | ||||||
|  |     using std::cerr; | ||||||
|  |     using std::endl; | ||||||
|  |      | ||||||
|     cerr << "RESIZES: " << nrResizes << " " |     cerr << "RESIZES: " << nrResizes << " " | ||||||
|          << sizeTotalAlloc << " " |          << sizeTotalAlloc << " " | ||||||
|          << sizeCurAlloc << " " |          << sizeCurAlloc << " " | ||||||
|  | @ -319,3 +325,6 @@ int main(int argc, char * * argv) | ||||||
|     printATermMapStats(); |     printATermMapStats(); | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -4,7 +4,8 @@ | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
| 
 | 
 | ||||||
| using namespace std; | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ATermMap | class ATermMap | ||||||
|  | @ -122,4 +123,7 @@ private: | ||||||
| void printATermMapStats(); | void printATermMapStats(); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__ATERM_MAP_H */ | #endif /* !__ATERM_MAP_H */ | ||||||
|  |  | ||||||
|  | @ -1,7 +1,9 @@ | ||||||
| #include "aterm.hh" | #include "aterm.hh" | ||||||
| 
 | 
 | ||||||
|  | using std::string; | ||||||
| 
 | 
 | ||||||
| string atPrint(ATerm t) | 
 | ||||||
|  | string nix::atPrint(ATerm t) | ||||||
| { | { | ||||||
|     if (!t) throw Error("attempt to print null aterm"); |     if (!t) throw Error("attempt to print null aterm"); | ||||||
|     char * s = ATwriteToString(t); |     char * s = ATwriteToString(t); | ||||||
|  | @ -10,13 +12,13 @@ string atPrint(ATerm t) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ostream & operator << (ostream & stream, ATerm e) | std::ostream & operator << (std::ostream & stream, ATerm e) | ||||||
| { | { | ||||||
|     return stream << atPrint(e); |     return stream << nix::atPrint(e); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Error badTerm(const format & f, ATerm t) | nix::Error nix::badTerm(const format & f, ATerm t) | ||||||
| { | { | ||||||
|     char * s = ATwriteToString(t); |     char * s = ATwriteToString(t); | ||||||
|     if (!s) throw Error("cannot print term"); |     if (!s) throw Error("cannot print term"); | ||||||
|  | @ -29,13 +31,13 @@ Error badTerm(const format & f, ATerm t) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ATerm toATerm(const char * s) | ATerm nix::toATerm(const char * s) | ||||||
| { | { | ||||||
|     return (ATerm) ATmakeAppl0(ATmakeAFun((char *) s, 0, ATtrue)); |     return (ATerm) ATmakeAppl0(ATmakeAFun((char *) s, 0, ATtrue)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ATerm toATerm(const string & s) | ATerm nix::toATerm(const string & s) | ||||||
| { | { | ||||||
|     return toATerm(s.c_str()); |     return toATerm(s.c_str()); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -5,15 +5,15 @@ extern "C" { | ||||||
| #include <aterm2.h> | #include <aterm2.h> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Print an ATerm. */ | /* Print an ATerm. */ | ||||||
| string atPrint(ATerm t); | string atPrint(ATerm t); | ||||||
| 
 | 
 | ||||||
| /* Write an ATerm to an output stream. */ |  | ||||||
| ostream & operator << (ostream & stream, ATerm e); |  | ||||||
| 
 |  | ||||||
| class ATermIterator | class ATermIterator | ||||||
| { | { | ||||||
|     ATermList t; |     ATermList t; | ||||||
|  | @ -46,4 +46,11 @@ ATerm toATerm(const char * s); | ||||||
| ATerm toATerm(const string & s); | ATerm toATerm(const string & s); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Write an ATerm to an output stream. */ | ||||||
|  | std::ostream & operator << (std::ostream & stream, ATerm e); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__ATERM_H */ | #endif /* !__ATERM_H */ | ||||||
|  |  | ||||||
|  | @ -15,12 +15,16 @@ extern "C" { | ||||||
| 
 | 
 | ||||||
| #include "hash.hh" | #include "hash.hh" | ||||||
| #include "archive.hh" | #include "archive.hh" | ||||||
|  | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| Hash::Hash() | Hash::Hash() | ||||||
| { | { | ||||||
|     type = htUnknown; |     type = htUnknown; | ||||||
|  | @ -89,9 +93,9 @@ Hash parseHash(HashType ht, const string & s) | ||||||
|         string s2(s, i * 2, 2); |         string s2(s, i * 2, 2); | ||||||
|         if (!isxdigit(s2[0]) || !isxdigit(s2[1]))  |         if (!isxdigit(s2[0]) || !isxdigit(s2[1]))  | ||||||
|             throw Error(format("invalid hash `%1%'") % s); |             throw Error(format("invalid hash `%1%'") % s); | ||||||
|         istringstream str(s2); |         std::istringstream str(s2); | ||||||
|         int n; |         int n; | ||||||
|         str >> hex >> n; |         str >> std::hex >> n; | ||||||
|         hash.hash[i] = n; |         hash.hash[i] = n; | ||||||
|     } |     } | ||||||
|     return hash; |     return hash; | ||||||
|  | @ -313,3 +317,6 @@ HashType parseHashType(const string & s) | ||||||
|     else if (s == "sha256") return htSHA256; |     else if (s == "sha256") return htSHA256; | ||||||
|     else return htUnknown; |     else return htUnknown; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,11 +1,10 @@ | ||||||
| #ifndef __HASH_H | #ifndef __HASH_H | ||||||
| #define __HASH_H | #define __HASH_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| 
 | 
 | ||||||
| #include "util.hh" |  | ||||||
| 
 | 
 | ||||||
| using namespace std; | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| typedef enum { htUnknown, htMD5, htSHA1, htSHA256 } HashType; | typedef enum { htUnknown, htMD5, htSHA1, htSHA256 } HashType; | ||||||
|  | @ -77,4 +76,7 @@ Hash compressHash(const Hash & hash, unsigned int newSize); | ||||||
| HashType parseHashType(const string & s); | HashType parseHashType(const string & s); | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  |      | ||||||
| #endif /* !__HASH_H */ | #endif /* !__HASH_H */ | ||||||
|  |  | ||||||
							
								
								
									
										73
									
								
								src/libutil/types.hh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/libutil/types.hh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | ||||||
|  | #ifndef __TYPES_H | ||||||
|  | #define __TYPES_H | ||||||
|  | 
 | ||||||
|  | #include <string> | ||||||
|  | #include <list> | ||||||
|  | #include <set> | ||||||
|  | 
 | ||||||
|  | #include <boost/format.hpp> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Inherit some names from other namespaces for convenience. */ | ||||||
|  | using std::string; | ||||||
|  | using std::list; | ||||||
|  | using std::set; | ||||||
|  | using std::vector; | ||||||
|  | using boost::format; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Error : public std::exception | ||||||
|  | { | ||||||
|  | protected: | ||||||
|  |     string err; | ||||||
|  | public: | ||||||
|  |     Error(const format & f); | ||||||
|  |     ~Error() throw () { }; | ||||||
|  |     const char * what() const throw () { return err.c_str(); } | ||||||
|  |     const string & msg() const throw () { return err; } | ||||||
|  |     Error & addPrefix(const format & f); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class SysError : public Error | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     SysError(const format & f); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #define MakeError(newClass, superClass) \ | ||||||
|  |     class newClass : public superClass                  \ | ||||||
|  |     {                                                   \ | ||||||
|  |     public:                                             \ | ||||||
|  |         newClass(const format & f) : superClass(f) { }; \ | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | MakeError(UsageError, Error) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | typedef list<string> Strings; | ||||||
|  | typedef set<string> StringSet; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Paths are just strings. */ | ||||||
|  | typedef string Path; | ||||||
|  | typedef list<Path> Paths; | ||||||
|  | typedef set<Path> PathSet; | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | typedef enum {  | ||||||
|  |     lvlError, | ||||||
|  |     lvlInfo, | ||||||
|  |     lvlTalkative, | ||||||
|  |     lvlChatty, | ||||||
|  |     lvlDebug, | ||||||
|  |     lvlVomit | ||||||
|  | } Verbosity; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif /* !__TYPES_H */ | ||||||
|  | @ -9,17 +9,16 @@ | ||||||
| #include <cstdio> | #include <cstdio> | ||||||
| #include <sstream> | #include <sstream> | ||||||
| 
 | 
 | ||||||
| #include <sys/types.h> |  | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
| #include <sys/wait.h> | #include <sys/wait.h> | ||||||
| #include <unistd.h> |  | ||||||
| #include <dirent.h> |  | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <signal.h> |  | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| Error::Error(const format & f) | Error::Error(const format & f) | ||||||
| { | { | ||||||
|     err = f.str(); |     err = f.str(); | ||||||
|  | @ -368,7 +367,7 @@ void Nest::open(Verbosity level, const format & f) | ||||||
| { | { | ||||||
|     if (level <= verbosity) { |     if (level <= verbosity) { | ||||||
|         if (logType == ltEscapes) |         if (logType == ltEscapes) | ||||||
|             cerr << "\033[" << escVerbosity(level) << "p" |             std::cerr << "\033[" << escVerbosity(level) << "p" | ||||||
|                       << f.str() << "\n"; |                       << f.str() << "\n"; | ||||||
|         else |         else | ||||||
|             printMsg_(level, f); |             printMsg_(level, f); | ||||||
|  | @ -383,7 +382,7 @@ void Nest::close() | ||||||
|     if (nest) { |     if (nest) { | ||||||
|         nestingLevel--; |         nestingLevel--; | ||||||
|         if (logType == ltEscapes) |         if (logType == ltEscapes) | ||||||
|             cerr << "\033[q"; |             std::cerr << "\033[q"; | ||||||
|         nest = false; |         nest = false; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -697,8 +696,8 @@ string runProgram(Path program) | ||||||
|             execl(program.c_str(), program.c_str(), (char *) 0); |             execl(program.c_str(), program.c_str(), (char *) 0); | ||||||
|             throw SysError(format("executing `%1%'") % program); |             throw SysError(format("executing `%1%'") % program); | ||||||
|              |              | ||||||
|         } catch (exception & e) { |         } catch (std::exception & e) { | ||||||
|             cerr << "error: " << e.what() << endl; |             std::cerr << "error: " << e.what() << std::endl; | ||||||
|         } |         } | ||||||
|         quickExit(1); |         quickExit(1); | ||||||
|     } |     } | ||||||
|  | @ -743,7 +742,7 @@ void _interrupted() | ||||||
|     /* Block user interrupts while an exception is being handled.
 |     /* Block user interrupts while an exception is being handled.
 | ||||||
|        Throwing an exception while another exception is being handled |        Throwing an exception while another exception is being handled | ||||||
|        kills the program! */ |        kills the program! */ | ||||||
|     if (!uncaught_exception()) { |     if (!std::uncaught_exception()) { | ||||||
|         _isInterrupted = 0; |         _isInterrupted = 0; | ||||||
|         throw Error("interrupted by the user"); |         throw Error("interrupted by the user"); | ||||||
|     } |     } | ||||||
|  | @ -837,7 +836,7 @@ bool statusOk(int status) | ||||||
| 
 | 
 | ||||||
| string int2String(int n) | string int2String(int n) | ||||||
| { | { | ||||||
|     ostringstream str; |     std::ostringstream str; | ||||||
|     str << n; |     str << n; | ||||||
|     return str.str(); |     return str.str(); | ||||||
| } | } | ||||||
|  | @ -845,7 +844,10 @@ string int2String(int n) | ||||||
| 
 | 
 | ||||||
| bool string2Int(const string & s, int & n) | bool string2Int(const string & s, int & n) | ||||||
| { | { | ||||||
|     istringstream str(s); |     std::istringstream str(s); | ||||||
|     str >> n; |     str >> n; | ||||||
|     return str && str.get() == EOF; |     return str && str.get() == EOF; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,58 +1,15 @@ | ||||||
| #ifndef __UTIL_H | #ifndef __UTIL_H | ||||||
| #define __UTIL_H | #define __UTIL_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| #include <list> |  | ||||||
| #include <set> |  | ||||||
| #include <sstream> |  | ||||||
| 
 | 
 | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include <dirent.h> | #include <dirent.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| 
 | 
 | ||||||
| #include <boost/format.hpp> |  | ||||||
| 
 | 
 | ||||||
| using namespace std; | namespace nix { | ||||||
| using namespace boost; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Error : public exception |  | ||||||
| { |  | ||||||
| protected: |  | ||||||
|     string err; |  | ||||||
| public: |  | ||||||
|     Error(const format & f); |  | ||||||
|     ~Error() throw () { }; |  | ||||||
|     const char * what() const throw () { return err.c_str(); } |  | ||||||
|     const string & msg() const throw () { return err; } |  | ||||||
|     Error & addPrefix(const format & f); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class SysError : public Error |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     SysError(const format & f); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #define MakeError(newClass, superClass) \ |  | ||||||
|     class newClass : public superClass                  \ |  | ||||||
|     {                                                   \ |  | ||||||
|     public:                                             \ |  | ||||||
|         newClass(const format & f) : superClass(f) { }; \ |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
| MakeError(UsageError, Error) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| typedef list<string> Strings; |  | ||||||
| typedef set<string> StringSet; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* Paths are just strings. */ |  | ||||||
| typedef string Path; |  | ||||||
| typedef list<Path> Paths; |  | ||||||
| typedef set<Path> PathSet; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Return an environment variable. */ | /* Return an environment variable. */ | ||||||
|  | @ -138,15 +95,6 @@ typedef enum { | ||||||
|     ltFlat      /* no nesting */ |     ltFlat      /* no nesting */ | ||||||
| } LogType; | } LogType; | ||||||
| 
 | 
 | ||||||
| typedef enum {  |  | ||||||
|     lvlError, |  | ||||||
|     lvlInfo, |  | ||||||
|     lvlTalkative, |  | ||||||
|     lvlChatty, |  | ||||||
|     lvlDebug, |  | ||||||
|     lvlVomit |  | ||||||
| } Verbosity; |  | ||||||
| 
 |  | ||||||
| extern LogType logType; | extern LogType logType; | ||||||
| extern Verbosity verbosity; /* suppress msgs > this */ | extern Verbosity verbosity; /* suppress msgs > this */ | ||||||
| 
 | 
 | ||||||
|  | @ -308,4 +256,7 @@ struct SwitchToOriginalUser | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__UTIL_H */ | #endif /* !__UTIL_H */ | ||||||
|  |  | ||||||
|  | @ -3,7 +3,10 @@ | ||||||
| #include "xml-writer.hh" | #include "xml-writer.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| XMLWriter::XMLWriter(bool indent, ostream & output) | namespace nix { | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  | XMLWriter::XMLWriter(bool indent, std::ostream & output) | ||||||
|     : output(output), indent(indent) |     : output(output), indent(indent) | ||||||
| { | { | ||||||
|     output << "<?xml version='1.0' encoding='utf-8'?>\n"; |     output << "<?xml version='1.0' encoding='utf-8'?>\n"; | ||||||
|  | @ -122,3 +125,6 @@ int main(int argc, char * * argv) | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,12 @@ | ||||||
| #include <list> | #include <list> | ||||||
| #include <map> | #include <map> | ||||||
| 
 | 
 | ||||||
| using namespace std; | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | using std::string; | ||||||
|  | using std::map; | ||||||
|  | using std::list; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| typedef map<string, string> XMLAttrs; | typedef map<string, string> XMLAttrs; | ||||||
|  | @ -16,7 +21,7 @@ class XMLWriter | ||||||
| { | { | ||||||
| private: | private: | ||||||
|      |      | ||||||
|     ostream & output; |     std::ostream & output; | ||||||
| 
 | 
 | ||||||
|     bool indent; |     bool indent; | ||||||
|     bool closed; |     bool closed; | ||||||
|  | @ -25,7 +30,7 @@ private: | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| 
 | 
 | ||||||
|     XMLWriter(bool indent, ostream & output); |     XMLWriter(bool indent, std::ostream & output); | ||||||
|     ~XMLWriter(); |     ~XMLWriter(); | ||||||
| 
 | 
 | ||||||
|     void close(); |     void close(); | ||||||
|  | @ -64,4 +69,7 @@ public: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|   |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__XML_WRITER_H */ | #endif /* !__XML_WRITER_H */ | ||||||
|  |  | ||||||
|  | @ -13,6 +13,9 @@ | ||||||
| #include "attr-path.hh" | #include "attr-path.hh" | ||||||
| #include "pathlocks.hh" | #include "pathlocks.hh" | ||||||
| #include "xml-writer.hh" | #include "xml-writer.hh" | ||||||
|  | #include "store.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| #include <cerrno> | #include <cerrno> | ||||||
| #include <ctime> | #include <ctime> | ||||||
|  | @ -23,6 +26,10 @@ | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | using namespace nix; | ||||||
|  | using std::cout; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     srcNixExprDrvs, |     srcNixExprDrvs, | ||||||
|     srcNixExprs, |     srcNixExprs, | ||||||
|  | @ -224,7 +231,7 @@ static DrvInfos filterBySelector(EvalState & state, | ||||||
|     for (DrvNames::iterator i = selectors.begin(); |     for (DrvNames::iterator i = selectors.begin(); | ||||||
|          i != selectors.end(); ++i) |          i != selectors.end(); ++i) | ||||||
|     { |     { | ||||||
|         typedef list<pair<DrvInfo, unsigned int> > Matches; |         typedef list<std::pair<DrvInfo, unsigned int> > Matches; | ||||||
|         Matches matches; |         Matches matches; | ||||||
|         unsigned int n = 0; |         unsigned int n = 0; | ||||||
|         for (DrvInfos::const_iterator j = allElems.begin(); |         for (DrvInfos::const_iterator j = allElems.begin(); | ||||||
|  | @ -233,7 +240,7 @@ static DrvInfos filterBySelector(EvalState & state, | ||||||
|             DrvName drvName(j->name); |             DrvName drvName(j->name); | ||||||
|             if (i->matches(drvName)) { |             if (i->matches(drvName)) { | ||||||
|                 i->hits++; |                 i->hits++; | ||||||
|                 matches.push_back(pair<DrvInfo, unsigned int>(*j, n)); |                 matches.push_back(std::pair<DrvInfo, unsigned int>(*j, n)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -244,7 +251,7 @@ static DrvInfos filterBySelector(EvalState & state, | ||||||
|         if (newestOnly) { |         if (newestOnly) { | ||||||
| 
 | 
 | ||||||
|             /* Map from package names to derivations. */ |             /* Map from package names to derivations. */ | ||||||
|             typedef map<string, pair<DrvInfo, unsigned int> > Newest; |             typedef map<string, std::pair<DrvInfo, unsigned int> > Newest; | ||||||
|             Newest newest; |             Newest newest; | ||||||
|             StringSet multiple; |             StringSet multiple; | ||||||
| 
 | 
 | ||||||
|  | @ -350,7 +357,7 @@ static void queryInstSources(EvalState & state, | ||||||
|                 assertStorePath(*i); |                 assertStorePath(*i); | ||||||
| 
 | 
 | ||||||
|                 DrvInfo elem; |                 DrvInfo elem; | ||||||
|                 elem.attrs = shared_ptr<ATermMap>(new ATermMap(0)); /* ugh... */ |                 elem.attrs = boost::shared_ptr<ATermMap>(new ATermMap(0)); /* ugh... */ | ||||||
|                 string name = baseNameOf(*i); |                 string name = baseNameOf(*i); | ||||||
|                 string::size_type dash = name.find('-'); |                 string::size_type dash = name.find('-'); | ||||||
|                 if (dash != string::npos) |                 if (dash != string::npos) | ||||||
|  | @ -667,7 +674,7 @@ void printTable(Table & table) | ||||||
|             if (column < nrColumns - 1) |             if (column < nrColumns - 1) | ||||||
|                 cout << string(widths[column] - j->size() + 2, ' '); |                 cout << string(widths[column] - j->size() + 2, ' '); | ||||||
|         } |         } | ||||||
|         cout << endl; |         cout << std::endl; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -801,7 +808,7 @@ static void opQuery(Globals & globals, | ||||||
|      |      | ||||||
|     /* Print the desired columns, or XML output. */ |     /* Print the desired columns, or XML output. */ | ||||||
|     Table table; |     Table table; | ||||||
|     ostringstream dummy; |     std::ostringstream dummy; | ||||||
|     XMLWriter xml(true, *(xmlOutput ? &cout : &dummy)); |     XMLWriter xml(true, *(xmlOutput ? &cout : &dummy)); | ||||||
|     XMLOpenElement xmlRoot(xml, "items"); |     XMLOpenElement xmlRoot(xml, "items"); | ||||||
|      |      | ||||||
|  |  | ||||||
|  | @ -1,4 +1,8 @@ | ||||||
| #include "names.hh" | #include "names.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| DrvName::DrvName() | DrvName::DrvName() | ||||||
|  | @ -115,3 +119,6 @@ DrvNames drvNamesFromArgs(const Strings & opArgs) | ||||||
|         result.push_back(DrvName(*i)); |         result.push_back(DrvName(*i)); | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| #ifndef __NAMES_H | #ifndef __NAMES_H | ||||||
| #define __NAMES_H | #define __NAMES_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| #include <list> |  | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| struct DrvName | struct DrvName | ||||||
|  | @ -27,4 +27,7 @@ int compareVersions(const string & v1, const string & v2); | ||||||
| DrvNames drvNamesFromArgs(const Strings & opArgs); | DrvNames drvNamesFromArgs(const Strings & opArgs); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__NAMES_H */ | #endif /* !__NAMES_H */ | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| #include "profiles.hh" | #include "profiles.hh" | ||||||
|  | #include "util.hh" | ||||||
| 
 | 
 | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
|  | @ -7,6 +8,9 @@ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| static bool cmpGensByNumber(const Generation & a, const Generation & b) | static bool cmpGensByNumber(const Generation & a, const Generation & b) | ||||||
| { | { | ||||||
|     return a.number < b.number; |     return a.number < b.number; | ||||||
|  | @ -126,3 +130,7 @@ void switchLink(Path link, Path target) | ||||||
|     if (rename(tmp.c_str(), link.c_str()) != 0) |     if (rename(tmp.c_str(), link.c_str()) != 0) | ||||||
|         throw SysError(format("renaming `%1%' to `%2%'") % tmp % link); |         throw SysError(format("renaming `%1%' to `%2%'") % tmp % link); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -1,9 +1,10 @@ | ||||||
| #ifndef __PROFILES_H | #ifndef __PROFILES_H | ||||||
| #define __PROFILES_H | #define __PROFILES_H | ||||||
| 
 | 
 | ||||||
| #include <string> | #include "types.hh" | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| struct Generation | struct Generation | ||||||
|  | @ -35,4 +36,7 @@ void deleteGeneration(const Path & profile, unsigned int gen); | ||||||
| void switchLink(Path link, Path target); | void switchLink(Path link, Path target); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif /* !__PROFILES_H */ | #endif /* !__PROFILES_H */ | ||||||
|  |  | ||||||
|  | @ -5,9 +5,12 @@ | ||||||
| #include "help.txt.hh" | #include "help.txt.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | using namespace nix; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| void printHelp() | void printHelp() | ||||||
| { | { | ||||||
|     cout << string((char *) helpText, sizeof helpText); |     std::cout << string((char *) helpText, sizeof helpText); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -43,7 +46,7 @@ void run(Strings args) | ||||||
|         for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) { |         for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) { | ||||||
|             Hash h = flat ? hashFile(ht, *i) : hashPath(ht, *i); |             Hash h = flat ? hashFile(ht, *i) : hashPath(ht, *i); | ||||||
|             if (truncate && h.hashSize > 20) h = compressHash(h, 20); |             if (truncate && h.hashSize > 20) h = compressHash(h, 20); | ||||||
|             cout << format("%1%\n") % |             std::cout << format("%1%\n") % | ||||||
|                 (base32 ? printHash32(h) : printHash(h)); |                 (base32 ? printHash32(h) : printHash(h)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -51,7 +54,7 @@ void run(Strings args) | ||||||
|     else { |     else { | ||||||
|         for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) { |         for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) { | ||||||
|             Hash h = op == opTo16 ? parseHash32(ht, *i) : parseHash(ht, *i); |             Hash h = op == opTo16 ? parseHash32(ht, *i) : parseHash(ht, *i); | ||||||
|             cout << format("%1%\n") % |             std::cout << format("%1%\n") % | ||||||
|                 (op == opTo16 ? printHash(h) : printHash32(h)); |                 (op == opTo16 ? printHash(h) : printHash32(h)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -10,12 +10,17 @@ | ||||||
| #include "get-drvs.hh" | #include "get-drvs.hh" | ||||||
| #include "attr-path.hh" | #include "attr-path.hh" | ||||||
| #include "expr-to-xml.hh" | #include "expr-to-xml.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | #include "store.hh" | ||||||
| #include "help.txt.hh" | #include "help.txt.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | using namespace nix; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| void printHelp() | void printHelp() | ||||||
| { | { | ||||||
|     cout << string((char *) helpText, sizeof helpText); |     std::cout << string((char *) helpText, sizeof helpText); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -23,7 +28,7 @@ static Expr parseStdin(EvalState & state) | ||||||
| { | { | ||||||
|     startNest(nest, lvlTalkative, format("parsing standard input")); |     startNest(nest, lvlTalkative, format("parsing standard input")); | ||||||
|     string s, s2; |     string s, s2; | ||||||
|     while (getline(cin, s2)) s += s2 + "\n"; |     while (getline(std::cin, s2)) s += s2 + "\n"; | ||||||
|     return parseExprFromString(state, s, absPath(".")); |     return parseExprFromString(state, s, absPath(".")); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -38,9 +43,9 @@ static void printResult(EvalState & state, Expr e, | ||||||
| { | { | ||||||
|     if (evalOnly) |     if (evalOnly) | ||||||
|         if (xmlOutput) |         if (xmlOutput) | ||||||
|             printTermAsXML(e, cout); |             printTermAsXML(e, std::cout); | ||||||
|         else |         else | ||||||
|             cout << format("%1%\n") % e; |             std::cout << format("%1%\n") % e; | ||||||
|      |      | ||||||
|     else { |     else { | ||||||
|         DrvInfos drvs; |         DrvInfos drvs; | ||||||
|  | @ -53,7 +58,7 @@ static void printResult(EvalState & state, Expr e, | ||||||
|                 drvPath = addPermRoot(drvPath, |                 drvPath = addPermRoot(drvPath, | ||||||
|                     makeRootName(gcRoot, rootNr), |                     makeRootName(gcRoot, rootNr), | ||||||
|                     indirectRoot); |                     indirectRoot); | ||||||
|             cout << format("%1%\n") % drvPath; |             std::cout << format("%1%\n") % drvPath; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,14 @@ | ||||||
|  | #include "dotgraph.hh" | ||||||
|  | #include "util.hh" | ||||||
|  | #include "store.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | 
 | ||||||
| #include <iostream> | #include <iostream> | ||||||
| 
 | 
 | ||||||
| #include "dotgraph.hh" | 
 | ||||||
| #include "build.hh" | using std::cout; | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static string dotQuote(const string & s) | static string dotQuote(const string & s) | ||||||
|  | @ -151,3 +158,6 @@ void printDotGraph(const PathSet & roots) | ||||||
| 
 | 
 | ||||||
|     cout << "}\n"; |     cout << "}\n"; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,8 +1,12 @@ | ||||||
| #ifndef __DOTGRAPH_H | #ifndef __DOTGRAPH_H | ||||||
| #define __DOTGRAPH_H | #define __DOTGRAPH_H | ||||||
| 
 | 
 | ||||||
| #include "util.hh" | #include "types.hh" | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
| 
 | 
 | ||||||
| void printDotGraph(const PathSet & roots); | void printDotGraph(const PathSet & roots); | ||||||
| 
 | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #endif /* !__DOTGRAPH_H */ | #endif /* !__DOTGRAPH_H */ | ||||||
|  |  | ||||||
|  | @ -8,9 +8,17 @@ | ||||||
| #include "archive.hh" | #include "archive.hh" | ||||||
| #include "shared.hh" | #include "shared.hh" | ||||||
| #include "dotgraph.hh" | #include "dotgraph.hh" | ||||||
|  | #include "store.hh" | ||||||
|  | #include "db.hh" | ||||||
|  | #include "util.hh" | ||||||
| #include "help.txt.hh" | #include "help.txt.hh" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | using namespace nix; | ||||||
|  | using std::cin; | ||||||
|  | using std::cout; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| typedef void (* Operation) (Strings opFlags, Strings opArgs); | typedef void (* Operation) (Strings opFlags, Strings opArgs); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -528,7 +536,7 @@ static void opGC(Strings opFlags, Strings opArgs) | ||||||
| 
 | 
 | ||||||
|     if (action != gcDeleteDead) { |     if (action != gcDeleteDead) { | ||||||
|         for (PathSet::iterator i = result.begin(); i != result.end(); ++i) |         for (PathSet::iterator i = result.begin(); i != result.end(); ++i) | ||||||
|             cout << *i << endl; |             cout << *i << std::endl; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue