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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 // In the future we might consider intelligent diffing between this data | 253 // In the future we might consider intelligent diffing between this data |
254 // and data in the previous image, but for now we just bzip2 compress it | 254 // and data in the previous image, but for now we just bzip2 compress it |
255 // and include it in the update. | 255 // and include it in the update. |
256 // Creates a new node in the graph to write these blocks and writes the | 256 // Creates a new node in the graph to write these blocks and writes the |
257 // appropriate blob to blobs_fd. Reads and updates blobs_length; | 257 // appropriate blob to blobs_fd. Reads and updates blobs_length; |
258 bool ReadUnwrittenBlocks(const vector<Block>& blocks, | 258 bool ReadUnwrittenBlocks(const vector<Block>& blocks, |
259 int blobs_fd, | 259 int blobs_fd, |
260 off_t* blobs_length, | 260 off_t* blobs_length, |
261 const string& image_path, | 261 const string& image_path, |
262 Vertex* vertex) { | 262 Vertex* vertex) { |
| 263 vertex->file_name = "<rootfs-non-file-data>"; |
| 264 |
263 DeltaArchiveManifest_InstallOperation* out_op = &vertex->op; | 265 DeltaArchiveManifest_InstallOperation* out_op = &vertex->op; |
264 int image_fd = open(image_path.c_str(), O_RDONLY, 000); | 266 int image_fd = open(image_path.c_str(), O_RDONLY, 000); |
265 TEST_AND_RETURN_FALSE_ERRNO(image_fd >= 0); | 267 TEST_AND_RETURN_FALSE_ERRNO(image_fd >= 0); |
266 ScopedFdCloser image_fd_closer(&image_fd); | 268 ScopedFdCloser image_fd_closer(&image_fd); |
267 | 269 |
268 string temp_file_path; | 270 string temp_file_path; |
269 TEST_AND_RETURN_FALSE(utils::MakeTempFile("/tmp/CrAU_temp_data.XXXXXX", | 271 TEST_AND_RETURN_FALSE(utils::MakeTempFile("/tmp/CrAU_temp_data.XXXXXX", |
270 &temp_file_path, | 272 &temp_file_path, |
271 NULL)); | 273 NULL)); |
272 | 274 |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 "BSDIFF" | 463 "BSDIFF" |
462 }; | 464 }; |
463 | 465 |
464 void ReportPayloadUsage(const Graph& graph, | 466 void ReportPayloadUsage(const Graph& graph, |
465 const DeltaArchiveManifest& manifest) { | 467 const DeltaArchiveManifest& manifest) { |
466 vector<DeltaObject> objects; | 468 vector<DeltaObject> objects; |
467 off_t total_size = 0; | 469 off_t total_size = 0; |
468 | 470 |
469 // Graph nodes with information about file names. | 471 // Graph nodes with information about file names. |
470 for (Vertex::Index node = 0; node < graph.size(); node++) { | 472 for (Vertex::Index node = 0; node < graph.size(); node++) { |
471 objects.push_back(DeltaObject(graph[node].file_name, | 473 const Vertex& vertex = graph[node]; |
472 graph[node].op.type(), | 474 if (!vertex.valid) { |
473 graph[node].op.data_length())); | 475 continue; |
474 total_size += graph[node].op.data_length(); | 476 } |
| 477 objects.push_back(DeltaObject(vertex.file_name, |
| 478 vertex.op.type(), |
| 479 vertex.op.data_length())); |
| 480 total_size += vertex.op.data_length(); |
475 } | 481 } |
476 | 482 |
477 // Final rootfs operation writing non-file-data. | |
478 const DeltaArchiveManifest_InstallOperation& final_op = | |
479 manifest.install_operations(manifest.install_operations_size() - 1); | |
480 objects.push_back(DeltaObject("<rootfs-final-operation>", | |
481 final_op.type(), | |
482 final_op.data_length())); | |
483 total_size += final_op.data_length(); | |
484 | |
485 // Kernel install operations. | 483 // Kernel install operations. |
486 for (int i = 0; i < manifest.kernel_install_operations_size(); ++i) { | 484 for (int i = 0; i < manifest.kernel_install_operations_size(); ++i) { |
487 const DeltaArchiveManifest_InstallOperation& op = | 485 const DeltaArchiveManifest_InstallOperation& op = |
488 manifest.kernel_install_operations(i); | 486 manifest.kernel_install_operations(i); |
489 objects.push_back(DeltaObject(StringPrintf("<kernel-operation-%d>", i), | 487 objects.push_back(DeltaObject(StringPrintf("<kernel-operation-%d>", i), |
490 op.type(), | 488 op.type(), |
491 op.data_length())); | 489 op.data_length())); |
492 total_size += op.data_length(); | 490 total_size += op.data_length(); |
493 } | 491 } |
494 | 492 |
(...skipping 991 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1486 | 1484 |
1487 LOG(INFO) << "All done. Successfully created delta file."; | 1485 LOG(INFO) << "All done. Successfully created delta file."; |
1488 return true; | 1486 return true; |
1489 } | 1487 } |
1490 | 1488 |
1491 const char* const kBsdiffPath = "/usr/bin/bsdiff"; | 1489 const char* const kBsdiffPath = "/usr/bin/bsdiff"; |
1492 const char* const kBspatchPath = "/usr/bin/bspatch"; | 1490 const char* const kBspatchPath = "/usr/bin/bspatch"; |
1493 const char* const kDeltaMagic = "CrAU"; | 1491 const char* const kDeltaMagic = "CrAU"; |
1494 | 1492 |
1495 }; // namespace chromeos_update_engine | 1493 }; // namespace chromeos_update_engine |
OLD | NEW |