Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/main/, gpackages/apps/packages/, gpackages/libs/
Date: Fri, 01 Jun 2012 21:29:05
Message-Id: 1338487040.1d3a4e88f9ab06c21c7e536439f5e014af1bee4d.bacher09@gentoo
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/'