about summary refs log tree commit diff
path: root/perl/lib/Nix/Store.xs
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2011-10-11T15·41+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2011-10-11T15·41+0000
commit67617574280a5db534e5b5c643a3b880d1b9336c (patch)
tree9ea4ae6a7b529585a18e339061a4cce44947b2f9 /perl/lib/Nix/Store.xs
parentd43a148204a983bf676750f50640969f8edf7350 (diff)
* Use the Store API bindings in nix-copy-closure.
Diffstat (limited to 'perl/lib/Nix/Store.xs')
-rw-r--r--perl/lib/Nix/Store.xs41
1 files changed, 31 insertions, 10 deletions
diff --git a/perl/lib/Nix/Store.xs b/perl/lib/Nix/Store.xs
index dd5cffdbb7b3..af71ad955c4f 100644
--- a/perl/lib/Nix/Store.xs
+++ b/perl/lib/Nix/Store.xs
@@ -39,8 +39,7 @@ void init()
         doInit();
 
 
-int isValidPath(path)
-        char * path
+int isValidPath(char * path)
     CODE:
         try {
             doInit();
@@ -52,8 +51,7 @@ int isValidPath(path)
         RETVAL
 
 
-SV * queryReferences(path)
-        char * path
+SV * queryReferences(char * path)
     PPCODE:
         try {
             doInit();
@@ -66,8 +64,7 @@ SV * queryReferences(path)
         }
 
 
-SV * queryPathHash(path)
-        char * path
+SV * queryPathHash(char * path)
     PPCODE:
         try {
             doInit();
@@ -79,8 +76,7 @@ SV * queryPathHash(path)
         }
 
 
-SV * queryDeriver(path)
-        char * path
+SV * queryDeriver(char * path)
     PPCODE:
         try {
             doInit();
@@ -92,8 +88,7 @@ SV * queryDeriver(path)
         }
 
 
-SV * queryPathInfo(path)
-        char * path
+SV * queryPathInfo(char * path)
     PPCODE:
         try {
             doInit();
@@ -127,3 +122,29 @@ SV * computeFSClosure(int flipDirection, int includeOutputs, ...)
         } catch (Error & e) {
             croak(e.what());
         }
+
+
+SV * topoSortPaths(...)
+    PPCODE:
+        try {
+            doInit();
+            PathSet paths;
+            for (int n = 0; n < items; ++n) paths.insert(SvPV_nolen(ST(n)));
+            Paths sorted = topoSortPaths(*store, paths);
+            for (Paths::iterator i = sorted.begin(); i != sorted.end(); ++i)
+                XPUSHs(sv_2mortal(newSVpv(i->c_str(), 0)));
+        } catch (Error & e) {
+            croak(e.what());
+        }
+
+
+SV * followLinksToStorePath(char * path)
+    CODE:
+        try {
+            doInit();
+            RETVAL = newSVpv(followLinksToStorePath(path).c_str(), 0);
+        } catch (Error & e) {
+            croak(e.what());
+        }
+    OUTPUT:
+        RETVAL