[?]
Mar 5, 2009, 3:41 PM
4LWGZL33NOCTVZXUZZM5P6BRBHDUMEAJPVPNB52PN3UZVC7DMSZAC

Dependencies

  • [2] 4N5APGRG * Start of a helper tool to evaluate job expressions efficiently.

Change contents

  • replacement in src/c/eval-jobs.cc at line 8
    [2.425][2.425:451]()
    #include "expr-to-xml.hh"
    [2.425]
    [2.451]
    #include "nixexpr-ast.hh"
    #include "util.hh"
    #include "xml-writer.hh"
  • edit in src/c/eval-jobs.cc at line 18
    [2.541]
    [2.541]
    }
    Expr evalAttr(EvalState & state, Expr e)
    {
    return e ? evalExpr(state, e) : e;
    }
    static void findJobs(EvalState & state, XMLWriter & doc,
    Expr e, const string & attrPath)
    {
    std::cerr << "at `" << attrPath << "'\n";
    e = evalExpr(state, e);
    ATermList as, es;
    ATerm pat, body, pos;
    string s;
    PathSet context;
    if (matchAttrs(e, as)) {
    ATermMap attrs;
    queryAllAttrs(e, attrs);
    Expr a = evalAttr(state, attrs.get(toATerm("type")));
    if (a && matchStr(a, s, context) && s == "derivation") {
    std::cerr << "derivation\n";
    XMLAttrs xmlAttrs;
    Path outPath, drvPath;
    xmlAttrs["name"] = attrPath;
    a = evalAttr(state, attrs.get(toATerm("drvPath")));
    if (matchStr(a, drvPath, context)) xmlAttrs["drvPath"] = drvPath;
    a = evalAttr(state, attrs.get(toATerm("outPath")));
    if (matchStr(a, outPath, context)) xmlAttrs["outPath"] = outPath;
    XMLOpenElement _(doc, "job", xmlAttrs);
    }
    else {
    std::cerr << "attrset\n";
    foreach (ATermMap::const_iterator, i, attrs)
    findJobs(state, doc, i->value,
    (attrPath.empty() ? "" : attrPath + ".") + aterm2String(i->key));
    }
    }
    else if (matchFunction(e, pat, body, pos)) {
    std::cerr << "function\n";
    }
    else
    std::cerr << showValue(e) << "\n";
  • replacement in src/c/eval-jobs.cc at line 93
    [2.881][2.881:1019]()
    Expr e = evalExpr(state, parseExprFromFile(state, releaseExpr));
    PathSet context;
    printTermAsXML(e, std::cout, context);
    [2.881]
    [2.1019]
    Expr e = parseExprFromFile(state, releaseExpr);
    XMLWriter doc(true, std::cout);
    XMLOpenElement root(doc, "jobs");
    findJobs(state, doc, e, "");