1 |
Author: genone |
2 |
Date: 2008-09-25 15:25:27 +0000 (Thu, 25 Sep 2008) |
3 |
New Revision: 11540 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/portage/sets/dbapi.py |
7 |
Log: |
8 |
Add a new AgeSet class to select installed packages that have been installed more/less than n days ago |
9 |
|
10 |
Modified: main/trunk/pym/portage/sets/dbapi.py |
11 |
=================================================================== |
12 |
--- main/trunk/pym/portage/sets/dbapi.py 2008-09-25 13:30:33 UTC (rev 11539) |
13 |
+++ main/trunk/pym/portage/sets/dbapi.py 2008-09-25 15:25:27 UTC (rev 11540) |
14 |
@@ -248,3 +248,34 @@ |
15 |
return rValue |
16 |
multiBuilder = classmethod(multiBuilder) |
17 |
|
18 |
+class AgeSet(EverythingSet): |
19 |
+ _operations = ["merge", "unmerge"] |
20 |
+ |
21 |
+ def __init__(self, vardb, mode="older", age=7): |
22 |
+ super(AgeSet, self).__init__(vardb) |
23 |
+ self._mode = mode |
24 |
+ self._age = age |
25 |
+ |
26 |
+ def _filter(self, atom): |
27 |
+ import time, os |
28 |
+ |
29 |
+ cpv = self._db.match(atom)[0] |
30 |
+ path = self._db.getpath(cpv, filename="COUNTER") |
31 |
+ age = (time.time() - os.stat(path).st_mtime) / (3600 * 24) |
32 |
+ if ((self._mode == "older" and age <= self._age) \ |
33 |
+ or (self._mode == "newer" and age >= self._age)): |
34 |
+ return False |
35 |
+ else: |
36 |
+ return True |
37 |
+ |
38 |
+ def singleBuilder(cls, options, settings, trees): |
39 |
+ mode = options.get("mode", "older") |
40 |
+ if str(mode).lower() not in ["newer", "older"]: |
41 |
+ raise SetConfigError("invalid 'mode' value %s (use either 'newer' or 'older')" % mode) |
42 |
+ try: |
43 |
+ age = int(options.get("age", "7")) |
44 |
+ except ValueError, e: |
45 |
+ raise SetConfigError("value of option 'age' is not an integer") |
46 |
+ return AgeSet(vardb=trees["vartree"].dbapi, mode=mode, age=age) |
47 |
+ |
48 |
+ singleBuilder = classmethod(singleBuilder) |