OLD | NEW |
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 <dirent.h> | 7 #include <errno.h> |
8 #include <fcntl.h> | |
9 #include <stdlib.h> | |
10 #include <stdio.h> | |
11 #include <unistd.h> | 8 #include <unistd.h> |
12 | 9 #include <set> |
13 #include <algorithm> | |
14 #include <string> | 10 #include <string> |
15 #include <vector> | |
16 #include <tr1/memory> | |
17 | |
18 #include <glib.h> | 11 #include <glib.h> |
19 | |
20 #include "chromeos/obsolete_logging.h" | 12 #include "chromeos/obsolete_logging.h" |
| 13 #include "update_engine/delta_diff_generator.h" |
21 #include "update_engine/subprocess.h" | 14 #include "update_engine/subprocess.h" |
22 #include "update_engine/update_metadata.pb.h" | 15 #include "update_engine/update_metadata.pb.h" |
23 | 16 #include "update_engine/utils.h" |
24 using std::sort; | |
25 using std::string; | |
26 using std::vector; | |
27 using std::tr1::shared_ptr; | |
28 | 17 |
29 // This file contains a simple program that takes an old path, a new path, | 18 // This file contains a simple program that takes an old path, a new path, |
30 // and an output file as arguments and the path to an output file and | 19 // and an output file as arguments and the path to an output file and |
31 // generates a delta that can be sent to Chrome OS clients. | 20 // generates a delta that can be sent to Chrome OS clients. |
32 | 21 |
| 22 using std::set; |
| 23 using std::string; |
| 24 |
33 namespace chromeos_update_engine { | 25 namespace chromeos_update_engine { |
34 | 26 |
35 int main(int argc, char** argv) { | 27 namespace { |
| 28 // These paths should never be delta diffed. They should always be transmitted |
| 29 // in full in the update. |
| 30 const char* kNonDiffPaths[] = { |
| 31 "/boot/extlinux.conf" |
| 32 }; |
| 33 |
| 34 void usage(const char* argv0) { |
| 35 printf("usage: %s old_dir new_dir out_file\n", argv0); |
| 36 exit(1); |
| 37 } |
| 38 |
| 39 bool IsDir(const char* path) { |
| 40 struct stat stbuf; |
| 41 TEST_AND_RETURN_FALSE_ERRNO(lstat(path, &stbuf) == 0); |
| 42 return S_ISDIR(stbuf.st_mode); |
| 43 } |
| 44 |
| 45 int Main(int argc, char** argv) { |
36 g_thread_init(NULL); | 46 g_thread_init(NULL); |
37 Subprocess::Init(); | 47 Subprocess::Init(); |
38 if (argc != 4) { | 48 if (argc != 4) { |
39 usage(argv[0]); | 49 usage(argv[0]); |
40 } | 50 } |
| 51 logging::InitLogging("", |
| 52 logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG, |
| 53 logging::DONT_LOCK_LOG_FILE, |
| 54 logging::APPEND_TO_OLD_LOG_FILE); |
41 const char* old_dir = argv[1]; | 55 const char* old_dir = argv[1]; |
42 const char* new_dir = argv[2]; | 56 const char* new_dir = argv[2]; |
43 if ((!IsDir(old_dir)) || (!IsDir(new_dir))) { | 57 if ((!IsDir(old_dir)) || (!IsDir(new_dir))) { |
44 usage(argv[0]); | 58 usage(argv[0]); |
45 } | 59 } |
46 // TODO(adlr): implement using DeltaDiffGenerator | 60 |
| 61 set<string> non_diff_paths; |
| 62 for (size_t i = 0; i < arraysize(kNonDiffPaths); i++) |
| 63 non_diff_paths.insert(kNonDiffPaths[i]); |
| 64 |
| 65 DeltaArchiveManifest* manifest = |
| 66 DeltaDiffGenerator::EncodeMetadataToProtoBuffer(new_dir); |
| 67 CHECK(manifest); |
| 68 CHECK(DeltaDiffGenerator::EncodeDataToDeltaFile(manifest, |
| 69 old_dir, |
| 70 new_dir, |
| 71 argv[3], |
| 72 non_diff_paths, |
| 73 "")); |
47 return 0; | 74 return 0; |
48 } | 75 } |
| 76 |
| 77 } // namespace {} |
| 78 |
| 79 } // namespace chromeos_update_engine |
| 80 |
| 81 int main(int argc, char** argv) { |
| 82 return chromeos_update_engine::Main(argc, argv); |
| 83 } |
OLD | NEW |