Gentoo Archives: gentoo-commits

From: Magnus Granberg <zorry@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/tinderbox-cluster:master commit in: tbc/pym/, tbc/pym/repoman/
Date: Sat, 01 Aug 2015 20:50:02
Message-Id: 1438462148.2410346473e1d00de202eac126d995a148b9609f.zorry@gentoo
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()