update_engine: Add new operation codes for a to b operations

Add SOURCE_COPY and SOURCE_BSDIFF operations to protobuf. These
operations are for delta minor version 2 and their input is the source
partition instead of the target partition.

BUG=chromium:459363
TEST=`FEATURES=test emerge-link update_engine`

Change-Id: I2c5c83ab5063ff6ce7fc2ec8acfe809d9526b6da
Reviewed-on: https://chromium-review.googlesource.com/250951
Reviewed-by: Alex Deymo <deymo@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Allie Wood <alliewood@chromium.org>
Tested-by: Allie Wood <alliewood@chromium.org>
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index f11b694..0855232 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -75,7 +75,9 @@
   "REPLACE",
   "REPLACE_BZ",
   "MOVE",
-  "BSDIFF"
+  "BSDIFF",
+  "SOURCE_COPY",
+  "SOURCE_BSDIFF"
 };
 
 }  // namespace
diff --git a/payload_generator/graph_utils.cc b/payload_generator/graph_utils.cc
index dd0c873..2d8c051 100644
--- a/payload_generator/graph_utils.cc
+++ b/payload_generator/graph_utils.cc
@@ -152,6 +152,12 @@
       case DeltaArchiveManifest_InstallOperation_Type_REPLACE_BZ:
         type_str = "REPLACE_BZ";
         break;
+      case DeltaArchiveManifest_InstallOperation_Type_SOURCE_COPY:
+        type_str = "SOURCE_COPY";
+        break;
+      case DeltaArchiveManifest_InstallOperation_Type_SOURCE_BSDIFF:
+        type_str = "SOURCE_BSDIFF";
+        break;
     }
     LOG(INFO) << i
               << (graph[i].valid ? "" : "-INV")
diff --git a/update_metadata.proto b/update_metadata.proto
index 1a8fd4b..923ea26 100644
--- a/update_metadata.proto
+++ b/update_metadata.proto
@@ -117,6 +117,9 @@
       REPLACE_BZ = 1;  // Replace destination extents w/ attached bzipped data
       MOVE = 2;  // Move source extents to destination extents
       BSDIFF = 3;  // The data is a bsdiff binary diff
+      // SOURCE_COPY and SOURCE_BSDIFF are only supported on minor version 2.
+      SOURCE_COPY = 4; // Copy from source to target partition
+      SOURCE_BSDIFF = 5; // Like BSDIFF, but read from source partition
     }
     required Type type = 1;
     // The offset into the delta file (after the protobuf)