1 |
commit: 2410346473e1d00de202eac126d995a148b9609f |
2 |
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Aug 1 20:49:08 2015 +0000 |
4 |
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Aug 1 20:49:08 2015 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=24103464 |
7 |
|
8 |
add repoman full to host and guest |
9 |
|
10 |
tbc/pym/build_log.py | 41 ++++++++++++++++++++++++++++++----------- |
11 |
tbc/pym/db_mapping.py | 8 ++++++++ |
12 |
tbc/pym/package.py | 32 ++++++++++++++------------------ |
13 |
tbc/pym/qachecks.py | 13 ++++++++++++- |
14 |
tbc/pym/repoman/main.py | 10 ++++++---- |
15 |
tbc/pym/sqlquerys.py | 15 ++++++++++++++- |
16 |
6 files changed, 84 insertions(+), 35 deletions(-) |
17 |
|
18 |
diff --git a/tbc/pym/build_log.py b/tbc/pym/build_log.py |
19 |
index 9c8bbfa..71c14b5 100644 |
20 |
--- a/tbc/pym/build_log.py |
21 |
+++ b/tbc/pym/build_log.py |
22 |
@@ -20,18 +20,38 @@ portage.proxy.lazyimport.lazyimport(globals(), |
23 |
'tbc.actions:action_info,load_emerge_config', |
24 |
) |
25 |
|
26 |
-from tbc.qachecks import check_repoman |
27 |
+from tbc.qachecks import check_repoman, repoman_full |
28 |
from tbc.text import get_log_text_dict |
29 |
-from tbc.package import tbc_package |
30 |
from tbc.readconf import read_config_settings |
31 |
from tbc.flags import tbc_use_flags |
32 |
from tbc.ConnectionManager import NewConnection |
33 |
from tbc.sqlquerys import add_logs, get_config_id, get_ebuild_id_db, add_new_buildlog, \ |
34 |
get_package_info, get_build_job_id, get_use_id, get_config_info, get_hilight_info, get_error_info_list, \ |
35 |
add_e_info, get_fail_times, add_fail_times, update_fail_times, del_old_build_jobs, add_old_ebuild, \ |
36 |
- update_buildjobs_status, update_manifest_sql, add_repoman_qa, get_config_id_fqdn, get_setup_info |
37 |
+ update_buildjobs_status, update_manifest_sql, add_repoman_qa, get_config_id_fqdn, get_setup_info, \ |
38 |
+ add_repoman_log |
39 |
from sqlalchemy.orm import sessionmaker |
40 |
|
41 |
+def repoman_check_full(session, pkgdir, package_id, config_id): |
42 |
+ # Check cp with repoman repoman full |
43 |
+ status = repoman_full(session, pkgdir, config_id) |
44 |
+ repoman_hash = hashlib.sha256() |
45 |
+ repoman_log = "" |
46 |
+ if status: |
47 |
+ for k, v in status.items(): |
48 |
+ repoman_line = k + '/n' |
49 |
+ repoman_hash.update(repoman_line.encode('utf-8')) |
50 |
+ repoman_log = repoman_log + repoman_line |
51 |
+ for line in v: |
52 |
+ repoman_line = line + '/n' |
53 |
+ repoman_hash.update(repoman_line.encode('utf-8')) |
54 |
+ repoman_log = repoman_log + repoman_line |
55 |
+ add_repoman_log(session, package_id, repoman_log, repoman_hash.hexdigest()) |
56 |
+ return repoman_log |
57 |
+ else: |
58 |
+ return status |
59 |
+ |
60 |
+ |
61 |
def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg): |
62 |
myportdb = portage.portdbapi(mysettings=settings) |
63 |
cpvr_list = catpkgsplit(pkg.cpv, silent=1) |
64 |
@@ -48,6 +68,7 @@ def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg): |
65 |
build_dict['cpv'] = pkg.cpv |
66 |
build_dict['categories'] = categories |
67 |
build_dict['package'] = package |
68 |
+ build_dict['repo'] = repo |
69 |
build_dict['config_id'] = config_id |
70 |
init_useflags = tbc_use_flags(settings, myportdb, pkg.cpv) |
71 |
iuse_flags_list, final_use_list = init_useflags.get_flags_pkg(pkg, settings) |
72 |
@@ -77,12 +98,6 @@ def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg): |
73 |
log_msg = "%s:%s Don't have any ebuild_id!" % (pkg.cpv, repo,) |
74 |
add_logs(session, log_msg, "info", config_id) |
75 |
update_manifest_sql(session, build_dict['package_id'], "0") |
76 |
- init_package = tbc_package(session, settings, myportdb, config_id) |
77 |
- init_package.update_package_db(build_dict['package_id']) |
78 |
- ebuild_id_list, status = get_ebuild_id_db(session, build_dict['checksum'], build_dict['package_id']) |
79 |
- if status and ebuild_id_list is None: |
80 |
- log_msg = "%s:%s Don't have any ebuild_id!" % (pkg.cpv, repo,) |
81 |
- add_logs(session, log_msg, "error", config_id) |
82 |
else: |
83 |
old_ebuild_id_list = [] |
84 |
for ebuild_id in ebuild_id_list: |
85 |
@@ -204,8 +219,12 @@ def get_buildlog_info(session, settings, pkg, build_dict): |
86 |
qa_error_list.append(logfile_text_dict[i]) |
87 |
i = i +1 |
88 |
|
89 |
- # Run repoman check_repoman() |
90 |
- repoman_error_list = check_repoman(settings, myportdb, build_dict['cpv'], pkg.repo) |
91 |
+ # Run repoman full |
92 |
+ element = portage.versions.cpv_getkey(build_dict['cpv']).split('/') |
93 |
+ categories = element[0] |
94 |
+ package = element[1] |
95 |
+ pkgdir = myportdb.getRepositoryPath(build_dict['repo']) + "/" + categories + "/" + package |
96 |
+ repoman_error_list = repoman_check_full(session, pkgdir, build_dict['package_id'], config_id) |
97 |
build_log_dict = {} |
98 |
build_log_dict['fail'] = False |
99 |
if repoman_error_list: |
100 |
|
101 |
diff --git a/tbc/pym/db_mapping.py b/tbc/pym/db_mapping.py |
102 |
index a296c2e..dbae5a8 100644 |
103 |
--- a/tbc/pym/db_mapping.py |
104 |
+++ b/tbc/pym/db_mapping.py |
105 |
@@ -230,6 +230,14 @@ class BuildLogsRepomanQa(Base): |
106 |
SummeryText = Column('summery_text', Text) |
107 |
__tablename__ = 'build_logs_repoman_qa' |
108 |
|
109 |
+class PackagesRepoman(Base): |
110 |
+ Id = Column('id', Integer, primary_key=True) |
111 |
+ PackageId = Column('package_id', Integer, ForeignKey('packages.package_id')) |
112 |
+ RepomanText = Column('repoman_text', Text) |
113 |
+ RepomanHash = Column('repoman_hash', String(100)) |
114 |
+ TimeStamp = Column('time_stamp', DateTime, nullable=False, default=datetime.datetime.utcnow) |
115 |
+ __tablename__ = 'packages_repoman' |
116 |
+ |
117 |
class ErrorsInfo(Base): |
118 |
ErrorId = Column('error_id', Integer, primary_key=True) |
119 |
ErrorName = Column('error_name', String) |
120 |
|
121 |
diff --git a/tbc/pym/package.py b/tbc/pym/package.py |
122 |
index 0a19f15..657c90d 100644 |
123 |
--- a/tbc/pym/package.py |
124 |
+++ b/tbc/pym/package.py |
125 |
@@ -3,12 +3,14 @@ |
126 |
|
127 |
from __future__ import print_function |
128 |
import re |
129 |
+import hashlib |
130 |
import portage |
131 |
from portage.xml.metadata import MetaDataXML |
132 |
from tbc.flags import tbc_use_flags |
133 |
from tbc.text import get_ebuild_cvs_revision, get_log_text_dict |
134 |
from tbc.flags import tbc_use_flags |
135 |
-from tbc.qachecks import digestcheck, check_repoman, repoman_full |
136 |
+from tbc.qachecks import digestcheck, check_repoman |
137 |
+from tbc.build_log import check_repoman_full |
138 |
from tbc.sqlquerys import add_logs, get_package_info, get_config_info, \ |
139 |
add_new_build_job, add_new_ebuild_sql, get_ebuild_id_list, add_old_ebuild, \ |
140 |
get_package_metadata_sql, update_package_metadata, update_manifest_sql, \ |
141 |
@@ -283,11 +285,13 @@ class tbc_package(object): |
142 |
if manifest_checksum_tree is None: |
143 |
return |
144 |
|
145 |
- # Check cp with repoman repoman full |
146 |
- repoman_full(self._session, pkgdir, self._config_id) |
147 |
- |
148 |
package_id = add_new_package_sql(self._session, cp, repo) |
149 |
|
150 |
+ # Check cp with repoman full |
151 |
+ status = check_repoman_full(self._session, pkgdir, package_id, self._config_id) |
152 |
+ if status: |
153 |
+ log_msg = "Repoman %s:%s ... Fail." % (cpv, repo) |
154 |
+ add_logs(self._session, log_msg, "error", self._config_id) |
155 |
package_metadataDict = self.get_package_metadataDict(pkgdir, package_id) |
156 |
# Get the ebuild list for cp |
157 |
ebuild_list_tree = self._myportdb.cp_list(cp, use_cache=1, mytree=mytree) |
158 |
@@ -308,11 +312,7 @@ class tbc_package(object): |
159 |
# take package descriptions from the ebuilds |
160 |
if package_metadataDict[package_id]['metadata_xml_descriptions'] != packageDict[cpv]['ebuild_version_descriptions_tree']: |
161 |
package_metadataDict[package_id]['metadata_xml_descriptions'] = packageDict[cpv]['ebuild_version_descriptions_tree'] |
162 |
- if packageDict[cpv]['checksum'] != "0": |
163 |
- repoman_fail = check_repoman(self._mysettings, self._myportdb, cpv, repo) |
164 |
- if repoman_fail: |
165 |
- log_msg = "Repoman %s:%s ... Fail." % (cpv, repo) |
166 |
- add_logs(self._session, log_msg, "error", self._config_id) |
167 |
+ |
168 |
self.add_package(packageDict, package_metadataDict, package_id, new_ebuild_id_list, old_ebuild_id_list, manifest_checksum_tree) |
169 |
log_msg = "C %s:%s ... Done." % (cp, repo) |
170 |
add_logs(self._session, log_msg, "info", self._config_id) |
171 |
@@ -340,8 +340,11 @@ class tbc_package(object): |
172 |
log_msg = "U %s:%s" % (cp, repo) |
173 |
add_logs(self._session, log_msg, "info", self._config_id) |
174 |
|
175 |
- # Check cp with repoman repoman full |
176 |
- repoman_full(self._session, pkgdir, self._config_id) |
177 |
+ # Check cp with repoman full |
178 |
+ status = check_repoman_full(self._session, pkgdir, package_id, self._config_id) |
179 |
+ if status: |
180 |
+ log_msg = "Repoman %s:%s ... Fail." % (cpv, repo) |
181 |
+ add_logs(self._session, log_msg, "error", self._config_id) |
182 |
|
183 |
# Get the ebuild list for cp |
184 |
old_ebuild_id_list = [] |
185 |
@@ -399,13 +402,6 @@ class tbc_package(object): |
186 |
else: |
187 |
ebuild_version_manifest_checksum_db = checksums_db |
188 |
|
189 |
- # Check with repoman |
190 |
- if (ebuild_version_manifest_checksum_db is None or ebuild_version_checksum_tree != ebuild_version_manifest_checksum_db) and ebuild_version_checksum_tree != "0": |
191 |
- repoman_fail = check_repoman(self._mysettings, self._myportdb, cpv, repo) |
192 |
- if repoman_fail: |
193 |
- log_msg = "Repoman %s:%s ... Fail." % (cpv, repo) |
194 |
- add_logs(self._session, log_msg, "error", self._config_id) |
195 |
- |
196 |
# Check if the checksum have change |
197 |
if ebuild_version_manifest_checksum_db is None: |
198 |
# N = New ebuild |
199 |
|
200 |
diff --git a/tbc/pym/qachecks.py b/tbc/pym/qachecks.py |
201 |
index 2e25d86..766b572 100644 |
202 |
--- a/tbc/pym/qachecks.py |
203 |
+++ b/tbc/pym/qachecks.py |
204 |
@@ -186,5 +186,16 @@ def repoman_full(session, pkgdir, config_id): |
205 |
SetupInfo = get_setup_info(session, config_id) |
206 |
config_root = ConfigsMetaData.RepoPath + '/' + ConfigInfo.Hostname + "/" + SetupInfo.Setup |
207 |
argscmd = [] |
208 |
+ argscmd.append('--xmlparse') |
209 |
argscmd.append('full') |
210 |
- repoman_main(argscmd, config_root=config_root, pkgdir=pkgdir) |
211 |
+ qatracker, qawarnings = repoman_main(argscmd, config_root=config_root, pkgdir=pkgdir) |
212 |
+ adict = {} |
213 |
+ for key in qatracker.fails.items(): |
214 |
+ alist = [] |
215 |
+ for foo in key[1]: |
216 |
+ alist.append(foo) |
217 |
+ adict[key[0]] = alist |
218 |
+ if adict == {}: |
219 |
+ return False |
220 |
+ return adict |
221 |
+ |
222 |
|
223 |
diff --git a/tbc/pym/repoman/main.py b/tbc/pym/repoman/main.py |
224 |
index 2353455..a30704a 100644 |
225 |
--- a/tbc/pym/repoman/main.py |
226 |
+++ b/tbc/pym/repoman/main.py |
227 |
@@ -789,7 +789,9 @@ def repoman_scan(repoman_settings, repo_settings, vcs_settings, portdb, options, |
228 |
"metadata.warning", |
229 |
"%s/metadata.xml: unused local USE-description: '%s'" |
230 |
% (xpkg, myflag)) |
231 |
- |
232 |
+ |
233 |
+ suggest_ignore_masked = False |
234 |
+ suggest_include_dev = False |
235 |
if have_pmasked and not (options.without_mask or options.ignore_masked): |
236 |
suggest_ignore_masked = True |
237 |
if have_dev_keywords and not options.include_dev: |
238 |
@@ -973,7 +975,7 @@ def repoman_main(argv, config_root=None, pkgdir=None): |
239 |
utilities.repoman_sez( |
240 |
"\"Make your QA payment on time" |
241 |
" and you'll never see the likes of me.\"\n") |
242 |
- sys.exit(1) |
243 |
+ return qatracker, qawarnings |
244 |
else: |
245 |
if dofail and can_force and options.force and not options.pretend: |
246 |
utilities.repoman_sez( |
247 |
@@ -988,7 +990,7 @@ def repoman_main(argv, config_root=None, pkgdir=None): |
248 |
utilities.repoman_sez( |
249 |
"\"Make your QA payment on time" |
250 |
" and you'll never see the likes of me.\"\n") |
251 |
- sys.exit(1) |
252 |
+ return qatracker, qawarnings |
253 |
|
254 |
if options.pretend: |
255 |
utilities.repoman_sez( |
256 |
@@ -1627,4 +1629,4 @@ def repoman_main(argv, config_root=None, pkgdir=None): |
257 |
" that he forgot to commit anything") |
258 |
utilities.repoman_sez( |
259 |
"\"If everyone were like you, I'd be out of business!\"\n") |
260 |
- sys.exit(0) |
261 |
+ return qatracker, qawarnings |
262 |
|
263 |
diff --git a/tbc/pym/sqlquerys.py b/tbc/pym/sqlquerys.py |
264 |
index 8fdf901..4d2a5e5 100644 |
265 |
--- a/tbc/pym/sqlquerys.py |
266 |
+++ b/tbc/pym/sqlquerys.py |
267 |
@@ -8,7 +8,8 @@ from tbc.db_mapping import Configs, Logs, ConfigsMetaData, Jobs, BuildJobs, Pack |
268 |
Uses, ConfigsEmergeOptions, EmergeOptions, HiLight, BuildLogs, BuildLogsConfig, BuildJobsUse, BuildJobsRedo, \ |
269 |
HiLightCss, BuildLogsHiLight, BuildLogsEmergeOptions, BuildLogsErrors, ErrorsInfo, EmergeInfo, BuildLogsUse, \ |
270 |
BuildJobsEmergeOptions, EbuildsMetadata, EbuildsIUse, Restrictions, EbuildsRestrictions, EbuildsKeywords, \ |
271 |
- Keywords, PackagesMetadata, Emails, PackagesEmails, Setups, BuildLogsRepomanQa, CategoriesMetadata |
272 |
+ Keywords, PackagesMetadata, Emails, PackagesEmails, Setups, BuildLogsRepomanQa, CategoriesMetadata, \ |
273 |
+ PackagesRepoman |
274 |
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound |
275 |
from sqlalchemy import and_, or_ |
276 |
|
277 |
@@ -566,3 +567,15 @@ def get_ebuild_restrictions(session, ebuild_id): |
278 |
restrictions.append(session.query(Restrictions).filter_by(RestrictionId = EbuildsRestrictionsInfo.RestrictionId).one()) |
279 |
return restrictions |
280 |
return restrictions.append(session.query(Restrictions).filter_by(RestrictionId = EbuildsRestrictionsInfo.RestrictionId).one()) |
281 |
+ |
282 |
+def add_repoman_log(session, package_id, repoman_log, repoman_hash): |
283 |
+ try: |
284 |
+ PackagesRepomanInfo = session.query(PackagesRepoman).filter_by(PackageId = package_id).one() |
285 |
+ except NoResultFound as e: |
286 |
+ session.add(PackagesRepoman(PackageId = package_id, RepomanText = repoman_log, RepomanHash = repoman_hash)) |
287 |
+ session.commit() |
288 |
+ else: |
289 |
+ if PackagesRepomanInfo.RepomanHash != repoman_hash: |
290 |
+ PackagesRepomanInfo.RepomanHash = repoman_hash |
291 |
+ PackagesRepomanInfo.RepomanText = repoman_log |
292 |
+ session.commit() |