delta_generator: Add --out_metadata_size_file flag.

delta_generator will write the metadata size in text to the given file.
This flag will only be accepted when generating or signing the payload.

Bug: 24751934
TEST=called delta_generator with this flag.

Change-Id: I824079dc4c18534a80ded77902f4ea8f6dbbd20f
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index c3232fb..e6e7c98 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -147,7 +147,8 @@
 
 void SignPayload(const string& in_file,
                  const string& out_file,
-                 const string& signature_file) {
+                 const string& signature_file,
+                 const string& out_metadata_size_file) {
   LOG(INFO) << "Signing payload.";
   LOG_IF(FATAL, in_file.empty())
       << "Must pass --in_file to sign payload.";
@@ -168,6 +169,12 @@
       in_file, signatures, out_file, &final_metadata_size));
   LOG(INFO) << "Done signing payload. Final metadata size = "
             << final_metadata_size;
+  if (!out_metadata_size_file.empty()) {
+    string metadata_size_string = std::to_string(final_metadata_size);
+    CHECK(utils::WriteFile(out_metadata_size_file.c_str(),
+                           metadata_size_string.data(),
+                           metadata_size_string.size()));
+  }
 }
 
 void VerifySignedPayload(const string& in_file,
@@ -258,6 +265,8 @@
   DEFINE_string(out_hash_file, "", "Path to output hash file");
   DEFINE_string(out_metadata_hash_file, "",
                 "Path to output metadata hash file");
+  DEFINE_string(out_metadata_size_file, "",
+                "Path to output metadata size file");
   DEFINE_string(private_key, "", "Path to private key in .pem format");
   DEFINE_string(public_key, "", "Path to public key in .pem format");
   DEFINE_int32(public_key_version, -1,
@@ -346,6 +355,7 @@
   ParseSignatureSizes(FLAGS_signature_size, &signature_sizes);
 
   if (!FLAGS_out_hash_file.empty() || !FLAGS_out_metadata_hash_file.empty()) {
+    CHECK(FLAGS_out_metadata_size_file.empty());
     if (!FLAGS_out_hash_file.empty()) {
       CalculatePayloadHashForSigning(signature_sizes, FLAGS_out_hash_file,
                                      FLAGS_in_file);
@@ -358,7 +368,8 @@
     return 0;
   }
   if (!FLAGS_signature_file.empty()) {
-    SignPayload(FLAGS_in_file, FLAGS_out_file, FLAGS_signature_file);
+    SignPayload(FLAGS_in_file, FLAGS_out_file, FLAGS_signature_file,
+                FLAGS_out_metadata_size_file);
     return 0;
   }
   if (!FLAGS_public_key.empty()) {
@@ -520,7 +531,12 @@
                                  &metadata_size)) {
     return 1;
   }
-
+  if (!FLAGS_out_metadata_size_file.empty()) {
+    string metadata_size_string = std::to_string(metadata_size);
+    CHECK(utils::WriteFile(FLAGS_out_metadata_size_file.c_str(),
+                           metadata_size_string.data(),
+                           metadata_size_string.size()));
+  }
   return 0;
 }