about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/nix.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/nix.cc b/src/nix.cc
index a8d2d78806f9..973c36727ac2 100644
--- a/src/nix.cc
+++ b/src/nix.cc
@@ -332,6 +332,11 @@ build:
     
         if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
             throw Error("unable to build package");
+
+        /* Remove write permission from the build directory. */
+        int res = system(("chmod -R -w " + path).c_str()); // !!! escaping
+        if (WEXITSTATUS(res) != 0)
+            throw Error("cannot remove write permission from " + path);
     
     } catch (exception &) {
         system(("rm -rf " + path).c_str());
@@ -411,10 +416,10 @@ void delPkg(string hash)
     string path;
     checkHash(hash);
     if (queryDB(dbInstPkgs, hash, path)) {
-        int res = system(("rm -rf " + path).c_str()); // !!! escaping
-        delDB(dbInstPkgs, hash); // not a bug
+        int res = system(("chmod -R +w " + path + " && rm -rf " + path).c_str()); // !!! escaping
+        delDB(dbInstPkgs, hash); // not a bug ??? 
         if (WEXITSTATUS(res) != 0)
-            throw Error("cannot delete " + path);
+            cerr << "errors deleting " + path + ", ignoring" << endl;
     }
 }