aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Granberg <zorry@gentoo.org>2015-08-01 22:49:08 +0200
committerMagnus Granberg <zorry@gentoo.org>2015-08-01 22:49:08 +0200
commit2410346473e1d00de202eac126d995a148b9609f (patch)
tree16427c230eeba14af6f98771f9b856a72610f27d
parentmove more stuff in repoman main.py (diff)
downloadtinderbox-cluster-24103464.tar.gz
tinderbox-cluster-24103464.tar.bz2
tinderbox-cluster-24103464.zip
add repoman full to host and guest
-rw-r--r--tbc/pym/build_log.py41
-rw-r--r--tbc/pym/db_mapping.py8
-rw-r--r--tbc/pym/package.py32
-rw-r--r--tbc/pym/qachecks.py13
-rw-r--r--tbc/pym/repoman/main.py10
-rw-r--r--tbc/pym/sqlquerys.py15
6 files changed, 84 insertions, 35 deletions
diff --git a/tbc/pym/build_log.py b/tbc/pym/build_log.py
index 9c8bbfa..71c14b5 100644
--- a/tbc/pym/build_log.py
+++ b/tbc/pym/build_log.py
@@ -20,18 +20,38 @@ portage.proxy.lazyimport.lazyimport(globals(),
'tbc.actions:action_info,load_emerge_config',
)
-from tbc.qachecks import check_repoman
+from tbc.qachecks import check_repoman, repoman_full
from tbc.text import get_log_text_dict
-from tbc.package import tbc_package
from tbc.readconf import read_config_settings
from tbc.flags import tbc_use_flags
from tbc.ConnectionManager import NewConnection
from tbc.sqlquerys import add_logs, get_config_id, get_ebuild_id_db, add_new_buildlog, \
get_package_info, get_build_job_id, get_use_id, get_config_info, get_hilight_info, get_error_info_list, \
add_e_info, get_fail_times, add_fail_times, update_fail_times, del_old_build_jobs, add_old_ebuild, \
- update_buildjobs_status, update_manifest_sql, add_repoman_qa, get_config_id_fqdn, get_setup_info
+ update_buildjobs_status, update_manifest_sql, add_repoman_qa, get_config_id_fqdn, get_setup_info, \
+ add_repoman_log
from sqlalchemy.orm import sessionmaker
+def repoman_check_full(session, pkgdir, package_id, config_id):
+ # Check cp with repoman repoman full
+ status = repoman_full(session, pkgdir, config_id)
+ repoman_hash = hashlib.sha256()
+ repoman_log = ""
+ if status:
+ for k, v in status.items():
+ repoman_line = k + '/n'
+ repoman_hash.update(repoman_line.encode('utf-8'))
+ repoman_log = repoman_log + repoman_line
+ for line in v:
+ repoman_line = line + '/n'
+ repoman_hash.update(repoman_line.encode('utf-8'))
+ repoman_log = repoman_log + repoman_line
+ add_repoman_log(session, package_id, repoman_log, repoman_hash.hexdigest())
+ return repoman_log
+ else:
+ return status
+
+
def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg):
myportdb = portage.portdbapi(mysettings=settings)
cpvr_list = catpkgsplit(pkg.cpv, silent=1)
@@ -48,6 +68,7 @@ def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg):
build_dict['cpv'] = pkg.cpv
build_dict['categories'] = categories
build_dict['package'] = package
+ build_dict['repo'] = repo
build_dict['config_id'] = config_id
init_useflags = tbc_use_flags(settings, myportdb, pkg.cpv)
iuse_flags_list, final_use_list = init_useflags.get_flags_pkg(pkg, settings)
@@ -77,12 +98,6 @@ def get_build_dict_db(session, config_id, settings, tbc_settings_dict, pkg):
log_msg = "%s:%s Don't have any ebuild_id!" % (pkg.cpv, repo,)
add_logs(session, log_msg, "info", config_id)
update_manifest_sql(session, build_dict['package_id'], "0")
- init_package = tbc_package(session, settings, myportdb, config_id)
- init_package.update_package_db(build_dict['package_id'])
- ebuild_id_list, status = get_ebuild_id_db(session, build_dict['checksum'], build_dict['package_id'])
- if status and ebuild_id_list is None:
- log_msg = "%s:%s Don't have any ebuild_id!" % (pkg.cpv, repo,)
- add_logs(session, log_msg, "error", config_id)
else:
old_ebuild_id_list = []
for ebuild_id in ebuild_id_list:
@@ -204,8 +219,12 @@ def get_buildlog_info(session, settings, pkg, build_dict):
qa_error_list.append(logfile_text_dict[i])
i = i +1
- # Run repoman check_repoman()
- repoman_error_list = check_repoman(settings, myportdb, build_dict['cpv'], pkg.repo)
+ # Run repoman full
+ element = portage.versions.cpv_getkey(build_dict['cpv']).split('/')
+ categories = element[0]
+ package = element[1]
+ pkgdir = myportdb.getRepositoryPath(build_dict['repo']) + "/" + categories + "/" + package
+ repoman_error_list = repoman_check_full(session, pkgdir, build_dict['package_id'], config_id)
build_log_dict = {}
build_log_dict['fail'] = False
if repoman_error_list:
diff --git a/tbc/pym/db_mapping.py b/tbc/pym/db_mapping.py
index a296c2e..dbae5a8 100644
--- a/tbc/pym/db_mapping.py
+++ b/tbc/pym/db_mapping.py
@@ -230,6 +230,14 @@ class BuildLogsRepomanQa(Base):
SummeryText = Column('summery_text', Text)
__tablename__ = 'build_logs_repoman_qa'
+class PackagesRepoman(Base):
+ Id = Column('id', Integer, primary_key=True)
+ PackageId = Column('package_id', Integer, ForeignKey('packages.package_id'))
+ RepomanText = Column('repoman_text', Text)
+ RepomanHash = Column('repoman_hash', String(100))
+ TimeStamp = Column('time_stamp', DateTime, nullable=False, default=datetime.datetime.utcnow)
+ __tablename__ = 'packages_repoman'
+
class ErrorsInfo(Base):
ErrorId = Column('error_id', Integer, primary_key=True)
ErrorName = Column('error_name', String)
diff --git a/tbc/pym/package.py b/tbc/pym/package.py
index 0a19f15..657c90d 100644
--- a/tbc/pym/package.py
+++ b/tbc/pym/package.py
@@ -3,12 +3,14 @@
from __future__ import print_function
import re
+import hashlib
import portage
from portage.xml.metadata import MetaDataXML
from tbc.flags import tbc_use_flags
from tbc.text import get_ebuild_cvs_revision, get_log_text_dict
from tbc.flags import tbc_use_flags
-from tbc.qachecks import digestcheck, check_repoman, repoman_full
+from tbc.qachecks import digestcheck, check_repoman
+from tbc.build_log import check_repoman_full
from tbc.sqlquerys import add_logs, get_package_info, get_config_info, \
add_new_build_job, add_new_ebuild_sql, get_ebuild_id_list, add_old_ebuild, \
get_package_metadata_sql, update_package_metadata, update_manifest_sql, \
@@ -283,11 +285,13 @@ class tbc_package(object):
if manifest_checksum_tree is None:
return
- # Check cp with repoman repoman full
- repoman_full(self._session, pkgdir, self._config_id)
-
package_id = add_new_package_sql(self._session, cp, repo)
+ # Check cp with repoman full
+ status = check_repoman_full(self._session, pkgdir, package_id, self._config_id)
+ if status:
+ log_msg = "Repoman %s:%s ... Fail." % (cpv, repo)
+ add_logs(self._session, log_msg, "error", self._config_id)
package_metadataDict = self.get_package_metadataDict(pkgdir, package_id)
# Get the ebuild list for cp
ebuild_list_tree = self._myportdb.cp_list(cp, use_cache=1, mytree=mytree)
@@ -308,11 +312,7 @@ class tbc_package(object):
# take package descriptions from the ebuilds
if package_metadataDict[package_id]['metadata_xml_descriptions'] != packageDict[cpv]['ebuild_version_descriptions_tree']:
package_metadataDict[package_id]['metadata_xml_descriptions'] = packageDict[cpv]['ebuild_version_descriptions_tree']
- if packageDict[cpv]['checksum'] != "0":
- repoman_fail = check_repoman(self._mysettings, self._myportdb, cpv, repo)
- if repoman_fail:
- log_msg = "Repoman %s:%s ... Fail." % (cpv, repo)
- add_logs(self._session, log_msg, "error", self._config_id)
+
self.add_package(packageDict, package_metadataDict, package_id, new_ebuild_id_list, old_ebuild_id_list, manifest_checksum_tree)
log_msg = "C %s:%s ... Done." % (cp, repo)
add_logs(self._session, log_msg, "info", self._config_id)
@@ -340,8 +340,11 @@ class tbc_package(object):
log_msg = "U %s:%s" % (cp, repo)
add_logs(self._session, log_msg, "info", self._config_id)
- # Check cp with repoman repoman full
- repoman_full(self._session, pkgdir, self._config_id)
+ # Check cp with repoman full
+ status = check_repoman_full(self._session, pkgdir, package_id, self._config_id)
+ if status:
+ log_msg = "Repoman %s:%s ... Fail." % (cpv, repo)
+ add_logs(self._session, log_msg, "error", self._config_id)
# Get the ebuild list for cp
old_ebuild_id_list = []
@@ -399,13 +402,6 @@ class tbc_package(object):
else:
ebuild_version_manifest_checksum_db = checksums_db
- # Check with repoman
- if (ebuild_version_manifest_checksum_db is None or ebuild_version_checksum_tree != ebuild_version_manifest_checksum_db) and ebuild_version_checksum_tree != "0":
- repoman_fail = check_repoman(self._mysettings, self._myportdb, cpv, repo)
- if repoman_fail:
- log_msg = "Repoman %s:%s ... Fail." % (cpv, repo)
- add_logs(self._session, log_msg, "error", self._config_id)
-
# Check if the checksum have change
if ebuild_version_manifest_checksum_db is None:
# N = New ebuild
diff --git a/tbc/pym/qachecks.py b/tbc/pym/qachecks.py
index 2e25d86..766b572 100644
--- a/tbc/pym/qachecks.py
+++ b/tbc/pym/qachecks.py
@@ -186,5 +186,16 @@ def repoman_full(session, pkgdir, config_id):
SetupInfo = get_setup_info(session, config_id)
config_root = ConfigsMetaData.RepoPath + '/' + ConfigInfo.Hostname + "/" + SetupInfo.Setup
argscmd = []
+ argscmd.append('--xmlparse')
argscmd.append('full')
- repoman_main(argscmd, config_root=config_root, pkgdir=pkgdir)
+ qatracker, qawarnings = repoman_main(argscmd, config_root=config_root, pkgdir=pkgdir)
+ adict = {}
+ for key in qatracker.fails.items():
+ alist = []
+ for foo in key[1]:
+ alist.append(foo)
+ adict[key[0]] = alist
+ if adict == {}:
+ return False
+ return adict
+
diff --git a/tbc/pym/repoman/main.py b/tbc/pym/repoman/main.py
index 2353455..a30704a 100644
--- a/tbc/pym/repoman/main.py
+++ b/tbc/pym/repoman/main.py
@@ -789,7 +789,9 @@ def repoman_scan(repoman_settings, repo_settings, vcs_settings, portdb, options,
"metadata.warning",
"%s/metadata.xml: unused local USE-description: '%s'"
% (xpkg, myflag))
-
+
+ suggest_ignore_masked = False
+ suggest_include_dev = False
if have_pmasked and not (options.without_mask or options.ignore_masked):
suggest_ignore_masked = True
if have_dev_keywords and not options.include_dev:
@@ -973,7 +975,7 @@ def repoman_main(argv, config_root=None, pkgdir=None):
utilities.repoman_sez(
"\"Make your QA payment on time"
" and you'll never see the likes of me.\"\n")
- sys.exit(1)
+ return qatracker, qawarnings
else:
if dofail and can_force and options.force and not options.pretend:
utilities.repoman_sez(
@@ -988,7 +990,7 @@ def repoman_main(argv, config_root=None, pkgdir=None):
utilities.repoman_sez(
"\"Make your QA payment on time"
" and you'll never see the likes of me.\"\n")
- sys.exit(1)
+ return qatracker, qawarnings
if options.pretend:
utilities.repoman_sez(
@@ -1627,4 +1629,4 @@ def repoman_main(argv, config_root=None, pkgdir=None):
" that he forgot to commit anything")
utilities.repoman_sez(
"\"If everyone were like you, I'd be out of business!\"\n")
- sys.exit(0)
+ return qatracker, qawarnings
diff --git a/tbc/pym/sqlquerys.py b/tbc/pym/sqlquerys.py
index 8fdf901..4d2a5e5 100644
--- a/tbc/pym/sqlquerys.py
+++ b/tbc/pym/sqlquerys.py
@@ -8,7 +8,8 @@ from tbc.db_mapping import Configs, Logs, ConfigsMetaData, Jobs, BuildJobs, Pack
Uses, ConfigsEmergeOptions, EmergeOptions, HiLight, BuildLogs, BuildLogsConfig, BuildJobsUse, BuildJobsRedo, \
HiLightCss, BuildLogsHiLight, BuildLogsEmergeOptions, BuildLogsErrors, ErrorsInfo, EmergeInfo, BuildLogsUse, \
BuildJobsEmergeOptions, EbuildsMetadata, EbuildsIUse, Restrictions, EbuildsRestrictions, EbuildsKeywords, \
- Keywords, PackagesMetadata, Emails, PackagesEmails, Setups, BuildLogsRepomanQa, CategoriesMetadata
+ Keywords, PackagesMetadata, Emails, PackagesEmails, Setups, BuildLogsRepomanQa, CategoriesMetadata, \
+ PackagesRepoman
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
from sqlalchemy import and_, or_
@@ -566,3 +567,15 @@ def get_ebuild_restrictions(session, ebuild_id):
restrictions.append(session.query(Restrictions).filter_by(RestrictionId = EbuildsRestrictionsInfo.RestrictionId).one())
return restrictions
return restrictions.append(session.query(Restrictions).filter_by(RestrictionId = EbuildsRestrictionsInfo.RestrictionId).one())
+
+def add_repoman_log(session, package_id, repoman_log, repoman_hash):
+ try:
+ PackagesRepomanInfo = session.query(PackagesRepoman).filter_by(PackageId = package_id).one()
+ except NoResultFound as e:
+ session.add(PackagesRepoman(PackageId = package_id, RepomanText = repoman_log, RepomanHash = repoman_hash))
+ session.commit()
+ else:
+ if PackagesRepomanInfo.RepomanHash != repoman_hash:
+ PackagesRepomanInfo.RepomanHash = repoman_hash
+ PackagesRepomanInfo.RepomanText = repoman_log
+ session.commit()