| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "update_engine/delta_diff_generator.h" | 5 #include "update_engine/delta_diff_generator.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 #include <inttypes.h> | 9 #include <inttypes.h> |
| 10 #include <sys/stat.h> | 10 #include <sys/stat.h> |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 }; | 457 }; |
| 458 | 458 |
| 459 static const char* kInstallOperationTypes[] = { | 459 static const char* kInstallOperationTypes[] = { |
| 460 "REPLACE", | 460 "REPLACE", |
| 461 "REPLACE_BZ", | 461 "REPLACE_BZ", |
| 462 "MOVE", | 462 "MOVE", |
| 463 "BSDIFF" | 463 "BSDIFF" |
| 464 }; | 464 }; |
| 465 | 465 |
| 466 void ReportPayloadUsage(const Graph& graph, | 466 void ReportPayloadUsage(const Graph& graph, |
| 467 const DeltaArchiveManifest& manifest) { | 467 const DeltaArchiveManifest& manifest, |
| 468 const int64_t manifest_metadata_size) { |
| 468 vector<DeltaObject> objects; | 469 vector<DeltaObject> objects; |
| 469 off_t total_size = 0; | 470 off_t total_size = 0; |
| 470 | 471 |
| 471 // Graph nodes with information about file names. | 472 // Graph nodes with information about file names. |
| 472 for (Vertex::Index node = 0; node < graph.size(); node++) { | 473 for (Vertex::Index node = 0; node < graph.size(); node++) { |
| 473 const Vertex& vertex = graph[node]; | 474 const Vertex& vertex = graph[node]; |
| 474 if (!vertex.valid) { | 475 if (!vertex.valid) { |
| 475 continue; | 476 continue; |
| 476 } | 477 } |
| 477 objects.push_back(DeltaObject(vertex.file_name, | 478 objects.push_back(DeltaObject(vertex.file_name, |
| 478 vertex.op.type(), | 479 vertex.op.type(), |
| 479 vertex.op.data_length())); | 480 vertex.op.data_length())); |
| 480 total_size += vertex.op.data_length(); | 481 total_size += vertex.op.data_length(); |
| 481 } | 482 } |
| 482 | 483 |
| 483 // Kernel install operations. | 484 // Kernel install operations. |
| 484 for (int i = 0; i < manifest.kernel_install_operations_size(); ++i) { | 485 for (int i = 0; i < manifest.kernel_install_operations_size(); ++i) { |
| 485 const DeltaArchiveManifest_InstallOperation& op = | 486 const DeltaArchiveManifest_InstallOperation& op = |
| 486 manifest.kernel_install_operations(i); | 487 manifest.kernel_install_operations(i); |
| 487 objects.push_back(DeltaObject(StringPrintf("<kernel-operation-%d>", i), | 488 objects.push_back(DeltaObject(StringPrintf("<kernel-operation-%d>", i), |
| 488 op.type(), | 489 op.type(), |
| 489 op.data_length())); | 490 op.data_length())); |
| 490 total_size += op.data_length(); | 491 total_size += op.data_length(); |
| 491 } | 492 } |
| 492 | 493 |
| 494 objects.push_back(DeltaObject("<manifest-metadata>", |
| 495 -1, |
| 496 manifest_metadata_size)); |
| 497 total_size += manifest_metadata_size; |
| 498 |
| 493 std::sort(objects.begin(), objects.end()); | 499 std::sort(objects.begin(), objects.end()); |
| 494 | 500 |
| 495 static const char kFormatString[] = "%6.2f%% %10llu %-10s %s\n"; | 501 static const char kFormatString[] = "%6.2f%% %10llu %-10s %s\n"; |
| 496 for (vector<DeltaObject>::const_iterator it = objects.begin(); | 502 for (vector<DeltaObject>::const_iterator it = objects.begin(); |
| 497 it != objects.end(); ++it) { | 503 it != objects.end(); ++it) { |
| 498 const DeltaObject& object = *it; | 504 const DeltaObject& object = *it; |
| 499 fprintf(stderr, kFormatString, | 505 fprintf(stderr, kFormatString, |
| 500 object.size * 100.0 / total_size, | 506 object.size * 100.0 / total_size, |
| 501 object.size, | 507 object.size, |
| 502 kInstallOperationTypes[object.type], | 508 object.type >= 0 ? kInstallOperationTypes[object.type] : "-", |
| 503 object.name.c_str()); | 509 object.name.c_str()); |
| 504 } | 510 } |
| 505 fprintf(stderr, kFormatString, 100.0, total_size, "", "<total>"); | 511 fprintf(stderr, kFormatString, 100.0, total_size, "", "<total>"); |
| 506 } | 512 } |
| 507 | 513 |
| 508 } // namespace {} | 514 } // namespace {} |
| 509 | 515 |
| 510 bool DeltaDiffGenerator::ReadFileToDiff( | 516 bool DeltaDiffGenerator::ReadFileToDiff( |
| 511 const string& old_filename, | 517 const string& old_filename, |
| 512 const string& new_filename, | 518 const string& new_filename, |
| (...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1475 LOG(INFO) << "Signing the update..."; | 1481 LOG(INFO) << "Signing the update..."; |
| 1476 vector<char> signature_blob; | 1482 vector<char> signature_blob; |
| 1477 TEST_AND_RETURN_FALSE(PayloadSigner::SignPayload(output_path, | 1483 TEST_AND_RETURN_FALSE(PayloadSigner::SignPayload(output_path, |
| 1478 private_key_path, | 1484 private_key_path, |
| 1479 &signature_blob)); | 1485 &signature_blob)); |
| 1480 TEST_AND_RETURN_FALSE(writer.Write(&signature_blob[0], | 1486 TEST_AND_RETURN_FALSE(writer.Write(&signature_blob[0], |
| 1481 signature_blob.size()) == | 1487 signature_blob.size()) == |
| 1482 static_cast<ssize_t>(signature_blob.size())); | 1488 static_cast<ssize_t>(signature_blob.size())); |
| 1483 } | 1489 } |
| 1484 | 1490 |
| 1485 ReportPayloadUsage(graph, manifest); | 1491 int64_t manifest_metadata_size = |
| 1492 strlen(kDeltaMagic) + 2 * sizeof(uint64_t) + serialized_manifest.size(); |
| 1493 ReportPayloadUsage(graph, manifest, manifest_metadata_size); |
| 1486 | 1494 |
| 1487 LOG(INFO) << "All done. Successfully created delta file."; | 1495 LOG(INFO) << "All done. Successfully created delta file."; |
| 1488 return true; | 1496 return true; |
| 1489 } | 1497 } |
| 1490 | 1498 |
| 1491 const char* const kBsdiffPath = "/usr/bin/bsdiff"; | 1499 const char* const kBsdiffPath = "/usr/bin/bsdiff"; |
| 1492 const char* const kBspatchPath = "/usr/bin/bspatch"; | 1500 const char* const kBspatchPath = "/usr/bin/bspatch"; |
| 1493 const char* const kDeltaMagic = "CrAU"; | 1501 const char* const kDeltaMagic = "CrAU"; |
| 1494 | 1502 |
| 1495 }; // namespace chromeos_update_engine | 1503 }; // namespace chromeos_update_engine |
| OLD | NEW |