Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Side by Side Diff: src/platform/update_engine/delta_diff_generator_unittest.cc

Issue 492008: AU: Try delta updates first, then full updates (Closed)
Patch Set: use mkstemp Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium 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 <sys/types.h> 5 #include <sys/types.h>
6 #include <sys/stat.h> 6 #include <sys/stat.h>
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <unistd.h> 8 #include <unistd.h>
9 #include <set>
9 #include <string> 10 #include <string>
10 #include <vector> 11 #include <vector>
11 #include "base/string_util.h" 12 #include "base/string_util.h"
12 #include <gtest/gtest.h> 13 #include <gtest/gtest.h>
13 #include "chromeos/obsolete_logging.h" 14 #include "chromeos/obsolete_logging.h"
14 #include "update_engine/decompressing_file_writer.h" 15 #include "update_engine/decompressing_file_writer.h"
15 #include "update_engine/delta_diff_generator.h" 16 #include "update_engine/delta_diff_generator.h"
16 #include "update_engine/delta_diff_parser.h" 17 #include "update_engine/delta_diff_parser.h"
17 #include "update_engine/gzip.h" 18 #include "update_engine/gzip.h"
18 #include "update_engine/mock_file_writer.h" 19 #include "update_engine/mock_file_writer.h"
19 #include "update_engine/subprocess.h" 20 #include "update_engine/subprocess.h"
20 #include "update_engine/test_utils.h" 21 #include "update_engine/test_utils.h"
21 #include "update_engine/utils.h" 22 #include "update_engine/utils.h"
22 23
23 namespace chromeos_update_engine { 24 namespace chromeos_update_engine {
24 25
26 using std::set;
25 using std::string; 27 using std::string;
26 using std::vector; 28 using std::vector;
27 29
28 class DeltaDiffGeneratorTest : public ::testing::Test {}; 30 class DeltaDiffGeneratorTest : public ::testing::Test {
31 virtual void TearDown() {
32 EXPECT_EQ(0, system("rm -rf diff-gen-test"));
33 }
34 protected:
35 void FakerootEncodeDataToDeltaFileTest(bool test_diff_exclusion);
36 };
29 37
30 namespace { 38 namespace {
31 void DumpProto(const DeltaArchiveManifest* archive) { 39 void DumpProto(const DeltaArchiveManifest* archive) {
32 for (int i = 0; i < archive->files_size(); i++) { 40 for (int i = 0; i < archive->files_size(); i++) {
33 printf("Node %d\n", i); 41 printf("Node %d\n", i);
34 const DeltaArchiveManifest_File& file = archive->files(i); 42 const DeltaArchiveManifest_File& file = archive->files(i);
35 for (int j = 0; j < file.children_size(); j++) { 43 for (int j = 0; j < file.children_size(); j++) {
36 const DeltaArchiveManifest_File_Child& child = file.children(j); 44 const DeltaArchiveManifest_File_Child& child = file.children(j);
37 printf(" %d %s\n", child.index(), child.name().c_str()); 45 printf(" %d %s\n", child.index(), child.name().c_str());
38 } 46 }
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 EXPECT_TRUE(S_ISLNK(link.mode())); 351 EXPECT_TRUE(S_ISLNK(link.mode()));
344 EXPECT_EQ(0, link.uid()); 352 EXPECT_EQ(0, link.uid());
345 EXPECT_EQ(0, link.gid()); 353 EXPECT_EQ(0, link.gid());
346 EXPECT_FALSE(link.has_hardlink_path()); 354 EXPECT_FALSE(link.has_hardlink_path());
347 EXPECT_FALSE(link.has_data_format()); 355 EXPECT_FALSE(link.has_data_format());
348 EXPECT_FALSE(link.has_data_offset()); 356 EXPECT_FALSE(link.has_data_offset());
349 EXPECT_FALSE(link.has_data_length()); 357 EXPECT_FALSE(link.has_data_length());
350 } 358 }
351 359
352 TEST_F(DeltaDiffGeneratorTest, FakerootEncodeDataToDeltaFileTest) { 360 TEST_F(DeltaDiffGeneratorTest, FakerootEncodeDataToDeltaFileTest) {
361 FakerootEncodeDataToDeltaFileTest(false);
362 }
363 TEST_F(DeltaDiffGeneratorTest, FakerootDiffExclusionsTest) {
364 FakerootEncodeDataToDeltaFileTest(true);
365 }
366
367 void DeltaDiffGeneratorTest::FakerootEncodeDataToDeltaFileTest(
368 bool test_diff_exclusion) {
353 char cwd[1000]; 369 char cwd[1000];
354 ASSERT_EQ(cwd, getcwd(cwd, sizeof(cwd))) << "cwd buf possibly too small"; 370 ASSERT_EQ(cwd, getcwd(cwd, sizeof(cwd))) << "cwd buf possibly too small";
355 ASSERT_EQ(0, System(string("mkdir -p ") + cwd + "/diff-gen-test")); 371 ASSERT_EQ(0, System(string("mkdir -p ") + cwd + "/diff-gen-test"));
356 ASSERT_EQ(0, System(string("mkdir -p ") + cwd + "/diff-gen-test/old")); 372 ASSERT_EQ(0, System(string("mkdir -p ") + cwd + "/diff-gen-test/old"));
357 ASSERT_EQ(0, System(string("mkdir -p ") + cwd + "/diff-gen-test/new")); 373 ASSERT_EQ(0, System(string("mkdir -p ") + cwd + "/diff-gen-test/new"));
358 GenerateFilesAtPath(string(cwd) + "/diff-gen-test/old"); 374 GenerateFilesAtPath(string(cwd) + "/diff-gen-test/old");
359 GenerateFilesAtPath(string(cwd) + "/diff-gen-test/new"); 375 GenerateFilesAtPath(string(cwd) + "/diff-gen-test/new");
360 EditFilesAtPath(string(cwd) + "/diff-gen-test/new"); 376 EditFilesAtPath(string(cwd) + "/diff-gen-test/new");
361 377
378 set<string> diff_exclusions;
379 if (test_diff_exclusion) {
380 diff_exclusions.insert("/encoding/long_small_change");
381 } else {
382 diff_exclusions.insert("/hi");
383 }
384
362 DeltaArchiveManifest* archive = 385 DeltaArchiveManifest* archive =
363 DeltaDiffGenerator::EncodeMetadataToProtoBuffer( 386 DeltaDiffGenerator::EncodeMetadataToProtoBuffer(
364 (string(cwd) + "/diff-gen-test/new").c_str()); 387 (string(cwd) + "/diff-gen-test/new").c_str());
365 EXPECT_TRUE(NULL != archive); 388 EXPECT_TRUE(NULL != archive);
366 389
367 EXPECT_TRUE(DeltaDiffGenerator::EncodeDataToDeltaFile( 390 EXPECT_TRUE(DeltaDiffGenerator::EncodeDataToDeltaFile(
368 archive, 391 archive,
369 string(cwd) + "/diff-gen-test/old", 392 string(cwd) + "/diff-gen-test/old",
370 string(cwd) + "/diff-gen-test/new", 393 string(cwd) + "/diff-gen-test/new",
371 string(cwd) + "/diff-gen-test/out.dat", 394 string(cwd) + "/diff-gen-test/out.dat",
372 "")); 395 diff_exclusions, ""));
373 396
374 EXPECT_EQ(18, archive->files_size()); 397 EXPECT_EQ(18, archive->files_size());
375 398
376 const DeltaArchiveManifest_File& root = archive->files(0); 399 const DeltaArchiveManifest_File& root = archive->files(0);
377 EXPECT_TRUE(S_ISDIR(root.mode())); 400 EXPECT_TRUE(S_ISDIR(root.mode()));
378 EXPECT_EQ(0, root.uid()); 401 EXPECT_EQ(0, root.uid());
379 EXPECT_EQ(0, root.gid()); 402 EXPECT_EQ(0, root.gid());
380 ASSERT_EQ(6, root.children_size()); 403 ASSERT_EQ(6, root.children_size());
381 EXPECT_EQ("cdev", root.children(0).name()); 404 EXPECT_EQ("cdev", root.children(0).name());
382 EXPECT_EQ("compress_link", root.children(1).name()); 405 EXPECT_EQ("compress_link", root.children(1).name());
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 EXPECT_TRUE(long_new.has_data_length()); 492 EXPECT_TRUE(long_new.has_data_length());
470 EXPECT_FALSE(long_new.has_hardlink_path()); 493 EXPECT_FALSE(long_new.has_hardlink_path());
471 494
472 const DeltaArchiveManifest_File& long_small_change = 495 const DeltaArchiveManifest_File& long_small_change =
473 archive->files(encoding.children(1).index()); 496 archive->files(encoding.children(1).index());
474 EXPECT_EQ(0, long_small_change.children_size()); 497 EXPECT_EQ(0, long_small_change.children_size());
475 EXPECT_TRUE(S_ISREG(long_small_change.mode())); 498 EXPECT_TRUE(S_ISREG(long_small_change.mode()));
476 EXPECT_EQ(0, long_small_change.uid()); 499 EXPECT_EQ(0, long_small_change.uid());
477 EXPECT_EQ(0, long_small_change.gid()); 500 EXPECT_EQ(0, long_small_change.gid());
478 EXPECT_TRUE(long_small_change.has_data_format()); 501 EXPECT_TRUE(long_small_change.has_data_format());
479 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_BSDIFF, 502 DeltaArchiveManifest_File_DataFormat expected_format =
480 long_small_change.data_format()); 503 DeltaArchiveManifest_File_DataFormat_BSDIFF;
504 if (test_diff_exclusion)
505 expected_format = DeltaArchiveManifest_File_DataFormat_FULL;
506 EXPECT_EQ(expected_format, long_small_change.data_format());
481 EXPECT_TRUE(long_small_change.has_data_offset()); 507 EXPECT_TRUE(long_small_change.has_data_offset());
482 EXPECT_TRUE(long_small_change.has_data_length()); 508 EXPECT_TRUE(long_small_change.has_data_length());
483 EXPECT_FALSE(long_small_change.has_hardlink_path()); 509 EXPECT_FALSE(long_small_change.has_hardlink_path());
484 510
485 const DeltaArchiveManifest_File& nochange = 511 const DeltaArchiveManifest_File& nochange =
486 archive->files(encoding.children(2).index()); 512 archive->files(encoding.children(2).index());
487 EXPECT_EQ(0, nochange.children_size()); 513 EXPECT_EQ(0, nochange.children_size());
488 EXPECT_TRUE(S_ISREG(nochange.mode())); 514 EXPECT_TRUE(S_ISREG(nochange.mode()));
489 EXPECT_EQ(0, nochange.uid()); 515 EXPECT_EQ(0, nochange.uid());
490 EXPECT_EQ(0, nochange.gid()); 516 EXPECT_EQ(0, nochange.gid());
491 EXPECT_TRUE(nochange.has_data_format()); 517 EXPECT_FALSE(nochange.has_data_format());
492 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, nochange.data_format()); 518 EXPECT_FALSE(nochange.has_data_offset());
493 EXPECT_TRUE(nochange.has_data_offset()); 519 EXPECT_FALSE(nochange.has_data_length());
494 EXPECT_TRUE(nochange.has_data_length());
495 EXPECT_FALSE(nochange.has_hardlink_path()); 520 EXPECT_FALSE(nochange.has_hardlink_path());
496 521
497 const DeltaArchiveManifest_File& onebyte = 522 const DeltaArchiveManifest_File& onebyte =
498 archive->files(encoding.children(3).index()); 523 archive->files(encoding.children(3).index());
499 EXPECT_EQ(0, onebyte.children_size()); 524 EXPECT_EQ(0, onebyte.children_size());
500 EXPECT_TRUE(S_ISREG(onebyte.mode())); 525 EXPECT_TRUE(S_ISREG(onebyte.mode()));
501 EXPECT_EQ(0, onebyte.uid()); 526 EXPECT_EQ(0, onebyte.uid());
502 EXPECT_EQ(0, onebyte.gid()); 527 EXPECT_EQ(0, onebyte.gid());
503 EXPECT_TRUE(onebyte.has_data_format()); 528 EXPECT_TRUE(onebyte.has_data_format());
504 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, onebyte.data_format()); 529 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, onebyte.data_format());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 ASSERT_TRUE(hello.has_data_length()); 584 ASSERT_TRUE(hello.has_data_length());
560 EXPECT_GT(hello.data_length(), 0); 585 EXPECT_GT(hello.data_length(), 0);
561 EXPECT_FALSE(hello.has_hardlink_path()); 586 EXPECT_FALSE(hello.has_hardlink_path());
562 587
563 const DeltaArchiveManifest_File& newempty = 588 const DeltaArchiveManifest_File& newempty =
564 archive->files(dir.children(3).index()); 589 archive->files(dir.children(3).index());
565 EXPECT_EQ(0, newempty.children_size()); 590 EXPECT_EQ(0, newempty.children_size());
566 EXPECT_TRUE(S_ISREG(newempty.mode())); 591 EXPECT_TRUE(S_ISREG(newempty.mode()));
567 EXPECT_EQ(0, newempty.uid()); 592 EXPECT_EQ(0, newempty.uid());
568 EXPECT_EQ(0, newempty.gid()); 593 EXPECT_EQ(0, newempty.gid());
569 EXPECT_FALSE(newempty.has_data_format()); 594 EXPECT_TRUE(newempty.has_data_format());
570 EXPECT_FALSE(newempty.has_data_offset()); 595 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, newempty.data_format());
571 EXPECT_FALSE(newempty.has_data_length()); 596 EXPECT_TRUE(newempty.has_data_offset());
597 EXPECT_TRUE(newempty.has_data_length());
572 EXPECT_FALSE(newempty.has_hardlink_path()); 598 EXPECT_FALSE(newempty.has_hardlink_path());
573 599
574 const DeltaArchiveManifest_File& subdir = 600 const DeltaArchiveManifest_File& subdir =
575 archive->files(dir.children(4).index()); 601 archive->files(dir.children(4).index());
576 EXPECT_EQ(2, subdir.children_size()); 602 EXPECT_EQ(2, subdir.children_size());
577 EXPECT_EQ("fifo", subdir.children(0).name()); 603 EXPECT_EQ("fifo", subdir.children(0).name());
578 EXPECT_EQ("link", subdir.children(1).name()); 604 EXPECT_EQ("link", subdir.children(1).name());
579 EXPECT_TRUE(S_ISDIR(subdir.mode())); 605 EXPECT_TRUE(S_ISDIR(subdir.mode()));
580 EXPECT_EQ(0, subdir.uid()); 606 EXPECT_EQ(0, subdir.uid());
581 EXPECT_EQ(0, subdir.gid()); 607 EXPECT_EQ(0, subdir.gid());
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 DeltaArchiveManifest* archive = 686 DeltaArchiveManifest* archive =
661 DeltaDiffGenerator::EncodeMetadataToProtoBuffer( 687 DeltaDiffGenerator::EncodeMetadataToProtoBuffer(
662 (string(cwd) + "/diff-gen-test/new").c_str()); 688 (string(cwd) + "/diff-gen-test/new").c_str());
663 EXPECT_TRUE(NULL != archive); 689 EXPECT_TRUE(NULL != archive);
664 690
665 EXPECT_TRUE(DeltaDiffGenerator::EncodeDataToDeltaFile( 691 EXPECT_TRUE(DeltaDiffGenerator::EncodeDataToDeltaFile(
666 archive, 692 archive,
667 string(cwd) + "/diff-gen-test/old", 693 string(cwd) + "/diff-gen-test/old",
668 string(cwd) + "/diff-gen-test/new", 694 string(cwd) + "/diff-gen-test/new",
669 string(cwd) + "/diff-gen-test/out.dat", 695 string(cwd) + "/diff-gen-test/out.dat",
670 "")); 696 set<string>(), ""));
671 // parse the file 697 // parse the file
672 698
673 DeltaDiffParser parser(string(cwd) + "/diff-gen-test/out.dat"); 699 DeltaDiffParser parser(string(cwd) + "/diff-gen-test/out.dat");
674 ASSERT_TRUE(parser.valid()); 700 ASSERT_TRUE(parser.valid());
675 DeltaDiffParser::Iterator it = parser.Begin(); 701 DeltaDiffParser::Iterator it = parser.Begin();
676 string expected_paths[] = { 702 string expected_paths[] = {
677 "", 703 "",
678 "/cdev", 704 "/cdev",
679 "/compress_link", 705 "/compress_link",
680 "/dir", 706 "/dir",
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 EXPECT_TRUE(file.has_data_format()); 808 EXPECT_TRUE(file.has_data_format());
783 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, file.data_format()); 809 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, file.data_format());
784 EXPECT_EQ("hello\n", ReadFilePartToString(string(cwd) + 810 EXPECT_EQ("hello\n", ReadFilePartToString(string(cwd) +
785 "/diff-gen-test/out.dat", 811 "/diff-gen-test/out.dat",
786 file.data_offset(), 812 file.data_offset(),
787 file.data_length())); 813 file.data_length()));
788 814
789 // newempty 815 // newempty
790 file = parser.GetFileAtPath("/dir/newempty"); 816 file = parser.GetFileAtPath("/dir/newempty");
791 EXPECT_TRUE(S_ISREG(file.mode())); 817 EXPECT_TRUE(S_ISREG(file.mode()));
792 EXPECT_FALSE(file.has_data_format()); 818 EXPECT_TRUE(file.has_data_format());
819 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, file.data_format());
793 820
794 // subdir 821 // subdir
795 file = parser.GetFileAtPath("/dir/subdir"); 822 file = parser.GetFileAtPath("/dir/subdir");
796 EXPECT_TRUE(S_ISDIR(file.mode())); 823 EXPECT_TRUE(S_ISDIR(file.mode()));
797 EXPECT_FALSE(file.has_data_format()); 824 EXPECT_FALSE(file.has_data_format());
798 825
799 // fifo 826 // fifo
800 file = parser.GetFileAtPath("/dir/subdir/fifo"); 827 file = parser.GetFileAtPath("/dir/subdir/fifo");
801 EXPECT_TRUE(S_ISFIFO(file.mode())); 828 EXPECT_TRUE(S_ISFIFO(file.mode()));
802 EXPECT_FALSE(file.has_data_format()); 829 EXPECT_FALSE(file.has_data_format());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 data = ReadFilePart(string(cwd) + "/diff-gen-test/out.dat", 865 data = ReadFilePart(string(cwd) + "/diff-gen-test/out.dat",
839 file.data_offset(), file.data_length()); 866 file.data_offset(), file.data_length());
840 WriteFileVector(string(cwd) + "/diff-gen-test/patch", data); 867 WriteFileVector(string(cwd) + "/diff-gen-test/patch", data);
841 int rc = 1; 868 int rc = 1;
842 vector<string> cmd; 869 vector<string> cmd;
843 cmd.push_back("/usr/bin/bspatch"); 870 cmd.push_back("/usr/bin/bspatch");
844 cmd.push_back(string(cwd) + "/diff-gen-test/old/encoding/long_small_change"); 871 cmd.push_back(string(cwd) + "/diff-gen-test/old/encoding/long_small_change");
845 cmd.push_back(string(cwd) + "/diff-gen-test/patch_result"); 872 cmd.push_back(string(cwd) + "/diff-gen-test/patch_result");
846 cmd.push_back(string(cwd) + "/diff-gen-test/patch"); 873 cmd.push_back(string(cwd) + "/diff-gen-test/patch");
847 Subprocess::SynchronousExec(cmd, &rc); 874 Subprocess::SynchronousExec(cmd, &rc);
848 EXPECT_EQ(0, rc); 875 ASSERT_EQ(0, rc);
849 vector<char> patch_result; 876 vector<char> patch_result;
850 EXPECT_TRUE(utils::ReadFile(string(cwd) + "/diff-gen-test/patch_result", 877 EXPECT_TRUE(utils::ReadFile(string(cwd) + "/diff-gen-test/patch_result",
851 &patch_result)); 878 &patch_result));
852 vector<char> expected_data(sizeof(kRandomString) + 1); 879 vector<char> expected_data(sizeof(kRandomString) + 1);
853 memcpy(&expected_data[0], kRandomString, sizeof(kRandomString)); 880 memcpy(&expected_data[0], kRandomString, sizeof(kRandomString));
854 expected_data[expected_data.size() - 1] = 'h'; 881 expected_data[expected_data.size() - 1] = 'h';
855 ExpectVectorsEq(expected_data, patch_result); 882 ExpectVectorsEq(expected_data, patch_result);
856 883
857 // nochange 884 // nochange
858 file = parser.GetFileAtPath("/encoding/nochange"); 885 file = parser.GetFileAtPath("/encoding/nochange");
859 EXPECT_TRUE(S_ISREG(file.mode())); 886 EXPECT_TRUE(S_ISREG(file.mode()));
860 EXPECT_TRUE(file.has_data_format()); 887 EXPECT_FALSE(file.has_data_format());
861 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, file.data_format()); 888 EXPECT_FALSE(file.has_data_offset());
862 EXPECT_EQ("nochange\n", ReadFilePartToString(string(cwd) + 889 EXPECT_FALSE(file.has_data_length());
863 "/diff-gen-test/out.dat",
864 file.data_offset(),
865 file.data_length()));
866 890
867 // onebyte 891 // onebyte
868 file = parser.GetFileAtPath("/encoding/onebyte"); 892 file = parser.GetFileAtPath("/encoding/onebyte");
869 EXPECT_TRUE(S_ISREG(file.mode())); 893 EXPECT_TRUE(S_ISREG(file.mode()));
870 EXPECT_TRUE(file.has_data_format()); 894 EXPECT_TRUE(file.has_data_format());
871 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, file.data_format()); 895 EXPECT_EQ(DeltaArchiveManifest_File_DataFormat_FULL, file.data_format());
872 EXPECT_EQ("h", ReadFilePartToString(string(cwd) + 896 EXPECT_EQ("h", ReadFilePartToString(string(cwd) +
873 "/diff-gen-test/out.dat", 897 "/diff-gen-test/out.dat",
874 file.data_offset(), 898 file.data_offset(),
875 file.data_length())); 899 file.data_length()));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 { 946 {
923 vector<char> data(14); 947 vector<char> data(14);
924 memcpy(&data[0], "CrAU\0\0\0\0\0\0\0\x0cxx", 12); 948 memcpy(&data[0], "CrAU\0\0\0\0\0\0\0\x0cxx", 12);
925 WriteFileVector("diff-gen-test/baddelta", data); 949 WriteFileVector("diff-gen-test/baddelta", data);
926 DeltaDiffParser parser("diff-gen-test/baddelta"); 950 DeltaDiffParser parser("diff-gen-test/baddelta");
927 EXPECT_FALSE(parser.valid()); 951 EXPECT_FALSE(parser.valid());
928 } 952 }
929 } 953 }
930 954
931 } // namespace chromeos_update_engine 955 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « src/platform/update_engine/delta_diff_generator.cc ('k') | src/platform/update_engine/download_action.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698