fixing multiple / in paths
[nodejs-repoproxy.git] / lib / maintain.js
index cbed4a2..6ae0429 100644 (file)
@@ -4,28 +4,71 @@ var url = require("url");
 var path = require("path");
 var repoapt = require("./repo-apt.js");
 var repoyum = require("./repo-yum.js");
+var log = require("./log.js");
 
 function maintainCache() {
        // TODO i should check that im already running here and exit if i am
-       console.log("Cache maintainence routine starting...");
+       if(global.repoproxy.maintain==1) {
+               log.warning("cache maintenance routine started, but its already running");
+               return;
+       }
+       
+       global.repoproxy.maintain = 1;
+       
+       log.info("Cache maintainence routine starting...");
        for(var index in global.repoproxy.repo) {
-               console.log("start cleanup in ", index);
-               console.log("cleanup array ", global.repoproxy.repo[index]);
+               //log.debug("start cleanup in ", index);
+               //log.debug("cleanup array ", global.repoproxy.repo[index]);
                switch(global.repoproxy.repo[index]["type"]) {
                case "apt":
-                       console.log("Scanning '%s' as apt", index);
+                       log.debug("Scanning '%s' as apt", index);
                        var walkin = path.normalize(global.repoproxy.cacheDir + "/" + index);
                        walkDir(walkin, function(err, list) {
                                repoapt.maintain(index, global.repoproxy.repo[index], list);
                        })
                        break;
                case "yum":
-                       //console.log("Scanning '%s' as apt", index);
+                       //log.debug("Scanning '%s' as apt", index);
                        //repoyum.maintain(global.repoproxy.repo[index]);
+                       log.debug("Scanning '%s' as yum", index);
+                       var walkin = path.normalize(global.repoproxy.cacheDir + "/" + index);
+                       walkDir(walkin, function(err, list) {
+                               repoyum.maintain(index, global.repoproxy.repo[index], list);
+                       })
+                       break;
                        break;
                }
        }
-       console.log("Cache maintainence routine ended...");
+       log.info("Cache maintainence routine ended...");
+       
+       
+       
+       log.info("beginning cache trash cleanup");
+       // TODO: do this bit properly, check that globals are set properly
+       var spawn = require('child_process').spawn;
+       
+       // TODO: be carefull we actually have a place to remove
+       if(typeof global.repoproxy == "undefined") {
+               log.error("serious issue, globals not accessible?");
+               process.exit(10);
+       } else if(typeof global.repoproxy.cacheDir == "undefined") {
+               log.error("serious issue, globals not accessible (cache check)?");
+               process.exit(10);
+       } else {
+           var remove  = spawn("rm", ["-r", global.repoproxy.cacheDir + "/.cleanup/*"]);
+           remove.on("close", function(code, sig) {
+               log.debug("remove ended with %d, %d", code, sig);
+           });
+           remove.stderr.on("data", function(line) {
+               log.debug("stderr from lazy remove: ", line.toString("utf8"));
+           });
+           remove.stdout.on("data", function(line) {
+               log.debug("stdout from lazy remove: ", line.toString("ascii"));
+           });
+       }
+       log.info("Trash empty");
+       
+       global.repoproxy.maintain = 0;
 }
 
 exports.startTimer = function() {
@@ -46,7 +89,7 @@ function walkDir(dir, done) {
                (function next() {
                        var file = list[i++];
                        if (!file) return done(null, results);
-                       file = path.normalize(dir + "/" + file);
+                       file = path.normalize(dir + "/" + file).replace(/\/+/g, "/");
                        fs.stat(file, function(err, stat) {
                                if (stat && stat.isDirectory()) {
                                        walkDir(file, function(err, res) {
@@ -62,8 +105,6 @@ function walkDir(dir, done) {
        });
 };
 
-exports.walkDir = walkDir;
 
-function cleanupRoutine() {
-       
-}
\ No newline at end of file
+
+exports.walkDir = walkDir;