1 |
commit: 1d3a4e88f9ab06c21c7e536439f5e014af1bee4d |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Thu May 31 17:57:20 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Thu May 31 17:57:20 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=1d3a4e88 |
7 |
|
8 |
Add saving mtime to datase. |
9 |
|
10 |
--- |
11 |
gpackages/apps/packages/models.py | 8 ++++++++ |
12 |
gpackages/libs/porttree.py | 20 +++++++++++++++++--- |
13 |
gpackages/main/settings.py | 2 +- |
14 |
3 files changed, 26 insertions(+), 4 deletions(-) |
15 |
|
16 |
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py |
17 |
index 765150a..b533f37 100644 |
18 |
--- a/gpackages/apps/packages/models.py |
19 |
+++ b/gpackages/apps/packages/models.py |
20 |
@@ -60,6 +60,9 @@ class PackageModel(models.Model): |
21 |
changelog = models.TextField(blank = True) |
22 |
changelog_hash = models.CharField(max_length = 128) |
23 |
manifest_hash = models.CharField(max_length = 128) |
24 |
+ changelog_mtime = models.DateTimeField(blank = True, null = True) |
25 |
+ manifest_mtime = models.DateTimeField(blank = True, null = True) |
26 |
+ mtime = models.DateTimeField(blank = True, null = True) |
27 |
# Different versions can have different licenses, or homepages. |
28 |
|
29 |
objects = managers.PackageManager() |
30 |
@@ -76,7 +79,10 @@ class PackageModel(models.Model): |
31 |
self.category = category |
32 |
|
33 |
def update_info(self, package): |
34 |
+ self.mtime = package.mtime |
35 |
+ self.changelog_mtime = package.changelog_mtime |
36 |
self.changelog_hash = package.changelog_sha1 |
37 |
+ self.manifest_mtime = package.manifest_mtime |
38 |
self.manifest_hash = package.manifest_sha1 |
39 |
|
40 |
class Meta: |
41 |
@@ -106,6 +112,7 @@ class EbuildModel(models.Model): |
42 |
licenses = models.ManyToManyField(LicensModel) |
43 |
license = models.CharField(max_length = 254, blank = True ) |
44 |
ebuild_hash = models.CharField(max_length = 128) |
45 |
+ ebuild_mtime = models.DateTimeField(blank = True, null = True) |
46 |
ebuild_datetime = models.DateTimeField(auto_now = True) |
47 |
is_deleted = models.BooleanField(default = False) |
48 |
is_masked = models.BooleanField(default = False) |
49 |
@@ -132,6 +139,7 @@ class EbuildModel(models.Model): |
50 |
self.version = ebuild.version |
51 |
self.revision = ebuild.revision |
52 |
self.license = ebuild.license |
53 |
+ self.ebuild_mtime = ebuild.mtime |
54 |
self.ebuild_hash = ebuild.sha1 |
55 |
self.homepage = ebuild.homepage |
56 |
self.description = ebuild.description |
57 |
|
58 |
diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py |
59 |
index bfd4859..d8b3da3 100644 |
60 |
--- a/gpackages/libs/porttree.py |
61 |
+++ b/gpackages/libs/porttree.py |
62 |
@@ -5,6 +5,7 @@ from portage.exception import PortageException, FileNotFound, InvalidAtom, \ |
63 |
InvalidDependString, InvalidPackageName |
64 |
|
65 |
from gentoolkit.package import Package as PackageInfo |
66 |
+from datetime import datetime |
67 |
import hashlib |
68 |
import os |
69 |
|
70 |
@@ -25,6 +26,9 @@ def _file_path(file_name): |
71 |
def _file_hash(attr): |
72 |
return lambda self: file_sha1(getattr(self, attr)) |
73 |
|
74 |
+def _file_mtime(attr): |
75 |
+ return lambda self: file_mtime(getattr(self, attr)) |
76 |
+ |
77 |
def _ebuild_environment(name): |
78 |
return lambda self: self.package_object.environment(name) |
79 |
|
80 |
@@ -36,6 +40,11 @@ def file_sha1(file_path): |
81 |
f.close() |
82 |
return sha1 |
83 |
|
84 |
+def file_mtime(file_path): |
85 |
+ if os.path.exists(file_path): |
86 |
+ return datetime.fromtimestamp(os.path.getmtime(file_path)) |
87 |
+ else: |
88 |
+ return None |
89 |
|
90 |
class ToStrMixin(object): |
91 |
def __str__(self): |
92 |
@@ -167,14 +176,20 @@ class Package(ToStrMixin): |
93 |
def package_path(self): |
94 |
return os.path.join(self.category.porttree.porttree_path, self.package) |
95 |
|
96 |
+ mtime = property(_file_mtime("package_path")) |
97 |
+ |
98 |
@property |
99 |
def name(self): |
100 |
return self.package.split('/')[1] |
101 |
|
102 |
manifest_path = property(_file_path('Manifest')) |
103 |
changelog_path = property(_file_path('ChangeLog')) |
104 |
+ #Hashes |
105 |
manifest_sha1 = property(_file_hash('manifest_path')) |
106 |
changelog_sha1 = property(_file_hash('changelog_path')) |
107 |
+ # Modify times |
108 |
+ manifest_mtime = property(_file_mtime("manifest_path")) |
109 |
+ changelog_mtime = property(_file_mtime("changelog_path")) |
110 |
|
111 |
|
112 |
class Ebuild(ToStrMixin): |
113 |
@@ -257,9 +272,8 @@ class Ebuild(ToStrMixin): |
114 |
def ebuild_path(self): |
115 |
return self.package_object.ebuild_path() |
116 |
|
117 |
- @property |
118 |
- def sha1(self): |
119 |
- return file_sha1(self.ebuild_path) |
120 |
+ sha1 = property(_file_hash("ebuild_path")) |
121 |
+ mtime = property(_file_mtime("ebuild_path")) |
122 |
|
123 |
def __unicode__(self): |
124 |
return self.ebuild |
125 |
|
126 |
diff --git a/gpackages/main/settings.py b/gpackages/main/settings.py |
127 |
index 9e6c933..dd0bab4 100644 |
128 |
--- a/gpackages/main/settings.py |
129 |
+++ b/gpackages/main/settings.py |
130 |
@@ -52,7 +52,7 @@ USE_I18N = True |
131 |
USE_L10N = True |
132 |
|
133 |
# If you set this to False, Django will not use timezone-aware datetimes. |
134 |
-USE_TZ = True |
135 |
+USE_TZ = False |
136 |
|
137 |
MEDIA_ROOT = os.path.join(PROJECT_ROOT,'media') |
138 |
MEDIA_URL = '/media/' |