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/apps/packages/
Date: Tue, 05 Jun 2012 15:50:13
Message-Id: 1338911369.bd97f3271c9287902bf8d3c2a2e5c39d310aad20.bacher09@gentoo
1 commit: bd97f3271c9287902bf8d3c2a2e5c39d310aad20
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Tue Jun 5 15:49:29 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Tue Jun 5 15:49:29 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=bd97f327
7
8 Change in updating info
9
10 ---
11 gpackages/apps/packages/managers.py | 72 +++++++++++++++---------------
12 gpackages/apps/packages/models.py | 12 +++---
13 gpackages/apps/packages/scan.py | 82 ++++++++++++++++++++++++++--------
14 3 files changed, 104 insertions(+), 62 deletions(-)
15
16 diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
17 index 27136f8..cfde91e 100644
18 --- a/gpackages/apps/packages/managers.py
19 +++ b/gpackages/apps/packages/managers.py
20 @@ -53,42 +53,42 @@ class KeywordMixin(object):#{{{
21
22
23 class EbuildMixin(object):#{{{
24 - def create(self, **kwargs):
25 - if 'ebuild' in kwargs:
26 - obj = self.model(**kwargs)
27 - else:
28 - obj = super(EbuildMixin, self).create(**kwargs)
29 - return obj
30 -
31 - def get_or_create(self, **kwargs):
32 - assert kwargs, \
33 - 'get_or_create() must be passed at least one keyword argument'
34 - defaults = kwargs.pop('defaults', {})
35 - lookup = kwargs.copy()
36 - for f in self.model._meta.fields:
37 - if f.attname in lookup:
38 - lookup[f.name] = lookup.pop(f.attname)
39 - try:
40 - self._for_write = True
41 - return self.get(**lookup), False
42 - except self.model.DoesNotExist:
43 - try:
44 - params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
45 - params.update(defaults)
46 - sid = transaction.savepoint(using=self.db)
47 - obj = self.model(**params)
48 - if 'ebuild' not in kwargs:
49 - obj.save(force_insert=True, using=self.db)
50 - transaction.savepoint_commit(sid, using=self.db)
51 - return obj, True
52 - except IntegrityError as e:
53 - transaction.savepoint_rollback(sid, using=self.db)
54 - exc_info = sys.exc_info()
55 - try:
56 - return self.get(**lookup), False
57 - except self.model.DoesNotExist:
58 - # Re-raise the IntegrityError with its original traceback.
59 - raise exc_info[1], None, exc_info[2]
60 + #def create(self, **kwargs):
61 + #if 'ebuild' in kwargs:
62 + #obj = self.model(**kwargs)
63 + #else:
64 + #obj = super(EbuildMixin, self).create(**kwargs)
65 + #return obj
66 +
67 + #def get_or_create(self, **kwargs):
68 + #assert kwargs, \
69 + #'get_or_create() must be passed at least one keyword argument'
70 + #defaults = kwargs.pop('defaults', {})
71 + #lookup = kwargs.copy()
72 + #for f in self.model._meta.fields:
73 + #if f.attname in lookup:
74 + #lookup[f.name] = lookup.pop(f.attname)
75 + #try:
76 + #self._for_write = True
77 + #return self.get(**lookup), False
78 + #except self.model.DoesNotExist:
79 + #try:
80 + #params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
81 + #params.update(defaults)
82 + #sid = transaction.savepoint(using=self.db)
83 + #obj = self.model(**params)
84 + #if 'ebuild' not in kwargs:
85 + #obj.save(force_insert=True, using=self.db)
86 + #transaction.savepoint_commit(sid, using=self.db)
87 + #return obj, True
88 + #except IntegrityError as e:
89 + #transaction.savepoint_rollback(sid, using=self.db)
90 + #exc_info = sys.exc_info()
91 + #try:
92 + #return self.get(**lookup), False
93 + #except self.model.DoesNotExist:
94 + ## Re-raise the IntegrityError with its original traceback.
95 + #raise exc_info[1], None, exc_info[2]
96
97
98 def get(self, ebuild=None,package = None, *args, **kwargs):
99
100 diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
101 index 4326a89..8a52b5d 100644
102 --- a/gpackages/apps/packages/models.py
103 +++ b/gpackages/apps/packages/models.py
104 @@ -160,9 +160,7 @@ class PackageModel(models.Model):
105
106 def check_or_need_update(self, package):
107 # Need add metadata check to
108 - return not( self.changelog_hash == package.changelog_sha1 and \
109 - self.metadata_hash == package.metadata_sha1 and \
110 - self.manifest_hash == package.manifest_sha1)
111 + return self.manifest_hash != package.manifest_sha1
112
113 def need_update_metadata(self, package):
114 return self.metadata_hash != package.metadata_sha1
115 @@ -243,23 +241,25 @@ class EbuildModel(models.Model):
116 del kwargs['ebuild']
117 super(EbuildModel, self).__init__(*args, **kwargs)
118 if ebuild is not None and isinstance(ebuild, Ebuild):
119 - self.init_with_keywords(ebuild)
120 + self.init_by_ebuild(ebuild)
121
122 def __unicode__(self):
123 return self.cpv
124
125 def init_by_ebuild(self, ebuild):
126 + self.update_by_ebuild(ebuild)
127 +
128 + def update_by_ebuild(self, ebuild):
129 self.is_masked = ebuild.is_masked
130 self.version = ebuild.version
131 self.revision = ebuild.revision
132 self.license = ebuild.license
133 self.ebuild_mtime = ebuild.mtime
134 self.ebuild_hash = ebuild.sha1
135 - #self.homepage = ebuild.homepage
136 self.description = ebuild.description
137
138 def check_or_need_update(self, ebuild):
139 - return not(self.ebuild_hash == ebuild.sha1)
140 + return self.ebuild_hash != ebuild.sha1
141
142 def init_related(self, ebuild, package = None):
143 self.init_by_ebuild(ebuild)
144
145 diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
146 index 8deb289..994adbf 100644
147 --- a/gpackages/apps/packages/scan.py
148 +++ b/gpackages/apps/packages/scan.py
149 @@ -257,39 +257,81 @@ def scanpackages():
150 herds_objects.append(herds_cache[herd])
151
152 return herds_objects
153 +
154 + def add_related_to_ebuild(ebuild, ebuild_object):
155 + # Add licenses
156 + ebuild_object.licenses.add(*get_licenses_objects(ebuild))
157 + ebuild_object.use_flags.add(*get_uses_objects(ebuild))
158 + ebuild_object.homepages.add(*get_homepages_objects(ebuild))
159 + get_keywords_objects(ebuild, ebuild_object)
160 +
161 + def clear_related_to_ebuild(ebuild_object):
162 + ebuild_object.licenses.clear()
163 + ebuild_object.use_flags.clear()
164 + ebuild_object.homepages.clear()
165 + models.Keyword.objects.filter(ebuild = ebuild_object).delete()
166 +
167 + def update_related_to_ebuild(ebuild, ebuild_object):
168 + clear_related_to_ebuild(ebuild_object)
169 + add_related_to_ebuild(ebuild, ebuild_object)
170 +
171 + def create_ebuilds(package, package_object):
172 + for ebuild in package.iter_ebuilds():
173 + ebuild_object = models.EbuildModel()
174 + ebuild_object.init_by_ebuild(ebuild)
175 + ebuild_object.package = package_object
176 + # To Add some related objects it should have pk
177 + ebuild_object.save(force_insert=True)
178 + add_related_to_ebuild(ebuild, ebuild_object)
179 +
180 + def update_ebuilds(package, package_object, delete = True):
181 + not_del = []
182 + for ebuild in package.iter_ebuilds():
183 + ebuild_object, ebuild_created = models.EbuildModel.objects.get_or_create(ebuild = ebuild, package = package_object)
184 + not_del.append(ebuild_object.pk)
185 + if ebuild_created:
186 + add_related_to_ebuild(ebuild, ebuild_object)
187 + continue
188 + if ebuild_object.check_or_need_update(ebuild):
189 + ebuild_object.update_by_ebuild(ebuild)
190 + update_related_to_ebuild(ebuild, ebuild_object)
191 + ebuild_object.save(force_update = True)
192 + if delete:
193 + models.EbuildModel.objects.exclude(pk__in = not_del).delete()
194 +
195 # Load homepages to cache
196 #for homepage in models.HomepageModel.objects.all():
197 #homepages_cache[homepage.url] = homepage
198 -
199 + existend_categorys = []
200 + existend_packages = []
201 for category in porttree.iter_categories():
202 category_object, category_created = models.CategoryModel.objects.get_or_create(category = category)
203 + existend_categorys.append(category_object.pk)
204 for package in category.iter_packages():
205 - print package
206 + #print package
207 package_object, package_created = models.PackageModel.objects.get_or_create(package = package, category = category_object)
208 + existend_packages.append(package_object.pk)
209 if not package_created:
210 if package_object.check_or_need_update(package):
211 + print package
212 # need update
213 - pass
214 + if package_object.need_update_metadata(package):
215 + package_object.herds.clear()
216 + package_object.maintainers.clear()
217 +
218 + if package_object.need_update_ebuilds(package):
219 + update_ebuilds(package, package_object)
220 +
221 + package_object.update_info(package)
222 + package_object.save(force_update = True)
223 else:
224 + # not need to update, ebuilds too
225 continue
226 package_object.herds.add(*get_herds_objects(package))
227 package_object.maintainers.add(*get_maintainers_objects(package))
228 - for ebuild in package.iter_ebuilds():
229 - ebuild_object = models.EbuildModel()
230 - ebuild_object.init_by_ebuild(ebuild)
231 - ebuild_object.package = package_object
232 - # To Add some related objects it should have pk
233 - ebuild_object.save(force_insert=True)
234 - # Add licenses
235 - ebuild_object.licenses.add(*get_licenses_objects(ebuild))
236 - ebuild_object.use_flags.add(*get_uses_objects(ebuild))
237 - ebuild_object.homepages.add(*get_homepages_objects(ebuild))
238 - get_keywords_objects(ebuild, ebuild_object)
239 - #homepages_list = []
240 - #for homepage in ebuild.homepages:
241 - #homepage_object = models.HomepageModel(url = homepage,
242 - #ebuild = ebuild_object)
243 - #homepages_list.append(homepage_object)
244 - #models.HomepageModel.objects.bulk_create(homepages_list)
245 + if package_created:
246 + create_ebuilds(package, package_object)
247 + # del
248 + #models.CategoryModel.objects.exclude(pk__in = existend_categorys).delete()