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

Unified Diff: src/platform/update_engine/update_metadata.proto

Issue 465067: Missed new files in last commit
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/update_engine/test_http_server.cc ('k') | src/platform/update_engine/utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/platform/update_engine/update_metadata.proto
diff --git a/src/platform/update_engine/update_metadata.proto b/src/platform/update_engine/update_metadata.proto
new file mode 100644
index 0000000000000000000000000000000000000000..48935d8a6b2b3f5f1ed2569f8047ec3e4689f38c
--- /dev/null
+++ b/src/platform/update_engine/update_metadata.proto
@@ -0,0 +1,127 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Update file format: A delta update file contains all the deltas needed
+// to update a system from one specific version to another specific
+// version. The update format is represented by this struct pseudocode:
+// struct delta_update_file {
+// char magic[4] = "CrAU";
+// uint64 bom_offset; // Offset of protobuf DeltaArchiveManifest
+// uint64 bom_size; // Sise of protobuf DeltaArchiveManifest
+//
+// // Data blobs for files, no specific format. The specific offset
+// // and length of each data blob is recorded in the DeltaArchiveManifest.
+// struct {
+// char data[];
+// } blobs[];
+//
+// // The Gzip compressed DeltaArchiveManifest
+// char bom[];
+// };
+
+// The DeltaArchiveManifest protobuf is an ordered list of File objects.
+// These File objects are stored in a linear array in the
+// DeltaArchiveManifest, each with a specific index. Each File object
+// can contain children in its children list. Each child in the list
+// has a name and an index. The index refers to the index within
+// DeltaArchiveManifest.files. Thus, the DeltaArchiveManifest.files
+// can be seen as a tree structure that mimicks the filesystem.
+// The root object (the object an index 0) has no name, since names
+// for children are stored in the parent.
+
+// The DeltaArchiveManifest will contain one File entry for each
+// file that will be on the resultant filesystem. Because we have
+// a tree structure, and children are ordered alphabetically within
+// a parent, we can do log-time˜path lookup on a DeltaArchiveManifest
+// object. We can also iterate through a DeltaArchiveManifest object
+// using a preorder tree traversal to see each file in the
+// DeltaArchiveManifest, seeing each directory before any of its children;
+// this takes linear time.
+
+// Here's an example from Dan Erat showing DeltaArchiveManifest
+// for a filesystem with files /bin/cat and /bin/ls.:
+
+// files[0] { // "/" directory
+// children[0] {
+// name "bin"
+// index 1
+// }
+// }
+// files[1] { // "/bin" directory
+// children[0] {
+// name "cat"
+// index 2
+// }
+// children[1] {
+// name "ls"
+// index 3
+// }
+// }
+// files[2] { // "/bin/cat"
+// }
+// files[3] { // "/bin/ls"
+// }
+
+// If a file has a data_format set, it should also have data_offset and
+// data_length set. data_offset and data_length refer to a range of bytes
+// in the delta update file itself which have the format specified by
+// data_format. FULL and FULL_GZ mean the entire file is present (FULL_GZ,
+// gzip compressed). BSDIFF means the old file with the same path should be
+// patched with 'bspatch' to produce the desired output file. COURGETTE
+// is not yet used, but it will be another binary diff format.
+
+// Directories should not have any data.
+
+// There are other types of files, too: symlinks, block and character devices,
+// fifos, and sockets. Fifos and sockets contain no data. Block and
+// character devices have data. It must be the format FULL or FULL_GZ, and
+// the contents are a serialized LinuxDevice protobuf. Symlinks must either
+// be FULL, FULL_GZ, or have no data. A symlink with no data is unchanged,
+// and with data it's set to that data.
+
+// TODO(adlr): Add support for hard links; CL is prepared already.
+// Extended attributes are unsupported at this time.
+
+package chromeos_update_engine;
+
+message DeltaArchiveManifest {
+ message File {
+ // This is st_mode from struct stat. It includes file type and permission
+ // bits.
+ optional uint32 mode = 1;
+ optional uint32 uid = 2;
+ optional uint32 gid = 3;
+
+ // File Data, not for directories
+ enum DataFormat {
+ FULL = 0; // The data is the complete file
+ FULL_GZ = 1; // The data is the complete file gzipped
+ BSDIFF = 2; // The data is a bsdiff binary diff
+ COURGETTE = 3; // The data is a courgette binary diff
+ }
+ // If present, there is data associated with this File object and
+ // data_offset and data_size must be set.
+ optional DataFormat data_format = 4;
+ // The offset into the delta file where the data (if any) is stored
+ optional uint32 data_offset = 5;
+ // The length of the data in the delta file
+ optional uint32 data_length = 6;
+
+ message Child {
+ // A File that's a directory (and only those types of File objects)
+ // will have exactly one Child submessage per child.
+ required string name = 1; // File name of child
+
+ // Index into DeltaArchiveManifest.files for the File object of the child.
+ required uint32 index = 2;
+ }
+ repeated Child children = 7;
+ }
+ repeated File files = 1;
+}
+
+message LinuxDevice {
+ required int32 major = 1;
+ required int32 minor = 2;
+}
« no previous file with comments | « src/platform/update_engine/test_http_server.cc ('k') | src/platform/update_engine/utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698