1 |
commit: b69fcfef2d29309fea056281f0e7662088b51020 |
2 |
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Apr 1 15:17:28 2011 +0000 |
4 |
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Apr 1 15:17:28 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=dev/zorry.git;a=commit;h=b69fcfef |
7 |
|
8 |
alot of bug fixing |
9 |
|
10 |
--- |
11 |
buildhost/updatedb/core.py | 412 ++++++++++++++++----------------- |
12 |
buildhost/updatedb/sqlbackend.py | 481 ++++++++++++++++---------------------- |
13 |
2 files changed, 393 insertions(+), 500 deletions(-) |
14 |
|
15 |
diff --git a/buildhost/updatedb/core.py b/buildhost/updatedb/core.py |
16 |
index 49968c7..34be0e7 100644 |
17 |
--- a/buildhost/updatedb/core.py |
18 |
+++ b/buildhost/updatedb/core.py |
19 |
@@ -100,6 +100,7 @@ def get_ebuild_text(filename): |
20 |
return text, cvs_revision |
21 |
|
22 |
def check_make_conf(database): |
23 |
+ # FIXME: mark any config updating true in the db when updating the configs |
24 |
# Get the config list |
25 |
config_list_all = database.get_config_list_all() |
26 |
print "Checking configs for changes and errors" |
27 |
@@ -108,7 +109,7 @@ def check_make_conf(database): |
28 |
attDict={} |
29 |
# Set the config dir |
30 |
check_config_dir = get_conf_settings.SetBuildhostRoot + "config/" + config_id[0] + "/" |
31 |
- make_conf_file = check_config_dir + "etc/make.conf" |
32 |
+ make_conf_file = check_config_dir + "etc/portage/make.conf" |
33 |
# Check if we can open the file and close it |
34 |
# Check if we have some error in the file (portage.util.getconfig) |
35 |
# Check if we envorment error with the config (settings.validate) |
36 |
@@ -128,13 +129,12 @@ def check_make_conf(database): |
37 |
attDict['active'] = 'True' |
38 |
print "Pass", config_id[0] |
39 |
# Get the checksum of make.conf |
40 |
- make_conf_checksum_tree = portage.checksum.sha256hash(make_conf_file) |
41 |
+ make_conf_checksum_tree = portage.checksum.sha256hash(make_conf_file)[0] |
42 |
# Check if we have change the make.conf and update the db with it |
43 |
attDict['make_conf_text'] = get_file_text(make_conf_file) |
44 |
- attDict['make_conf_checksum_tree'] = portage.checksum.sha256hash(make_conf_file)[0] |
45 |
+ attDict['make_conf_checksum_tree'] = make_conf_checksum_tree |
46 |
configsDict[config_id]=attDict |
47 |
database.update__make_conf(configsDict) |
48 |
- # database.closeconnection() |
49 |
print "Updated configurtions" |
50 |
|
51 |
def init_portage_settings(database): |
52 |
@@ -299,18 +299,19 @@ def config_match_ebuild(database, categories, package): |
53 |
latest_ebuild = "" |
54 |
latest_ebuild_version = unicode("") |
55 |
# Check if could get cpv from portage |
56 |
+ # and get the lastes ebuild on that config |
57 |
if ebuild_match_list != []: |
58 |
for ebuild_match_line in ebuild_match_list: |
59 |
latest_ebuild = ebuild_match_line |
60 |
# Get the version of cpv |
61 |
latest_ebuild_version = portage.versions.cpv_getversion(latest_ebuild) |
62 |
- # Get the iuse and use flags for that config in config_line |
63 |
+ # Get the iuse and use flags for that config |
64 |
iuse_flags_list, final_use_list = get_flags(settings2, portdb2, latest_ebuild) |
65 |
iuse_flags_list2 = [] |
66 |
for iuse_line in iuse_flags_list: |
67 |
iuse_flags_list2.append(reduce_flag(iuse_line)) |
68 |
+ # Dic the needed info |
69 |
attDict = {} |
70 |
- # Fix the use flags so we can hash it |
71 |
attDict = {} |
72 |
attDict['ebuild_version'] = latest_ebuild_version |
73 |
attDict['useflags'] = final_use_list |
74 |
@@ -318,24 +319,30 @@ def config_match_ebuild(database, categories, package): |
75 |
attDict['package'] = package |
76 |
attDict['categories'] = categories |
77 |
config_cpv_listDict[config_id] = attDict |
78 |
+ # Clean some cache |
79 |
portdb2.close_caches() |
80 |
portage.portdbapi.portdbapi_instances.remove(portdb2) |
81 |
return config_cpv_listDict |
82 |
|
83 |
def add_new_ebuild_buildquery_db(database, ebuild_id_list, packageDict, config_cpv_listDict): |
84 |
+ # Get the needed info from packageDict and config_cpv_listDict and put that in buildqueue |
85 |
+ # Only add it if ebuild_version in packageDict and config_cpv_listDict match |
86 |
if config_cpv_listDict != {}: |
87 |
message = None |
88 |
+ # Unpack config_cpv_listDict |
89 |
for k, v in config_cpv_listDict.iteritems(): |
90 |
config_id = k |
91 |
latest_ebuild_version = v['ebuild_version'] |
92 |
iuse_flags_list = list(set(v['iuse'])) |
93 |
use_enable= v['useflags'] |
94 |
use_disable = list(set(iuse_flags_list).difference(set(use_enable))) |
95 |
+ # Make a dict with enable and disable use flags for ebuildqueuedwithuses |
96 |
use_flagsDict = {} |
97 |
for x in use_enable: |
98 |
use_flagsDict[x] = True |
99 |
for x in use_disable: |
100 |
use_flagsDict[x] = False |
101 |
+ # Unpack packageDict |
102 |
i = 0 |
103 |
for k, v in packageDict.iteritems(): |
104 |
ebuild_id = ebuild_id_list[i] |
105 |
@@ -344,6 +351,7 @@ def add_new_ebuild_buildquery_db(database, ebuild_id_list, packageDict, config_c |
106 |
for u, s in use_flagsDict.iteritems(): |
107 |
use_flags_list.append(u) |
108 |
use_enable_list.append(s) |
109 |
+ # Comper ebuild_version and add the ebuild_version to buildqueue |
110 |
if portage.vercmp(v['ebuild_version_tree'], latest_ebuild_version) == 0: |
111 |
database.add_new_package_buildqueue(ebuild_id, config_id, use_flags_list, use_enable_list, message) |
112 |
print "B", config_id, v['categories'] + "/" + v['package'] + "-" + latest_ebuild_version, "USE:", use_enable # B = Build config cpv use-flags |
113 |
@@ -466,11 +474,10 @@ def digestcheck(mysettings, pkgdir): |
114 |
return 1 |
115 |
|
116 |
def check_repoman(settings, portdb, database, categories, package, ebuild_version_tree, config_id): |
117 |
- # We run repoman run_checks |
118 |
+ # We run repoman run_checks on the ebuild |
119 |
pkgdir = settings['PORTDIR'] + "/" + categories + "/" + package |
120 |
full_path = pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild" |
121 |
cpv = categories + "/" + package + "-" + ebuild_version_tree |
122 |
- default_config_root = get_conf_settings.SetBuildhostRoot +"config/" + config_id + "/" |
123 |
root = '/' |
124 |
trees = { |
125 |
root : {'porttree' : portage.portagetree(root, settings=settings)} |
126 |
@@ -495,81 +502,35 @@ def check_repoman(settings, portdb, database, categories, package, ebuild_versio |
127 |
except UnicodeDecodeError: |
128 |
# A file.UTF8 failure will have already been recorded above. |
129 |
pass |
130 |
+ # fails will have a list with repoman errors |
131 |
return fails |
132 |
- |
133 |
-def add_new_keywords_restriction(ebuild_id, ebuild_line): |
134 |
- ebuild_keywords = portdb.aux_get(ebuild_line, ["KEYWORDS"])[0].split() |
135 |
- if not ebuild_keywords == []: |
136 |
- for keyword in ebuild_keywords: |
137 |
- if keyword.startswith("~"): |
138 |
- element = keyword.split('~') |
139 |
- arch = element[1] |
140 |
- stable = "~" |
141 |
- elif keyword.startswith("-"): |
142 |
- element = keyword.split('-') |
143 |
- arch = element[1] |
144 |
- stable = "-" |
145 |
- else: |
146 |
- arch = keyword |
147 |
- stable = "" |
148 |
- keyword_id = database.get_keyword_id_db(arch, stable) |
149 |
- database.add_new_keywords(ebuild_id[0], keyword_id[0]) |
150 |
- # restrictions |
151 |
- ebuild_restrictions = portdb.aux_get(ebuild_line, ["RESTRICT"])[0].split() |
152 |
- if not ebuild_restrictions is []: |
153 |
- for restriction in ebuild_restrictions: |
154 |
- database.add_new_restriction_db(ebuild_id[0], restriction) |
155 |
- |
156 |
-def update_qa_repoman(ebuild_id, qa_error, repoman_error, config_id): |
157 |
- qa_repoman_list = database.get_qa_repoman(ebuild_id, config_id) |
158 |
- if qa_repoman_list == (): |
159 |
- return |
160 |
- if qa_error == "" and repoman_error == "": |
161 |
- database.del_qa_repoman(ebuild_id, config_id) |
162 |
- else: |
163 |
- database.update_qa_repoman(ebuild_id, qa_error, repoman_error, config_id) |
164 |
|
165 |
-def add_new_package_db(settings, portdb, database, categories, package): |
166 |
- # add new categories package ebuild to tables package and ebuilds |
167 |
- print "N", categories + "/" + package # N = New Package |
168 |
- pkgdir = settings['PORTDIR'] + "/" + categories + "/" + package # Get PORTDIR + cp |
169 |
- categories_dir = settings['PORTDIR'] + "/" + categories + "/" |
170 |
- # Get the ebuild list for cp |
171 |
- ebuild_list_tree = portdb.cp_list((categories + "/" + package), use_cache=1, mytree=None) |
172 |
- config_cpv_listDict = config_match_ebuild(database, categories, package) |
173 |
- config_id = database.get_default_config() |
174 |
- packageDict ={} |
175 |
- for ebuild_line in sorted(ebuild_list_tree): |
176 |
- attDict = {} |
177 |
- # split out ebuild version |
178 |
- ebuild_version_tree = portage.versions.cpv_getversion(ebuild_line) |
179 |
- # Get the checksum of the ebuild |
180 |
- ebuild_version_checksum_tree = portage.checksum.sha256hash(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild")[0] |
181 |
- # Get the auxdbkeys infos for the ebuild |
182 |
- ebuild_version_metadata_tree = get_ebuild_metadata(portdb, ebuild_line) |
183 |
- if ebuild_version_metadata_tree == []: |
184 |
- ebuild_version_metadata_tree = ['','','','','','','','','','','','','','','','','','','','','','','','',''] |
185 |
- ebuild_version_checksum_tree = ['0'] |
186 |
- # Get the ebuild contents |
187 |
- ebuild_version_text = get_ebuild_text(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild") |
188 |
- repoman_error = check_repoman(settings, portdb, database, categories, package, ebuild_version_tree, config_id[0]) |
189 |
- # add the ebuild to the table packages |
190 |
- attDict['categories'] = categories |
191 |
- attDict['package'] = package |
192 |
- attDict['ebuild_version_tree'] = ebuild_version_tree |
193 |
- attDict['ebuild_version_checksum_tree']= ebuild_version_checksum_tree |
194 |
- attDict['ebuild_version_metadata_tree'] = ebuild_version_metadata_tree |
195 |
- attDict['ebuild_version_text'] = ebuild_version_text[0] |
196 |
- attDict['ebuild_version_revision'] = ebuild_version_text[1] |
197 |
- attDict['ebuild_error'] = repoman_error |
198 |
- packageDict[ebuild_line] = attDict |
199 |
- return_id = database.add_new_package_sql(packageDict) |
200 |
- ebuild_id_list = return_id[0] |
201 |
- package_id_list = return_id[1] |
202 |
- package_id = package_id_list[0] |
203 |
- manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest")[0] |
204 |
- get_manifest_text = get_file_text(pkgdir + "/Manifest") |
205 |
- database.add_new_manifest_sql(package_id, get_manifest_text, manifest_checksum_tree) |
206 |
+def get_packageDict(pkgdir, ebuild_line, settings, portdb, database, categories, package, config_id): |
207 |
+ attDict = {} |
208 |
+ ebuild_version_tree = portage.versions.cpv_getversion(ebuild_line) |
209 |
+ ebuild_version_checksum_tree = portage.checksum.sha256hash(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild")[0] |
210 |
+ ebuild_version_text = get_ebuild_text(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild") |
211 |
+ repoman_error = check_repoman(settings, portdb, database, categories, package, ebuild_version_tree, config_id) |
212 |
+ ebuild_version_metadata_tree = get_ebuild_metadata(portdb, ebuild_line) |
213 |
+ # if there some error to get the metadata we add rubish to the |
214 |
+ # ebuild_version_metadata_tree and set ebuild_version_checksum_tree to 0 |
215 |
+ # so it can be updated next time we update the db |
216 |
+ if ebuild_version_metadata_tree == []: |
217 |
+ ebuild_version_metadata_tree = ['','','','','','','','','','','','','','','','','','','','','','','','',''] |
218 |
+ ebuild_version_checksum_tree = ['0'] |
219 |
+ # add the ebuild to the dict packages |
220 |
+ attDict['categories'] = categories |
221 |
+ attDict['package'] = package |
222 |
+ attDict['ebuild_version_tree'] = ebuild_version_tree |
223 |
+ attDict['ebuild_version_checksum_tree']= ebuild_version_checksum_tree |
224 |
+ attDict['ebuild_version_metadata_tree'] = ebuild_version_metadata_tree |
225 |
+ attDict['ebuild_version_text'] = ebuild_version_text[0] |
226 |
+ attDict['ebuild_version_revision'] = ebuild_version_text[1] |
227 |
+ attDict['ebuild_error'] = repoman_error |
228 |
+ return attDict |
229 |
+ |
230 |
+def get_metadataDict(packageDict, ebuild_id_list): |
231 |
+ # Make the metadataDict from packageDict |
232 |
ebuild_i = 0 |
233 |
metadataDict ={} |
234 |
for k, v in packageDict.iteritems(): |
235 |
@@ -588,15 +549,10 @@ def add_new_package_db(settings, portdb, database, categories, package): |
236 |
attDict['iuse'] = metadata_iuse |
237 |
metadataDict[ebuild_id_list[ebuild_i]] = attDict |
238 |
ebuild_i = ebuild_i +1 |
239 |
- database.add_new_metadata(metadataDict) |
240 |
- qa_error = [] |
241 |
- if not digestcheck(settings, pkgdir): |
242 |
- qa_error.append("Manifest: Error in manifest file.") |
243 |
- print "QA:", categories + "/" + package, qa_error |
244 |
- database.add_qa_repoman(ebuild_id_list, qa_error, packageDict, config_id[0]) |
245 |
- # Add the ebuild to the buildqueru table if needed |
246 |
- add_new_ebuild_buildquery_db(database, ebuild_id_list, packageDict, config_cpv_listDict) |
247 |
- # Get some checksum on some files |
248 |
+ return metadataDict |
249 |
+ |
250 |
+def get_package_metadataDict(pkgdir, package): |
251 |
+ # Make package_metadataDict |
252 |
attDict = {} |
253 |
package_metadataDict = {} |
254 |
changelog_checksum_tree = portage.checksum.sha256hash(pkgdir + "/ChangeLog") |
255 |
@@ -608,87 +564,49 @@ def add_new_package_db(settings, portdb, database, categories, package): |
256 |
attDict['metadata_xml_checksum'] = metadata_xml_checksum_tree[0] |
257 |
attDict[' metadata_xml_text'] = metadata_xml_text_tree |
258 |
package_metadataDict[package] = attDict |
259 |
- database.add_new_package_metadata(package_id, package_metadataDict) |
260 |
- |
261 |
-def update_package_db(settings, portdb, database, categories, package, package_id): |
262 |
- # Update the categories and package with new info |
263 |
- pkgdir = settings['PORTDIR'] + "/" + categories + "/" + package # Get PORTDIR with cp |
264 |
- # Get the checksum from the file in portage tree |
265 |
- manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest") |
266 |
- # Get the checksum from the db in package table |
267 |
- manifest_checksum_db = database.get_manifest_db(package_id) |
268 |
- # if we have the same checksum return else update the package |
269 |
- if manifest_checksum_tree[0] != manifest_checksum_db[0]: |
270 |
- print "U", categories + "/" + package # U = Update |
271 |
- if not digestcheck(settings, pkgdir): |
272 |
- qa_error = "Manifest:" |
273 |
- print "QA:", categories + "/" + package, qa_error |
274 |
- else: |
275 |
- qa_error = "" |
276 |
- # Get some checksum on some files |
277 |
- # changelog_checksum_tree = portage.checksum.sha256hash(pkgdir + "/ChangeLog") |
278 |
- # metadata_xml_checksum_tree = portage.checksum.sha256hash(pkgdir + "/metadata.xml") |
279 |
- # Get text from ChangeLog and metadata.xml |
280 |
- # changelog_text = get_file_text(pkgdir + "/ChangeLog") |
281 |
- # metadata_xml_text = get_file_text(pkgdir + "/metadata.xml") |
282 |
- # update categories/package info to package table |
283 |
- database.update_package_sql(categories, package, manifest_checksum_tree) |
284 |
- ebuild_list_tree = portdb.cp_list((categories + "/" + package), use_cache=1, mytree=None) |
285 |
- config_cpv_list = config_match_ebuild(database, categories, package) |
286 |
- config_list_all = database.get_default_config() |
287 |
- cinfig_id = config_list_all[0] |
288 |
- for ebuild_line in ebuild_list_tree: |
289 |
- # split out ebuild version |
290 |
- ebuild_version_tree = portage.versions.cpv_getversion(ebuild_line) |
291 |
- # Get the checksum of the ebuild in tree |
292 |
- ebuild_version_checksum_tree = portage.checksum.sha256hash(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild") |
293 |
- # Get the checksum of the ebuild in db |
294 |
- ebuild_version_manifest_checksum_db = database.get_ebuild_checksum(categories, package, ebuild_version_tree) |
295 |
- sys.exit() |
296 |
- # check if the checksum have change on the ebuild |
297 |
- if ebuild_version_manifest_checksum_db is None or ebuild_version_checksum_tree[0] != ebuild_version_manifest_checksum_db[0]: |
298 |
- # Get the auxdbkeys infos for the ebuild |
299 |
- ebuild_version_metadata_tree = get_ebuild_metadata(portdb, ebuild_line) |
300 |
- if ebuild_version_metadata_tree == []: |
301 |
- ebuild_version_metadata_tree = ['','','','','','','','','','','','','','','','','','','','','','','','',''] |
302 |
- ebuild_version_checksum_tree = ['0','0'] |
303 |
- # Get the ebuild contents |
304 |
- ebuild_version_text = get_file_text(pkgdir +"/" + package + "-" + ebuild_version_tree + ".ebuild") |
305 |
- # check if the ebuild is new |
306 |
- repoman_error = check_repoman(settings, portdb, database, categories, package, ebuild_version_tree) |
307 |
- if ebuild_version_manifest_checksum_db is None: |
308 |
- # add the ebuild to the ebuild tble |
309 |
- database.add_new_ebuild_sql(categories, package, ebuild_version_tree, ebuild_version_checksum_tree, |
310 |
- ebuild_version_metadata_tree, ebuild_version_text) |
311 |
- ebuild_id = database.get_ebuild_id_db(categories, package, ebuild_version_tree) |
312 |
- add_new_keywords_restriction(ebuild_id, ebuild_line) |
313 |
- if not qa_error and repoman_error == "": |
314 |
- database.add_qa_repoman(ebuild_id, qa_error, repoman_error, config_id) |
315 |
- print "N", categories + "/" + package + "-" + ebuild_version_tree # N = New ebuild |
316 |
- else: |
317 |
- # update the ebuild to the ebuild table |
318 |
- ebuild_id = database.get_ebuild_id_db(categories, package, ebuild_version_tree) |
319 |
- database.update_ebuild_sql(ebuild_id, ebuild_version_checksum_tree, ebuild_version_metadata_tree, ebuild_version_text) |
320 |
- del_keywords_restriction(ebuild_id, ebuild_line) |
321 |
- add_new_keywords_restriction(ebuild_id, ebuild_line) |
322 |
- update_qa_repoman(ebuild_id, qa_error, repoman_error, config_id) |
323 |
- print "U", categories + "/" + package + "-" + ebuild_version_tree # U = Updated ebuild |
324 |
- # Add the ebuild to the buildqueru table if needed |
325 |
- add_new_ebuild_buildquery_db(database, ebuild_id, ebuild_version_tree, config_cpv_list) |
326 |
+ return package_metadataDict |
327 |
|
328 |
-def update_categories_db(settings, database, categories): |
329 |
+def add_new_package_db(settings, portdb, database, categories, package): |
330 |
+ # add new categories package ebuild to tables package and ebuilds |
331 |
+ print "N", categories + "/" + package # N = New Package |
332 |
+ pkgdir = settings['PORTDIR'] + "/" + categories + "/" + package # Get PORTDIR + cp |
333 |
categories_dir = settings['PORTDIR'] + "/" + categories + "/" |
334 |
- categories_metadata_xml_checksum_db = database.have_categories_db(categories) |
335 |
- categories_metadata_xml_checksum_tree = portage.checksum.sha256hash(categories_dir + "metadata.xml") |
336 |
- if categories_metadata_xml_checksum_db != categories_metadata_xml_checksum_tree: |
337 |
- categories_metadata_xml_text_tree = get_file_text(categories_dir + "metadata.xml") |
338 |
- database.update_categories_sql(categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree) |
339 |
- |
340 |
-def mark_old_ebuild_db(portdb, database, categories, package): |
341 |
- # Get ebuild list on categories, package in the tree |
342 |
+ # Get the ebuild list for cp |
343 |
ebuild_list_tree = portdb.cp_list((categories + "/" + package), use_cache=1, mytree=None) |
344 |
+ config_cpv_listDict = config_match_ebuild(database, categories, package) |
345 |
+ config_id = database.get_default_config()[0] |
346 |
+ packageDict ={} |
347 |
+ for ebuild_line in sorted(ebuild_list_tree): |
348 |
+ # Make the needed packageDict |
349 |
+ packageDict[ebuild_line] = get_packageDict(pkgdir, ebuild_line, settings, portdb, database, categories, package, config_id) |
350 |
+ # Add the ebuild to db |
351 |
+ return_id = database.add_new_package_sql(packageDict) |
352 |
+ ebuild_id_list = return_id[0] |
353 |
+ package_id_list = return_id[1] |
354 |
+ package_id = package_id_list[0] |
355 |
+ # Add the manifest file to db |
356 |
+ manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest")[0] |
357 |
+ get_manifest_text = get_file_text(pkgdir + "/Manifest") |
358 |
+ database.add_new_manifest_sql(package_id, get_manifest_text, manifest_checksum_tree) |
359 |
+ # Add metadataDict to db |
360 |
+ metadataDict = get_metadataDict(packageDict, ebuild_id_list) |
361 |
+ database.add_new_metadata(metadataDict) |
362 |
+ # Add any qa and repoman erro for the ebuild to buildlog |
363 |
+ qa_error = [] |
364 |
+ if not digestcheck(settings, pkgdir): |
365 |
+ qa_error.append("Manifest: Error in manifest file.") |
366 |
+ print "QA:", categories + "/" + package, qa_error |
367 |
+ database.add_qa_repoman(ebuild_id_list, qa_error, packageDict, config_id) |
368 |
+ # Add the ebuild to the buildqueru table if needed |
369 |
+ add_new_ebuild_buildquery_db(database, ebuild_id_list, packageDict, config_cpv_listDict) |
370 |
+ # Add some checksum on some files |
371 |
+ package_metadataDict = get_package_metadataDict(pkgdir, package) |
372 |
+ database.add_new_package_metadata(package_id, package_metadataDict) |
373 |
+ return package_id |
374 |
+ |
375 |
+def mark_old_ebuild_db(portdb, database, categories, package, package_id, ebuild_list_tree): |
376 |
# Get ebuild list on categories, package in the db |
377 |
- ebuild_list_db = database.cp_list_db(categories, package) |
378 |
+ ebuild_list_db = database.cp_list_db(package_id) |
379 |
# Check if don't have the ebuild in the tree |
380 |
# Add it to the no active list |
381 |
old_ebuild_list = [] |
382 |
@@ -699,67 +617,129 @@ def mark_old_ebuild_db(portdb, database, categories, package): |
383 |
# Set no active on ebuilds in the db that no longer in tree |
384 |
if old_ebuild_list != []: |
385 |
for old_ebuild in old_ebuild_list: |
386 |
- # database.add_old_ebuild(categories, package, old_ebuild) |
387 |
print "O", categories + "/" + package + "-" + old_ebuild[0] |
388 |
+ database.add_old_ebuild(package_id, old_ebuild_list) |
389 |
# Check if we have older no activ ebuilds then 60 days |
390 |
- ebuild_old_list_db = database.cp_list_old_db(categories, package) |
391 |
+ ebuild_old_list_db = database.cp_list_old_db(package_id) |
392 |
# Delete older ebuilds in the db |
393 |
- if ebuild_old_list_db != (): |
394 |
+ if ebuild_old_list_db != []: |
395 |
for del_ebuild_old in ebuild_old_list_db: |
396 |
- print "D", categories + "/" + package + "-" + del_ebuild_old[0] |
397 |
- # database.del_old_ebuild(categories, package) |
398 |
+ print "D", categories + "/" + package + "-" + del_ebuild_old[1] |
399 |
+ database.del_old_ebuild(ebuild_old_list_db) |
400 |
|
401 |
-def mark_old_package_db(database, package_list_tree): |
402 |
+def update_package_db(settings, portdb, database, categories, package, package_id): |
403 |
+ # Update the categories and package with new info |
404 |
+ pkgdir = settings['PORTDIR'] + "/" + categories + "/" + package # Get PORTDIR with cp |
405 |
+ # Get the checksum from the file in portage tree |
406 |
+ manifest_checksum_tree = portage.checksum.sha256hash(pkgdir + "/Manifest")[0] |
407 |
+ # Get the checksum from the db in package table |
408 |
+ manifest_checksum_db = database.get_manifest_db(package_id)[0] |
409 |
+ # if we have the same checksum return else update the package |
410 |
+ ebuild_list_tree = portdb.cp_list((categories + "/" + package), use_cache=1, mytree=None) |
411 |
+ if manifest_checksum_tree != manifest_checksum_db: |
412 |
+ print "U", categories + "/" + package # U = Update |
413 |
+ # Get the text in Manifest and update it |
414 |
+ get_manifest_text = get_file_text(pkgdir + "/Manifest") |
415 |
+ database.update_manifest_sql(package_id, get_manifest_text, manifest_checksum_tree) |
416 |
+ # Get package_metadataDict and update the db with it |
417 |
+ package_metadataDict = get_package_metadataDict(pkgdir, package) |
418 |
+ database.update_new_package_metadata(package_id, package_metadataDict) |
419 |
+ # Get config_cpv_listDict |
420 |
+ config_cpv_listDict = config_match_ebuild(database, categories, package) |
421 |
+ config_id = database.get_default_config() |
422 |
+ packageDict ={} |
423 |
+ for ebuild_line in sorted(ebuild_list_tree): |
424 |
+ old_ebuild_list = [] |
425 |
+ # split out ebuild version |
426 |
+ ebuild_version_tree = portage.versions.cpv_getversion(ebuild_line) |
427 |
+ # Get the checksum of the ebuild in tree and db |
428 |
+ ebuild_version_checksum_tree = portage.checksum.sha256hash(pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild")[0] |
429 |
+ ebuild_version_manifest_checksum_db = database.get_ebuild_checksum(package_id, ebuild_version_tree) |
430 |
+ # Check if the checksum have change |
431 |
+ if ebuild_version_manifest_checksum_db is None or ebuild_version_checksum_tree != ebuild_version_manifest_checksum_db: |
432 |
+ # Get packageDict for ebuild |
433 |
+ packageDict[ebuild_line] = get_packageDict(pkgdir, ebuild_line, settings, portdb, database, categories, package, config_id) |
434 |
+ if ebuild_version_manifest_checksum_db is None: |
435 |
+ print "N", categories + "/" + package + "-" + ebuild_version_tree # N = New ebuild |
436 |
+ else: |
437 |
+ print "U", categories + "/" + package + "-" + ebuild_version_tree # U = Updated ebuild |
438 |
+ # Fix so we can use add_new_package_sql(packageDict) to update the ebuilds |
439 |
+ old_ebuild_list.append(ebuild_version_tree) |
440 |
+ database.add_old_ebuild(package_id, old_ebuild_list) |
441 |
+ database.update_active_ebuild(package_id, ebuild_version_tree) |
442 |
+ # Use packageDictand and metadataDict to update the db |
443 |
+ return_id = database.add_new_package_sql(packageDict) |
444 |
+ ebuild_id_list = return_id[0] |
445 |
+ metadataDict = get_metadataDict(packageDict, ebuild_id_list) |
446 |
+ database.add_new_metadata(metadataDict) |
447 |
+ # Add any qa and repoman erros to buildlog |
448 |
+ qa_error = [] |
449 |
+ if not digestcheck(settings, pkgdir): |
450 |
+ qa_error.append("Manifest: Error in manifest file.") |
451 |
+ print "QA:", categories + "/" + package, qa_error |
452 |
+ database.add_qa_repoman(ebuild_id_list, qa_error, packageDict, config_id) |
453 |
+ # Add the ebuild to the buildqueru table if needed |
454 |
+ add_new_ebuild_buildquery_db(database, ebuild_id_list, packageDict, config_cpv_listDict) |
455 |
+ # Mark or remove any old ebuilds |
456 |
+ mark_old_ebuild_db(portdb, database, categories, package, package_id, sorted(ebuild_list_tree)) |
457 |
+ |
458 |
+def update_categories_db(settings, database, categories): |
459 |
+ # Update categories_meta in the db |
460 |
+ categories_dir = settings['PORTDIR'] + "/" + categories + "/" |
461 |
+ categories_metadata_xml_checksum_tree = portage.checksum.sha256hash(categories_dir + "metadata.xml")[0] |
462 |
+ categories_metadata_xml_text_tree = get_file_text(categories_dir + "metadata.xml") |
463 |
+ categories_metadata_xml_checksum_db = database.get_categories_checksum_db(categories) |
464 |
+ if categories_metadata_xml_checksum_db is None: |
465 |
+ database.add_new_categories_meta_sql(categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree) |
466 |
+ elif categories_metadata_xml_checksum_db != categories_metadata_xml_checksum_tree: |
467 |
+ database.update_categories_meta_sql(categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree) |
468 |
+ |
469 |
+def mark_old_package_db(database, package_id_list_tree): |
470 |
# Get categories/package list from db |
471 |
package_list_db = database.cp_all_db() |
472 |
- old_package_list = [] |
473 |
+ old_package_id_list = [] |
474 |
# Check if don't have the categories/package in the tree |
475 |
# Add it to the no active list |
476 |
for package_line in package_list_db: |
477 |
- if not package_line[0] in package_list_tree: |
478 |
- old_package_list.append(package_line) |
479 |
+ if not package_line in package_id_list_tree: |
480 |
+ old_package_id_list.append(package_line) |
481 |
# Set no active on categories/package and ebuilds in the db that no longer in tree |
482 |
- if old_package_list != []: |
483 |
- for old_package in old_package_list: |
484 |
- element = old_package.split('/') |
485 |
- categories = element[0] |
486 |
- package = element[1] |
487 |
- database.add_old_package(categories, package) |
488 |
- print "O", categories + "/" + package |
489 |
- # Check if we have older no activ categories/package then 60 days |
490 |
- package_old_list_db = database.cp_all_old_db() |
491 |
+ if old_package_id_list != []: |
492 |
+ mark_old_list = database.add_old_package(old_package_id_list) |
493 |
+ if mark_old_list != []: |
494 |
+ for x in mark_old_list: |
495 |
+ element = database.get_cp_from_package_id(x) |
496 |
+ print "O", element[0] |
497 |
+ # Check if we have older no activ categories/package then 60 days |
498 |
+ del_package_id_old_list = database.cp_all_old_db(old_package_id_list) |
499 |
# Delete older categories/package and ebuilds in the db |
500 |
- if package_old_list_db != (): |
501 |
- for real_old_package in package_old_list_db: |
502 |
- element = real_old_package[0].split('/') |
503 |
- categories = element[0] |
504 |
- package = element[1] |
505 |
- database.del_old_package(categories, package) |
506 |
- print "D", categories + "/" + package |
507 |
+ if del_package_id_old_list != []: |
508 |
+ for i in del_package_id_old_list: |
509 |
+ element = database.get_cp_from_package_id(i) |
510 |
+ print "D", element |
511 |
+ database.del_old_package(del_package_id_old_list) |
512 |
|
513 |
def mark_old_categories_db(settings, database): |
514 |
+ # Get categories list from the tree and db |
515 |
categories_list_tree = settings.categories |
516 |
- categories_list_db_active = database.get_categories_db("1") |
517 |
- old_categories_list = [] |
518 |
+ categories_list_db = database.get_categories_db() |
519 |
+ categories_old_list = [] |
520 |
# Check if don't have the categories in the tree |
521 |
# Add it to the no active list |
522 |
- for categories_line in categories_list_db_active: |
523 |
+ for categories_line in categories_list_db: |
524 |
if not categories_line[0] in categories_list_tree: |
525 |
- old_categories_list.append(categories_line) |
526 |
- # Set no active on categories in the db that no longer in tree |
527 |
- if old_categories_list != []: |
528 |
- for old_categories in old_categories_list: |
529 |
- # database.add_old_categories(old_categories) |
530 |
- print "O", old_categories |
531 |
- # Check if we have older no activ categories then 60 days |
532 |
- categories_old_list_db = database.get_categories_db("0") |
533 |
+ old_c = database.get_old_categories(categories_line[0]) |
534 |
+ if old_c is not None: |
535 |
+ categories_old_list.append(categories_line) |
536 |
# Delete older categories in the db |
537 |
- if categories_old_list_db != (): |
538 |
- for real_old_categories in categories_old_list_db: |
539 |
- # database.del_old_categories(real_old_categoriess, package) |
540 |
+ if categories_old_list != []: |
541 |
+ for real_old_categories in categories_old_list: |
542 |
+ database.del_old_categories(real_old_categoriess) |
543 |
print "D", real_old_categories |
544 |
|
545 |
def update_arch_db(database): |
546 |
+ # FIXME: check for new keyword |
547 |
+ # Add arch db (keywords) |
548 |
if database.get_arch_db() is None: |
549 |
arch_list = portage.archlist |
550 |
for arch in arch_list: |
551 |
@@ -770,12 +750,13 @@ def update_arch_db(database): |
552 |
|
553 |
def update_package_list(settings, portdb, database): |
554 |
print "Checking categories, package, ebuilds" |
555 |
+ package_id_list_tree = [] |
556 |
# Will run some update checks and update package if needed |
557 |
# Get categories/package list from portage |
558 |
package_list_tree = portdb.cp_all() |
559 |
# Run the update package for all package in the list |
560 |
for package_line in sorted(package_list_tree): |
561 |
- # spliet the cp to categories and package |
562 |
+ # split the cp to categories and package |
563 |
element = package_line.split('/') |
564 |
categories = element[0] |
565 |
package = element[1] |
566 |
@@ -784,17 +765,18 @@ def update_package_list(settings, portdb, database): |
567 |
package_id = database.have_package_db(categories, package) |
568 |
if package_id is None: |
569 |
# Add new package with ebuilds |
570 |
- add_new_package_db(settings, portdb, database, categories, package) |
571 |
+ package_id = add_new_package_db(settings, portdb, database, categories, package) |
572 |
+ package_id_list_tree.append(package_id) |
573 |
# Ceck if we have the cp in the package table |
574 |
elif package_id is not None: |
575 |
# Update the packages with ebuilds |
576 |
update_package_db(settings, portdb, database, categories, package, package_id) |
577 |
- #mark_old_ebuild_db(portdb, database, categories, package) |
578 |
- #if (database.have_categories_db(categories)) is not None: |
579 |
- #update_categories_db(settings, database, categories) |
580 |
- #mark_old_package_db(database, package_list_tree) |
581 |
- #mark_old_categories_db(settings, database) |
582 |
- print "Checking categories, categories, ebuilds done" |
583 |
+ package_id_list_tree.append(package_id) |
584 |
+ update_categories_db(settings, database, categories) |
585 |
+ # Remove any old package and categories |
586 |
+ mark_old_package_db(database, sorted(package_id_list_tree)) |
587 |
+ mark_old_categories_db(settings, database) |
588 |
+ print "Checking categories, package and ebuilds done" |
589 |
|
590 |
def main(): |
591 |
# Main |
592 |
@@ -802,7 +784,7 @@ def main(): |
593 |
database = init_sql_backend() # Init the Database |
594 |
settings = init_portage_settings(database) # Init settings for the default config |
595 |
portdb = portage.portdbapi(mysettings=settings) # Set portdb = portdbapi mysettings |
596 |
- update_arch_db(database) |
597 |
+ update_arch_db(database) # Update the arch db if needed |
598 |
update_package_list(settings, portdb, database) # Update the package db |
599 |
|
600 |
if __name__ == "__main__": |
601 |
|
602 |
diff --git a/buildhost/updatedb/sqlbackend.py b/buildhost/updatedb/sqlbackend.py |
603 |
index 2e803b3..a7ba779 100644 |
604 |
--- a/buildhost/updatedb/sqlbackend.py |
605 |
+++ b/buildhost/updatedb/sqlbackend.py |
606 |
@@ -48,11 +48,6 @@ class SQLPackageDatabase(object): |
607 |
cursor.execute(sqlQ) |
608 |
return cursor.fetchone() |
609 |
|
610 |
- sql['SELECT_config_list'] = """ |
611 |
- SELECT config_id |
612 |
- FROM configs |
613 |
- WHERE default_config = False AND active = True |
614 |
- """ |
615 |
def get_config_list(self): |
616 |
cursor = self.conn.cursor() |
617 |
sqlQ = 'SELECT id FROM configs WHERE default_config = False AND active = True' |
618 |
@@ -80,49 +75,31 @@ class SQLPackageDatabase(object): |
619 |
cursor.execute(sqlQ, params) |
620 |
return cursor.fetchone() |
621 |
|
622 |
- sql['SELECT_have_categories_db'] = """ |
623 |
- SELECT category |
624 |
- FROM categories |
625 |
- WHERE category = %s |
626 |
- """ |
627 |
- def have_categories_db(self, categories): |
628 |
- sql = self.sql['SELECT_have_categories_db'] |
629 |
- self.cursor.execute(sql, categories) |
630 |
- entries = self.cursor.fetchone() |
631 |
- return entries |
632 |
+ def get_categories_db(self): |
633 |
+ cursor = self.conn.cursor() |
634 |
+ sqlQ =' SELECT category FROM categories' |
635 |
+ cursor.execute(sqlQ) |
636 |
+ return cursor.fetchall() |
637 |
|
638 |
- sql['SELECT_get_categories_db'] = """ |
639 |
- SELECT categories |
640 |
- FROM categories |
641 |
- WHERE active = %s |
642 |
- """ |
643 |
- def get_categories_db(self, active): |
644 |
- sql = self.sql['SELECT_get_categories_db'] |
645 |
- self.cursor.execute(sql, active) |
646 |
- entries = self.cursor.fetchall() |
647 |
- return entries |
648 |
+ def get_categories_checksum_db(self, categories): |
649 |
+ cursor = self.conn.cursor() |
650 |
+ sqlQ =' SELECT metadata_xml_checksum FROM categories_meta WHERE category = %s' |
651 |
+ cursor.execute(sqlQ, (categories,)) |
652 |
+ return cursor.fetchone() |
653 |
+ |
654 |
+ def add_new_categories_meta_sql(self, categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree): |
655 |
+ cursor = self.conn.cursor() |
656 |
+ sqlQ = 'INSERT INTO categories_meta (category, metadata_xml_checksum, metadata_xml_text) VALUES ( %s, %s, %s )' |
657 |
+ params = categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree |
658 |
+ cursor.execute(sqlQ, params) |
659 |
+ self.conn.commit() |
660 |
|
661 |
- sql['INSERT_add_new_categories_tree'] = """ |
662 |
- INSERT INTO categories |
663 |
- (category) |
664 |
- VALUES ( %s ) |
665 |
- """ |
666 |
- def add_new_categories_sql(self, categories): |
667 |
- sql = self.sql['INSERT_add_new_categories_tree'] |
668 |
- params = (categories) |
669 |
- self.cursor.execute(sql, params) |
670 |
- self.db.commit() |
671 |
- |
672 |
- sql['UPDATE_categories_tree'] = """ |
673 |
- UPDATE categories |
674 |
- SET metadata_xml_checksum = %s, metadata_xml_text = %s |
675 |
- WHERE categories = %s |
676 |
- """ |
677 |
- def update_categories_sql(self, categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree): |
678 |
- sql = self.sql['UPDATE_categories_tree'] |
679 |
- params = (categories_metadata_xml_checksum_tree[0], categories_metadata_xml_text_tree, categories) |
680 |
- self.cursor.execute(sql, params) |
681 |
- self.db.commit() |
682 |
+ def update_categories_meta_sql(self, categories, categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree): |
683 |
+ cursor = self.conn.cursor() |
684 |
+ sqlQ ='UPDATE categories_meta SET metadata_xml_checksum = %s, metadata_xml_text = %s WHERE category = %s' |
685 |
+ params = (categories_metadata_xml_checksum_tree, categories_metadata_xml_text_tree, categories) |
686 |
+ cursor.execute(sqlQ, params) |
687 |
+ self.conn.commit() |
688 |
|
689 |
def add_new_manifest_sql(self, package_id, get_manifest_text, manifest_checksum_tree): |
690 |
cursor = self.conn.cursor() |
691 |
@@ -142,22 +119,36 @@ class SQLPackageDatabase(object): |
692 |
cursor.execute(sqlQ, params) |
693 |
self.conn.commit() |
694 |
|
695 |
+ def update_new_package_metadata(self, package_id, package_metadataDict): |
696 |
+ cursor = self.conn.cursor() |
697 |
+ sqlQ = 'SELECT changelog_checksum, metadata_checksum FROM packages_meta WHERE package_id = %s' |
698 |
+ cursor.execute(sqlQ, package_id) |
699 |
+ entries = cursor.fetchone() |
700 |
+ changelog_checksum_db = entries[0] |
701 |
+ metadata_checksum_db = entries[1] |
702 |
+ for k, v in package_metadataDict.iteritems(): |
703 |
+ if changelog_checksum_db != v['changelog_checksum']: |
704 |
+ sqlQ = 'UPDATE packages_meta SET changelog_text = %s, changelog_checksum = %s WHERE package_id = %s' |
705 |
+ params = v['changelog_text'], v['changelog_checksum'], package_id |
706 |
+ cursor.execute(sqlQ, params) |
707 |
+ if metadata_checksum_db != v['metadata_xml_checksum']: |
708 |
+ sqlQ = 'UPDATE packages_meta SET metadata_text = %s, metadata_checksum = %s WHERE package_id = %s' |
709 |
+ params = v[' metadata_xml_text'], v['metadata_xml_checksum'], package_id |
710 |
+ cursor.execute(sqlQ, params) |
711 |
+ self.conn.commit() |
712 |
+ |
713 |
def get_manifest_db(self, package_id): |
714 |
cursor = self.conn.cursor() |
715 |
sqlQ = 'SELECT checksum FROM manifest WHERE package_id = %s' |
716 |
cursor.execute(sqlQ, package_id) |
717 |
return cursor.fetchone() |
718 |
- |
719 |
- sql['UPDATE_package_tree'] = """ |
720 |
- UPDATE manifest |
721 |
- SET checksum = %s |
722 |
- WHERE category = %s AND ebuild_name = %s |
723 |
- """ |
724 |
- def update_package_sql(self, categories, package, manifest_checksum_tree): |
725 |
- sql = self.sql['UPDATE_package_tree'] |
726 |
- params = (manifest_checksum_tree[0], categories, package) |
727 |
- self.cursor.execute(sql, params) |
728 |
- self.db.commit() |
729 |
+ |
730 |
+ def update_manifest_sql(self, package_id, get_manifest_text, manifest_checksum_tree): |
731 |
+ cursor = self.conn.cursor() |
732 |
+ sqlQ = 'UPDATE manifest SET checksum = %s, manifest = %s WHERE package_id = %s' |
733 |
+ params = (manifest_checksum_tree, get_manifest_text, package_id) |
734 |
+ cursor.execute(sqlQ, params) |
735 |
+ self.conn.commit() |
736 |
|
737 |
def add_new_metadata(self, metadataDict): |
738 |
for k, v in metadataDict.iteritems(): |
739 |
@@ -187,7 +178,6 @@ class SQLPackageDatabase(object): |
740 |
v['ebuild_version_metadata_tree'][9], v['ebuild_version_metadata_tree'][11], |
741 |
v['ebuild_version_metadata_tree'][13],v['ebuild_version_metadata_tree'][14], v['ebuild_version_metadata_tree'][15], |
742 |
v['ebuild_version_metadata_tree'][16]] |
743 |
- print params |
744 |
cursor.execute(sqlQ, params) |
745 |
mid = cursor.fetchone() |
746 |
mid=mid[0] |
747 |
@@ -197,62 +187,49 @@ class SQLPackageDatabase(object): |
748 |
# add_new_metadata(metadataDict) |
749 |
return ebuild_id_list, package_id_list |
750 |
|
751 |
- sql['SELECT_get_ebuild_id_db'] = """ |
752 |
- SELECT id |
753 |
- FROM packages |
754 |
- WHERE category = %s AND ebuild_name = %s AND ebuild_version = %s |
755 |
- """ |
756 |
- def get_ebuild_id_db(self, categories, package, ebuild_version_tree): |
757 |
- sql = self.sql['SELECT_get_ebuild_id_db'] |
758 |
- self.cursor.execute(sql, (categories, package, ebuild_version_tree)) |
759 |
- entries = self.cursor.fetchone() |
760 |
- return entries |
761 |
+ def add_new_ebuild_sql(packageDict, new_ebuild_list): |
762 |
+ #lets have a new cursor for each metod as per best practice |
763 |
+ cursor = self.conn.cursor() |
764 |
+ sqlQ="SELECT insert_ebuild( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 'True')" |
765 |
+ ebuild_id_list = [] |
766 |
+ package_id_list = [] |
767 |
+ for k, v in packageDict.iteritems(): |
768 |
+ for x in new_ebuild_list: |
769 |
+ if x == v['ebuild_version_tree']: |
770 |
+ params = [v['categories'], v['package'], v['ebuild_version_tree'], v['ebuild_version_revision'], v['ebuild_version_checksum_tree'], |
771 |
+ v['ebuild_version_text'], v['ebuild_version_metadata_tree'][0], v['ebuild_version_metadata_tree'][1], |
772 |
+ v['ebuild_version_metadata_tree'][12], v['ebuild_version_metadata_tree'][2], v['ebuild_version_metadata_tree'][3], |
773 |
+ v['ebuild_version_metadata_tree'][5],v['ebuild_version_metadata_tree'][6], v['ebuild_version_metadata_tree'][7], |
774 |
+ v['ebuild_version_metadata_tree'][9], v['ebuild_version_metadata_tree'][11], |
775 |
+ v['ebuild_version_metadata_tree'][13],v['ebuild_version_metadata_tree'][14], v['ebuild_version_metadata_tree'][15], |
776 |
+ v['ebuild_version_metadata_tree'][16]] |
777 |
+ cursor.execute(sqlQ, params) |
778 |
+ mid = cursor.fetchone() |
779 |
+ mid=mid[0] |
780 |
+ ebuild_id_list.append(mid[1]) |
781 |
+ package_id_list.append(mid[0]) |
782 |
+ self.conn.commit() |
783 |
+ # add_new_metadata(metadataDict) |
784 |
+ return ebuild_id_list, package_id_list |
785 |
+ |
786 |
+ def update_active_ebuild(self, package_id, ebuild_version_tree): |
787 |
+ cursor = self.conn.cursor() |
788 |
+ sqlQ ="UPDATE ebuilds SET active = 'False', timestamp = now() WHERE package_id = %s AND ebuild_version = %s AND active = 'True'" |
789 |
+ cursor.execute(sqlQ, (package_id, ebuild_version_tree)) |
790 |
+ self.conn.commit() |
791 |
|
792 |
- sql['SELECT_get_cpv_from_ebuild_id'] = """ |
793 |
- SELECT category, ebuild_name, ebuild_version |
794 |
- FROM packages |
795 |
- WHERE id = %s |
796 |
- """ |
797 |
def get_cpv_from_ebuild_id(self, ebuild_id): |
798 |
cursor = self.conn.cursor() |
799 |
sqlQ = 'SELECT package_id FROM ebuild WHERE id = %s' |
800 |
self.cursor.execute(sql, ebuild_id) |
801 |
entries = self.cursor.fetchone() |
802 |
return entries |
803 |
- |
804 |
- |
805 |
- sql['SELECT_get_keyword_id_db'] = """ |
806 |
- SELECT id_keyword |
807 |
- FROM keywords |
808 |
- WHERE ARCH = %s AND stable = %s |
809 |
- """ |
810 |
- def get_keyword_id_db(self, arch, stable): |
811 |
- sql = self.sql['SELECT_get_keyword_id_db'] |
812 |
- self.cursor.execute(sql, (arch, stable)) |
813 |
- entries = self.cursor.fetchone() |
814 |
- return entries |
815 |
|
816 |
- sql['INSERT_add_new_keywords'] = """ |
817 |
- INSERT INTO keywordsToEbuild |
818 |
- (ebuild_id, id_keyword) |
819 |
- VALUES ( %s, %s ) |
820 |
- """ |
821 |
- def add_new_keywords(self, ebuild_id, keyword_id): |
822 |
- sql = self.sql['INSERT_add_new_keywords'] |
823 |
- self.cursor.execute(sql, (ebuild_id, keyword_id)) |
824 |
- self.db.commit() |
825 |
- |
826 |
- sql['SELECT_have_package_buildqueue'] = """ |
827 |
- SELECT useflags |
828 |
- FROM buildqueue |
829 |
- WHERE ebuild_id = %s AND config_id = %s |
830 |
- """ |
831 |
- def have_package_buildqueue(self, ebuild_id, config_id): |
832 |
- sql = self.sql['SELECT_have_package_buildqueue'] |
833 |
- params = (ebuild_id[0], config_id) |
834 |
- self.cursor.execute(sql, params) |
835 |
- entries = self.cursor.fetchone() |
836 |
- return entries |
837 |
+ def get_cp_from_package_id(self, package_id): |
838 |
+ cursor = self.conn.cursor() |
839 |
+ sqlQ = "SELECT ARRAY_TO_STRING(ARRAY[category, package_name] , '/') AS cp FROM packages WHERE package_id = %s" |
840 |
+ cursor.execute(sqlQ, (package_id,)) |
841 |
+ return cursor.fetchone() |
842 |
|
843 |
def add_new_package_buildqueue(self, ebuild_id, config_id, iuse_flags_list, use_enable, message): |
844 |
cursor = self.conn.cursor() |
845 |
@@ -263,158 +240,129 @@ class SQLPackageDatabase(object): |
846 |
params = ebuild_id, unicode(config_id), iuse_flags_list, use_enable, message |
847 |
cursor.execute(sqlQ, params) |
848 |
self.conn.commit() |
849 |
- |
850 |
- sql['SELECT_get_package_id'] = """ |
851 |
- SELECT package_id |
852 |
- FROM packages |
853 |
- WHERE category = %s AND package_name = %s |
854 |
- """ |
855 |
- sql['SELECT_get_ebuild_checksum'] = """ |
856 |
- SELECT ebuild_checksum |
857 |
- FROM ebuild |
858 |
- WHERE package_id = %s AND ebuild_version = %s |
859 |
- """ |
860 |
- def get_ebuild_checksum(self, categories, package, ebuild_version_tree): |
861 |
- sql = self.sql['SELECT_get_package_id'] |
862 |
- self.cursor.execute(sql, (categories, package)) |
863 |
- entries = self.cursor.fetchone() |
864 |
- print entries |
865 |
+ |
866 |
+ def get_ebuild_checksum(self, package_id, ebuild_version_tree): |
867 |
+ cursor = self.conn.cursor() |
868 |
+ sqlQ = 'SELECT ebuild_checksum FROM ebuilds WHERE package_id = %s AND ebuild_version = %s AND active = TRUE' |
869 |
+ cursor.execute(sqlQ, (package_id, ebuild_version_tree)) |
870 |
+ entries = cursor.fetchone() |
871 |
if entries is None: |
872 |
return None |
873 |
- sql = self.sql['SELECT_get_ebuild_checksum'] |
874 |
- self.cursor.execute(sql, (entries, ebuild_version_tree)) |
875 |
- entries = self.cursor.fetchone() |
876 |
- return entries |
877 |
- |
878 |
- sql['UPDATE_update_ebuild_db'] = """ |
879 |
- UPDATE packages |
880 |
- SET ebuild_checksum = %s, ebuild_text = %s, |
881 |
- depend = %s, rdepend = %s, pdepend = %s, slot = %s, src_url = %s, homepage = %s, license = %s, |
882 |
- description = %s, keywords = %s, inherited = %s, iuse = %s, required_use = %s, provide = %s, |
883 |
- eapi = %s, properties = %s, defined_phases = %s |
884 |
- WHERE ebuild_id = %s |
885 |
- """ |
886 |
- def update_ebuild_sql(self, ebuild_id, ebuild_version_checksum_tree, |
887 |
- ebuild_version_metadata_tree, ebuild_version_text): |
888 |
- sql = self.sql['UPDATE_update_ebuild_db'] |
889 |
- params = (ebuild_version_checksum_tree[0], |
890 |
- ebuild_version_text, ebuild_version_metadata_tree[0], ebuild_version_metadata_tree[1], |
891 |
- ebuild_version_metadata_tree[12], ebuild_version_metadata_tree[2], ebuild_version_metadata_tree[3], |
892 |
- ebuild_version_metadata_tree[5], ebuild_version_metadata_tree[6], ebuild_version_metadata_tree[7], |
893 |
- ebuild_version_metadata_tree[9], ebuild_version_metadata_tree[10], ebuild_version_metadata_tree[11], |
894 |
- ebuild_version_metadata_tree[13], ebuild_version_metadata_tree[14], ebuild_version_metadata_tree[15], |
895 |
- ebuild_version_metadata_tree[16], ebuild_id) |
896 |
- self.cursor.execute(sql, params) |
897 |
- self.db.commit() |
898 |
+ return entries[0] |
899 |
+ |
900 |
+ def add_old_package(self, old_package_list): |
901 |
+ cursor = self.conn.cursor() |
902 |
+ mark_old_list = [] |
903 |
+ sqlQ = "UPDATE ebuilds SET active = 'FALSE', timestamp = NOW() WHERE package_id = %s AND active = 'TRUE' RETURNING package_id" |
904 |
+ for old_package in old_package_list: |
905 |
+ cursor.execute(sqlQ, (old_package[0],)) |
906 |
+ entries = cursor.fetchone() |
907 |
+ if entries is not None: |
908 |
+ mark_old_list.append(entries[0]) |
909 |
+ self.conn.commit() |
910 |
+ return mark_old_list |
911 |
|
912 |
- sql['SELECT_cp_all_db'] = """ |
913 |
- SELECT CONCAT_WS('/',categories, package) |
914 |
- FROM package |
915 |
- WHERE active = '1' |
916 |
- """ |
917 |
+ def get_old_categories(self, categories_line): |
918 |
+ cursor = self.conn.cursor() |
919 |
+ sqlQ = "SELECT package_name FROM packages WHERE category = %s" |
920 |
+ cursor.execute(sqlQ (categories_line)) |
921 |
+ return cursor.fetchone() |
922 |
+ |
923 |
+ def del_old_categories(self, real_old_categoriess): |
924 |
+ cursor = self.conn.cursor() |
925 |
+ sqlQ = 'DELETE FROM categories categories_meta WHERE category = %s' |
926 |
+ cursor.execute(sqlQ (real_old_categories)) |
927 |
+ self.conn.commit() |
928 |
+ |
929 |
+ def add_old_ebuild(self, package_id, old_ebuild_list): |
930 |
+ cursor = self.conn.cursor() |
931 |
+ sqlQ1 = "UPDATE ebuilds SET active = 'FALSE' WHERE package_id = %s AND ebuild_version = %s" |
932 |
+ sqlQ2 = "SELECT id FROM ebuilds WHERE package_id = %s AND ebuild_version = %s AND active = 'TRUE'" |
933 |
+ sqlQ3 = "SELECT queue_id FROM buildqueue WHERE ebuild_id = %s" |
934 |
+ sqlQ4 = 'DELETE FROM ebuildqueuedwithuses buildqueue WHERE queue_id = %s' |
935 |
+ for old_ebuild in old_ebuild_list: |
936 |
+ cursor.execute(sqlQ2, (package_id, old_ebuild[0])) |
937 |
+ ebuild_id_list = cursor.fetchall() |
938 |
+ if ebuild_id_list is not None: |
939 |
+ for ebuild_id in ebuild_id_list: |
940 |
+ cursor.execute(sqlQ3, (ebuild_id)) |
941 |
+ queue_id_list = cursor.fetchall() |
942 |
+ if queue_id_list is not None: |
943 |
+ for queue_id in queue_id_list: |
944 |
+ cursor.execute(sqlQ4, (queue_id)) |
945 |
+ cursor.execute(sqlQ1, (package_id, old_ebuild[0])) |
946 |
+ self.conn.commit() |
947 |
+ |
948 |
+ def cp_all_old_db(self, old_package_id_list): |
949 |
+ cursor = self.conn.cursor() |
950 |
+ old_package_list = [] |
951 |
+ for old_package in old_package_id_list: |
952 |
+ sqlQ = "SELECT package_id FROM ebuilds WHERE package_id = %s AND active = 'FALSE' AND date_part('days', NOW() - timestamp) < 60" |
953 |
+ cursor.execute(sqlQ, old_package) |
954 |
+ entries = cursor.fetchone() |
955 |
+ if entries is None: |
956 |
+ old_package_list.append(old_package) |
957 |
+ return old_package_list |
958 |
def cp_all_db(self): |
959 |
- sql = self.sql['SELECT_cp_all_db'] |
960 |
- self.cursor.execute(sql) |
961 |
- entries = self.cursor.fetchall() |
962 |
- return entries |
963 |
- |
964 |
- sql['UPDATE_add_old_package'] = """ |
965 |
- UPDATE package |
966 |
- SET active = '0' |
967 |
- WHERE categories = %s AND package = %s |
968 |
- """ |
969 |
- def add_old_package(self, categories, package): |
970 |
- sql = self.sql['UPDATE_add_old_package'] |
971 |
- self.cursor.execute(sql, (categories, package)) |
972 |
- self.db.commit() |
973 |
- |
974 |
- sql['UPDATE_add_old_categories'] = """ |
975 |
- UPDATE categories |
976 |
- SET active = '0' |
977 |
- WHERE categories = %s |
978 |
- """ |
979 |
- def add_old_categories(self, categories): |
980 |
- sql = self.sql['UPDATE_add_old_categories'] |
981 |
- self.cursor.execute(sql, (categories)) |
982 |
- self.db.commit() |
983 |
- |
984 |
- sql['UPDATE_add_old_ebuild'] = """ |
985 |
- UPDATE ebuild |
986 |
- SET active = '0' |
987 |
- WHERE categories = %s AND package = %s AND ebuild_version = %s |
988 |
- """ |
989 |
- def add_old_ebuild(self, categories, package, old_ebuild): |
990 |
- sql = self.sql['UPDATE_add_old_ebuild'] |
991 |
- self.cursor.execute(sql, (categories, package, old_ebuild[0])) |
992 |
- self.db.commit() |
993 |
- |
994 |
- sql['SELECT_cp_all_old_db'] = """ |
995 |
- SELECT CONCAT_WS('/',categories, package) |
996 |
- FROM package |
997 |
- WHERE active = '0' AND DATEDIFF(NOW(), timestamp) > 60 |
998 |
- """ |
999 |
- def cp_all_old_db(self): |
1000 |
- sql = self.sql['SELECT_cp_all_old_db'] |
1001 |
- self.cursor.execute(sql) |
1002 |
- entries = self.cursor.fetchall() |
1003 |
- return entries |
1004 |
- |
1005 |
- sql['DELETE_del_old_ebuild'] = """ |
1006 |
- DELETE FROM ebuild |
1007 |
- WHERE categories = %s AND package = %s AND active = '0' AND DATEDIFF(NOW(), timestamp) > 60 |
1008 |
- """ |
1009 |
- def del_old_ebuild(self, categories, package): |
1010 |
- sql = self.sql['DELETE_del_old_ebuild'] |
1011 |
- self.cursor.execute(sql, (categories, package)) |
1012 |
- self.db.commit() |
1013 |
- |
1014 |
- sql['DELETE_del_old_package'] = """ |
1015 |
- DELETE FROM package |
1016 |
- WHERE categories = %s AND package = %s AND active = '0' AND DATEDIFF(NOW(), timestamp) > 60 |
1017 |
- """ |
1018 |
- def del_old_package(self, categories, package): |
1019 |
- sql = self.sql['DELETE_del_old_package'] |
1020 |
- self.cursor.execute(sql, (categories, package)) |
1021 |
- self.db.commit() |
1022 |
- del_old_ebuild(categories, package) |
1023 |
- |
1024 |
- sql['DELETE_del_old_categories'] = """ |
1025 |
- DELETE FROM categories |
1026 |
- WHERE categories = %s AND active = '0' AND DATEDIFF(NOW(), timestamp) > 60 |
1027 |
- """ |
1028 |
- def del_old_package(self, categories): |
1029 |
- sql = self.sql['DELETE_del_old_categories'] |
1030 |
- self.cursor.execute(sql, (categories)) |
1031 |
- self.db.commit() |
1032 |
- |
1033 |
- sql['SELECT_cp_list_db'] = """ |
1034 |
- SELECT ebuild_version |
1035 |
- FROM ebuild |
1036 |
- WHERE active = '1' AND categories = %s AND package = %s |
1037 |
- """ |
1038 |
- def cp_list_db(self, categories, package): |
1039 |
- sql = self.sql['SELECT_cp_list_db'] |
1040 |
- self.cursor.execute(sql, (categories, package)) |
1041 |
- entries = self.cursor.fetchall() |
1042 |
- return entries |
1043 |
- |
1044 |
- sql['SELECT_cp_list_old_db'] = """ |
1045 |
- SELECT ebuild_version |
1046 |
- FROM ebuild |
1047 |
- WHERE active = '0' AND categories = %s AND package = %s AND DATEDIFF(NOW(), timestamp) > 60 |
1048 |
- """ |
1049 |
- def cp_list_old_db(self, categories, package): |
1050 |
- sql = self.sql['SELECT_cp_list_old_db'] |
1051 |
- self.cursor.execute(sql, (categories, package)) |
1052 |
- entries = self.cursor.fetchall() |
1053 |
- return entries |
1054 |
+ cursor = self.conn.cursor() |
1055 |
+ sqlQ = "SELECT package_id FROM packages" |
1056 |
+ cursor.execute(sqlQ) |
1057 |
+ return cursor.fetchall() |
1058 |
+ |
1059 |
+ def del_old_ebuild(self, ebuild_old_list_db): |
1060 |
+ cursor = self.conn.cursor() |
1061 |
+ sqlQ2 = 'SELECT build_id FROM buildlog WHERE ebuild_id = %s' |
1062 |
+ sqlQ3 = 'DELETE FROM qa_problems repoman_problems WHERE build_id = %s' |
1063 |
+ sqlQ4 = 'DELETE FROM ebuildhaveskeywords ebuildhavesiuses WHERE ebuild_id = %s' |
1064 |
+ sqlQ5 = 'DELETE FROM ebuildbuildwithuses WHERE build_id = %s' |
1065 |
+ sqlQ6 = 'DELETE FROM ebuildhavesrestrictions buildlog WHERE ebuild_id = %s' |
1066 |
+ for del_ebuild_old in ebuild_old_list_db: |
1067 |
+ cursor.execute(sqlQ2, (del_ebuild_old[0],)) |
1068 |
+ build_id_list = cursor.fetchall() |
1069 |
+ for build_id in build_id_list: |
1070 |
+ cursor.execute(sqlQ3, (build_id,)) |
1071 |
+ cursor.execute(sqlQ5, (build_id,)) |
1072 |
+ cursor.execute(sqlQ4, (del_ebuild_old[0],)) |
1073 |
+ cursor.execute(sqlQ6, (del_ebuild_old[0],)) |
1074 |
+ self.conn.commit() |
1075 |
+ |
1076 |
+ def del_old_package(self, package_id_list): |
1077 |
+ cursor = self.conn.cursor() |
1078 |
+ sqlQ1 = 'SELECT id FROM ebuilds WHERE package_id = %s' |
1079 |
+ sqlQ2 = 'SELECT build_id FROM buildlog WHERE ebuild_id = %s' |
1080 |
+ sqlQ3 = 'DELETE FROM qa_problems, repoman_problems, ebuildbuildwithuses WHERE build_id = %s' |
1081 |
+ sqlQ4 = 'DELETE FROM ebuildhaveskeywords, ebuildhavesiuses, ebuildhavesrestrictions, buildlog WHERE ebuild_id = %s' |
1082 |
+ sqlQ5 = 'DELETE FROM ebuilds, manifest, package_meta, packages WHERE package_id = %s' |
1083 |
+ for package_id in package_id_list: |
1084 |
+ cursor.execute(sqlQ1, package_id) |
1085 |
+ ebuild_id_list = cursor.fetchall() |
1086 |
+ for ebuild_id in ebuild_id_list: |
1087 |
+ cursor.execute(sqlQ2, ebuild_id) |
1088 |
+ build_id_list = cursor.fetchall() |
1089 |
+ for build_id in build_id_list: |
1090 |
+ cursor.execute(sqlQ3, build_id) |
1091 |
+ cursor.execute(sqlQ4, ebuild_id) |
1092 |
+ cursor.execute(sqlQ5, package_id) |
1093 |
+ self.conn.commit() |
1094 |
+ |
1095 |
+ def cp_list_db(self, package_id): |
1096 |
+ cursor = self.conn.cursor() |
1097 |
+ sqlQ = "SELECT ebuild_version FROM ebuilds WHERE active = 'TRUE' AND package_id = %s" |
1098 |
+ cursor.execute(sqlQ, (package_id)) |
1099 |
+ return cursor.fetchall() |
1100 |
+ |
1101 |
+ def cp_list_old_db(self, package_id): |
1102 |
+ cursor = self.conn.cursor() |
1103 |
+ sqlQ ="SELECT id, ebuild_version FROM ebuilds WHERE active = 'FALSE' AND package_id = %s AND date_part('days', NOW() - timestamp) > 60" |
1104 |
+ cursor.execute(sqlQ, package_id) |
1105 |
+ return cursor.fetchall() |
1106 |
|
1107 |
def add_qa_repoman(self, ebuild_id_list, qa_error, packageDict, config_id): |
1108 |
ebuild_i = 0 |
1109 |
cursor = self.conn.cursor() |
1110 |
for k, v in packageDict.iteritems(): |
1111 |
ebuild_id = ebuild_id_list[ebuild_i] |
1112 |
- sqlQ = 'INSERT INTO buildlog (ebuild_id, config, error_summary ) VALUES ( %s, %s, %s ) RETURNING build_id' |
1113 |
+ sqlQ = 'INSERT INTO buildlog (ebuild_id, config, error_summary, timestamp ) VALUES ( %s, %s, %s, now() ) RETURNING build_id' |
1114 |
if v['ebuild_error'] != [] or qa_error != []: |
1115 |
if v['ebuild_error'] != [] or qa_error == []: |
1116 |
summary = "Repoman" |
1117 |
@@ -438,37 +386,6 @@ class SQLPackageDatabase(object): |
1118 |
ebuild_i = ebuild_i +1 |
1119 |
self.conn.commit() |
1120 |
|
1121 |
- sql['SELECT_qa_repoman'] = """ |
1122 |
- SELECT categories, package, ebuild_version, qa, repoman, config, hosts |
1123 |
- FROM buildlog |
1124 |
- WHERE ebuild = %sAND build = '' AND config_id = %s |
1125 |
- """ |
1126 |
- def get_qa_repoman(self, ebuild_id, config_id): |
1127 |
- sql = self.sql['SELECT_qa_repoman'] |
1128 |
- params = (ebuild_id, config_id) |
1129 |
- self.cursor.execute(sql, params) |
1130 |
- entries = self.cursor.fetchall() |
1131 |
- return entries |
1132 |
- |
1133 |
- sql['DELETE_del_qa_repoman'] = """ |
1134 |
- DELETE FROM buildlog |
1135 |
- WHERE ebuild_id AND build = '' AND config_id = %s |
1136 |
- """ |
1137 |
- def del_qa_repoman(self, ebuild_id, config_id): |
1138 |
- sql = self.sql['DELETE_del_qa_repoman'] |
1139 |
- self.cursor.execute(sql, (ebuild_id, config_id)) |
1140 |
- self.db.commit() |
1141 |
- |
1142 |
- sql['UPDATE_update_qa_repoman'] = """ |
1143 |
- UPDATE buildlog |
1144 |
- SET qa = %s, repoman = %s |
1145 |
- WHERE ebuild_id = %s AND build = '' AND config_id = %s |
1146 |
- """ |
1147 |
- def update_qa_repoman(self, ebuild_id, qa_error, repoman_error, config_id): |
1148 |
- sql = self.sql['UPDATE_update_qa_repoman'] |
1149 |
- self.cursor.execute(sql, (qa_error, repoman_error, ebuild_id, config_id)) |
1150 |
- self.db.commit() |
1151 |
- |
1152 |
def get_arch_db(self): |
1153 |
cursor = self.conn.cursor() |
1154 |
sqlQ = 'SELECT keyword FROM keywords WHERE keyword = %s' |
1155 |
@@ -482,12 +399,6 @@ class SQLPackageDatabase(object): |
1156 |
cursor.execute(sqlQ, (arch,)) |
1157 |
self.conn.commit() |
1158 |
|
1159 |
- sql['INSERT_add_new_restriction_db'] = """ |
1160 |
- INSERT INTO ebuildHavesRestrictions |
1161 |
- (ebuild_id, restriction) |
1162 |
- VALUES ( %s, %s ) |
1163 |
- """ |
1164 |
- |
1165 |
def closeconnection(self): |
1166 |
self.conn.close() |