diff options
| -rw-r--r-- | bitbake/lib/bb/parse/parse_py/BBHandler.py | 4 | ||||
| -rw-r--r-- | bitbake/lib/bb/parse/parse_py/ConfHandler.py | 9 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/parse.py | 23 |
3 files changed, 32 insertions, 4 deletions
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index ee9bd760ce..68415735fd 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py | |||
| @@ -178,10 +178,10 @@ def feeder(lineno, s, fn, root, statements, eof=False): | |||
| 178 | 178 | ||
| 179 | if s and s[0] == '#': | 179 | if s and s[0] == '#': |
| 180 | if len(__residue__) != 0 and __residue__[0][0] != "#": | 180 | if len(__residue__) != 0 and __residue__[0][0] != "#": |
| 181 | bb.fatal("There is a comment on line %s of file %s (%s) which is in the middle of a multiline expression.\nBitbake used to ignore these but no longer does so, please fix your metadata as errors are likely as a result of this change." % (lineno, fn, s)) | 181 | bb.fatal("There is a comment on line %s of file %s:\n'''\n%s\n'''\nwhich is in the middle of a multiline expression. This syntax is invalid, please correct it." % (lineno, fn, s)) |
| 182 | 182 | ||
| 183 | if len(__residue__) != 0 and __residue__[0][0] == "#" and (not s or s[0] != "#"): | 183 | if len(__residue__) != 0 and __residue__[0][0] == "#" and (not s or s[0] != "#"): |
| 184 | bb.fatal("There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed." % (lineno, fn, s)) | 184 | bb.fatal("There is a confusing multiline partially commented expression on line %s of file %s:\n%s\nPlease clarify whether this is all a comment or should be parsed." % (lineno - len(__residue__), fn, "\n".join(__residue__))) |
| 185 | 185 | ||
| 186 | if s and s[-1] == '\\': | 186 | if s and s[-1] == '\\': |
| 187 | __residue__.append(s[:-1]) | 187 | __residue__.append(s[:-1]) |
diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/bitbake/lib/bb/parse/parse_py/ConfHandler.py index 810b6011cf..451e68dd66 100644 --- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py +++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py | |||
| @@ -125,16 +125,21 @@ def handle(fn, data, include): | |||
| 125 | s = f.readline() | 125 | s = f.readline() |
| 126 | if not s: | 126 | if not s: |
| 127 | break | 127 | break |
| 128 | origlineno = lineno | ||
| 129 | origline = s | ||
| 128 | w = s.strip() | 130 | w = s.strip() |
| 129 | # skip empty lines | 131 | # skip empty lines |
| 130 | if not w: | 132 | if not w: |
| 131 | continue | 133 | continue |
| 132 | s = s.rstrip() | 134 | s = s.rstrip() |
| 133 | while s[-1] == '\\': | 135 | while s[-1] == '\\': |
| 134 | s2 = f.readline().rstrip() | 136 | line = f.readline() |
| 137 | origline += line | ||
| 138 | s2 = line.rstrip() | ||
| 135 | lineno = lineno + 1 | 139 | lineno = lineno + 1 |
| 136 | if (not s2 or s2 and s2[0] != "#") and s[0] == "#" : | 140 | if (not s2 or s2 and s2[0] != "#") and s[0] == "#" : |
| 137 | bb.fatal("There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed." % (lineno, fn, s)) | 141 | bb.fatal("There is a confusing multiline, partially commented expression starting on line %s of file %s:\n%s\nPlease clarify whether this is all a comment or should be parsed." % (origlineno, fn, origline)) |
| 142 | |||
| 138 | s = s[:-1] + s2 | 143 | s = s[:-1] + s2 |
| 139 | # skip comments | 144 | # skip comments |
| 140 | if s[0] == '#': | 145 | if s[0] == '#': |
diff --git a/bitbake/lib/bb/tests/parse.py b/bitbake/lib/bb/tests/parse.py index 2898f9bb14..1a3b74934d 100644 --- a/bitbake/lib/bb/tests/parse.py +++ b/bitbake/lib/bb/tests/parse.py | |||
| @@ -194,3 +194,26 @@ deltask ${EMPTYVAR} | |||
| 194 | self.assertTrue('addtask ignored: " do_patch"' in stdout) | 194 | self.assertTrue('addtask ignored: " do_patch"' in stdout) |
| 195 | #self.assertTrue('dependent task do_foo for do_patch does not exist' in stdout) | 195 | #self.assertTrue('dependent task do_foo for do_patch does not exist' in stdout) |
| 196 | 196 | ||
| 197 | broken_multiline_comment = """ | ||
| 198 | # First line of comment \\ | ||
| 199 | # Second line of comment \\ | ||
| 200 | |||
| 201 | """ | ||
| 202 | def test_parse_broken_multiline_comment(self): | ||
| 203 | f = self.parsehelper(self.broken_multiline_comment) | ||
| 204 | with self.assertRaises(bb.BBHandledException): | ||
| 205 | d = bb.parse.handle(f.name, self.d)[''] | ||
| 206 | |||
| 207 | |||
| 208 | comment_in_var = """ | ||
| 209 | VAR = " \\ | ||
| 210 | SOMEVAL \\ | ||
| 211 | # some comment \\ | ||
| 212 | SOMEOTHERVAL \\ | ||
| 213 | " | ||
| 214 | """ | ||
| 215 | def test_parse_comment_in_var(self): | ||
| 216 | f = self.parsehelper(self.comment_in_var) | ||
| 217 | with self.assertRaises(bb.BBHandledException): | ||
| 218 | d = bb.parse.handle(f.name, self.d)[''] | ||
| 219 | |||
