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: pym/tbc/
Date: Tue, 26 Jan 2016 20:29:43
Message-Id: 1453840238.85d70df173a81e8257172d39be1ae971be54422b.zorry@gentoo
1 commit: 85d70df173a81e8257172d39be1ae971be54422b
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Tue Jan 26 20:30:38 2016 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Tue Jan 26 20:30:38 2016 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=85d70df1
7
8 check all ebuilds in package instead of only check Manifest
9
10 pym/tbc/build_log.py | 5 +-
11 pym/tbc/db_mapping.py | 1 -
12 pym/tbc/package.py | 151 +++++++++++++++++++++-----------------------------
13 pym/tbc/sqlquerys.py | 5 --
14 pym/tbc/sync.py | 20 +++++--
15 5 files changed, 80 insertions(+), 102 deletions(-)
16
17 diff --git a/pym/tbc/build_log.py b/pym/tbc/build_log.py
18 index a16cdc6..ec4aaa7 100644
19 --- a/pym/tbc/build_log.py
20 +++ b/pym/tbc/build_log.py
21 @@ -29,7 +29,7 @@ from tbc.ConnectionManager import NewConnection
22 from tbc.sqlquerys import get_config_id, get_ebuild_id_db, add_new_buildlog, \
23 get_package_info, get_build_job_id, get_use_id, get_config_info, get_hilight_info, get_error_info_list, \
24 add_e_info, get_fail_times, add_fail_times, update_fail_times, del_old_build_jobs, add_old_ebuild, \
25 - update_buildjobs_status, update_mtime_sql, add_repoman_qa, get_config_id_fqdn, get_setup_info, \
26 + update_buildjobs_status, add_repoman_qa, get_config_id_fqdn, get_setup_info, \
27 add_repoman_log
28 from tbc.log import write_log
29
30 @@ -112,8 +112,7 @@ def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg):
31 if status:
32 if ebuild_id_list is None:
33 log_msg = "%s:%s Don't have any ebuild_id!" % (pkg.cpv, repo,)
34 - add_logs(session, log_msg, "info", config_id)
35 - update_mtime_sql(session, build_dict['package_id'], 0)
36 + add_logs(session, log_msg, "error", config_id)
37 else:
38 old_ebuild_id_list = []
39 for ebuild_id in ebuild_id_list:
40
41 diff --git a/pym/tbc/db_mapping.py b/pym/tbc/db_mapping.py
42 index 2636bb6..d9fcf25 100644
43 --- a/pym/tbc/db_mapping.py
44 +++ b/pym/tbc/db_mapping.py
45 @@ -84,7 +84,6 @@ class Packages(Base):
46 CategoryId = Column('category_id', Integer, ForeignKey('categories.category_id'))
47 Package = Column('package',String(150))
48 RepoId = Column('repo_id', Integer, ForeignKey('repos.repo_id'))
49 - Mtime = Column('mtime', DateTime, default=0)
50 Active = Column('active', Boolean, default=False)
51 TimeStamp = Column('time_stamp', DateTime, nullable=False, default=datetime.datetime.utcnow)
52 __tablename__ = 'packages'
53
54 diff --git a/pym/tbc/package.py b/pym/tbc/package.py
55 index 65a0f40..68574cf 100644
56 --- a/pym/tbc/package.py
57 +++ b/pym/tbc/package.py
58 @@ -17,7 +17,7 @@ from tbc.build_log import check_repoman_full
59 from tbc.log import write_log
60 from tbc.sqlquerys import get_package_info, get_config_info, \
61 add_new_build_job, add_new_ebuild_sql, get_ebuild_id_list, add_old_ebuild, \
62 - get_package_metadata_sql, update_package_metadata, update_mtime_sql, \
63 + get_package_metadata_sql, update_package_metadata, \
64 get_package_info_from_package_id, get_config_all_info, add_new_package_sql, \
65 get_ebuild_checksums, get_ebuild_id_db, get_configmetadata_info, get_setup_info, \
66 get_ebuild_info_ebuild_id, get_ebuild_restrictions, add_old_package
67 @@ -210,7 +210,7 @@ class tbc_package(object):
68 package_metadataDict[package_id] = attDict
69 return package_metadataDict
70
71 - def add_package(self, packageDict, package_metadataDict, package_id, new_ebuild_id_list, old_ebuild_id_list, manifest_mtime_tree):
72 + def add_package(self, packageDict, package_metadataDict, package_id, new_ebuild_id_list, old_ebuild_id_list):
73 # Use packageDict to update the db
74 ebuild_id_list = add_new_ebuild_sql(self._session, packageDict)
75
76 @@ -227,9 +227,6 @@ class tbc_package(object):
77 # update package metadata
78 update_package_metadata(self._session, package_metadataDict)
79
80 - # update the cp manifest checksum
81 - update_mtime_sql(self._session, package_id, manifest_mtime_tree)
82 -
83 # Get the best cpv for the configs and add it to config_cpv_listDict
84 PackageInfo, CategoryInfo, RepoInfo = get_package_info_from_package_id(self._session, package_id)
85 cp = CategoryInfo.Category + '/' + PackageInfo.Package
86 @@ -244,18 +241,6 @@ class tbc_package(object):
87 # Add the ebuild to the build jobs table if needed
88 self.add_new_build_job_db(ebuild_id_list, packageDict, config_cpv_listDict)
89
90 - def get_manifest_mtime_tree(self, pkgdir, cp, repo, mytree):
91 - # Get the cp manifest file mtime.
92 - try:
93 - mtime = os.path.getmtime(pkgdir + "/Manifest")
94 - except:
95 - log_msg = "QA: Can't checksum the Manifest file. :%s:%s" % (cp, repo,)
96 - write_log(self._session, log_msg, "warning", self._config_id, 'packages.get_manifest_mtime_tree')
97 - log_msg = "C %s:%s ... Fail." % (cp, repo)
98 - write_log(self._session, log_msg, "warning", self._config_id, 'packages.get_manifest_mtime_tree')
99 - return False
100 - return datetime.datetime.fromtimestamp(mtime).replace(microsecond=0)
101 -
102 def add_new_package_db(self, cp, repo):
103 # Add new categories package ebuild to tables package and ebuilds
104 # C = Checking
105 @@ -268,9 +253,6 @@ class tbc_package(object):
106 mytree = []
107 mytree.append(repodir)
108 pkgdir = repodir + "/" + cp # Get RepoDIR + cp
109 - manifest_mtime_tree = self.get_manifest_mtime_tree(pkgdir, cp, repo, mytree)
110 - if not manifest_mtime_tree:
111 - return None
112
113 package_id = add_new_package_sql(self._session, cp, repo)
114
115 @@ -332,83 +314,78 @@ class tbc_package(object):
116
117 mytree = []
118 mytree.append(repodir)
119 - manifest_mtime_tree = self.get_manifest_mtime_tree(pkgdir, cp, repo, mytree)
120 - if not manifest_mtime_tree:
121 +
122 + # Get the ebuild list for cp
123 + old_ebuild_id_list = []
124 + ebuild_list_tree = self._myportdb.cp_list(cp, use_cache=1, mytree=mytree)
125 + if ebuild_list_tree == []:
126 + log_msg = "QA: Can't get the ebuilds list. %s:%s" % (cp, repo,)
127 + write_log(self._session, log_msg, "error", self._config_id, 'packages.update_package_db')
128 + log_msg = "C %s:%s ... Fail." % (cp, repo)
129 + write_log(self._session, log_msg, "warning", self._config_id, 'packages.update_package_db')
130 return None
131
132 - # if we NOT have the same mtime in the db update the package
133 - if PackageInfo.Mtime is None or manifest_mtime_tree > PackageInfo.Mtime:
134 + package_metadataDict = self.get_package_metadataDict(pkgdir, repodir, package_id, cp)
135 + packageDict ={}
136 + new_ebuild_id_list = []
137 + package_updated = False
138 + for cpv in sorted(ebuild_list_tree):
139
140 - # U = Update
141 - log_msg = "U %s:%s" % (cp, repo)
142 - write_log(self._session, log_msg, "info", self._config_id, 'packages.update_package_db')
143 + # split out ebuild version
144 + ebuild_version_tree = portage.versions.cpv_getversion(cpv)
145
146 - # Get the ebuild list for cp
147 - old_ebuild_id_list = []
148 - ebuild_list_tree = self._myportdb.cp_list(cp, use_cache=1, mytree=mytree)
149 - if ebuild_list_tree == []:
150 - log_msg = "QA: Can't get the ebuilds list. %s:%s" % (cp, repo,)
151 - write_log(self._session, log_msg, "error", self._config_id, 'packages.update_package_db')
152 - log_msg = "C %s:%s ... Fail." % (cp, repo)
153 - write_log(self._session, log_msg, "warning", self._config_id, 'packages.update_package_db')
154 - return None
155 + # Get packageDict for cpv
156 + packageDict[cpv] = self.get_packageDict(pkgdir, cpv, repo)
157 +
158 + # take package descriptions from the ebuilds
159 + if package_metadataDict[package_id]['metadata_xml_descriptions'] != packageDict[cpv]['ebuild_version_descriptions_tree']:
160 + package_metadataDict[package_id]['metadata_xml_descriptions'] = packageDict[cpv]['ebuild_version_descriptions_tree']
161 +
162 + # Get the checksum of the ebuild in tree and db
163 + ebuild_version_checksum_tree = packageDict[cpv]['checksum']
164 + checksums_db, fail = get_ebuild_checksums(self._session, package_id, ebuild_version_tree)
165 +
166 + # check if we have dupes of the checksum from db
167 + if checksums_db is None:
168 + ebuild_version_manifest_checksum_db = None
169 + elif fail:
170 + dupe_ebuild_id_list = []
171 + for checksum in checksums_db:
172 + ebuilds_id , status = get_ebuild_id_db(self._session, checksum, package_id)
173 + for ebuild_id in ebuilds_id:
174 + log_msg = "U %s:%s:%s Dups of checksums" % (cpv, repo, ebuild_id,)
175 + write_log(self._session, log_msg, "warning", self._config_id, 'packages.update_package_db')
176 + dupe_ebuild_id_list.append(ebuild_id)
177 + add_old_ebuild(self._session, dupe_ebuild_id_list)
178 + ebuild_version_manifest_checksum_db = None
179 + else:
180 + ebuild_version_manifest_checksum_db = checksums_db
181 +
182 + # Check if the checksum have change
183 + if ebuild_version_manifest_checksum_db is None:
184 + # N = New ebuild
185 + log_msg = "N %s:%s" % (cpv, repo,)
186 + write_log(self._session, log_msg, "info", self._config_id, 'packages.update_package_db')
187 + packageDict[cpv]['new'] = True
188 + package_updated = True
189 + elif ebuild_version_checksum_tree != ebuild_version_manifest_checksum_db:
190 + # U = Updated ebuild
191 + log_msg = "U %s:%s" % (cpv, repo,)
192 + write_log(self._session, log_msg, "info", self._config_id, 'packages.update_package_db')
193 + package_updated = True
194 + else:
195 + # Remove cpv from packageDict and add ebuild to new ebuils list
196 + del packageDict[cpv]
197 + ebuild_id , status = get_ebuild_id_db(self._session, ebuild_version_checksum_tree, package_id)
198 + new_ebuild_id_list.append(ebuild_id)
199 + self.add_package(packageDict, package_metadataDict, package_id, new_ebuild_id_list, old_ebuild_id_list, manifest_mtime_tree)
200
201 + if package_updated:
202 # Check cp with repoman full
203 status = check_repoman_full(self._session, pkgdir, package_id, self._config_id)
204 if status:
205 log_msg = "Repoman %s::%s ... Fail." % (cp, repo)
206 write_log(self._session, log_msg, "warning", self._config_id, 'packages.update_package_db')
207 - package_metadataDict = self.get_package_metadataDict(pkgdir, repodir, package_id, cp)
208 - packageDict ={}
209 - new_ebuild_id_list = []
210 - for cpv in sorted(ebuild_list_tree):
211 -
212 - # split out ebuild version
213 - ebuild_version_tree = portage.versions.cpv_getversion(cpv)
214 -
215 - # Get packageDict for cpv
216 - packageDict[cpv] = self.get_packageDict(pkgdir, cpv, repo)
217 -
218 - # take package descriptions from the ebuilds
219 - if package_metadataDict[package_id]['metadata_xml_descriptions'] != packageDict[cpv]['ebuild_version_descriptions_tree']:
220 - package_metadataDict[package_id]['metadata_xml_descriptions'] = packageDict[cpv]['ebuild_version_descriptions_tree']
221 -
222 - # Get the checksum of the ebuild in tree and db
223 - ebuild_version_checksum_tree = packageDict[cpv]['checksum']
224 - checksums_db, fail = get_ebuild_checksums(self._session, package_id, ebuild_version_tree)
225 -
226 - # check if we have dupes of the checksum from db
227 - if checksums_db is None:
228 - ebuild_version_manifest_checksum_db = None
229 - elif fail:
230 - dupe_ebuild_id_list = []
231 - for checksum in checksums_db:
232 - ebuilds_id , status = get_ebuild_id_db(self._session, checksum, package_id)
233 - for ebuild_id in ebuilds_id:
234 - log_msg = "U %s:%s:%s Dups of checksums" % (cpv, repo, ebuild_id,)
235 - write_log(self._session, log_msg, "warning", self._config_id, 'packages.update_package_db')
236 - dupe_ebuild_id_list.append(ebuild_id)
237 - add_old_ebuild(self._session, dupe_ebuild_id_list)
238 - ebuild_version_manifest_checksum_db = None
239 - else:
240 - ebuild_version_manifest_checksum_db = checksums_db
241 -
242 - # Check if the checksum have change
243 - if ebuild_version_manifest_checksum_db is None:
244 - # N = New ebuild
245 - log_msg = "N %s:%s" % (cpv, repo,)
246 - write_log(self._session, log_msg, "info", self._config_id, 'packages.update_package_db')
247 - packageDict[cpv]['new'] = True
248 - elif ebuild_version_checksum_tree != ebuild_version_manifest_checksum_db:
249 - # U = Updated ebuild
250 - log_msg = "U %s:%s" % (cpv, repo,)
251 - write_log(self._session, log_msg, "info", self._config_id, 'packages.update_package_db')
252 - else:
253 - # Remove cpv from packageDict and add ebuild to new ebuils list
254 - del packageDict[cpv]
255 - ebuild_id , status = get_ebuild_id_db(self._session, ebuild_version_checksum_tree, package_id)
256 - new_ebuild_id_list.append(ebuild_id)
257 - self.add_package(packageDict, package_metadataDict, package_id, new_ebuild_id_list, old_ebuild_id_list, manifest_mtime_tree)
258
259 log_msg = "C %s:%s ... Done." % (cp, repo)
260 write_log(self._session, log_msg, "info", self._config_id, 'packages.update_package_db')
261
262 diff --git a/pym/tbc/sqlquerys.py b/pym/tbc/sqlquerys.py
263 index e43b8fc..4161461 100644
264 --- a/pym/tbc/sqlquerys.py
265 +++ b/pym/tbc/sqlquerys.py
266 @@ -515,11 +515,6 @@ def update_package_metadata(session, package_metadataDict):
267 EmailInfo = update_email_info(session, email)
268 PackagesEmailInfo = update_package_email_info(session, EmailInfo.EmailId, k)
269
270 -def update_mtime_sql(session, package_id, manifest_mtime_tree):
271 - PackagesInfo = session.query(Packages).filter_by(PackageId = package_id).one()
272 - PackagesInfo.Mtime = manifest_mtime_tree
273 - session.commit()
274 -
275 def get_package_info_from_package_id(session, package_id):
276 PackageInfo = session.query(Packages).filter_by(PackageId = package_id).one()
277 CategoryInfo = session.query(Categories).filter_by(CategoryId = PackageInfo.CategoryId).one()
278
279 diff --git a/pym/tbc/sync.py b/pym/tbc/sync.py
280 index 1732f1f..2d22e74 100644
281 --- a/pym/tbc/sync.py
282 +++ b/pym/tbc/sync.py
283 @@ -70,9 +70,10 @@ def git_sync_main(session):
284 except:
285 pass
286
287 - # check git diffs witch Manifests get updated and pass that to a dict
288 + # check git diffs witch get updated and pass that to a dict
289 # fetch and merge the repo
290 repo_cp_dict = {}
291 + search_list = [ '^metadata', '^eclass', '^licenses', '^profiles', '^scripts',]
292 for repo_dir in git_repos_list(myportdb):
293 reponame = myportdb.getRepositoryName(repo_dir)
294 repo = git.Repo(repo_dir)
295 @@ -82,14 +83,21 @@ def git_sync_main(session):
296 if not repouptodate:
297 cp_list = []
298 attr = {}
299 - # We check for Manifest changes and add the package to a list
300 + # We check for dir changes and add the package to a list
301 repo_diff = repo.git.diff('origin', '--name-only')
302 - write_log(session, 'Git diff: %s' % (repo_diff,), "debug", config_id, 'sync.git_sync_main')
303 + write_log(session, 'Git dir diff:\n%s' % (repo_diff,), "debug", config_id, 'sync.git_sync_main')
304 for diff_line in repo_diff.splitlines():
305 - if re.search("Manifest$", diff_line):
306 - cp = re.sub('/Manifest', '', diff_line)
307 - cp_list.append(cp)
308 + find_search = True
309 + for search_line in search_list:
310 + if re.search(search_line, diff_line):
311 + find_search = False
312 + if find_search:
313 + splited_diff_line = re.split('/', diff_line)
314 + cp = splited_diff_line[0] + '/' + splited_diff_line[1]
315 + if not cp in cp_list:
316 + cp_list.append(cp)
317 attr['cp_list'] = cp_list
318 + write_log(session, 'Git CP Diff: %s' % (cp_list,), "debug", config_id, 'sync.git_sync_main')
319 repo_cp_dict[reponame] = attr
320 git_merge(repo, info_list[0])
321 else: