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.
+
+