Gentoo Archives: gentoo-commits

From: Magnus Granberg <zorry@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] dev/zorry:master commit in: buildhost/updatedb/
Date: Fri, 01 Apr 2011 16:42:49
Message-Id: b69fcfef2d29309fea056281f0e7662088b51020.zorry@gentoo
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()