summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2012-01-19 13:59:15 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-01-19 14:34:34 +0000
commit11e5d7bc814a265d338dbb06d82e7533c2187be2 (patch)
tree5bafb67bdcad14bb22bd30f0784cc34d8a93778b
parentadb3ed29db5973d6b43a0217c4d8052d2ff722f8 (diff)
downloadpoky-11e5d7bc814a265d338dbb06d82e7533c2187be2.tar.gz
classes/patch: avoid backtrace when patch does not apply
We don't need to see a Python stack backtrace when a patch does not apply, just the error output from patch, so trap these kinds of errors and ensure that we display the message and fail the task and nothing else. Fixes [YOCTO #1143] (From OE-Core rev: ce6c80a1e68c2af0b4b5fa27582ad9c9f119e5c1) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/patch.bbclass5
-rw-r--r--meta/lib/oe/patch.py10
2 files changed, 9 insertions, 6 deletions
diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass
index 471c32bce2..1ea4bc5e02 100644
--- a/meta/classes/patch.bbclass
+++ b/meta/classes/patch.bbclass
@@ -155,7 +155,10 @@ python patch_do_patch() {
155 patchset.Import({"file":local, "strippath": parm['striplevel']}, True) 155 patchset.Import({"file":local, "strippath": parm['striplevel']}, True)
156 except Exception as exc: 156 except Exception as exc:
157 bb.fatal(str(exc)) 157 bb.fatal(str(exc))
158 resolver.Resolve() 158 try:
159 resolver.Resolve()
160 except bb.BBHandledException as e:
161 bb.fatal(str(e))
159} 162}
160patch_do_patch[vardepsexclude] = "PATCHRESOLVE" 163patch_do_patch[vardepsexclude] = "PATCHRESOLVE"
161 164
diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py
index f4ccb3e183..6f7f90095c 100644
--- a/meta/lib/oe/patch.py
+++ b/meta/lib/oe/patch.py
@@ -2,14 +2,14 @@ import oe.path
2import os 2import os
3import bb.utils, bb.msg, bb.data, bb.fetch2 3import bb.utils, bb.msg, bb.data, bb.fetch2
4 4
5class NotFoundError(Exception): 5class NotFoundError(bb.BBHandledException):
6 def __init__(self, path): 6 def __init__(self, path):
7 self.path = path 7 self.path = path
8 8
9 def __str__(self): 9 def __str__(self):
10 return "Error: %s not found." % self.path 10 return "Error: %s not found." % self.path
11 11
12class CmdError(Exception): 12class CmdError(bb.BBHandledException):
13 def __init__(self, exitstatus, output): 13 def __init__(self, exitstatus, output):
14 self.status = exitstatus 14 self.status = exitstatus
15 self.output = output 15 self.output = output
@@ -207,7 +207,7 @@ class QuiltTree(PatchSet):
207 # read series -> self.patches 207 # read series -> self.patches
208 seriespath = os.path.join(self.dir, 'patches', 'series') 208 seriespath = os.path.join(self.dir, 'patches', 'series')
209 if not os.path.exists(self.dir): 209 if not os.path.exists(self.dir):
210 raise Exception("Error: %s does not exist." % self.dir) 210 raise NotFoundError(self.dir)
211 if os.path.exists(seriespath): 211 if os.path.exists(seriespath):
212 series = file(seriespath, 'r') 212 series = file(seriespath, 'r')
213 for line in series.readlines(): 213 for line in series.readlines():
@@ -228,7 +228,7 @@ class QuiltTree(PatchSet):
228 if sys.exc_value.output.strip() == "No patches applied": 228 if sys.exc_value.output.strip() == "No patches applied":
229 return 229 return
230 else: 230 else:
231 raise sys.exc_value 231 raise
232 output = [val for val in output.split('\n') if not val.startswith('#')] 232 output = [val for val in output.split('\n') if not val.startswith('#')]
233 for patch in self.patches: 233 for patch in self.patches:
234 if os.path.basename(patch["quiltfile"]) == output[-1]: 234 if os.path.basename(patch["quiltfile"]) == output[-1]:
@@ -336,7 +336,7 @@ class NOOPResolver(Resolver):
336 except Exception: 336 except Exception:
337 import sys 337 import sys
338 os.chdir(olddir) 338 os.chdir(olddir)
339 raise sys.exc_value 339 raise
340 340
341# Patch resolver which relies on the user doing all the work involved in the 341# Patch resolver which relies on the user doing all the work involved in the
342# resolution, with the exception of refreshing the remote copy of the patch 342# resolution, with the exception of refreshing the remote copy of the patch