about summary refs log tree commit diff
path: root/src/nix-env
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/help.txt3
-rw-r--r--src/nix-env/nix-env.cc15
2 files changed, 17 insertions, 1 deletions
diff --git a/src/nix-env/help.txt b/src/nix-env/help.txt
index 16e47a73e3ac..b10c4b49243b 100644
--- a/src/nix-env/help.txt
+++ b/src/nix-env/help.txt
@@ -52,6 +52,7 @@ Query sources:
 
 Query flags:
 
+  --xml: show output in XML format
   --status / -s: print installed/present status
   --no-name: hide derivation names
   --attr / -A: shows the unambiguous attribute name of the
@@ -60,6 +61,8 @@ Query flags:
   --compare-versions / -c: compare version to available or installed
   --drv-path: print path of derivation
   --out-path: print path of derivation output
+  --description: print description
+  --meta: print all meta attributes (only with --xml)
   --prebuilt-only: only show derivations whose prebuilt binaries are
       available on this machine or are downloadable
 
diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc
index 3eea5c0c55e4..9f965bd2872f 100644
--- a/src/nix-env/nix-env.cc
+++ b/src/nix-env/nix-env.cc
@@ -836,6 +836,7 @@ static void opQuery(Globals & globals,
     bool printDrvPath = false;
     bool printOutPath = false;
     bool printDescription = false;
+    bool printMeta = false;
     bool prebuiltOnly = false;
     bool compareVersions = false;
     bool xmlOutput = false;
@@ -853,6 +854,7 @@ static void opQuery(Globals & globals,
         else if (*i == "--compare-versions" || *i == "-c") compareVersions = true;
         else if (*i == "--drv-path") printDrvPath = true;
         else if (*i == "--out-path") printOutPath = true;
+        else if (*i == "--meta") printMeta = true;
         else if (*i == "--installed") source = sInstalled;
         else if (*i == "--available" || *i == "-a") source = sAvailable;
         else if (*i == "--prebuilt-only" || *i == "-b") prebuiltOnly = true;
@@ -1014,7 +1016,18 @@ static void opQuery(Globals & globals,
             }
 
             if (xmlOutput)
-                xml.writeEmptyElement("item", attrs);
+                if (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;
+                        attrs2["value"] = j->second;
+                        xml.writeEmptyElement("meta", attrs2);
+                    }
+                }
+                else
+                    xml.writeEmptyElement("item", attrs);
             else
                 table.push_back(columns);