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: |