AU: fix delta generation when running out of scratch.

When running out of scratch, deltas were incorrectly generated. The
issue is that cuts used to be processed in arbitrary order, so
sometimes a cut would be processed (thus having temp blocks
allocated), and later another cut would be impossible to process, and
then the node in question would be converted to a REPLACE
operation. That's fine, but we weren't deleting the graph nodes that
moved data aside. Thus, we would generate a delta w/ extra ops that
were moving data around(!!).

This change causes us to prcocess all cuts for a node together, so
they all succeed or fail.

BUG=8063
TEST=unittests, generated/applied delta locally

Review URL: http://codereview.chromium.org/3997007

Change-Id: I5a9a1b962659bdeec7fb60baced02d5dcb9c2496
3 files changed
tree: 9b6dc3ee0336d5fee89679c8ccb79a285ed037c5
  1. certs/
  2. .gitignore
  3. action.h
  4. action_mock.h
  5. action_pipe.h
  6. action_pipe_unittest.cc
  7. action_processor.cc
  8. action_processor.h
  9. action_processor_mock.h
  10. action_processor_unittest.cc
  11. action_unittest.cc
  12. buffered_file_writer.cc
  13. buffered_file_writer.h
  14. buffered_file_writer_unittest.cc
  15. bzip.cc
  16. bzip.h
  17. bzip_extent_writer.cc
  18. bzip_extent_writer.h
  19. bzip_extent_writer_unittest.cc
  20. cycle_breaker.cc
  21. cycle_breaker.h
  22. cycle_breaker_unittest.cc
  23. dbus_constants.h
  24. dbus_interface.h
  25. dbus_service.cc
  26. dbus_service.h
  27. decompressing_file_writer.cc
  28. decompressing_file_writer.h
  29. decompressing_file_writer_unittest.cc
  30. delta_diff_generator.cc
  31. delta_diff_generator.h
  32. delta_diff_generator_unittest.cc
  33. delta_performer.cc
  34. delta_performer.h
  35. delta_performer_unittest.cc
  36. download_action.cc
  37. download_action.h
  38. download_action_unittest.cc
  39. extent_mapper.cc
  40. extent_mapper.h
  41. extent_mapper_unittest.cc
  42. extent_ranges.cc
  43. extent_ranges.h
  44. extent_ranges_unittest.cc
  45. extent_writer.cc
  46. extent_writer.h
  47. extent_writer_unittest.cc
  48. file_writer.cc
  49. file_writer.h
  50. file_writer_mock.h
  51. file_writer_unittest.cc
  52. filesystem_copier_action.cc
  53. filesystem_copier_action.h
  54. filesystem_copier_action_unittest.cc
  55. filesystem_iterator.cc
  56. filesystem_iterator.h
  57. filesystem_iterator_unittest.cc
  58. flimflam_proxy.cc
  59. flimflam_proxy.h
  60. flimflam_proxy_unittest.cc
  61. gen_coverage_html.sh
  62. generate_delta_main.cc
  63. graph_types.h
  64. graph_utils.cc
  65. graph_utils.h
  66. graph_utils_unittest.cc
  67. gzip.cc
  68. gzip.h
  69. http_fetcher.h
  70. http_fetcher_unittest.cc
  71. inherit-review-settings-ok
  72. install_plan.h
  73. integration_unittest.cc
  74. libcurl_http_fetcher.cc
  75. libcurl_http_fetcher.h
  76. LICENSE
  77. local_coverage_rate.sh
  78. main.cc
  79. marshal.list
  80. mock_dbus_interface.h
  81. mock_file_writer.h
  82. mock_http_fetcher.cc
  83. mock_http_fetcher.h
  84. multi_http_fetcher.h
  85. omaha_hash_calculator.cc
  86. omaha_hash_calculator.h
  87. omaha_hash_calculator_unittest.cc
  88. omaha_request_action.cc
  89. omaha_request_action.h
  90. omaha_request_action_unittest.cc
  91. omaha_request_params.cc
  92. omaha_request_params.h
  93. omaha_request_params_unittest.cc
  94. omaha_response_handler_action.cc
  95. omaha_response_handler_action.h
  96. omaha_response_handler_action_unittest.cc
  97. org.chromium.UpdateEngine.service
  98. payload_signer.cc
  99. payload_signer.h
  100. payload_signer_unittest.cc
  101. postinstall_runner_action.cc
  102. postinstall_runner_action.h
  103. postinstall_runner_action_unittest.cc
  104. prefs.cc
  105. prefs.h
  106. prefs_interface.h
  107. prefs_mock.h
  108. prefs_unittest.cc
  109. SConstruct
  110. set_bootable_flag_action.cc
  111. set_bootable_flag_action.h
  112. set_bootable_flag_action_unittest.cc
  113. setup_dev_packages
  114. simple_key_value_store.cc
  115. simple_key_value_store.h
  116. simple_key_value_store_unittest.cc
  117. split_file_writer.cc
  118. split_file_writer.h
  119. split_file_writer_unittest.cc
  120. subprocess.cc
  121. subprocess.h
  122. subprocess_unittest.cc
  123. tarjan.cc
  124. tarjan.h
  125. tarjan_unittest.cc
  126. terminator.cc
  127. terminator.h
  128. test_http_server.cc
  129. test_http_server.py
  130. test_utils.cc
  131. test_utils.h
  132. testrunner.cc
  133. topological_sort.cc
  134. topological_sort.h
  135. topological_sort_unittest.cc
  136. unittest_key.pem
  137. update_attempter.cc
  138. update_attempter.h
  139. update_attempter_mock.h
  140. update_attempter_unittest.cc
  141. update_check_scheduler.cc
  142. update_check_scheduler.h
  143. update_check_scheduler_unittest.cc
  144. update_engine.xml
  145. update_engine_client.cc
  146. update_metadata.proto
  147. UpdateEngine.conf
  148. utils.cc
  149. utils.h
  150. utils_unittest.cc
  151. WATCHLISTS
  152. zip_unittest.cc