lib/oe/patch.py: Fix patch resolver logic
PATCH 1/1 lib/oe/patch.py: Fix patch resolver logic
Currently, if PATCHRESOLVE is user and and PatchTree() is being used, you can get backtraces if patch applcication fails. This is because even in the failure case, self._current is incremented, meaning second time around, there are array range issues.
This patch changes the code so _current is only incremented upon successful patch application, thereby resolving this failure.
[YOCTO #2043 partially]
---
meta/lib/oe/patch.py +7 -4
@@ -134,20 +134,23 @@ class PatchTree(PatchSet): bb.note("patches is %s" % self.patches) if all: for i in self.patches: + bb.note("applying patch %s" % i) + self._applypatch(i, force) + if self._current is not None: self._current = self._current + 1 else: self._current = 0 - bb.note("applying patch %s" % i) - self._applypatch(i, force) else: + bb.note("applying patch %s" % self.patches[self._current or 0]) + ret = self._applypatch(self.patches[self._current or 0], force) + if self._current is not None: self._current = self._current + 1 else: self._current = 0 - bb.note("applying patch %s" % self.patches[self._current]) - return self._applypatch(self.patches[self._current], force) + return ret def Pop(self, force = None, all = None): if all:
Quoted 11 lines · Richard Purdie
Currently, if PATCHRESOLVE is user and and
PatchTree()is being used, you can get backtraces if patch applcication fails. This is because even in the failure case, self._current is incremented, meaning second time around, there are array range issues.This patch changes the code so
_currentis only incremented upon successful patch application, thereby resolving this failure.[YOCTO #2043 partially]
Signed-off-by Richard Purdie <[email protected]>
This patch is wrong, it breaks with multiple patch application. I've posted an updated patch.
Cheers,
Richard