From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 21230138206 for ; Tue, 26 Apr 2016 14:48:01 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 1AF1E21C00B; Tue, 26 Apr 2016 14:48:00 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 57AB121C00B for ; Tue, 26 Apr 2016 14:47:59 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 4DE1F3407B8 for ; Tue, 26 Apr 2016 14:47:58 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id A8769CB for ; Tue, 26 Apr 2016 14:47:53 +0000 (UTC) From: "Brian Dolbec" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" Message-ID: <1461679721.695492024a9ca40fd14148a980a960a8551dab29.dolsen@gentoo> Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/ebuild/, pym/repoman/ X-VCS-Repository: proj/portage X-VCS-Files: pym/repoman/modules/scan/ebuild/__init__.py pym/repoman/modules/scan/ebuild/ebuild.py pym/repoman/modules/scan/ebuild/isebuild.py pym/repoman/scanner.py X-VCS-Directories: pym/repoman/ pym/repoman/modules/scan/ebuild/ X-VCS-Committer: dolsen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 695492024a9ca40fd14148a980a960a8551dab29 X-VCS-Branch: repoman Date: Tue, 26 Apr 2016 14:47:53 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 411bf64d-562b-4aaa-b206-936c4b731726 X-Archives-Hash: e538eab60c24d4f31a2aea04ce7c9d56 commit: 695492024a9ca40fd14148a980a960a8551dab29 Author: Brian Dolbec gentoo org> AuthorDate: Tue Apr 26 14:08:41 2016 +0000 Commit: Brian Dolbec gentoo org> CommitDate: Tue Apr 26 14:08:41 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=69549202 Repoman: Merge IsEbuild class into ebuild This reduces the need to import the pkgs data, it is now an internal class instance variable. 'pkgs' is still needed, but only to assign it the new pkgs dictionary which the scanner requires for the ebuild loop. pym/repoman/modules/scan/ebuild/__init__.py | 27 ++------ pym/repoman/modules/scan/ebuild/ebuild.py | 84 ++++++++++++++++++++++-- pym/repoman/modules/scan/ebuild/isebuild.py | 99 ----------------------------- pym/repoman/scanner.py | 4 +- 4 files changed, 88 insertions(+), 126 deletions(-) diff --git a/pym/repoman/modules/scan/ebuild/__init__.py b/pym/repoman/modules/scan/ebuild/__init__.py index b243314..8666e78 100644 --- a/pym/repoman/modules/scan/ebuild/__init__.py +++ b/pym/repoman/modules/scan/ebuild/__init__.py @@ -10,25 +10,6 @@ module_spec = { 'name': 'ebuild', 'description': doc, 'provides':{ - 'isebuild-module': { - 'name': "isebuild", - 'sourcefile': "isebuild", - 'class': "IsEbuild", - 'description': doc, - 'functions': ['check'], - 'func_desc': { - }, - 'mod_kwargs': ['portdb', 'qatracker', 'repo_settings' - ], - 'func_kwargs': { - 'can_force': (None, None), - 'checkdir': (None, None), - 'checkdirlist': (None, None), - 'pkgs': ('Future', 'dict'), - 'validity_future': ('Future', True), - 'xpkg': (None, None), - }, - }, 'ebuild-module': { 'name': "ebuild", 'sourcefile': "ebuild", @@ -37,16 +18,20 @@ module_spec = { 'functions': ['check'], 'func_desc': { }, - 'mod_kwargs': ['qatracker', 'repo_settings', 'vcs_settings', 'checks', + 'mod_kwargs': ['qatracker', 'repo_settings', 'vcs_settings', + 'checks', 'portdb' ], 'func_kwargs': { + 'can_force': (None, None), 'catdir': (None, None), 'changed': (None, None), 'changelog_modified': (None, None), + 'checkdir': (None, None), + 'checkdirlist': (None, None), 'ebuild': ('Future', 'UNSET'), 'pkg': ('Future', 'UNSET'), 'pkgdir': (None, None), - 'pkgs': (None, None), + 'pkgs': ('Future', 'dict'), 'repolevel': (None, None), 'validity_future': (None, None), 'xpkg': (None, None), diff --git a/pym/repoman/modules/scan/ebuild/ebuild.py b/pym/repoman/modules/scan/ebuild/ebuild.py index 92b1ea4..c247a7f 100644 --- a/pym/repoman/modules/scan/ebuild/ebuild.py +++ b/pym/repoman/modules/scan/ebuild/ebuild.py @@ -3,8 +3,13 @@ from __future__ import print_function, unicode_literals import re +import stat + +from _emerge.Package import Package +from _emerge.RootConfig import RootConfig from repoman.modules.scan.scanbase import ScanBase +from repoman.qa_data import no_exec, allvars # import our initialized portage instance from repoman._portage import portage from portage import os @@ -19,16 +24,19 @@ class Ebuild(ScanBase): '''Class init @param qatracker: QATracker instance + @param portdb: portdb instance @param repo_settings: repository settings instance @param vcs_settings: VCSSettings instance - @param changed: changes dictionary @param checks: checks dictionary ''' super(Ebuild, self).__init__(**kwargs) self.qatracker = kwargs.get('qatracker') + self.portdb = kwargs.get('portdb') self.repo_settings = kwargs.get('repo_settings') self.vcs_settings = kwargs.get('vcs_settings') self.checks = kwargs.get('checks') + self.root_config = RootConfig(self.repo_settings.repoman_settings, + self.repo_settings.trees[self.repo_settings.root], None) self.changed = None self.xpkg = None self.y_ebuild = None @@ -37,6 +45,7 @@ class Ebuild(ScanBase): self.eapi = None self.inherited = None self.keywords = None + self.pkgs = {} def _set_paths(self, **kwargs): repolevel = kwargs.get('repolevel') @@ -93,11 +102,9 @@ class Ebuild(ScanBase): def set_pkg_data(self, **kwargs): '''Sets some classwide data needed for some of the checks - @param pkgs: the dynamic list of ebuilds @returns: dictionary ''' - pkgs = kwargs.get('pkgs').get() - self.pkg = pkgs[self.y_ebuild] + self.pkg = self.pkgs[self.y_ebuild] self.metadata = self.pkg._metadata self.eapi = self.metadata["EAPI"] self.inherited = self.pkg.inherited @@ -148,6 +155,75 @@ class Ebuild(ScanBase): dyn_pkg.set(self.pkg) return False + def check_isebuild(self, **kwargs): + '''Test the file for qualifications that is is an ebuild + + @param checkdirlist: list of files in the current package directory + @param checkdir: current package directory path + @param xpkg: current package directory being checked + @param validity_future: Future instance + @returns: dictionary, including {pkgs, can_force} + ''' + checkdirlist = kwargs.get('checkdirlist').get() + checkdir = kwargs.get('checkdir') + xpkg = kwargs.get('xpkg') + fuse = kwargs.get('validity_future') + can_force = kwargs.get('can_force') + self.continue_ = False + ebuildlist = [] + pkgs = {} + for y in checkdirlist: + file_is_ebuild = y.endswith(".ebuild") + file_should_be_non_executable = y in no_exec or file_is_ebuild + + if file_should_be_non_executable: + file_is_executable = stat.S_IMODE( + os.stat(os.path.join(checkdir, y)).st_mode) & 0o111 + + if file_is_executable: + self.qatracker.add_error("file.executable", os.path.join(checkdir, y)) + if file_is_ebuild: + pf = y[:-7] + ebuildlist.append(pf) + catdir = xpkg.split("/")[0] + cpv = "%s/%s" % (catdir, pf) + try: + myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars))) + except KeyError: + fuse.set(False, ignore_InvalidState=True) + self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y)) + continue + except IOError: + fuse.set(False, ignore_InvalidState=True) + self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y)) + continue + if not portage.eapi_is_supported(myaux["EAPI"]): + fuse.set(False, ignore_InvalidState=True) + self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y)) + continue + pkgs[pf] = Package( + cpv=cpv, metadata=myaux, root_config=self.root_config, + type_name="ebuild") + + if len(pkgs) != len(ebuildlist): + # If we can't access all the metadata then it's totally unsafe to + # commit since there's no way to generate a correct Manifest. + # Do not try to do any more QA checks on this package since missing + # metadata leads to false positives for several checks, and false + # positives confuse users. + self.continue_ = True + can_force.set(False, ignore_InvalidState=True) + self.pkgs = pkgs + # set our updated data + dyn_pkgs = kwargs.get('pkgs') + dyn_pkgs.set(pkgs) + return self.continue_ + + @property + def runInPkgs(self): + '''Package level scans''' + return (True, [self.check_isebuild]) + @property def runInEbuilds(self): '''Ebuild level scans''' diff --git a/pym/repoman/modules/scan/ebuild/isebuild.py b/pym/repoman/modules/scan/ebuild/isebuild.py deleted file mode 100644 index 7277ad0..0000000 --- a/pym/repoman/modules/scan/ebuild/isebuild.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding:utf-8 -*- - -import stat - -from _emerge.Package import Package -from _emerge.RootConfig import RootConfig - -# import our initialized portage instance -from repoman._portage import portage - -from portage import os - -from repoman.qa_data import no_exec, allvars -from repoman.modules.scan.scanbase import ScanBase - - -class IsEbuild(ScanBase): - '''Performs basic tests to confirm it is an ebuild''' - - def __init__(self, **kwargs): - ''' - @param portdb: portdb instance - @param qatracker: QATracker instance - @param repo_settings: repository settings instance - ''' - super(IsEbuild, self).__init__(**kwargs) - self.portdb = kwargs.get('portdb') - self.qatracker = kwargs.get('qatracker') - repo_settings = kwargs.get('repo_settings') - self.root_config = RootConfig(repo_settings.repoman_settings, - repo_settings.trees[repo_settings.root], None) - - def check(self, **kwargs): - '''Test the file for qualifications that is is an ebuild - - @param checkdirlist: list of files in the current package directory - @param checkdir: current package directory path - @param xpkg: current package directory being checked - @param validity_future: Future instance - @returns: dictionary, including {pkgs, can_force} - ''' - checkdirlist = kwargs.get('checkdirlist').get() - checkdir = kwargs.get('checkdir') - xpkg = kwargs.get('xpkg') - fuse = kwargs.get('validity_future') - can_force = kwargs.get('can_force') - self.continue_ = False - ebuildlist = [] - pkgs = {} - for y in checkdirlist: - file_is_ebuild = y.endswith(".ebuild") - file_should_be_non_executable = y in no_exec or file_is_ebuild - - if file_should_be_non_executable: - file_is_executable = stat.S_IMODE( - os.stat(os.path.join(checkdir, y)).st_mode) & 0o111 - - if file_is_executable: - self.qatracker.add_error("file.executable", os.path.join(checkdir, y)) - if file_is_ebuild: - pf = y[:-7] - ebuildlist.append(pf) - catdir = xpkg.split("/")[0] - cpv = "%s/%s" % (catdir, pf) - try: - myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars))) - except KeyError: - fuse.set(False, ignore_InvalidState=True) - self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y)) - continue - except IOError: - fuse.set(False, ignore_InvalidState=True) - self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y)) - continue - if not portage.eapi_is_supported(myaux["EAPI"]): - fuse.set(False, ignore_InvalidState=True) - self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y)) - continue - pkgs[pf] = Package( - cpv=cpv, metadata=myaux, root_config=self.root_config, - type_name="ebuild") - - if len(pkgs) != len(ebuildlist): - # If we can't access all the metadata then it's totally unsafe to - # commit since there's no way to generate a correct Manifest. - # Do not try to do any more QA checks on this package since missing - # metadata leads to false positives for several checks, and false - # positives confuse users. - self.continue_ = True - can_force.set(False, ignore_InvalidState=True) - # set our updated data - dyn_pkgs = kwargs.get('pkgs') - dyn_pkgs.set(pkgs) - return self.continue_ - - @property - def runInPkgs(self): - '''Package level scans''' - return (True, [self.check]) diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py index 1fd5b77..23d666d 100644 --- a/pym/repoman/scanner.py +++ b/pym/repoman/scanner.py @@ -299,6 +299,7 @@ class Scanner(object): self.vcs_settings.status.check(checkdir, checkdir_relative, xpkg) dynamic_data = { + 'changelog_modified': False, 'checkdirlist': ExtendedFuture(checkdirlist), 'checkdir': checkdir, 'xpkg': xpkg, @@ -308,7 +309,6 @@ class Scanner(object): 'repolevel': self.repolevel, 'catdir': catdir, 'pkgdir': pkgdir, - 'pkgs': ExtendedFuture({}), 'validity_future': ExtendedFuture(True), 'y_ebuild': None, # this needs to be reset at the pkg level only, @@ -324,7 +324,7 @@ class Scanner(object): 'validity_future', ] # need to set it up for ==> self.modules or some other ordered list - for mod in [('manifests', 'Manifests'), ('isebuild', 'IsEbuild'), + for mod in [('manifests', 'Manifests'), ('ebuild', 'Ebuild'), ('keywords', 'KeywordChecks'), ('files', 'FileChecks'), ('fetches', 'FetchChecks'), ('pkgmetadata', 'PkgMetadata'), From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 79F2E138206 for ; Fri, 29 Apr 2016 17:25:15 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 6EF8A21C08B; Fri, 29 Apr 2016 17:24:53 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 2FDFE21C08C for ; Fri, 29 Apr 2016 17:24:52 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 81F2D340D89 for ; Fri, 29 Apr 2016 17:24:50 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id CA02F860 for ; Fri, 29 Apr 2016 17:24:45 +0000 (UTC) From: "Brian Dolbec" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" Message-ID: <1461679721.695492024a9ca40fd14148a980a960a8551dab29.dolsen@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/repoman/, pym/repoman/modules/scan/ebuild/ X-VCS-Repository: proj/portage X-VCS-Files: pym/repoman/modules/scan/ebuild/__init__.py pym/repoman/modules/scan/ebuild/ebuild.py pym/repoman/modules/scan/ebuild/isebuild.py pym/repoman/scanner.py X-VCS-Directories: pym/repoman/modules/scan/ebuild/ pym/repoman/ X-VCS-Committer: dolsen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 695492024a9ca40fd14148a980a960a8551dab29 X-VCS-Branch: master Date: Fri, 29 Apr 2016 17:24:45 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: a5a69eda-afba-4b76-8bc2-9b3d52c11401 X-Archives-Hash: e8b0da8dc9f0e91ef5da066ccd96c61a Message-ID: <20160429172445.ki3hk6X6sS_BHilFvmUBs8xYblfi4OU1rNTFzg5EPqU@z> commit: 695492024a9ca40fd14148a980a960a8551dab29 Author: Brian Dolbec gentoo org> AuthorDate: Tue Apr 26 14:08:41 2016 +0000 Commit: Brian Dolbec gentoo org> CommitDate: Tue Apr 26 14:08:41 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=69549202 Repoman: Merge IsEbuild class into ebuild This reduces the need to import the pkgs data, it is now an internal class instance variable. 'pkgs' is still needed, but only to assign it the new pkgs dictionary which the scanner requires for the ebuild loop. pym/repoman/modules/scan/ebuild/__init__.py | 27 ++------ pym/repoman/modules/scan/ebuild/ebuild.py | 84 ++++++++++++++++++++++-- pym/repoman/modules/scan/ebuild/isebuild.py | 99 ----------------------------- pym/repoman/scanner.py | 4 +- 4 files changed, 88 insertions(+), 126 deletions(-) diff --git a/pym/repoman/modules/scan/ebuild/__init__.py b/pym/repoman/modules/scan/ebuild/__init__.py index b243314..8666e78 100644 --- a/pym/repoman/modules/scan/ebuild/__init__.py +++ b/pym/repoman/modules/scan/ebuild/__init__.py @@ -10,25 +10,6 @@ module_spec = { 'name': 'ebuild', 'description': doc, 'provides':{ - 'isebuild-module': { - 'name': "isebuild", - 'sourcefile': "isebuild", - 'class': "IsEbuild", - 'description': doc, - 'functions': ['check'], - 'func_desc': { - }, - 'mod_kwargs': ['portdb', 'qatracker', 'repo_settings' - ], - 'func_kwargs': { - 'can_force': (None, None), - 'checkdir': (None, None), - 'checkdirlist': (None, None), - 'pkgs': ('Future', 'dict'), - 'validity_future': ('Future', True), - 'xpkg': (None, None), - }, - }, 'ebuild-module': { 'name': "ebuild", 'sourcefile': "ebuild", @@ -37,16 +18,20 @@ module_spec = { 'functions': ['check'], 'func_desc': { }, - 'mod_kwargs': ['qatracker', 'repo_settings', 'vcs_settings', 'checks', + 'mod_kwargs': ['qatracker', 'repo_settings', 'vcs_settings', + 'checks', 'portdb' ], 'func_kwargs': { + 'can_force': (None, None), 'catdir': (None, None), 'changed': (None, None), 'changelog_modified': (None, None), + 'checkdir': (None, None), + 'checkdirlist': (None, None), 'ebuild': ('Future', 'UNSET'), 'pkg': ('Future', 'UNSET'), 'pkgdir': (None, None), - 'pkgs': (None, None), + 'pkgs': ('Future', 'dict'), 'repolevel': (None, None), 'validity_future': (None, None), 'xpkg': (None, None), diff --git a/pym/repoman/modules/scan/ebuild/ebuild.py b/pym/repoman/modules/scan/ebuild/ebuild.py index 92b1ea4..c247a7f 100644 --- a/pym/repoman/modules/scan/ebuild/ebuild.py +++ b/pym/repoman/modules/scan/ebuild/ebuild.py @@ -3,8 +3,13 @@ from __future__ import print_function, unicode_literals import re +import stat + +from _emerge.Package import Package +from _emerge.RootConfig import RootConfig from repoman.modules.scan.scanbase import ScanBase +from repoman.qa_data import no_exec, allvars # import our initialized portage instance from repoman._portage import portage from portage import os @@ -19,16 +24,19 @@ class Ebuild(ScanBase): '''Class init @param qatracker: QATracker instance + @param portdb: portdb instance @param repo_settings: repository settings instance @param vcs_settings: VCSSettings instance - @param changed: changes dictionary @param checks: checks dictionary ''' super(Ebuild, self).__init__(**kwargs) self.qatracker = kwargs.get('qatracker') + self.portdb = kwargs.get('portdb') self.repo_settings = kwargs.get('repo_settings') self.vcs_settings = kwargs.get('vcs_settings') self.checks = kwargs.get('checks') + self.root_config = RootConfig(self.repo_settings.repoman_settings, + self.repo_settings.trees[self.repo_settings.root], None) self.changed = None self.xpkg = None self.y_ebuild = None @@ -37,6 +45,7 @@ class Ebuild(ScanBase): self.eapi = None self.inherited = None self.keywords = None + self.pkgs = {} def _set_paths(self, **kwargs): repolevel = kwargs.get('repolevel') @@ -93,11 +102,9 @@ class Ebuild(ScanBase): def set_pkg_data(self, **kwargs): '''Sets some classwide data needed for some of the checks - @param pkgs: the dynamic list of ebuilds @returns: dictionary ''' - pkgs = kwargs.get('pkgs').get() - self.pkg = pkgs[self.y_ebuild] + self.pkg = self.pkgs[self.y_ebuild] self.metadata = self.pkg._metadata self.eapi = self.metadata["EAPI"] self.inherited = self.pkg.inherited @@ -148,6 +155,75 @@ class Ebuild(ScanBase): dyn_pkg.set(self.pkg) return False + def check_isebuild(self, **kwargs): + '''Test the file for qualifications that is is an ebuild + + @param checkdirlist: list of files in the current package directory + @param checkdir: current package directory path + @param xpkg: current package directory being checked + @param validity_future: Future instance + @returns: dictionary, including {pkgs, can_force} + ''' + checkdirlist = kwargs.get('checkdirlist').get() + checkdir = kwargs.get('checkdir') + xpkg = kwargs.get('xpkg') + fuse = kwargs.get('validity_future') + can_force = kwargs.get('can_force') + self.continue_ = False + ebuildlist = [] + pkgs = {} + for y in checkdirlist: + file_is_ebuild = y.endswith(".ebuild") + file_should_be_non_executable = y in no_exec or file_is_ebuild + + if file_should_be_non_executable: + file_is_executable = stat.S_IMODE( + os.stat(os.path.join(checkdir, y)).st_mode) & 0o111 + + if file_is_executable: + self.qatracker.add_error("file.executable", os.path.join(checkdir, y)) + if file_is_ebuild: + pf = y[:-7] + ebuildlist.append(pf) + catdir = xpkg.split("/")[0] + cpv = "%s/%s" % (catdir, pf) + try: + myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars))) + except KeyError: + fuse.set(False, ignore_InvalidState=True) + self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y)) + continue + except IOError: + fuse.set(False, ignore_InvalidState=True) + self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y)) + continue + if not portage.eapi_is_supported(myaux["EAPI"]): + fuse.set(False, ignore_InvalidState=True) + self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y)) + continue + pkgs[pf] = Package( + cpv=cpv, metadata=myaux, root_config=self.root_config, + type_name="ebuild") + + if len(pkgs) != len(ebuildlist): + # If we can't access all the metadata then it's totally unsafe to + # commit since there's no way to generate a correct Manifest. + # Do not try to do any more QA checks on this package since missing + # metadata leads to false positives for several checks, and false + # positives confuse users. + self.continue_ = True + can_force.set(False, ignore_InvalidState=True) + self.pkgs = pkgs + # set our updated data + dyn_pkgs = kwargs.get('pkgs') + dyn_pkgs.set(pkgs) + return self.continue_ + + @property + def runInPkgs(self): + '''Package level scans''' + return (True, [self.check_isebuild]) + @property def runInEbuilds(self): '''Ebuild level scans''' diff --git a/pym/repoman/modules/scan/ebuild/isebuild.py b/pym/repoman/modules/scan/ebuild/isebuild.py deleted file mode 100644 index 7277ad0..0000000 --- a/pym/repoman/modules/scan/ebuild/isebuild.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding:utf-8 -*- - -import stat - -from _emerge.Package import Package -from _emerge.RootConfig import RootConfig - -# import our initialized portage instance -from repoman._portage import portage - -from portage import os - -from repoman.qa_data import no_exec, allvars -from repoman.modules.scan.scanbase import ScanBase - - -class IsEbuild(ScanBase): - '''Performs basic tests to confirm it is an ebuild''' - - def __init__(self, **kwargs): - ''' - @param portdb: portdb instance - @param qatracker: QATracker instance - @param repo_settings: repository settings instance - ''' - super(IsEbuild, self).__init__(**kwargs) - self.portdb = kwargs.get('portdb') - self.qatracker = kwargs.get('qatracker') - repo_settings = kwargs.get('repo_settings') - self.root_config = RootConfig(repo_settings.repoman_settings, - repo_settings.trees[repo_settings.root], None) - - def check(self, **kwargs): - '''Test the file for qualifications that is is an ebuild - - @param checkdirlist: list of files in the current package directory - @param checkdir: current package directory path - @param xpkg: current package directory being checked - @param validity_future: Future instance - @returns: dictionary, including {pkgs, can_force} - ''' - checkdirlist = kwargs.get('checkdirlist').get() - checkdir = kwargs.get('checkdir') - xpkg = kwargs.get('xpkg') - fuse = kwargs.get('validity_future') - can_force = kwargs.get('can_force') - self.continue_ = False - ebuildlist = [] - pkgs = {} - for y in checkdirlist: - file_is_ebuild = y.endswith(".ebuild") - file_should_be_non_executable = y in no_exec or file_is_ebuild - - if file_should_be_non_executable: - file_is_executable = stat.S_IMODE( - os.stat(os.path.join(checkdir, y)).st_mode) & 0o111 - - if file_is_executable: - self.qatracker.add_error("file.executable", os.path.join(checkdir, y)) - if file_is_ebuild: - pf = y[:-7] - ebuildlist.append(pf) - catdir = xpkg.split("/")[0] - cpv = "%s/%s" % (catdir, pf) - try: - myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars))) - except KeyError: - fuse.set(False, ignore_InvalidState=True) - self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y)) - continue - except IOError: - fuse.set(False, ignore_InvalidState=True) - self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y)) - continue - if not portage.eapi_is_supported(myaux["EAPI"]): - fuse.set(False, ignore_InvalidState=True) - self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y)) - continue - pkgs[pf] = Package( - cpv=cpv, metadata=myaux, root_config=self.root_config, - type_name="ebuild") - - if len(pkgs) != len(ebuildlist): - # If we can't access all the metadata then it's totally unsafe to - # commit since there's no way to generate a correct Manifest. - # Do not try to do any more QA checks on this package since missing - # metadata leads to false positives for several checks, and false - # positives confuse users. - self.continue_ = True - can_force.set(False, ignore_InvalidState=True) - # set our updated data - dyn_pkgs = kwargs.get('pkgs') - dyn_pkgs.set(pkgs) - return self.continue_ - - @property - def runInPkgs(self): - '''Package level scans''' - return (True, [self.check]) diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py index 1fd5b77..23d666d 100644 --- a/pym/repoman/scanner.py +++ b/pym/repoman/scanner.py @@ -299,6 +299,7 @@ class Scanner(object): self.vcs_settings.status.check(checkdir, checkdir_relative, xpkg) dynamic_data = { + 'changelog_modified': False, 'checkdirlist': ExtendedFuture(checkdirlist), 'checkdir': checkdir, 'xpkg': xpkg, @@ -308,7 +309,6 @@ class Scanner(object): 'repolevel': self.repolevel, 'catdir': catdir, 'pkgdir': pkgdir, - 'pkgs': ExtendedFuture({}), 'validity_future': ExtendedFuture(True), 'y_ebuild': None, # this needs to be reset at the pkg level only, @@ -324,7 +324,7 @@ class Scanner(object): 'validity_future', ] # need to set it up for ==> self.modules or some other ordered list - for mod in [('manifests', 'Manifests'), ('isebuild', 'IsEbuild'), + for mod in [('manifests', 'Manifests'), ('ebuild', 'Ebuild'), ('keywords', 'KeywordChecks'), ('files', 'FileChecks'), ('fetches', 'FetchChecks'), ('pkgmetadata', 'PkgMetadata'),