diff --git a/doc/repo.xml b/doc/repo.xml index ee367b9e..dd49c28c 100644 --- a/doc/repo.xml +++ b/doc/repo.xml @@ -8,29 +8,70 @@ Core object types and data model - OSTree is deeply inspired by git. It is worth taking some time + OSTree is deeply inspired by git; like git, OSTree is a + userspace versioning filesystem. It is worth taking some time to familiarize yourself with Git - Internals, as this section will assume some knowledge of how - git works. + Internals, as this section will assume some knowledge of + how git works. - Like git, OSTree is a userspace versioning filesystem. Its - object types are similar to git; it has commit objects and + Its object types are similar to git; it has commit objects and content objects. Git has "tree" objects, whereas OSTree splits them into "dirtree" and "dirmeta" objects. But unlike git, - OSTree's checksums are SHA256. Its content objects include uid, - gid, and extended attributes (but still no timestamps). + OSTree's checksums are SHA256. And most crucially, its content + objects include uid, gid, and extended attributes (but still no + timestamps). - - Also like git, each commit in OSTree can have a parent. It is - designed to store a history of your binary builds, just like git - stores a history of source control. However, OSTree also makes - it easy to delete data, under the assumption that you can - regenerate it from source code. - + + Commit objects + + A commit object contains metadata such as a timestamp, a log + message, and most importantly, a reference to a + dirtree/dirmeta pair of checksums which describe the root + directory of the filesystem. + + + Also like git, each commit in OSTree can have a parent. It is + designed to store a history of your binary builds, just like git + stores a history of source control. However, OSTree also makes + it easy to delete data, under the assumption that you can + regenerate it from source code. + + + + + Dirtree objects + + A dirtree contains a sorted array of (filename, checksum) + pairs for content objects, and a second sorted array of + (filename, dirtree checksum, dirmeta checksum), which are + subdirectories. + + + + + Dirmeta objects + + In git, tree objects contain the metadata such as permissions + for their children. But OSTree splits this into a separate + object to avoid duplicating extended attribute listings. + + + + + Content objects + + Unlike the first three object types which are metadata, + designed to be mmap()ed, the content object + has a separate internal header and payload sections. The + header contains uid, gid, mode, and symbolic link target (for + symlinks), as well as extended attributes. After the header, + for regular files, the content follows. + +