1 |
commit: adbae329b25f1c026b2a0f74e7c84809b14f7361 |
2 |
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Jan 3 10:35:49 2016 +0000 |
4 |
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
5 |
CommitDate: Wed Jan 27 22:44:21 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=adbae329 |
7 |
|
8 |
repoman: Migrate code from _scan_ebuilds to a new EbuildMetadata class and check |
9 |
|
10 |
pym/repoman/modules/scan/metadata/__init__.py | 11 +++++- |
11 |
.../modules/scan/metadata/ebuild_metadata.py | 39 ++++++++++++++++++++++ |
12 |
pym/repoman/scanner.py | 27 +-------------- |
13 |
3 files changed, 50 insertions(+), 27 deletions(-) |
14 |
|
15 |
diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py |
16 |
index ae9b18b..bacedf5 100644 |
17 |
--- a/pym/repoman/modules/scan/metadata/__init__.py |
18 |
+++ b/pym/repoman/modules/scan/metadata/__init__.py |
19 |
@@ -10,7 +10,7 @@ module_spec = { |
20 |
'name': 'metadata', |
21 |
'description': doc, |
22 |
'provides':{ |
23 |
- 'metadata-module': { |
24 |
+ 'pkg-metadata': { |
25 |
'name': "pkgmetadata", |
26 |
'sourcefile': "pkgmetadata", |
27 |
'class': "PkgMetadata", |
28 |
@@ -19,6 +19,15 @@ module_spec = { |
29 |
'func_desc': { |
30 |
}, |
31 |
}, |
32 |
+ 'ebuild-metadata': { |
33 |
+ 'name': "ebuild_metadata", |
34 |
+ 'sourcefile': "ebuild_metadata", |
35 |
+ 'class': "EbuildMetadata", |
36 |
+ 'description': doc, |
37 |
+ 'functions': ['check'], |
38 |
+ 'func_desc': { |
39 |
+ }, |
40 |
+ }, |
41 |
} |
42 |
} |
43 |
|
44 |
|
45 |
diff --git a/pym/repoman/modules/scan/metadata/ebuild_metadata.py b/pym/repoman/modules/scan/metadata/ebuild_metadata.py |
46 |
new file mode 100644 |
47 |
index 0000000..143a40e |
48 |
--- /dev/null |
49 |
+++ b/pym/repoman/modules/scan/metadata/ebuild_metadata.py |
50 |
@@ -0,0 +1,39 @@ |
51 |
+# -*- coding:utf-8 -*- |
52 |
+ |
53 |
+'''Ebuild Metadata Checks''' |
54 |
+ |
55 |
+import re |
56 |
+import sys |
57 |
+ |
58 |
+if sys.hexversion >= 0x3000000: |
59 |
+ basestring = str |
60 |
+ |
61 |
+NON_ASCII_RE = re.compile(r'[^\x00-\x7f]') |
62 |
+ |
63 |
+ |
64 |
+class EbuildMetadata(object): |
65 |
+ |
66 |
+ def __init__(self, **kwargs): |
67 |
+ self.qatracker = kwargs.get('qatracker') |
68 |
+ |
69 |
+ def check(self, **kwargs): |
70 |
+ ebuild = kwargs.get('ebuild') |
71 |
+ for k, v in ebuild.metadata.items(): |
72 |
+ if not isinstance(v, basestring): |
73 |
+ continue |
74 |
+ m = NON_ASCII_RE.search(v) |
75 |
+ if m is not None: |
76 |
+ self.qatracker.add_error( |
77 |
+ "variable.invalidchar", |
78 |
+ "%s: %s variable contains non-ASCII " |
79 |
+ "character at position %s" % |
80 |
+ (ebuild.relative_path, k, m.start() + 1)) |
81 |
+ return {'continue': False} |
82 |
+ |
83 |
+ @property |
84 |
+ def runInPkgs(self): |
85 |
+ return (False, []) |
86 |
+ |
87 |
+ @property |
88 |
+ def runInEbuilds(self): |
89 |
+ return (True, [self.check]) |
90 |
|
91 |
diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py |
92 |
index 8873ef4..abff1af 100644 |
93 |
--- a/pym/repoman/scanner.py |
94 |
+++ b/pym/repoman/scanner.py |
95 |
@@ -5,8 +5,6 @@ from __future__ import print_function, unicode_literals |
96 |
import copy |
97 |
import io |
98 |
import logging |
99 |
-import re |
100 |
-import sys |
101 |
from itertools import chain |
102 |
from pprint import pformat |
103 |
|
104 |
@@ -47,18 +45,10 @@ MODULE_CONTROLLER = Modules(path=MODULES_PATH, namepath="repoman.modules.scan") |
105 |
MODULE_NAMES = MODULE_CONTROLLER.module_names[:] |
106 |
|
107 |
|
108 |
- |
109 |
-if sys.hexversion >= 0x3000000: |
110 |
- basestring = str |
111 |
- |
112 |
-NON_ASCII_RE = re.compile(r'[^\x00-\x7f]') |
113 |
- |
114 |
- |
115 |
def sort_key(item): |
116 |
return item[2].sub_path |
117 |
|
118 |
|
119 |
- |
120 |
class Scanner(object): |
121 |
'''Primary scan class. Operates all the small Q/A tests and checks''' |
122 |
|
123 |
@@ -314,7 +304,7 @@ class Scanner(object): |
124 |
# initialize per ebuild plugin checks here |
125 |
# need to set it up for ==> self.modules_list or some other ordered list |
126 |
for mod in [('ebuild', 'Ebuild'), ('live', 'LiveEclassChecks'), |
127 |
- ('eapi', 'EAPIChecks')]: |
128 |
+ ('eapi', 'EAPIChecks'), ('ebuild_metadata', 'EbuildMetadata')]: |
129 |
if mod[0]: |
130 |
mod_class = MODULE_CONTROLLER.get_class(mod[0]) |
131 |
logging.debug("Initializing class name: %s", mod_class.__name__) |
132 |
@@ -341,21 +331,6 @@ class Scanner(object): |
133 |
if y_ebuild_continue: |
134 |
continue |
135 |
|
136 |
- |
137 |
- for k, v in dynamic_data['ebuild'].metadata.items(): |
138 |
- if not isinstance(v, basestring): |
139 |
- continue |
140 |
- m = NON_ASCII_RE.search(v) |
141 |
- if m is not None: |
142 |
- self.qatracker.add_error( |
143 |
- "variable.invalidchar", |
144 |
- "%s: %s variable contains non-ASCII " |
145 |
- "character at position %s" % |
146 |
- (dynamic_data['ebuild'].relative_path, k, m.start() + 1)) |
147 |
- |
148 |
- if not dynamic_data['src_uri_error']: |
149 |
- self.thirdparty.check(dynamic_data['ebuild'].metadata, dynamic_data['ebuild'].relative_path) |
150 |
- |
151 |
if dynamic_data['ebuild'].metadata.get("PROVIDE"): |
152 |
self.qatracker.add_error("virtual.oldstyle", dynamic_data['ebuild'].relative_path) |