Skip to content

Commit

Permalink
fix handling of failed and skipped items
Browse files Browse the repository at this point in the history
  • Loading branch information
trehn committed Jan 5, 2015
1 parent be78f64 commit f08c9cc
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
6 changes: 6 additions & 0 deletions src/bundlewrap/itemqueue.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ def item_skipped(self, item):
if skipped_item.ITEM_TYPE_NAME == 'dummy':
continue
yield skipped_item
else:
self.items_with_deps = remove_dep_from_items(
self.items_with_deps,
item.id,
)
self._split()

def pop(self, interactive=False):
skipped_items = []
Expand Down
8 changes: 6 additions & 2 deletions src/bundlewrap/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,13 +143,17 @@ def apply_items(node, workers=1, interactive=False, profiling=False):
status_code = msg['return_value']

if status_code == Item.STATUS_FAILED:
item_queue.item_failed(item)
for skipped_item in item_queue.item_failed(item):
handle_apply_result(node, skipped_item, Item.STATUS_SKIPPED, interactive)
yield(skipped_item.id, Item.STATUS_SKIPPED, timedelta(0))
elif status_code in (Item.STATUS_FIXED, Item.STATUS_ACTION_SUCCEEDED):
item_queue.item_fixed(item)
elif status_code == Item.STATUS_OK:
item_queue.item_ok(item)
elif status_code == Item.STATUS_SKIPPED:
item_queue.item_skipped(item)
for skipped_item in item_queue.item_skipped(item):
handle_apply_result(node, skipped_item, Item.STATUS_SKIPPED, interactive)
yield(skipped_item.id, Item.STATUS_SKIPPED, timedelta(0))
else:
raise AssertionError(_(
"unknown item status return for {item}: {status}".format(
Expand Down
16 changes: 16 additions & 0 deletions tests/unit/itemqueue_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,22 @@ def test_item_skipped(self):
with self.assertRaises(IndexError):
iq.pop()

def test_item_skipped_no_cascade(self):
item1 = get_mock_item("type1", "name1", [], [])
item1.cascade_skip = False
item2 = get_mock_item("type1", "name2", [], ["type1:name1"])
iq = itemqueue.ItemQueue([item1, item2])
popped_item, skipped_items = iq.pop()
self.assertEqual(popped_item, item1)
self.assertEqual(skipped_items, [])
self.assertEqual(
list(iq.item_skipped(popped_item)),
[],
)
popped_item, skipped_items = iq.pop()
self.assertEqual(popped_item, item2)
self.assertEqual(skipped_items, [])


class ItemQueuePopTest(TestCase):
"""
Expand Down

0 comments on commit f08c9cc

Please sign in to comment.