about summary refs log tree commit diff
path: root/src/nix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix.cc')
-rw-r--r--src/nix.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/nix.cc b/src/nix.cc
index 9f4733f5e202..cc81260e32b7 100644
--- a/src/nix.cc
+++ b/src/nix.cc
@@ -237,7 +237,7 @@ void installPkg(string pkgref)
     string cmd;
     string builder;
 
-    if (!queryDB("refs", pkgref, pkgfile))
+    if (!queryDB(dbRefs, pkgref, pkgfile))
         throw Error("unknown package " + pkgref);
 
     cerr << "installing package " + pkgref + " from " + pkgfile + "\n";
@@ -272,7 +272,7 @@ void installPkg(string pkgref)
 
         string file;
 
-        if (!queryDB("refs", it->ref, file))
+        if (!queryDB(dbRefs, it->ref, file))
             throw Error("unknown file " + it->ref);
 
         if (makeRef(file) != it->ref)
@@ -437,6 +437,23 @@ void verifyDB()
 }
 
 
+void listInstalledPkgs()
+{
+    DBPairs instPkgs;
+
+    enumDB(dbInstPkgs, instPkgs);
+
+    for (DBPairs::iterator it = instPkgs.begin();
+         it != instPkgs.end(); it++)
+    {
+        string descr;
+        if (!queryDB(dbRefs, it->first, descr))
+            descr = "descriptor missing";
+        cout << it->first << " " << descr << endl;
+    }
+}
+
+
 void run(int argc, char * * argv)
 {
     UsageError argcError("wrong number of arguments");
@@ -464,6 +481,9 @@ void run(int argc, char * * argv)
     } else if (cmd == "reginst") {
         if (argc != 2) throw argcError;
         registerInstalledPkg(argv[0], argv[1]);
+    } else if (cmd == "listinst") {
+        if (argc != 0) throw argcError;
+        listInstalledPkgs();
     } else
         throw UsageError("unknown command: " + string(cmd));
 }