f852086f3eb164ccd4a52ce87dfe4b1f7fea3469
[nodejs-repoproxy.git] / lib / repo-apt.js
1 var fs = require("fs");
2 var http = require("http");
3 var url = require("url");
4 var path = require("path");
5 var log = require("./log.js");
6
7
8
9 /*
10  * For APT repos, we expire anything with .* /dist/ .* in thename
11  */
12 function maintain(name, repoinfo, files) {
13         //log.debug("doing apt clean for ", repoinfo);
14         
15         var topdir = path.normalize(global.repoproxy.cacheDir + "/" + name + "/");
16         
17         function fileCheck(i) {
18                 log.debug("checking file: ", files[i]);
19                 
20                 var cfile = files[i].replace(topdir, "");
21                 var ctime_t = new Date();
22                 var ctime = ctime_t.getTime();
23                 var time_ui = ((ctime) - ((repoinfo["updateinterval"] * 3600 * 24 * 1000) - (12*3600*1000)));
24                 var time_et = ((ctime) - ((repoinfo["expiretime"] * 3600 * 24 * 1000) - (12*3600*1000)));
25                 
26                 // file checks go here
27                 if(typeof global.repoproxy.downloads[files[i]] != "undefined" && global.repoproxy.downloads[files[i]] == 1) {
28                         // ignore this file as its being downloaded
29                         log.debug("not checking file because its downloading ", cfile);
30                         if(typeof files[i+1] != "undefined") fileCheck(i+1);
31                 } else {
32                         fs.stat(files[i], function(err, stats) {
33                                 
34                                 //log.debug("deep check", cfile);
35                                 if(cfile.match(/.*dists\/.*/) != null) {
36                                         // its a dist file, probably, check age and erase if necessary
37                                         if(stats["mtime"].getTime() < time_ui) {
38                                                 // erase file
39                                                 log.debug("unlinking file for time_ui: ", files[i])
40                                                 //fs.unlink(files[i]);
41                                         } else {
42                                                 //log.debug("times for file '%s', '%s', '%s', '%s'", cfile, time_ui, time_et, stats["mtime"].getTime());
43                                         }
44                                         
45                                 } else {
46                                         // its just some other file, check the read time
47                                         if(stats["atime"].getTime() < time_et) {
48                                                 log.debug("unlinking file for time_et: ", files[i]);
49                                         }
50                                 }
51                                 if(typeof files[i+1] != "undefined") fileCheck(i+1);                            
52                         });
53                 }
54                 
55                 
56         }
57         
58         
59         if(typeof files[0] != 'undefined') fileCheck(0)
60         else log.debug("Skipping (apt) file check as there are none... apprently?");
61 }
62
63 exports.maintain = maintain;