1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-25 06:31:14 +02:00

nix-env -q --out-path: Support multiple outputs

We now print all output paths of a package, e.g.

  openssl-1.0.0i  bin=/nix/store/gq2mvh0wb9l90djvsagln3aqywqmr6vl-openssl-1.0.0i-bin;man=/nix/store/7zwf5r5hsdarl3n86dasvb4chm2xzw9n-openssl-1.0.0i-man;/nix/store/cj7xvk7fjp9q887359j75pw3pzjfmqf1-openssl-1.0.0i

or (in XML mode)

  <item attrPath="openssl" name="openssl-1.0.0i" system="x86_64-linux">
    <output name="bin" path="/nix/store/gq2mvh0wb9l90djvsagln3aqywqmr6vl-openssl-1.0.0i-bin" />
    <output name="man" path="/nix/store/7zwf5r5hsdarl3n86dasvb4chm2xzw9n-openssl-1.0.0i-man" />
    <output name="out" path="/nix/store/cj7xvk7fjp9q887359j75pw3pzjfmqf1-openssl-1.0.0i" />
  </item>
This commit is contained in:
Eelco Dolstra 2012-11-28 13:49:44 +01:00
parent 6c98e6a5de
commit 8eed07cda4
5 changed files with 94 additions and 45 deletions

View file

@ -1030,7 +1030,7 @@ static void opQuery(Globals & globals,
if (xmlOutput) {
if (i->system != "") attrs["system"] = i->system;
}
else if (printSystem)
else if (printSystem)
columns.push_back(i->system);
if (printDrvPath) {
@ -1040,13 +1040,16 @@ static void opQuery(Globals & globals,
} else
columns.push_back(drvPath == "" ? "-" : drvPath);
}
if (printOutPath) {
string outPath = i->queryOutPath(globals.state);
if (xmlOutput) {
if (outPath != "") attrs["outPath"] = outPath;
} else
columns.push_back(outPath);
if (printOutPath && !xmlOutput) {
DrvInfo::Outputs outputs = i->queryOutputs(globals.state);
string s;
foreach (DrvInfo::Outputs::iterator, j, outputs) {
if (!s.empty()) s += ';';
if (j->first != "out") { s += j->first; s += "="; }
s += j->second;
}
columns.push_back(s);
}
if (printDescription) {
@ -1059,35 +1062,45 @@ static void opQuery(Globals & globals,
columns.push_back(descr);
}
if (xmlOutput)
if (printMeta) {
if (xmlOutput) {
if (printOutPath || printMeta) {
XMLOpenElement item(xml, "item", attrs);
MetaInfo meta = i->queryMetaInfo(globals.state);
for (MetaInfo::iterator j = meta.begin(); j != meta.end(); ++j) {
XMLAttrs attrs2;
attrs2["name"] = j->first;
if (j->second.type == MetaValue::tpString) {
attrs2["type"] = "string";
attrs2["value"] = j->second.stringValue;
xml.writeEmptyElement("meta", attrs2);
} else if (j->second.type == MetaValue::tpInt) {
attrs2["type"] = "int";
attrs2["value"] = (format("%1%") % j->second.intValue).str();
xml.writeEmptyElement("meta", attrs2);
} else if (j->second.type == MetaValue::tpStrings) {
attrs2["type"] = "strings";
XMLOpenElement m(xml, "meta", attrs2);
foreach (Strings::iterator, k, j->second.stringValues) {
XMLAttrs attrs3;
attrs3["value"] = *k;
xml.writeEmptyElement("string", attrs3);
}
if (printOutPath) {
DrvInfo::Outputs outputs = i->queryOutputs(globals.state);
foreach (DrvInfo::Outputs::iterator, j, outputs) {
XMLAttrs attrs2;
attrs2["name"] = j->first;
attrs2["path"] = j->second;
xml.writeEmptyElement("output", attrs2);
}
}
}
else
if (printMeta) {
MetaInfo meta = i->queryMetaInfo(globals.state);
for (MetaInfo::iterator j = meta.begin(); j != meta.end(); ++j) {
XMLAttrs attrs2;
attrs2["name"] = j->first;
if (j->second.type == MetaValue::tpString) {
attrs2["type"] = "string";
attrs2["value"] = j->second.stringValue;
xml.writeEmptyElement("meta", attrs2);
} else if (j->second.type == MetaValue::tpInt) {
attrs2["type"] = "int";
attrs2["value"] = (format("%1%") % j->second.intValue).str();
xml.writeEmptyElement("meta", attrs2);
} else if (j->second.type == MetaValue::tpStrings) {
attrs2["type"] = "strings";
XMLOpenElement m(xml, "meta", attrs2);
foreach (Strings::iterator, k, j->second.stringValues) {
XMLAttrs attrs3;
attrs3["value"] = *k;
xml.writeEmptyElement("string", attrs3);
}
}
}
}
} else
xml.writeEmptyElement("item", attrs);
else
} else
table.push_back(columns);
cout.flush();