paycheck: Allow minor version 3 in applier.

Also fixed nits in checker.

BUG=chromium:568473
TEST=./checker_unittest.py

Change-Id: Ia791f4dc636e9c3a2921aeaa5f9dd01c247bf5bb
Reviewed-on: https://chromium-review.googlesource.com/317780
Trybot-Ready: Sen Jiang <senj@chromium.org>
Tested-by: Sen Jiang <senj@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
Reviewed-by: Gilad Arnold <garnold@chromium.org>
Commit-Queue: Sen Jiang <senj@chromium.org>
(cherry picked from commit 50da2de6b067cf79b27521dbd6109953d8ae378f)
Reviewed-on: https://chromium-review.googlesource.com/319193
Reviewed-by: Josafat Garcia <josafat@chromium.org>
Commit-Queue: Josafat Garcia <josafat@chromium.org>
Tested-by: Josafat Garcia <josafat@chromium.org>
diff --git a/host/lib/update_payload/applier.py b/host/lib/update_payload/applier.py
index 5e95156..04791c1 100644
--- a/host/lib/update_payload/applier.py
+++ b/host/lib/update_payload/applier.py
@@ -497,9 +497,10 @@
       if self.minor_version == common.INPLACE_MINOR_PAYLOAD_VERSION:
         # Copy the src partition to the dst one; make sure we don't truncate it.
         shutil.copyfile(old_part_file_name, new_part_file_name)
-      elif self.minor_version == common.SOURCE_MINOR_PAYLOAD_VERSION:
-        # In minor version 2, we don't want to copy the partitions, so instead
-        # just make the new partition file.
+      elif (self.minor_version == common.SOURCE_MINOR_PAYLOAD_VERSION or
+            self.minor_version == common.OPSRCHASH_MINOR_PAYLOAD_VERSION):
+        # In minor version >= 2, we don't want to copy the partitions, so
+        # instead just make the new partition file.
         open(new_part_file_name, 'w').close()
       else:
         raise PayloadError("Unknown minor version: %d" % self.minor_version)
diff --git a/host/lib/update_payload/checker.py b/host/lib/update_payload/checker.py
index c10ecce..7abf178 100644
--- a/host/lib/update_payload/checker.py
+++ b/host/lib/update_payload/checker.py
@@ -860,7 +860,7 @@
           '%s: total src blocks (%d) != total dst blocks (%d).' %
           (op_name, total_src_blocks, total_dst_blocks))
 
-  def _CheckSourceOperation(self, op, total_src_blocks, op_name):
+  def _CheckAnySourceOperation(self, op, total_src_blocks, op_name):
     """Specific checks for SOURCE_* operations.
 
     Args:
@@ -976,11 +976,11 @@
     elif op.type == common.OpType.SOURCE_COPY and self.minor_version in (2, 3):
       self._CheckSourceCopyOperation(data_offset, total_src_blocks,
                                      total_dst_blocks, op_name)
-      self._CheckSourceOperation(op, total_src_blocks, op_name)
+      self._CheckAnySourceOperation(op, total_src_blocks, op_name)
     elif (op.type == common.OpType.SOURCE_BSDIFF and
           self.minor_version in (2, 3)):
       self._CheckBsdiffOperation(data_length, total_dst_blocks, op_name)
-      self._CheckSourceOperation(op, total_src_blocks, op_name)
+      self._CheckAnySourceOperation(op, total_src_blocks, op_name)
     else:
       raise error.PayloadError(
           'Operation %s (type %d) not allowed in minor version %d' %
diff --git a/host/lib/update_payload/common.py b/host/lib/update_payload/common.py
index 38d949b..80e2501 100644
--- a/host/lib/update_payload/common.py
+++ b/host/lib/update_payload/common.py
@@ -26,6 +26,7 @@
 
 INPLACE_MINOR_PAYLOAD_VERSION = 1
 SOURCE_MINOR_PAYLOAD_VERSION = 2
+OPSRCHASH_MINOR_PAYLOAD_VERSION = 3
 
 #
 # Payload operation types.