Skip to contentSkip to conversation

lib/oe/patch.py: Fix patch resolver logic

PATCH In review Richard Purdie 1 participant 2 messages Mar 1, 2012 – Mar 2, 2012

lore
Share & tools
lore
#0 lore raw

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
index 6f7f900..065a8f7 100644
@@ -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:
#1 lore raw
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 _current is only incremented upon successful patch application, thereby resolving this failure.

[YOCTO #2043 partially]

This patch is wrong, it breaks with multiple patch application. I've posted an updated patch.

Cheers,

Richard