summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcgwalters <cgwalters@users.noreply.github.com>2023-05-03 12:28:36 +0000
committercgwalters <cgwalters@users.noreply.github.com>2023-05-03 12:28:36 +0000
commit39b623c8f568d1baaf089175f859c7e83dae8c5a (patch)
treeea763f34cfafb24690a1f6fe43b4b3ab86d27aac
downloadostree-gh-pages.tar.gz
jekyll build from Action 8a2993a9d01cc358e4c2d936ca132174aabdc714gh-pages
-rw-r--r--.nojekyll0
-rw-r--r--CONTRIBUTING/index.html460
-rw-r--r--README-historical/index.html778
-rw-r--r--adapting-existing/index.html441
-rw-r--r--assets/css/just-the-docs-dark.css1
-rw-r--r--assets/css/just-the-docs-default.css1
-rw-r--r--assets/css/just-the-docs-light.css1
-rw-r--r--assets/images/just-the-docs.pngbin0 -> 20992 bytes
-rw-r--r--assets/images/large-image.jpgbin0 -> 545267 bytes
-rw-r--r--assets/images/search.svg1
-rw-r--r--assets/images/small-image.jpgbin0 -> 44128 bytes
-rw-r--r--assets/js/just-the-docs.js497
-rw-r--r--assets/js/search-data.json793
-rw-r--r--assets/js/vendor/lunr.min.js61
-rw-r--r--atomic-upgrades/index.html427
-rw-r--r--buildsystem-and-repos/index.html460
-rw-r--r--contributing-tutorial/index.html848
-rw-r--r--deployment/index.html397
-rw-r--r--formats/index.html518
-rw-r--r--ima/index.html397
-rw-r--r--index.html455
-rw-r--r--introduction/index.html451
-rw-r--r--man/index.html1
-rw-r--r--man/ostree-admin-cleanup.html3
-rw-r--r--man/ostree-admin-config-diff.html8
-rw-r--r--man/ostree-admin-deploy.html35
-rw-r--r--man/ostree-admin-init-fs.html5
-rw-r--r--man/ostree-admin-instutil.html10
-rw-r--r--man/ostree-admin-os-init.html9
-rw-r--r--man/ostree-admin-pin.html7
-rw-r--r--man/ostree-admin-set-origin.html12
-rw-r--r--man/ostree-admin-status.html8
-rw-r--r--man/ostree-admin-switch.html5
-rw-r--r--man/ostree-admin-undeploy.html15
-rw-r--r--man/ostree-admin-unlock.html16
-rw-r--r--man/ostree-admin-upgrade.html25
-rw-r--r--man/ostree-admin.html9
-rw-r--r--man/ostree-cat.html5
-rw-r--r--man/ostree-checkout.html50
-rw-r--r--man/ostree-checksum.html7
-rw-r--r--man/ostree-commit.html82
-rw-r--r--man/ostree-config.html14
-rw-r--r--man/ostree-create-usb.html35
-rw-r--r--man/ostree-diff.html17
-rw-r--r--man/ostree-export.html5
-rw-r--r--man/ostree-find-remotes.html47
-rw-r--r--man/ostree-fsck.html25
-rw-r--r--man/ostree-gpg-sign.html10
-rw-r--r--man/ostree-init.html33
-rw-r--r--man/ostree-log.html13
-rw-r--r--man/ostree-ls.html17
-rw-r--r--man/ostree-prune.html31
-rw-r--r--man/ostree-pull-local.html15
-rw-r--r--man/ostree-pull.html51
-rw-r--r--man/ostree-refs.html36
-rw-r--r--man/ostree-remote.html60
-rw-r--r--man/ostree-reset.html15
-rw-r--r--man/ostree-rev-parse.html7
-rw-r--r--man/ostree-show.html27
-rw-r--r--man/ostree-sign.html35
-rw-r--r--man/ostree-static-delta.html68
-rw-r--r--man/ostree-summary.html52
-rw-r--r--man/ostree-trivial-httpd.html13
-rw-r--r--man/ostree.html196
-rw-r--r--man/ostree.repo-config.html208
-rw-r--r--man/ostree.repo.html30
-rw-r--r--man/rofiles-fuse.html31
-rw-r--r--reference/home.pngbin0 -> 256 bytes
-rw-r--r--reference/index.html97
-rw-r--r--reference/left-insensitive.pngbin0 -> 395 bytes
-rw-r--r--reference/left.pngbin0 -> 262 bytes
-rw-r--r--reference/ostree-Core-repository-independent-functions.html3058
-rw-r--r--reference/ostree-GPG-signature-verification-results.html757
-rw-r--r--reference/ostree-In-memory-modifiable-filesystem-tree.html685
-rw-r--r--reference/ostree-OstreeRepo.html10574
-rw-r--r--reference/ostree-Progress-notification-system-for-asynchronous-operations.html623
-rw-r--r--reference/ostree-Root-partition-mount-point.html2497
-rw-r--r--reference/ostree-SELinux-policy-management.html566
-rw-r--r--reference/ostree-Signature-management.html878
-rw-r--r--reference/ostree-Simple-upgrade-class.html726
-rw-r--r--reference/ostree-ostree-bootconfig-parser.html400
-rw-r--r--reference/ostree-ostree-chain-input-stream.html89
-rw-r--r--reference/ostree-ostree-checksum-input-stream.html90
-rw-r--r--reference/ostree-ostree-content-writer.html101
-rw-r--r--reference/ostree-ostree-deployment.html842
-rw-r--r--reference/ostree-ostree-diff.html369
-rw-r--r--reference/ostree-ostree-kernel-args.html1005
-rw-r--r--reference/ostree-ostree-ref.html373
-rw-r--r--reference/ostree-ostree-remote.html230
-rw-r--r--reference/ostree-ostree-repo-file.html512
-rw-r--r--reference/ostree-ostree-repo-finder.html577
-rw-r--r--reference/ostree-ostree-repo-remote-finder.html516
-rw-r--r--reference/ostree-ostree-version.html163
-rw-r--r--reference/ostree.devhelp2673
-rw-r--r--reference/reference.html2210
-rw-r--r--reference/right-insensitive.pngbin0 -> 373 bytes
-rw-r--r--reference/right.pngbin0 -> 261 bytes
-rw-r--r--reference/style.css530
-rw-r--r--reference/up-insensitive.pngbin0 -> 374 bytes
-rw-r--r--reference/up.pngbin0 -> 260 bytes
-rw-r--r--related-projects/index.html780
-rw-r--r--repo/index.html488
-rw-r--r--repository-management/index.html543
103 files changed, 39342 insertions, 0 deletions
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/.nojekyll
diff --git a/CONTRIBUTING/index.html b/CONTRIBUTING/index.html
new file mode 100644
index 00000000..a331a9e5
--- /dev/null
+++ b/CONTRIBUTING/index.html
@@ -0,0 +1,460 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Contributing | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Contributing" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/CONTRIBUTING/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/CONTRIBUTING/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Contributing" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Contributing","url":"https://ostreedev.github.io/ostree/CONTRIBUTING/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item active"><a href="/ostree/CONTRIBUTING/" class="nav-list-link active">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="contributing">
+
+
+ <a href="#contributing" class="anchor-heading" aria-labelledby="contributing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Contributing
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#submitting-patches" id="markdown-toc-submitting-patches">Submitting patches</a></li>
+ <li><a href="#commit-message-style" id="markdown-toc-commit-message-style">Commit message style</a></li>
+ <li><a href="#running-the-test-suite" id="markdown-toc-running-the-test-suite">Running the test suite</a></li>
+ <li><a href="#coding-style" id="markdown-toc-coding-style">Coding style</a></li>
+ <li><a href="#contributing-tutorial" id="markdown-toc-contributing-tutorial">Contributing Tutorial</a></li>
+ <li><a href="#release-process" id="markdown-toc-release-process">Release process</a></li>
+</ol>
+<h2 id="submitting-patches">
+
+
+ <a href="#submitting-patches" class="anchor-heading" aria-labelledby="submitting-patches"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Submitting patches
+
+
+</h2>
+
+
+<p>A majority of current maintainers prefer the GitHub pull request
+model, and this motivated moving the primary git repository to
+<a href="https://github.com/ostreedev/ostree">https://github.com/ostreedev/ostree</a>.</p>
+
+<p>However, we do not use the “Merge pull request” button, because we do
+not like merge commits for one-patch pull requests, among other
+reasons. See <a href="https://github.com/isaacs/github/issues/2">this issue</a>
+for more information. Instead, we use an instance of
+<a href="https://github.com/servo/homu">Homu</a>, currently known as
+<code class="language-plaintext highlighter-rouge">cgwalters-bot</code>.</p>
+
+<p>As a review proceeds, the preferred method is to push <code class="language-plaintext highlighter-rouge">fixup!</code> commits. Any commits committed with the <code class="language-plaintext highlighter-rouge">--fixup</code> option will have have the word <code class="language-plaintext highlighter-rouge">fixup!</code> in its commit title. This is to indicate that this particular commit will be squashed with the commit that was specified in this command, <code class="language-plaintext highlighter-rouge">git commit --fixup &lt;commit ref or hash&gt;</code>. Homu knows how to use <code class="language-plaintext highlighter-rouge">--autosquash</code> when performing the final merge.</p>
+
+<p>See the
+<a href="https://git-scm.com/docs/git-rebase">Git documentation</a> for more
+information.</p>
+
+<p>Alternative methods if you don’t like GitHub (also fully supported):</p>
+
+<ol>
+ <li>Send mail to <a href="mailto:ostree-list@gnome.org">ostree-list@gnome.org</a>, with the patch attached</li>
+ <li>Attach them to <a href="https://bugzilla.gnome.org/">https://bugzilla.gnome.org/</a></li>
+</ol>
+
+<p>It is likely however once a patch is ready to apply a maintainer
+will push it to a GitHub PR, and merge via Homu.</p>
+<h2 id="commit-message-style">
+
+
+ <a href="#commit-message-style" class="anchor-heading" aria-labelledby="commit-message-style"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Commit message style
+
+
+</h2>
+
+
+<p>Please look at <code class="language-plaintext highlighter-rouge">git log</code> and match the commit log style, which is very
+similar to the
+<a href="https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git">Linux kernel</a>.</p>
+
+<p>You may use <code class="language-plaintext highlighter-rouge">Signed-off-by</code>, but we’re not requiring it.</p>
+
+<p><strong>General Commit Message Guidelines</strong>:</p>
+
+<ol>
+ <li>Title
+ <ul>
+ <li>Specify the context or category of the changes e.g. <code class="language-plaintext highlighter-rouge">lib</code> for library changes, <code class="language-plaintext highlighter-rouge">docs</code> for document changes, <code class="language-plaintext highlighter-rouge">bin/&lt;command-name&gt;</code> for command changes, etc.</li>
+ <li>Begin the title with the first letter of the first word capitalized.</li>
+ <li>Aim for less than 50 characters, otherwise 72 characters max.</li>
+ <li>Do not end the title with a period.</li>
+ <li>Use an <a href="https://en.wikipedia.org/wiki/Imperative_mood">imperative tone</a>.</li>
+ </ul>
+ </li>
+ <li>Body
+ <ul>
+ <li>Separate the body with a blank line after the title.</li>
+ <li>Begin a paragraph with the first letter of the first word capitalized.</li>
+ <li>Each paragraph should be formatted within 72 characters.</li>
+ <li>Content should be about what was changed and why this change was made.</li>
+ <li>If your commit fixes an issue, the commit message should end with <code class="language-plaintext highlighter-rouge">Closes: #&lt;number&gt;</code>.</li>
+ </ul>
+ </li>
+</ol>
+
+<p>Commit Message example:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;context&gt;: Less than 50 characters <span class="k">for </span>subject title
+
+A paragraph of the body should be within 72 characters.
+
+This paragraph is also less than 72 characters.
+</code></pre></div></div>
+
+<p>For more information see <a href="https://chris.beams.io/posts/git-commit/">How to Write a Git Commit Message</a></p>
+
+<p><strong>Editing a Committed Message:</strong></p>
+
+<p>To edit the message from the most recent commit run <code class="language-plaintext highlighter-rouge">git commit --amend</code>. To change older commits on the branch use <code class="language-plaintext highlighter-rouge">git rebase -i</code>. For a successful rebase have the branch track <code class="language-plaintext highlighter-rouge">upstream main</code>. Once the changes have been made and saved, run <code class="language-plaintext highlighter-rouge">git push --force origin &lt;branch-name&gt;</code>.</p>
+<h2 id="running-the-test-suite">
+
+
+ <a href="#running-the-test-suite" class="anchor-heading" aria-labelledby="running-the-test-suite"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Running the test suite
+
+
+</h2>
+
+
+<p>OSTree uses both <code class="language-plaintext highlighter-rouge">make check</code> and supports the
+<a href="https://wiki.gnome.org/GnomeGoals/InstalledTests">Installed Tests</a>
+model as well (if <code class="language-plaintext highlighter-rouge">--enable-installed-tests</code> is provided).</p>
+<h2 id="coding-style">
+
+
+ <a href="#coding-style" class="anchor-heading" aria-labelledby="coding-style"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Coding style
+
+
+</h2>
+
+
+<p>Indentation is GNU. Files should start with the appropriate mode lines.</p>
+
+<p>Use GCC <code class="language-plaintext highlighter-rouge">__attribute__((cleanup))</code> wherever possible. If interacting
+with a third party library, try defining local cleanup macros.</p>
+
+<p>Use GError and GCancellable where appropriate.</p>
+
+<p>Prefer returning <code class="language-plaintext highlighter-rouge">gboolean</code> to signal success/failure, and have output
+values as parameters.</p>
+
+<p>Prefer linear control flow inside functions (aside from standard
+loops). In other words, avoid “early exits” or use of <code class="language-plaintext highlighter-rouge">goto</code> besides
+<code class="language-plaintext highlighter-rouge">goto out;</code>.</p>
+
+<p>This is an example of an “early exit”:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static gboolean
+myfunc (...)
+{
+ gboolean ret = FALSE;
+
+ /* some code */
+
+ /* some more code */
+
+ if (condition)
+ return FALSE;
+
+ /* some more code */
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+</code></pre></div></div>
+
+<p>If you must shortcut, use:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>if (condition)
+ {
+ ret = TRUE;
+ goto out;
+ }
+</code></pre></div></div>
+
+<p>A consequence of this restriction is that you are encouraged to avoid
+deep nesting of loops or conditionals. Create internal static helper
+functions, particularly inside loops. For example, rather than:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>while (condition)
+ {
+ /* some code */
+ if (condition)
+ {
+ for (i = 0; i &lt; somevalue; i++)
+ {
+ if (condition)
+ {
+ /* deeply nested code */
+ }
+
+ /* more nested code */
+ }
+ }
+ }
+</code></pre></div></div>
+
+<p>Instead do this:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static gboolean
+helperfunc (..., GError **error)
+{
+ if (condition)
+ {
+ /* deeply nested code */
+ }
+
+ /* more nested code */
+
+ return ret;
+}
+
+while (condition)
+ {
+ /* some code */
+ if (!condition)
+ continue;
+
+ for (i = 0; i &lt; somevalue; i++)
+ {
+ if (!helperfunc (..., i, error))
+ goto out;
+ }
+ }
+</code></pre></div></div>
+<h2 id="contributing-tutorial">
+
+
+ <a href="#contributing-tutorial" class="anchor-heading" aria-labelledby="contributing-tutorial"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Contributing Tutorial
+
+
+</h2>
+
+
+<p>For a detailed walk-through on building, modifying, and testing, see this <a href="/ostree/contributing-tutorial/">tutorial on how to start contributing to OSTree</a>.</p>
+<h2 id="release-process">
+
+
+ <a href="#release-process" class="anchor-heading" aria-labelledby="release-process"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Release process
+
+
+</h2>
+
+
+<p>Releases can be performed by <a href="https://github.com/ostreedev/ostree/issues/new?labels=kind/release&amp;template=release-checklist.md">creating a new release ticket</a> and following the steps in the checklist there.</p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/CONTRIBUTING.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/README-historical/index.html b/README-historical/index.html
new file mode 100644
index 00000000..52d4deef
--- /dev/null
+++ b/README-historical/index.html
@@ -0,0 +1,778 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Historical OSTree README | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Historical OSTree README" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/README-historical/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/README-historical/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Historical OSTree README" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Historical OSTree README","url":"https://ostreedev.github.io/ostree/README-historical/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item active"><a href="/ostree/README-historical/" class="nav-list-link active">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <p><strong>This file is outdated, but some of the text here is still useful for
+historical context. I’m preserving it (explicitly still in the tree)
+for posterity.</strong></p>
+<h1 id="ostree">
+
+
+ <a href="#ostree" class="anchor-heading" aria-labelledby="ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree
+
+
+</h1>
+
+<h2 id="problem-statement">
+
+
+ <a href="#problem-statement" class="anchor-heading" aria-labelledby="problem-statement"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Problem statement
+
+
+</h2>
+
+
+<p>Hacking on the core operating system is painful - this includes most
+of GNOME from upower and NetworkManager up to gnome-shell. I want a
+system that matches these requirements:</p>
+
+<ol>
+ <li>Does not disturb your existing OS</li>
+ <li>Is not terribly slow to use</li>
+ <li>Shares your $HOME - you have your data</li>
+ <li>Allows easy rollback</li>
+ <li>Ideally allows access to existing apps</li>
+</ol>
+<h2 id="comparison-with-existing-tools">
+
+
+ <a href="#comparison-with-existing-tools" class="anchor-heading" aria-labelledby="comparison-with-existing-tools"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Comparison with existing tools
+
+
+</h2>
+
+
+<ul>
+ <li>
+ <p>Virtualization</p>
+
+ <p>Fails on points 2) and 3). Actually qemu-kvm can be pretty fast,
+ but in a lot of cases there is no substitute for actually booting
+ on bare metal; GNOME 3 really needs some hardware GPU
+ acceleration.</p>
+ </li>
+ <li>
+ <p>Rebuilding distribution packages</p>
+
+ <p>Fails on points 1) and 4). Is also just very annoying: dpkg/rpm
+ both want tarballs, which you don’t have since you’re working from
+ git. The suggested “mock/pbuilder” type chroot builds are <em>slow</em>.
+ And even with non-chroot builds there is lots of pointless build
+ wrapping going on. Both dpkg and rpm also are poor at helping you
+ revert back to the original system.</p>
+
+ <p>All of this can be scripted to be less bad of course - and I have
+ worked on such scripts. But fundamentally you’re still fighting
+ the system, and if you’re hacking on a lowlevel library like say
+ glib, you can easily get yourself to the point where you need a
+ recovery CD - at that point your edit/compile/debug cycle is just
+ too long.</p>
+ </li>
+ <li>
+ <p>“sudo make install”</p>
+
+ <p>Now your system is in an undefined state. You can use e.g. rpm
+ -qV to try to find out what you overwrote, but neither dpkg nor
+ rpm will help clean up any files left over that aren’t shipped by
+ the old package.</p>
+
+ <p>This is most realistic option for people hacking on system
+ components currently, but ostree will be better.</p>
+ </li>
+ <li>
+ <p>LXC / containers</p>
+
+ <p>Fails on 3), and 4) is questionable. Also shares the annoying part
+of rebuilding distribution packages. LXC is focused on running
+multiple server systems at the <em>same time</em>, which isn’t what we
+want (at least, not right now), and honestly even trying to support
+that for a graphical desktop would be a lot of tricky work, for
+example getting two GDM instances not to fight over VT
+allocations. But some bits of the technology may make sense to use.</p>
+ </li>
+ <li>
+ <p>jhbuild + distribution packages</p>
+
+ <p>The state of the art in GNOME - but can only build non-root things -
+ this means you can’t build NetworkManager, and thus are permanently
+ stuck on whatever the distro provides.</p>
+ </li>
+</ul>
+<h2 id="who-is-ostree-for">
+
+
+ <a href="#who-is-ostree-for" class="anchor-heading" aria-labelledby="who-is-ostree-for"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Who is ostree for?
+
+
+</h2>
+
+
+<p>First - operating system developers and testers. I specifically keep
+a few people in mind - Dan Williams and Eric Anholt, as well as myself
+obviously. For Eric Anholt, a key use case for him is being able to
+try out the latest gnome-shell, and combine it with his work on Mesa,
+and see how it works/performs - while retaining the ability to roll
+back if one or both breaks.</p>
+
+<p>The rollback concept is absolutely key for shipping anything to
+enthusiasts or knowledable testers. With a system like this, a tester
+can easily perform a local rollback - something just not well
+supported by dpkg/rpm. (What about Conary? See below.)</p>
+
+<p>Also, distributing operating system trees (instead of packages) gives
+us a sane place to perform automated QA <strong>before</strong> we ship it to
+testers. We should never be wasting these people’s time.</p>
+
+<p>Even better, this system would allow testers to <em>bisect</em> across
+operating system builds, and do so very efficiently.</p>
+<h2 id="the-core-idea---chroots">
+
+
+ <a href="#the-core-idea---chroots" class="anchor-heading" aria-labelledby="the-core-idea---chroots"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The core idea - chroots
+
+
+</h2>
+
+
+<p>chroots are the original lightweight “virtualization”. Let’s use
+them. So basically, you install a mainstream distribution (say
+Debian). It has a root filesystem like this:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> /usr
+ /etc
+ /home
+ ...
+</code></pre></div></div>
+
+<p>Now, what we can do is have a system that installs chroots as a subdirectory
+of the root, like:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> /ostree/gnomeos-3.0-opt-393a4555/{usr,etc,sbin,...}
+ /ostree/gnomeos-3.2-opt-7e9788a2/{usr,etc,sbin,...}
+</code></pre></div></div>
+
+<p>These live in the same root filesystem as your regular distribution
+(Note though, the root partition should be reasonably sized, or
+hopefully you’ve used just one big partition).</p>
+
+<p>You should be able to boot into one of these roots. Since ostree
+lives inside a distro created partition, a tricky part here is that we
+need to know how to interact with the installed distribution’s grub.
+This is an annoying but tractable problem.</p>
+
+<p>First, we install a kernel+initramfs alongside the distribution’s.
+Then, we have a “trampoline” ostree-init binary which is statically
+linked, and boot the kernel with init=/ostree/ostree-init. This then
+takes care of chrooting and running the init binary.</p>
+
+<p>An important note here is that we bind mount the real /home. This
+means you have your data. This also implies we share uid/gid, so
+/etc/passwd will have to be in sync. Probably what we’ll do is have a
+script to pull the data from the “host” OS.</p>
+
+<p>I’ve decided for now to move /var into /ostree to avoid sharing it
+with the “host” distribution, because in practice we’re likely
+to hit incompatibilities.</p>
+
+<p>Do note however /etc lives <em>inside</em> the OSTree; it’s presently
+versioned and readonly like everything else.</p>
+
+<p>On a pure OSTree system, the filesystem layout will look like this:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> .
+ |-- boot
+ |-- home
+ |-- ostree
+ | |-- var
+ | |-- current -&gt; gnomeos-3.2-opt-7e9788a2
+ | |-- gnomeos-3.0-opt-393a4555
+ | | |-- etc
+ | | |-- lib
+ | | |-- mnt
+ | | |-- proc
+ | | |-- run
+ | | |-- sbin
+ | | |-- srv
+ | | |-- sys
+ | | `-- usr
+ | `-- gnomeos-3.2-opt-7e9788a2
+ | |-- etc
+ | |-- lib
+ | |-- mnt
+ | |-- proc
+ | |-- run
+ | |-- sbin
+ | |-- srv
+ | |-- sys
+ | `-- usr
+ |-- root
+</code></pre></div></div>
+<h2 id="making-this-efficient">
+
+
+ <a href="#making-this-efficient" class="anchor-heading" aria-labelledby="making-this-efficient"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Making this efficient
+
+
+</h2>
+
+
+<p>One of the first things you’ll probably ask is “but won’t that use a
+lot of disk space”? Indeed, it will, if you just unpack a set of RPMs
+or .debs into each root.</p>
+
+<p>Besides chroots, there’s another old Unix idea we can take advantage
+of - hard links. These allow sharing the underlying data of a file,
+with the tradeoff that changing any one file will change all names
+that point to it. This mutability means that we have to either:</p>
+
+<ol>
+ <li>Make sure everything touching the operating system breaks hard links
+This is probably tractable over a long period of time, but if anything
+has a bug, then it corrupts the file effectively.</li>
+ <li>Make the core OS read-only, with a well-defined mechanism for mutating
+under the control of ostree.</li>
+</ol>
+
+<p>I chose 2.</p>
+<h2 id="a-userspace-content-addressed-versioning-filesystem">
+
+
+ <a href="#a-userspace-content-addressed-versioning-filesystem" class="anchor-heading" aria-labelledby="a-userspace-content-addressed-versioning-filesystem"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> A userspace content-addressed versioning filesystem
+
+
+</h2>
+
+
+<p>At its very core, that’s what ostree is. Just like git. If you
+understand git, you know it’s not like other revision control systems.
+git is effectively a specialized, userspace filesystem, and that is a
+very powerful idea.</p>
+
+<p>At the core of git is the idea of “content-addressed objects”. For
+background on this, see <a href="http://book.git-scm.com/7_how_git_stores_objects.html">http://book.git-scm.com/7_how_git_stores_objects.html</a></p>
+
+<p>Why not just use git? Basically because git is designed mainly for
+source trees - it goes to effort to be sure it’s compressing text for
+example, under the assumption that you have a lot of text. Its
+handling of binaries is very generic and unoptimized.</p>
+
+<p>In contrast, ostree is explicitly designed for binaries, and in
+particular one type of binary - ELF executables (or it will be once we
+start using bsdiff).</p>
+
+<p>Another big difference versus git is that ostree uses hard links
+between “checkouts” and the repository. This means each checkout uses
+almost no additional space, and is <em>extremely</em> fast to check out. We
+can do this because again each checkout is designed to be read-only.</p>
+
+<p>So we mentioned above there are:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> /ostree/gnomeos-3.2-opt-7e9788a2
+ /ostree/gnomeos-3.2-opt-393a4555
+</code></pre></div></div>
+
+<p>There is also a “repository” that looks like this:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> /ostree/repo/objects/17/a95e8ca0ba655b09cb68d7288342588e867ee0.file
+ /ostree/repo/objects/17/68625e7ff5a8db77904c77489dc6f07d4afdba.meta
+ /ostree/repo/objects/17/cc01589dd8540d85c0f93f52b708500dbaa5a9.file
+ /ostree/repo/objects/30
+ /ostree/repo/objects/30/6359b3ca7684358a3988afd005013f13c0c533.meta
+ /ostree/repo/objects/30/8f3c03010cedd930b1db756ce659c064f0cd7f.meta
+ /ostree/repo/objects/30/8cf0fd8e63dfff6a5f00ba5a48f3b92fb52de7.file
+ /ostree/repo/objects/30/6cad7f027d69a46bb376044434bbf28d63e88d.file
+</code></pre></div></div>
+
+<p>Each object is either metadata (like a commit or tree), or a hard link
+to a regular file.</p>
+
+<p>Note that also unlike git, the checksum here includes <em>metadata</em> such
+as uid, gid, permissions, and extended attributes. (It does not include
+file access times, since those shouldn’t matter for the OS)</p>
+
+<p>This is another important component to allowing the hardlinks. We
+wouldn’t want say all empty files to be shared necessarily. (Though
+maybe this is wrong, and since the OS is readonly, we can make all
+files owned by root without loss of generality).</p>
+
+<p>However this tradeoff means that we probably need a second index by
+content, so we don’t have to redownload the entire OS if permissions
+change =)</p>
+<h2 id="atomic-upgrades-rollback">
+
+
+ <a href="#atomic-upgrades-rollback" class="anchor-heading" aria-labelledby="atomic-upgrades-rollback"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Atomic upgrades, rollback
+
+
+</h2>
+
+
+<p>OSTree is designed to atomically swap operating systems - such that
+during an upgrade and reboot process, you either get the full new
+system, or the old one. There is no “Please don’t turn off your
+computer”. We do this by simply using a symbolic link like:</p>
+
+<p>/ostree/current -&gt; /ostree/gnomeos-3.4-opt-e3b0c4429</p>
+
+<p>Where gnomeos-e3b0c4429 has the full regular filesystem tree with usr/
+etc/ directories as above. To upgrade or rollback (there is no
+difference internally), we simply check out a new tree into
+gnomeos-b90ae4763 for example, then swap the “current” symbolic link,
+then remove the old tree.</p>
+
+<p>But does this mean you have to reboot for OS upgrades? Very likely,
+yes - and this is no different from RPM/deb or whatever. They just
+typically lie to you about it =)</p>
+
+<p>A typical model with RPM/deb is to unpack the new files, then use some
+IPC mechanism (SIGHUP, a control binary like /usr/sbin/apachectl) to
+signal the running process to reload. There are multiple problems
+with this - one is that in the new state, daemon A may depend on the
+updated configuration in daemon B. This may not be particularly
+common in default configurations, but it’s highly likely that that
+some deployments will have e.g. apache talking to a local MySQL
+instance. So you really want to do is only apply the updated
+configuration when all the files are in place; not after each RPM or
+.deb is installed.</p>
+
+<p>What’s even harder is the massive set of race conditions that are
+possible while RPM/deb are in the process of upgrading. Cron jobs are
+very likely to hit this. If we want the ability to apply updates to a
+live system, we could first pause execution of non-upgrade userspace
+tasks. This could be done via SIGSTOP for example. Then, we can swap
+around the filesystem tree, and then finally attempt to apply updates
+via SIGHUP, and if possible, restart processes.</p>
+<h2 id="configuration-management">
+
+
+ <a href="#configuration-management" class="anchor-heading" aria-labelledby="configuration-management"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Configuration Management
+
+
+</h2>
+
+
+<p>By now if you’ve thought about this problem domain before, you’re wondering
+about configuration management. In other words, if the OS is read only,
+how do I edit /etc/sudoers?</p>
+
+<p>Well, have you ever been a system administrator on a zypper/yum
+system, done an RPM update, which then drops .rpmnew files in your
+/etc/ that you have to go and hunt for with “find” or something, and
+said to yourself, “Wow, this system is awesome!!!” ? Right, that’s
+what I thought.</p>
+
+<p>Configuration (and systems) management is a tricky problem, and I
+certainly don’t have a magic bullet. However, one large conceptual
+improvement I think is defaulting to “rebase” versus “merge”.</p>
+
+<p>This means that we won’t permit direct modification of /etc - instead,
+you HAVE to write a script which accomplishes your goals. To generate
+a tree, we check out a new copy, then run your script on top.</p>
+
+<p>If the script fails, we can roll back the update, or drop to a shell
+if interactive.</p>
+
+<p>However, we also need to consider cases where the administrator
+modifies state indirectly by a program. Think “adduser” for example.</p>
+
+<p>Possible approaches:</p>
+
+<ol>
+ <li>Patch all of these programs to know how to write to the writable
+location, instead of the R/O bind mount overlay.</li>
+ <li>Move the data to /var</li>
+</ol>
+<h2 id="what-about-packages">
+
+
+ <a href="#what-about-packages" class="anchor-heading" aria-labelledby="what-about-packages"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> What about “packages”?
+
+
+</h2>
+
+
+<p>There are several complex and separate issues hiding in this seemingly
+simple question.</p>
+
+<p>I think OSTree always makes sense to use as a core operating system
+builder and updater. By “core” here I mean the parts that aren’t
+removable. Debian has Essential: yes, any other distribution has this
+too implicitly in the set of dependencies for their updater tool.</p>
+
+<p>Now, let me just say I will absolutely support using something like
+apt/yum/zypper (and consequently deb/rpm) on top of OSTree. This
+isn’t trivial, but there aren’t any conceptual issues.</p>
+
+<p>Concretely for example, RPM or .deb might make sense as a delivery
+vehicle for third party OS extensions. A canoncial example is the
+NVidia graphics driver.</p>
+
+<p>If one is using OSTree to build an <em>operating system</em>, then there has
+to be some API for applications. And that demands its own targeted
+solution - something like an evolved glick (zeroinstall is also
+similar).</p>
+
+<p>Current package systems are totally broken for application deployment
+though; for example, they will remove files away from under running
+applications on update. And we clearly need the ability to install
+and upgrade applications without rebooting the OS.</p>
+<h2 id="details-of-rpm-installation">
+
+
+ <a href="#details-of-rpm-installation" class="anchor-heading" aria-labelledby="details-of-rpm-installation"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Details of RPM installation
+
+
+</h2>
+
+
+<p>We should be able to install LSB rpms. This implies providing “rpm”.
+The tricky part here is since the OS itself is not assembled via RPMs,
+we need to fake up a database of “provides” as if we were. Even
+harder would be maintaining binary compatibilty with any arbitrary
+%post scripts that may be run.</p>
+<h2 id="what-about-btrfs--doesnt-it-solve-everything">
+
+
+ <a href="#what-about-btrfs--doesnt-it-solve-everything" class="anchor-heading" aria-labelledby="what-about-btrfs--doesnt-it-solve-everything"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> What about BTRFS? Doesn’t it solve everything?
+
+
+</h2>
+
+
+<p>In short, BTRFS is not a magic bullet, but yes - it helps
+significantly. The obvious thing to do is layer BTRFS under dpkg/rpm,
+and have a separate subvolume for /home so rollbacks don’t lose your
+data. See e.g.
+<a href="http://fedoraproject.org/wiki/Features/SystemRollbackWithBtrfs">http://fedoraproject.org/wiki/Features/SystemRollbackWithBtrfs</a></p>
+
+<p>As a general rule an issue with the BTRFS is that it can’t roll back
+just changes to things installed by RPM (i.e. what’s in rpm -qal).</p>
+
+<p>For example, it’s possible to e.g. run yum update, then edit something
+in /etc, reboot and notice things are broken, then roll back and have
+silently lost your changes to /etc.</p>
+
+<p>Another example is adding a new binary in /usr/local. You could say,
+“OK, we’ll use subvolumes for those!”. But then what about /var (and
+your VM images that live in /var/lib/libvirt ?)</p>
+
+<p>Finally, probably the biggest disadvantage of the rpm/dpkg + BTRFS
+approach is it doesn’t solve the race conditions that happen when
+unpacking packages into the live system. This problem is really
+important to me.</p>
+
+<p>Note though ostree can definitely take advantage of BTRFS features!
+In particular, we could use “reflink”
+<a href="http://lwn.net/Articles/331808/">http://lwn.net/Articles/331808/</a> instead of hard links, and avoid
+having the object store corrupted if somehow the files are modified
+directly.</p>
+<h2 id="other-systems">
+
+
+ <a href="#other-systems" class="anchor-heading" aria-labelledby="other-systems"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Other systems
+
+
+</h2>
+
+
+<p>I’ve spent a long time thinking about this problem, and here are some
+of the other possible solutions out there I looked at, and why I
+didn’t use them:</p>
+
+<ul>
+ <li>
+ <p>Git: <a href="http://git-scm.com/">http://git-scm.com/</a></p>
+
+ <p>Really awesome, and the core inspiration here. But like I mentioned
+ above, not at all designed for binaries - we can make different tradeoffs.</p>
+ </li>
+ <li>
+ <p>bup: <a href="https://github.com/apenwarr/bup">https://github.com/apenwarr/bup</a></p>
+
+ <p>bup is cool. But it shares the negative tradeoffs with git, though it
+ does add positives of its own. It also inspired me.</p>
+ </li>
+ <li>
+ <p>git-annex: <a href="http://git-annex.branchable.com/git-annex/">http://git-annex.branchable.com/git-annex/</a></p>
+
+ <p>Looks interesting; I think this will share the same negative tradeoffs with git
+as far as using it for an OS goes.</p>
+ </li>
+ <li>
+ <p>schroot: <a href="http://www.debian-administration.org/articles/566">http://www.debian-administration.org/articles/566</a></p>
+
+ <p>Like LXC/containers, but just using a chroot.</p>
+ </li>
+ <li>
+ <p>NixOS: <a href="http://nixos.org/">http://nixos.org/</a></p>
+
+ <p>The NixOS people have a lot of really good ideas, and they’ve definitely
+ thought about the problem space. However, their approach of checksumming
+ all inputs to a package is pretty wacky. I don’t see the point, and moreover
+ it uses gobs of disk space.</p>
+ </li>
+ <li>
+ <p>Conary: <a href="http://wiki.rpath.com/wiki/Conary:Updates_and_Rollbacks">http://wiki.rpath.com/wiki/Conary:Updates_and_Rollbacks</a></p>
+
+ <p>If rpm/dpkg are like CVS, Conary is closer to Subversion. It’s not
+bad, but ostree is better than it for the exact same reasons git
+is better than Subversion.</p>
+ </li>
+ <li>
+ <p>BTRFS: <a href="http://en.wikipedia.org/wiki/Btrfs">http://en.wikipedia.org/wiki/Btrfs</a></p>
+
+ <p>See above.</p>
+ </li>
+ <li>
+ <p>Solaris IPS: <a href="http://hub.opensolaris.org/bin/view/Project+pkg/">http://hub.opensolaris.org/bin/view/Project+pkg/</a></p>
+
+ <p>Rollback is ZFS level, so I think this shares the same tradeoffs as BTRFS+RPM/deb.
+They probably have some vertical integration though which definitely helps.
+Obviously we can’t use ZFS.</p>
+ </li>
+ <li>
+ <p>Jhbuild: <a href="https://live.gnome.org/Jhbuild">https://live.gnome.org/Jhbuild</a></p>
+
+ <p>What we’ve been using in GNOME, and has the essential property of allowing you
+to “fall back” to a stable system. But ostree will blow it out of the water.</p>
+ </li>
+</ul>
+<h2 id="development">
+
+
+ <a href="#development" class="anchor-heading" aria-labelledby="development"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Development
+
+
+</h2>
+
+
+<ul>
+ <li>
+ <p>OSTree wiki page: <a href="https://live.gnome.org/OSTree">https://live.gnome.org/OSTree</a></p>
+ </li>
+ <li>
+ <p>ostbuild wiki page: <a href="https://live.gnome.org/OSTree/Ostbuild">https://live.gnome.org/OSTree/Ostbuild</a></p>
+ </li>
+ <li>
+ <p>Git repository: <a href="http://git.gnome.org/browse/ostree/">http://git.gnome.org/browse/ostree/</a></p>
+ </li>
+ <li>
+ <p>Deploying OSTree in the Gnome servers: <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669772">https://bugzilla.gnome.org/show_bug.cgi?id=669772</a></p>
+ </li>
+</ul>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/README-historical.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/adapting-existing/index.html b/adapting-existing/index.html
new file mode 100644
index 00000000..9bec41fa
--- /dev/null
+++ b/adapting-existing/index.html
@@ -0,0 +1,441 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Adapting existing mainstream distributions | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Adapting existing mainstream distributions" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/adapting-existing/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/adapting-existing/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Adapting existing mainstream distributions" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Adapting existing mainstream distributions","url":"https://ostreedev.github.io/ostree/adapting-existing/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item active"><a href="/ostree/adapting-existing/" class="nav-list-link active">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="adapting-existing-mainstream-distributions">
+
+
+ <a href="#adapting-existing-mainstream-distributions" class="anchor-heading" aria-labelledby="adapting-existing-mainstream-distributions"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Adapting existing mainstream distributions
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#system-layout" id="markdown-toc-system-layout">System layout</a></li>
+ <li><a href="#booting-and-initramfs-technology" id="markdown-toc-booting-and-initramfs-technology">Booting and initramfs technology</a></li>
+ <li><a href="#usrlibpasswd" id="markdown-toc-usrlibpasswd">/usr/lib/passwd</a></li>
+ <li><a href="#adapting-existing-package-managers" id="markdown-toc-adapting-existing-package-managers">Adapting existing package managers</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+</ol>
+<h2 id="system-layout">
+
+
+ <a href="#system-layout" class="anchor-heading" aria-labelledby="system-layout"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> System layout
+
+
+</h2>
+
+
+<p>First, OSTree encourages systems to implement
+<a href="http://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/">UsrMove</a>
+This is simply to avoid the need for more bind mounts. By default
+OSTree’s dracut hook creates a read-only bind mount over <code class="language-plaintext highlighter-rouge">/usr</code>; you
+can of course generate individual bind-mounts for <code class="language-plaintext highlighter-rouge">/bin</code>, all the
+<code class="language-plaintext highlighter-rouge">/lib</code> variants, etc. So it is not intended to be a hard requirement.</p>
+
+<p>Remember, because by default the system is booted into a <code class="language-plaintext highlighter-rouge">chroot</code>
+equivalent, there has to be some way to refer to the actual physical
+root filesystem. Therefore, your operating system tree should contain
+an empty <code class="language-plaintext highlighter-rouge">/sysroot</code> directory; at boot time, OSTree will make this a
+bind mount to the physical / root directory. There is precedent for
+this name in the initramfs context. You should furthermore make a
+toplevel symbolic link <code class="language-plaintext highlighter-rouge">/ostree</code> which points to <code class="language-plaintext highlighter-rouge">/sysroot/ostree</code>, so
+that the OSTree tool at runtime can consistently find the system data
+regardless of whether it’s operating on a physical root or inside a
+deployment.</p>
+
+<p>Because OSTree only preserves <code class="language-plaintext highlighter-rouge">/var</code> across upgrades (each
+deployment’s chroot directory will be garbage collected
+eventually), you will need to choose how to handle other
+toplevel writable directories specified by the <a href="http://www.pathname.com/fhs/">Filesystem Hierarchy Standard</a>.
+Your operating system may of course choose
+not to support some of these such as <code class="language-plaintext highlighter-rouge">/usr/local</code>, but following is the
+recommended set:</p>
+
+<ul>
+ <li><code class="language-plaintext highlighter-rouge">/home</code> → <code class="language-plaintext highlighter-rouge">/var/home</code></li>
+ <li><code class="language-plaintext highlighter-rouge">/opt</code> → <code class="language-plaintext highlighter-rouge">/var/opt</code></li>
+ <li><code class="language-plaintext highlighter-rouge">/srv</code> → <code class="language-plaintext highlighter-rouge">/var/srv</code></li>
+ <li><code class="language-plaintext highlighter-rouge">/root</code> → <code class="language-plaintext highlighter-rouge">/var/roothome</code></li>
+ <li><code class="language-plaintext highlighter-rouge">/usr/local</code> → <code class="language-plaintext highlighter-rouge">/var/usrlocal</code></li>
+ <li><code class="language-plaintext highlighter-rouge">/mnt</code> → <code class="language-plaintext highlighter-rouge">/var/mnt</code></li>
+ <li><code class="language-plaintext highlighter-rouge">/tmp</code> → <code class="language-plaintext highlighter-rouge">/sysroot/tmp</code></li>
+</ul>
+
+<p>Furthermore, since <code class="language-plaintext highlighter-rouge">/var</code> is empty by default, your operating system
+will need to dynamically create the <em>targets</em> of these at boot. A
+good way to do this is using <code class="language-plaintext highlighter-rouge">systemd-tmpfiles</code>, if your OS uses
+systemd. For example:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>d /var/log/journal 0755 root root -
+L /var/home - - - - ../sysroot/home
+d /var/opt 0755 root root -
+d /var/srv 0755 root root -
+d /var/roothome 0700 root root -
+d /var/usrlocal 0755 root root -
+d /var/usrlocal/bin 0755 root root -
+d /var/usrlocal/etc 0755 root root -
+d /var/usrlocal/games 0755 root root -
+d /var/usrlocal/include 0755 root root -
+d /var/usrlocal/lib 0755 root root -
+d /var/usrlocal/man 0755 root root -
+d /var/usrlocal/sbin 0755 root root -
+d /var/usrlocal/share 0755 root root -
+d /var/usrlocal/src 0755 root root -
+d /var/mnt 0755 root root -
+d /run/media 0755 root root -
+</code></pre></div></div>
+
+<p>Particularly note here the double indirection of <code class="language-plaintext highlighter-rouge">/home</code>. By default,
+each deployment will share the global toplevel <code class="language-plaintext highlighter-rouge">/home</code> directory on
+the physical root filesystem. It is then up to higher levels of
+management tools to keep <code class="language-plaintext highlighter-rouge">/etc/passwd</code> or equivalent synchronized
+between operating systems. Each deployment can easily be reconfigured
+to have its own home directory set simply by making <code class="language-plaintext highlighter-rouge">/var/home</code> a real
+directory.</p>
+<h2 id="booting-and-initramfs-technology">
+
+
+ <a href="#booting-and-initramfs-technology" class="anchor-heading" aria-labelledby="booting-and-initramfs-technology"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Booting and initramfs technology
+
+
+</h2>
+
+
+<p>OSTree comes with optional dracut+systemd integration code which follows
+this logic:</p>
+
+<ul>
+ <li>Parse the <code class="language-plaintext highlighter-rouge">ostree=</code> kernel command line argument in the initramfs</li>
+ <li>Set up a read-only bind mount on <code class="language-plaintext highlighter-rouge">/usr</code></li>
+ <li>Bind mount the deployment’s <code class="language-plaintext highlighter-rouge">/sysroot</code> to the physical <code class="language-plaintext highlighter-rouge">/</code></li>
+ <li>Use <code class="language-plaintext highlighter-rouge">mount(MS_MOVE)</code> to make the deployment root appear to be the root filesystem</li>
+</ul>
+
+<p>After these steps, systemd switches root.</p>
+
+<p>If you are not using dracut or systemd, using OSTree should still be
+possible, but you will have to write the integration code. See the
+existing sources in
+<a href="https://github.com/ostreedev/ostree/tree/main/src/switchroot">src/switchroot</a>
+as a reference.</p>
+
+<p>Patches to support other initramfs technologies and init systems, if
+sufficiently clean, will likely be accepted upstream.</p>
+
+<p>A further specific note regarding <code class="language-plaintext highlighter-rouge">sysvinit</code>: OSTree used to support
+recording device files such as the <code class="language-plaintext highlighter-rouge">/dev/initctl</code> FIFO, but no longer
+does. It’s recommended to just patch your initramfs to create this at
+boot.</p>
+<h2 id="usrlibpasswd">
+
+
+ <a href="#usrlibpasswd" class="anchor-heading" aria-labelledby="usrlibpasswd"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> /usr/lib/passwd
+
+
+</h2>
+
+
+<p>Unlike traditional package systems, OSTree trees contain <em>numeric</em> uid
+and gids. Furthermore, it does not have a <code class="language-plaintext highlighter-rouge">%post</code> type mechanism
+where <code class="language-plaintext highlighter-rouge">useradd</code> could be invoked. In order to ship an OS that
+contains both system users and users dynamically created on client
+machines, you will need to choose a solution for <code class="language-plaintext highlighter-rouge">/etc/passwd</code>. The
+core problem is that if you add a user to the system for a daemon, the
+OSTree upgrade process for <code class="language-plaintext highlighter-rouge">/etc</code> will simply notice that because
+<code class="language-plaintext highlighter-rouge">/etc/passwd</code> differs from the previous default, it will keep the
+modified config file, and your new OS user will not be visible. The
+solution chosen for the <a href="https://live.gnome.org/Projects/GnomeContinuous">Gnome Continuous</a> operating
+system is to create <code class="language-plaintext highlighter-rouge">/usr/lib/passwd</code>, and to include a NSS module
+<a href="https://github.com/aperezdc/nss-altfiles">nss-altfiles</a> which
+instructs glibc to read from it. Then, the build system places all
+system users there, freeing up <code class="language-plaintext highlighter-rouge">/etc/passwd</code> to be purely a database
+of local users. See also a more recent effort from <a href="http://0pointer.de/blog/projects/stateless.html">Systemd Stateless</a></p>
+<h2 id="adapting-existing-package-managers">
+
+
+ <a href="#adapting-existing-package-managers" class="anchor-heading" aria-labelledby="adapting-existing-package-managers"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Adapting existing package managers
+
+
+</h2>
+
+
+<p>The largest endeavor is likely to be redesigning your distribution’s
+package manager to be on top of OSTree, particularly if you want to
+keep compatibility with the “old way” of installing into the physical
+<code class="language-plaintext highlighter-rouge">/</code>. This section will use examples from both <code class="language-plaintext highlighter-rouge">dpkg</code> and <code class="language-plaintext highlighter-rouge">rpm</code> as the
+author has familiarity with both; but the abstract concepts should
+apply to most traditional package managers.</p>
+
+<p>There are many levels of possible integration; initially, we will
+describe the most naive implementation which is the simplest but also
+the least efficient. We will assume here that the admin is booted
+into an OSTree-enabled system, and wants to add a set of packages.</p>
+
+<p>Many package managers store their state in <code class="language-plaintext highlighter-rouge">/var</code>; but since in the
+OSTree model that directory is shared between independent versions,
+the package database must first be found in the per-deployment <code class="language-plaintext highlighter-rouge">/usr</code>
+directory. It becomes read-only; remember, all upgrades involve
+constructing a new filesystem tree, so your package manager will also
+need to create a copy of its database. Most likely, if you want to
+continue supporting non-OSTree deployments, simply have your package
+manager fall back to the legacy <code class="language-plaintext highlighter-rouge">/var</code> location if the one in <code class="language-plaintext highlighter-rouge">/usr</code>
+is not found.</p>
+
+<p>To install a set of new packages (without removing any existing ones),
+enumerate the set of packages in the currently booted deployment, and
+perform dependency resolution to compute the complete set of new
+packages. Download and unpack these new packages to a temporary
+directory.</p>
+
+<p>Now, because we are merely installing new packages and not
+removing anything, we can make the major optimization of reusing
+our existing filesystem tree, and merely
+<em>layering</em> the composed filesystem tree of
+these new packages on top. A command like this:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree commit -b osname/releasename/description
+--tree=ref=$osname/$releasename/$description
+--tree=dir=/var/tmp/newpackages.13A8D0/
+</code></pre></div></div>
+
+<p>will create a new commit in the <code class="language-plaintext highlighter-rouge">$osname/$releasename/$description</code>
+branch. The OSTree SHA256 checksum of all the files in
+<code class="language-plaintext highlighter-rouge">/var/tmp/newpackages.13A8D0/</code> will be computed, but we will not
+re-checksum the present existing tree. In this layering model,
+earlier directories will take precedence, but files in later layers
+will silently override earlier layers.</p>
+
+<p>Then to actually deploy this tree for the next boot:
+<code class="language-plaintext highlighter-rouge">ostree admin deploy $osname/$releasename/$description</code></p>
+
+<p>This is essentially what <a href="https://github.com/projectatomic/rpm-ostree/">rpm-ostree</a>
+does to support its <a href="https://rpm-ostree.readthedocs.io/en/latest/manual/administrator-handbook/#hybrid-imagepackaging-via-package-layering">package layering model</a>.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/adapting-existing.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/assets/css/just-the-docs-dark.css b/assets/css/just-the-docs-dark.css
new file mode 100644
index 00000000..58ca8a68
--- /dev/null
+++ b/assets/css/just-the-docs-dark.css
@@ -0,0 +1 @@
+.highlight .c{color:#586e75}.highlight .err{color:#93a1a1}.highlight .g{color:#93a1a1}.highlight .k{color:#859900}.highlight .l{color:#93a1a1}.highlight .n{color:#93a1a1}.highlight .o{color:#859900}.highlight .x{color:#cb4b16}.highlight .p{color:#93a1a1}.highlight .cm{color:#586e75}.highlight .cp{color:#859900}.highlight .c1{color:#586e75}.highlight .cs{color:#859900}.highlight .gd{color:#2aa198}.highlight .ge{font-style:italic;color:#93a1a1}.highlight .gr{color:#dc322f}.highlight .gh{color:#cb4b16}.highlight .gi{color:#859900}.highlight .go{color:#93a1a1}.highlight .gp{color:#93a1a1}.highlight .gs{font-weight:bold;color:#93a1a1}.highlight .gu{color:#cb4b16}.highlight .gt{color:#93a1a1}.highlight .kc{color:#cb4b16}.highlight .kd{color:#268bd2}.highlight .kn{color:#859900}.highlight .kp{color:#859900}.highlight .kr{color:#268bd2}.highlight .kt{color:#dc322f}.highlight .ld{color:#93a1a1}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#555}.highlight .nb{color:#b58900}.highlight .nc{color:#268bd2}.highlight .no{color:#cb4b16}.highlight .nd{color:#268bd2}.highlight .ni{color:#cb4b16}.highlight .ne{color:#cb4b16}.highlight .nf{color:#268bd2}.highlight .nl{color:#555}.highlight .nn{color:#93a1a1}.highlight .nx{color:#555}.highlight .py{color:#93a1a1}.highlight .nt{color:#268bd2}.highlight .nv{color:#268bd2}.highlight .ow{color:#859900}.highlight .w{color:#93a1a1}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#586e75}.highlight .sc{color:#2aa198}.highlight .sd{color:#93a1a1}.highlight .s2{color:#2aa198}.highlight .se{color:#cb4b16}.highlight .sh{color:#93a1a1}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc322f}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#268bd2}.highlight .vc{color:#268bd2}.highlight .vg{color:#268bd2}.highlight .vi{color:#268bd2}.highlight .il{color:#2aa198}.highlight,pre.highlight{background:#31343f;color:#dee2f7}.highlight pre{background:#31343f}.highlight .hll{background:#31343f}.highlight .c{color:#63677e;font-style:italic}.highlight .err{color:#960050;background-color:#1e0010}.highlight .k{color:#e19ef5}.highlight .l{color:#a3eea0}.highlight .n{color:#dee2f7}.highlight .o{color:#dee2f7}.highlight .p{color:#dee2f7}.highlight .cm{color:#63677e;font-style:italic}.highlight .cp{color:#63677e;font-style:italic}.highlight .c1{color:#63677e;font-style:italic}.highlight .cs{color:#63677e;font-style:italic}.highlight .ge{font-style:italic}.highlight .gs{font-weight:700}.highlight .kc{color:#e19ef5}.highlight .kd{color:#e19ef5}.highlight .kn{color:#e19ef5}.highlight .kp{color:#e19ef5}.highlight .kr{color:#e19ef5}.highlight .kt{color:#e19ef5}.highlight .ld{color:#a3eea0}.highlight .m{color:#eddc96}.highlight .s{color:#a3eea0}.highlight .na{color:#eddc96}.highlight .nb{color:#fdce68}.highlight .nc{color:#fdce68}.highlight .no{color:#fdce68}.highlight .nd{color:#fdce68}.highlight .ni{color:#fdce68}.highlight .ne{color:#fdce68}.highlight .nf{color:#dee2f7}.highlight .nl{color:#fdce68}.highlight .nn{color:#dee2f7}.highlight .nx{color:#dee2f7}.highlight .py{color:#fdce68}.highlight .nt{color:#f9867b}.highlight .nv{color:#fdce68}.highlight .ow{font-weight:700}.highlight .w{color:#f8f8f2}.highlight .mf{color:#eddc96}.highlight .mh{color:#eddc96}.highlight .mi{color:#eddc96}.highlight .mo{color:#eddc96}.highlight .sb{color:#a3eea0}.highlight .sc{color:#a3eea0}.highlight .sd{color:#a3eea0}.highlight .s2{color:#a3eea0}.highlight .se{color:#a3eea0}.highlight .sh{color:#a3eea0}.highlight .si{color:#a3eea0}.highlight .sx{color:#a3eea0}.highlight .sr{color:#7be2f9}.highlight .s1{color:#a3eea0}.highlight .ss{color:#7be2f9}.highlight .bp{color:#fdce68}.highlight .vc{color:#fdce68}.highlight .vg{color:#fdce68}.highlight .vi{color:#f9867b}.highlight .il{color:#eddc96}.highlight .gu{color:#75715e}.highlight .gd{color:#f92672}.highlight .gi{color:#a6e22e}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}*{box-sizing:border-box}::selection{color:#fff;background:#2c84fa}html{font-size:14px !important;scroll-behavior:smooth}@media (min-width: 31.25rem){html{font-size:16px !important}}body{font-family:system-ui,-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif;font-size:inherit;line-height:1.4;color:#e6e1e8;background-color:#27262b;overflow-wrap:break-word}ol,ul,dl,pre,address,blockquote,table,div,hr,form,fieldset,noscript .table-wrapper{margin-top:0}h1,h2,h3,h4,h5,h6,#toctitle{margin-top:0;margin-bottom:1em;font-weight:500;line-height:1.25;color:#f5f6fa}p{margin-top:1em;margin-bottom:1em}a{color:#2c84fa;text-decoration:none}a:not([class]){text-decoration:underline;text-decoration-color:#44434d;text-underline-offset:2px}a:not([class]):hover{text-decoration-color:rgba(44,132,250,0.45)}code{font-family:"SFMono-Regular",menlo,consolas,monospace;font-size:0.75em;line-height:1.4}figure,pre{margin:0}li{margin:0.25em 0}img{max-width:100%;height:auto}hr{height:1px;padding:0;margin:2rem 0;background-color:#44434d;border:0}blockquote{margin:10px 0;margin-block-start:0;margin-inline-start:0;padding-left:15px;border-left:3px solid #44434d}.side-bar{z-index:0;display:flex;flex-wrap:wrap;background-color:#27262b}@media (min-width: 50rem){.side-bar{flex-flow:column nowrap;position:fixed;width:248px;height:100%;border-right:1px solid #44434d;align-items:flex-end}}@media (min-width: 66.5rem){.side-bar{width:calc((100% - 1064px) / 2 + 264px);min-width:264px}}@media (min-width: 50rem){.main{position:relative;max-width:800px;margin-left:248px}}@media (min-width: 66.5rem){.main{margin-left:Max(264px, calc((100% - 1064px) / 2 + 264px))}}.main-content-wrap{padding-right:1rem;padding-left:1rem;padding-top:1rem;padding-bottom:1rem}@media (min-width: 50rem){.main-content-wrap{padding-right:2rem;padding-left:2rem}}@media (min-width: 50rem){.main-content-wrap{padding-top:2rem;padding-bottom:2rem}}.main-header{z-index:0;display:none;background-color:#27262b}@media (min-width: 50rem){.main-header{display:flex;justify-content:space-between;height:60px;background-color:#27262b;border-bottom:1px solid #44434d}}.main-header.nav-open{display:block}@media (min-width: 50rem){.main-header.nav-open{display:flex}}.site-nav,.site-header,.site-footer{width:100%}@media (min-width: 66.5rem){.site-nav,.site-header,.site-footer{width:264px}}.site-nav{display:none}.site-nav.nav-open{display:block}@media (min-width: 50rem){.site-nav{display:block;padding-top:3rem;padding-bottom:1rem;overflow-y:auto;flex:1 1 auto}}.site-header{display:flex;min-height:60px;align-items:center}@media (min-width: 50rem){.site-header{height:60px;max-height:60px;border-bottom:1px solid #44434d}}.site-title{padding-right:1rem;padding-left:1rem;flex-grow:1;display:flex;height:100%;align-items:center;padding-top:.75rem;padding-bottom:.75rem;color:#f5f6fa;font-size:18px !important}@media (min-width: 50rem){.site-title{padding-right:2rem;padding-left:2rem}}@media (min-width: 31.25rem){.site-title{font-size:24px !important;line-height:1.25}}@media (min-width: 50rem){.site-title{padding-top:.5rem;padding-bottom:.5rem}}.site-button{display:flex;height:100%;padding:1rem;align-items:center}@media (min-width: 50rem){.site-header .site-button{display:none}}.site-title:hover{background-image:linear-gradient(-90deg, #201f23 0%, rgba(32,31,35,0.8) 80%, rgba(32,31,35,0) 100%)}.site-button:hover{background-image:linear-gradient(-90deg, #201f23 0%, rgba(32,31,35,0.8) 100%)}body{position:relative;padding-bottom:4rem;overflow-y:scroll}@media (min-width: 50rem){body{position:static;padding-bottom:0}}.site-footer{padding-right:1rem;padding-left:1rem;position:absolute;bottom:0;left:0;padding-top:1rem;padding-bottom:1rem;color:#959396;font-size:11px !important}@media (min-width: 50rem){.site-footer{padding-right:2rem;padding-left:2rem}}@media (min-width: 31.25rem){.site-footer{font-size:12px !important}}@media (min-width: 50rem){.site-footer{position:static;justify-self:end}}.icon{width:1.5rem;height:1.5rem;color:#2c84fa}.main-content{line-height:1.6}.main-content ol,.main-content ul,.main-content dl,.main-content pre,.main-content address,.main-content blockquote,.main-content .table-wrapper{margin-top:0.5em}.main-content a{overflow:hidden;text-overflow:ellipsis}.main-content ul,.main-content ol{padding-left:1.5em}.main-content li .highlight{margin-top:.25rem}.main-content ol{list-style-type:none;counter-reset:step-counter}.main-content ol>li{position:relative}.main-content ol>li::before{position:absolute;top:0.2em;left:-1.6em;color:#959396;content:counter(step-counter);counter-increment:step-counter;font-size:12px !important}@media (min-width: 31.25rem){.main-content ol>li::before{font-size:14px !important}}@media (min-width: 31.25rem){.main-content ol>li::before{top:0.11em}}.main-content ol>li ol{counter-reset:sub-counter}.main-content ol>li ol>li::before{content:counter(sub-counter,lower-alpha);counter-increment:sub-counter}.main-content ul{list-style:none}.main-content ul>li::before{position:absolute;margin-left:-1.4em;color:#959396;content:"•"}.main-content .task-list-item::before{content:""}.main-content .task-list-item-checkbox{margin-right:0.6em;margin-left:-1.4em}.main-content hr+*{margin-top:0}.main-content h1:first-of-type{margin-top:0.5em}.main-content dl{display:grid;grid-template:auto / 10em 1fr}.main-content dt,.main-content dd{margin:0.25em 0}.main-content dt{grid-column:1;font-weight:500;text-align:right}.main-content dt::after{content:":"}.main-content dd{grid-column:2;margin-bottom:0;margin-left:1em}.main-content dd blockquote:first-child,.main-content dd div:first-child,.main-content dd dl:first-child,.main-content dd dt:first-child,.main-content dd h1:first-child,.main-content dd h2:first-child,.main-content dd h3:first-child,.main-content dd h4:first-child,.main-content dd h5:first-child,.main-content dd h6:first-child,.main-content dd li:first-child,.main-content dd ol:first-child,.main-content dd p:first-child,.main-content dd pre:first-child,.main-content dd table:first-child,.main-content dd ul:first-child,.main-content dd .table-wrapper:first-child{margin-top:0}.main-content dd dl:first-child dt:first-child,.main-content dd dl:first-child dd:nth-child(2),.main-content ol dl:first-child dt:first-child,.main-content ol dl:first-child dd:nth-child(2),.main-content ul dl:first-child dt:first-child,.main-content ul dl:first-child dd:nth-child(2){margin-top:0}.main-content .anchor-heading{position:absolute;right:-1rem;width:1.5rem;height:100%;padding-right:.25rem;padding-left:.25rem;overflow:visible}@media (min-width: 50rem){.main-content .anchor-heading{right:auto;left:-1.5rem}}.main-content .anchor-heading svg{display:inline-block;width:100%;height:100%;color:#2c84fa;visibility:hidden}.main-content .anchor-heading:hover svg,.main-content .anchor-heading:focus svg,.main-content h1:hover>.anchor-heading svg,.main-content h2:hover>.anchor-heading svg,.main-content h3:hover>.anchor-heading svg,.main-content h4:hover>.anchor-heading svg,.main-content h5:hover>.anchor-heading svg,.main-content h6:hover>.anchor-heading svg{visibility:visible}.main-content summary{cursor:pointer}.main-content h1,.main-content h2,.main-content h3,.main-content h4,.main-content h5,.main-content h6,.main-content #toctitle{position:relative;margin-top:1.5em;margin-bottom:0.25em}.main-content h1+table,.main-content h1+.table-wrapper,.main-content h1+.code-example,.main-content h1+.highlighter-rouge,.main-content h1+.sectionbody .listingblock,.main-content h2+table,.main-content h2+.table-wrapper,.main-content h2+.code-example,.main-content h2+.highlighter-rouge,.main-content h2+.sectionbody .listingblock,.main-content h3+table,.main-content h3+.table-wrapper,.main-content h3+.code-example,.main-content h3+.highlighter-rouge,.main-content h3+.sectionbody .listingblock,.main-content h4+table,.main-content h4+.table-wrapper,.main-content h4+.code-example,.main-content h4+.highlighter-rouge,.main-content h4+.sectionbody .listingblock,.main-content h5+table,.main-content h5+.table-wrapper,.main-content h5+.code-example,.main-content h5+.highlighter-rouge,.main-content h5+.sectionbody .listingblock,.main-content h6+table,.main-content h6+.table-wrapper,.main-content h6+.code-example,.main-content h6+.highlighter-rouge,.main-content h6+.sectionbody .listingblock,.main-content #toctitle+table,.main-content #toctitle+.table-wrapper,.main-content #toctitle+.code-example,.main-content #toctitle+.highlighter-rouge,.main-content #toctitle+.sectionbody .listingblock{margin-top:1em}.main-content h1+p:not(.label),.main-content h2+p:not(.label),.main-content h3+p:not(.label),.main-content h4+p:not(.label),.main-content h5+p:not(.label),.main-content h6+p:not(.label),.main-content #toctitle+p:not(.label){margin-top:0}.main-content>h1:first-child,.main-content>h2:first-child,.main-content>h3:first-child,.main-content>h4:first-child,.main-content>h5:first-child,.main-content>h6:first-child,.main-content>.sect1:first-child>h2,.main-content>.sect2:first-child>h3,.main-content>.sect3:first-child>h4,.main-content>.sect4:first-child>h5,.main-content>.sect5:first-child>h6{margin-top:.5rem}.nav-list{padding:0;margin-top:0;margin-bottom:0;list-style:none}.nav-list .nav-list-item{font-size:14px !important;position:relative;margin:0}@media (min-width: 31.25rem){.nav-list .nav-list-item{font-size:16px !important}}@media (min-width: 50rem){.nav-list .nav-list-item{font-size:12px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.nav-list .nav-list-item{font-size:14px !important}}.nav-list .nav-list-item .nav-list-link{display:block;min-height:3rem;padding-top:.25rem;padding-bottom:.25rem;line-height:2.5rem;padding-right:3rem;padding-left:1rem}@media (min-width: 50rem){.nav-list .nav-list-item .nav-list-link{min-height:2rem;line-height:1.5rem;padding-right:2rem;padding-left:2rem}}.nav-list .nav-list-item .nav-list-link.external>svg{width:1rem;height:1rem;vertical-align:text-bottom}.nav-list .nav-list-item .nav-list-link.active{font-weight:600;text-decoration:none}.nav-list .nav-list-item .nav-list-link:hover,.nav-list .nav-list-item .nav-list-link.active{background-image:linear-gradient(-90deg, #201f23 0%, rgba(32,31,35,0.8) 80%, rgba(32,31,35,0) 100%)}.nav-list .nav-list-item .nav-list-expander{position:absolute;right:0;width:3rem;height:3rem;padding:.75rem;color:#2c84fa}@media (min-width: 50rem){.nav-list .nav-list-item .nav-list-expander{width:2rem;height:2rem;padding:.5rem}}.nav-list .nav-list-item .nav-list-expander:hover{background-image:linear-gradient(-90deg, #201f23 0%, rgba(32,31,35,0.8) 100%)}.nav-list .nav-list-item .nav-list-expander svg{transform:rotate(90deg)}.nav-list .nav-list-item>.nav-list{display:none;padding-left:.75rem;list-style:none}.nav-list .nav-list-item>.nav-list .nav-list-item{position:relative}.nav-list .nav-list-item>.nav-list .nav-list-item .nav-list-link{color:#959396}.nav-list .nav-list-item>.nav-list .nav-list-item .nav-list-expander{color:#959396}.nav-list .nav-list-item.active>.nav-list-expander svg{transform:rotate(-90deg)}.nav-list .nav-list-item.active>.nav-list{display:block}.nav-category{padding:.5rem 1rem;font-weight:600;text-align:start;text-transform:uppercase;border-bottom:1px solid #44434d;font-size:11px !important}@media (min-width: 31.25rem){.nav-category{font-size:12px !important}}@media (min-width: 50rem){.nav-category{padding:.5rem 2rem;margin-top:1rem;text-align:start}.nav-category:first-child{margin-top:0}}.nav-list.nav-category-list>.nav-list-item{margin:0}.nav-list.nav-category-list>.nav-list-item>.nav-list{padding:0}.nav-list.nav-category-list>.nav-list-item>.nav-list>.nav-list-item>.nav-list-link{color:#2c84fa}.nav-list.nav-category-list>.nav-list-item>.nav-list>.nav-list-item>.nav-list-expander{color:#2c84fa}.aux-nav{height:100%;overflow-x:auto;font-size:11px !important}@media (min-width: 31.25rem){.aux-nav{font-size:12px !important}}.aux-nav .aux-nav-list{display:flex;height:100%;padding:0;margin:0;list-style:none}.aux-nav .aux-nav-list-item{display:inline-block;height:100%;padding:0;margin:0}@media (min-width: 50rem){.aux-nav{padding-right:1rem}}@media (min-width: 50rem){.breadcrumb-nav{margin-top:-1rem}}.breadcrumb-nav-list{padding-left:0;margin-bottom:.75rem;list-style:none}.breadcrumb-nav-list-item{display:table-cell;font-size:11px !important}@media (min-width: 31.25rem){.breadcrumb-nav-list-item{font-size:12px !important}}.breadcrumb-nav-list-item::before{display:none}.breadcrumb-nav-list-item::after{display:inline-block;margin-right:.5rem;margin-left:.5rem;color:#959396;content:"/"}.breadcrumb-nav-list-item:last-child::after{content:""}h1,.text-alpha{font-size:32px !important;line-height:1.25;font-weight:300}@media (min-width: 31.25rem){h1,.text-alpha{font-size:36px !important}}h2,.text-beta,#toctitle{font-size:18px !important}@media (min-width: 31.25rem){h2,.text-beta,#toctitle{font-size:24px !important;line-height:1.25}}h3,.text-gamma{font-size:16px !important}@media (min-width: 31.25rem){h3,.text-gamma{font-size:18px !important}}h4,.text-delta{font-size:11px !important;font-weight:400;text-transform:uppercase;letter-spacing:0.1em}@media (min-width: 31.25rem){h4,.text-delta{font-size:12px !important}}h4 code{text-transform:none}h5,.text-epsilon{font-size:12px !important}@media (min-width: 31.25rem){h5,.text-epsilon{font-size:14px !important}}h6,.text-zeta{font-size:11px !important}@media (min-width: 31.25rem){h6,.text-zeta{font-size:12px !important}}.text-small{font-size:11px !important}@media (min-width: 31.25rem){.text-small{font-size:12px !important}}.text-mono{font-family:"SFMono-Regular",menlo,consolas,monospace !important}.text-left{text-align:left !important}.text-center{text-align:center !important}.text-right{text-align:right !important}.label,.label-blue{display:inline-block;padding:0.16em 0.56em;margin-right:.5rem;margin-left:.5rem;color:#fff;text-transform:uppercase;vertical-align:middle;background-color:#2869e6;font-size:11px !important;border-radius:12px}@media (min-width: 31.25rem){.label,.label-blue{font-size:12px !important}}.label-green{background-color:#009c7b}.label-purple{background-color:#5e41d0}.label-red{background-color:#e94c4c}.label-yellow{color:#44434d;background-color:#f7d12e}.btn{display:inline-block;box-sizing:border-box;padding:0.3em 1em;margin:0;font-family:inherit;font-size:inherit;font-weight:500;line-height:1.5;color:#2c84fa;text-decoration:none;vertical-align:baseline;cursor:pointer;background-color:#302d36;border-width:0;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);appearance:none}.btn:focus{text-decoration:none;outline:none;box-shadow:0 0 0 3px rgba(0,0,255,0.25)}.btn:focus:hover,.btn.selected:focus{box-shadow:0 0 0 3px rgba(0,0,255,0.25)}.btn:hover,.btn.zeroclipboard-is-hover{color:#227efa}.btn:hover,.btn:active,.btn.zeroclipboard-is-hover,.btn.zeroclipboard-is-active{text-decoration:none;background-color:#2e2b33}.btn:active,.btn.selected,.btn.zeroclipboard-is-active{background-color:#29262e;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn.selected:hover{background-color:#cfcfcf}.btn:disabled,.btn:disabled:hover,.btn.disabled,.btn.disabled:hover{color:rgba(102,102,102,0.5);cursor:default;background-color:rgba(229,229,229,0.5);background-image:none;box-shadow:none}.btn-outline{color:#2c84fa;background:transparent;box-shadow:inset 0 0 0 2px #e6e1e8}.btn-outline:hover,.btn-outline:active,.btn-outline.zeroclipboard-is-hover,.btn-outline.zeroclipboard-is-active{color:#1878fa;text-decoration:none;background-color:transparent;box-shadow:inset 0 0 0 3px #e6e1e8}.btn-outline:focus{text-decoration:none;outline:none;box-shadow:inset 0 0 0 2px #5c5962,0 0 0 3px rgba(0,0,255,0.25)}.btn-outline:focus:hover,.btn-outline.selected:focus{box-shadow:inset 0 0 0 2px #5c5962}.btn-primary{color:#fff;background-color:#2448a7;background-image:linear-gradient(#2b55c4, #2448a7);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-primary:hover,.btn-primary.zeroclipboard-is-hover{color:#fff;background-color:#22459e;background-image:linear-gradient(#2850b7,#22459e)}.btn-primary:active,.btn-primary.selected,.btn-primary.zeroclipboard-is-active{background-color:#21439a;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-primary.selected:hover{background-color:#1d3a85}.btn-purple{color:#fff;background-color:#5739ce;background-image:linear-gradient(#6f55d5, #5739ce);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-purple:hover,.btn-purple.zeroclipboard-is-hover{color:#fff;background-color:#5132cb;background-image:linear-gradient(#6549d2,#5132cb)}.btn-purple:active,.btn-purple.selected,.btn-purple.zeroclipboard-is-active{background-color:#4f31c6;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-purple.selected:hover{background-color:#472cb2}.btn-blue{color:#fff;background-color:#227efa;background-image:linear-gradient(#4593fb, #227efa);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-blue:hover,.btn-blue.zeroclipboard-is-hover{color:#fff;background-color:#1878fa;background-image:linear-gradient(#368afa,#1878fa)}.btn-blue:active,.btn-blue.selected,.btn-blue.zeroclipboard-is-active{background-color:#1375f9;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-blue.selected:hover{background-color:#0669ed}.btn-green{color:#fff;background-color:#10ac7d;background-image:linear-gradient(#13cc95, #10ac7d);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-green:hover,.btn-green.zeroclipboard-is-hover{color:#fff;background-color:#0fa276;background-image:linear-gradient(#12be8b,#0fa276)}.btn-green:active,.btn-green.selected,.btn-green.zeroclipboard-is-active{background-color:#0f9e73;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-green.selected:hover{background-color:#0d8662}.search{position:relative;z-index:2;flex-grow:1;height:4rem;padding:.5rem;transition:padding linear 200ms}@media (min-width: 50rem){.search{position:relative !important;width:auto !important;height:100% !important;padding:0;transition:none}}.search-input-wrap{position:relative;z-index:1;height:3rem;overflow:hidden;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);transition:height linear 200ms}@media (min-width: 50rem){.search-input-wrap{position:absolute;width:100%;max-width:536px;height:100% !important;border-radius:0;box-shadow:none;transition:width ease 400ms}}.search-input{position:absolute;width:100%;height:100%;padding:.5rem 1rem .5rem 2.5rem;font-size:16px;color:#e6e1e8;background-color:#302d36;border-top:0;border-right:0;border-bottom:0;border-left:0;border-radius:0}@media (min-width: 50rem){.search-input{padding:.5rem 1rem .5rem 3.5rem;font-size:14px;background-color:#27262b;transition:padding-left linear 200ms}}.search-input:focus{outline:0}.search-input:focus+.search-label .search-icon{color:#2c84fa}.search-label{position:absolute;display:flex;height:100%;padding-left:1rem}@media (min-width: 50rem){.search-label{padding-left:2rem;transition:padding-left linear 200ms}}.search-label .search-icon{width:1.2rem;height:1.2rem;align-self:center;color:#959396}.search-results{position:absolute;left:0;display:none;width:100%;max-height:calc(100% - 4rem);overflow-y:auto;background-color:#302d36;border-bottom-right-radius:4px;border-bottom-left-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}@media (min-width: 50rem){.search-results{top:100%;width:536px;max-height:calc(100vh - 200%) !important}}.search-results-list{padding-left:0;margin-bottom:.25rem;list-style:none;font-size:14px !important}@media (min-width: 31.25rem){.search-results-list{font-size:16px !important}}@media (min-width: 50rem){.search-results-list{font-size:12px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.search-results-list{font-size:14px !important}}.search-results-list-item{padding:0;margin:0}.search-result{display:block;padding:.25rem .75rem}.search-result:hover,.search-result.active{background-color:#201f23}.search-result-title{display:block;padding-top:.5rem;padding-bottom:.5rem}@media (min-width: 31.25rem){.search-result-title{display:inline-block;width:40%;padding-right:.5rem;vertical-align:top}}.search-result-doc{display:flex;align-items:center;word-wrap:break-word}.search-result-doc.search-result-doc-parent{opacity:0.5;font-size:12px !important}@media (min-width: 31.25rem){.search-result-doc.search-result-doc-parent{font-size:14px !important}}@media (min-width: 50rem){.search-result-doc.search-result-doc-parent{font-size:11px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.search-result-doc.search-result-doc-parent{font-size:12px !important}}.search-result-doc .search-result-icon{width:1rem;height:1rem;margin-right:.5rem;color:#2c84fa;flex-shrink:0}.search-result-doc .search-result-doc-title{overflow:auto}.search-result-section{margin-left:1.5rem;word-wrap:break-word}.search-result-rel-url{display:block;margin-left:1.5rem;overflow:hidden;color:#959396;text-overflow:ellipsis;white-space:nowrap;font-size:9px !important}@media (min-width: 31.25rem){.search-result-rel-url{font-size:10px !important}}.search-result-previews{display:block;padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;margin-left:.5rem;color:#959396;word-wrap:break-word;border-left:1px solid;border-left-color:#44434d;font-size:11px !important}@media (min-width: 31.25rem){.search-result-previews{font-size:12px !important}}@media (min-width: 31.25rem){.search-result-previews{display:inline-block;width:60%;padding-left:.5rem;margin-left:0;vertical-align:top}}.search-result-preview+.search-result-preview{margin-top:.25rem}.search-result-highlight{font-weight:bold}.search-no-result{padding:.5rem .75rem;font-size:12px !important}@media (min-width: 31.25rem){.search-no-result{font-size:14px !important}}.search-button{position:fixed;right:1rem;bottom:1rem;display:flex;width:3.5rem;height:3.5rem;background-color:#302d36;border:1px solid rgba(44,132,250,0.3);border-radius:1.75rem;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);align-items:center;justify-content:center}.search-overlay{position:fixed;top:0;left:0;z-index:1;width:0;height:0;background-color:rgba(0,0,0,0.3);opacity:0;transition:opacity ease 400ms,width 0s 400ms,height 0s 400ms}.search-active .search{position:fixed;top:0;left:0;width:100%;height:100%;padding:0}.search-active .search-input-wrap{height:4rem;border-radius:0}@media (min-width: 50rem){.search-active .search-input-wrap{width:536px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}}.search-active .search-input{background-color:#302d36}@media (min-width: 50rem){.search-active .search-input{padding-left:2.3rem}}@media (min-width: 50rem){.search-active .search-label{padding-left:0.6rem}}.search-active .search-results{display:block}.search-active .search-overlay{width:100%;height:100%;opacity:1;transition:opacity ease 400ms,width 0s,height 0s}@media (min-width: 50rem){.search-active .main{position:fixed;right:0;left:0}}.search-active .main-header{padding-top:4rem}@media (min-width: 50rem){.search-active .main-header{padding-top:0}}.table-wrapper{display:block;width:100%;max-width:100%;margin-bottom:1.5rem;overflow-x:auto;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}table{display:table;min-width:100%;border-collapse:separate}th,td{font-size:12px !important;min-width:120px;padding:.5rem .75rem;background-color:#302d36;border-bottom:1px solid rgba(68,67,77,0.5);border-left:1px solid #44434d}@media (min-width: 31.25rem){th,td{font-size:14px !important}}th:first-of-type,td:first-of-type{border-left:0}tbody tr:last-of-type th,tbody tr:last-of-type td{border-bottom:0}tbody tr:last-of-type td{padding-bottom:.75rem}thead th{border-bottom:1px solid #44434d}:not(pre,figure)>code{padding:0.2em 0.15em;font-weight:400;background-color:#31343f;border:1px solid #44434d;border-radius:4px}a:visited code{border-color:#44434d}div.highlighter-rouge,div.listingblock>div.content,figure.highlight{margin-top:0;margin-bottom:.75rem;background-color:#31343f;border-radius:4px;box-shadow:none;-webkit-overflow-scrolling:touch;position:relative;padding:0}div.highlighter-rouge>button,div.listingblock>div.content>button,figure.highlight>button{width:.75rem;opacity:0;position:absolute;top:0;right:0;border:.75rem solid #31343f;background-color:#31343f;color:#e6e1e8;box-sizing:content-box}div.highlighter-rouge>button svg,div.listingblock>div.content>button svg,figure.highlight>button svg{fill:#e6e1e8}div.highlighter-rouge>button:active,div.listingblock>div.content>button:active,figure.highlight>button:active{text-decoration:none;outline:none;opacity:1}div.highlighter-rouge>button:focus,div.listingblock>div.content>button:focus,figure.highlight>button:focus{opacity:1}div.highlighter-rouge:hover>button,div.listingblock>div.content:hover>button,figure.highlight:hover>button{cursor:copy;opacity:1}div.highlighter-rouge div.highlight{overflow-x:auto;padding:.75rem;margin:0;border:0}div.highlighter-rouge pre.highlight,div.highlighter-rouge code{padding:0;margin:0;border:0}div.listingblock{margin-top:0;margin-bottom:.75rem}div.listingblock div.content{overflow-x:auto;padding:.75rem;margin:0;border:0}div.listingblock div.content>pre,div.listingblock code{padding:0;margin:0;border:0}figure.highlight pre,figure.highlight :not(pre)>code{overflow-x:auto;padding:.75rem;margin:0;border:0}.highlight .table-wrapper{padding:.75rem 0;margin:0;border:0;box-shadow:none}.highlight .table-wrapper td,.highlight .table-wrapper pre{font-size:11px !important;min-width:0;padding:0;background-color:#31343f;border:0}@media (min-width: 31.25rem){.highlight .table-wrapper td,.highlight .table-wrapper pre{font-size:12px !important}}.highlight .table-wrapper td.gl{width:1em;padding-right:.75rem;padding-left:.75rem}.highlight .table-wrapper pre{margin:0;line-height:2}.code-example,.listingblock>.title{padding:.75rem;margin-bottom:.75rem;overflow:auto;border:1px solid #44434d;border-radius:4px}.code-example+.highlighter-rouge,.code-example+.sectionbody .listingblock,.code-example+.content,.code-example+figure.highlight,.listingblock>.title+.highlighter-rouge,.listingblock>.title+.sectionbody .listingblock,.listingblock>.title+.content,.listingblock>.title+figure.highlight{position:relative;margin-top:-1rem;border-right:1px solid #44434d;border-bottom:1px solid #44434d;border-left:1px solid #44434d;border-top-left-radius:0;border-top-right-radius:0}code.language-mermaid{padding:0;background-color:inherit;border:0}.highlight,pre.highlight{background:#31343f;color:#dee2f7}.highlight pre{background:#31343f}.text-grey-dk-000{color:#959396 !important}.text-grey-dk-100{color:#5c5962 !important}.text-grey-dk-200{color:#44434d !important}.text-grey-dk-250{color:#302d36 !important}.text-grey-dk-300{color:#27262b !important}.text-grey-lt-000{color:#f5f6fa !important}.text-grey-lt-100{color:#eeebee !important}.text-grey-lt-200{color:#ecebed !important}.text-grey-lt-300{color:#e6e1e8 !important}.text-blue-000{color:#2c84fa !important}.text-blue-100{color:#2869e6 !important}.text-blue-200{color:#264caf !important}.text-blue-300{color:#183385 !important}.text-green-000{color:#41d693 !important}.text-green-100{color:#11b584 !important}.text-green-200{color:#009c7b !important}.text-green-300{color:#026e57 !important}.text-purple-000{color:#7253ed !important}.text-purple-100{color:#5e41d0 !important}.text-purple-200{color:#4e26af !important}.text-purple-300{color:#381885 !important}.text-yellow-000{color:#ffeb82 !important}.text-yellow-100{color:#fadf50 !important}.text-yellow-200{color:#f7d12e !important}.text-yellow-300{color:#e7af06 !important}.text-red-000{color:#f77e7e !important}.text-red-100{color:#f96e65 !important}.text-red-200{color:#e94c4c !important}.text-red-300{color:#dd2e2e !important}.bg-grey-dk-000{background-color:#959396 !important}.bg-grey-dk-100{background-color:#5c5962 !important}.bg-grey-dk-200{background-color:#44434d !important}.bg-grey-dk-250{background-color:#302d36 !important}.bg-grey-dk-300{background-color:#27262b !important}.bg-grey-lt-000{background-color:#f5f6fa !important}.bg-grey-lt-100{background-color:#eeebee !important}.bg-grey-lt-200{background-color:#ecebed !important}.bg-grey-lt-300{background-color:#e6e1e8 !important}.bg-blue-000{background-color:#2c84fa !important}.bg-blue-100{background-color:#2869e6 !important}.bg-blue-200{background-color:#264caf !important}.bg-blue-300{background-color:#183385 !important}.bg-green-000{background-color:#41d693 !important}.bg-green-100{background-color:#11b584 !important}.bg-green-200{background-color:#009c7b !important}.bg-green-300{background-color:#026e57 !important}.bg-purple-000{background-color:#7253ed !important}.bg-purple-100{background-color:#5e41d0 !important}.bg-purple-200{background-color:#4e26af !important}.bg-purple-300{background-color:#381885 !important}.bg-yellow-000{background-color:#ffeb82 !important}.bg-yellow-100{background-color:#fadf50 !important}.bg-yellow-200{background-color:#f7d12e !important}.bg-yellow-300{background-color:#e7af06 !important}.bg-red-000{background-color:#f77e7e !important}.bg-red-100{background-color:#f96e65 !important}.bg-red-200{background-color:#e94c4c !important}.bg-red-300{background-color:#dd2e2e !important}.d-block{display:block !important}.d-flex{display:flex !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-none{display:none !important}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}.float-left{float:left !important}.float-right{float:right !important}.flex-justify-start{justify-content:flex-start !important}.flex-justify-end{justify-content:flex-end !important}.flex-justify-between{justify-content:space-between !important}.flex-justify-around{justify-content:space-around !important}.v-align-baseline{vertical-align:baseline !important}.v-align-bottom{vertical-align:bottom !important}.v-align-middle{vertical-align:middle !important}.v-align-text-bottom{vertical-align:text-bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-top{vertical-align:top !important}.fs-1{font-size:9px !important}@media (min-width: 31.25rem){.fs-1{font-size:10px !important}}.fs-2{font-size:11px !important}@media (min-width: 31.25rem){.fs-2{font-size:12px !important}}.fs-3{font-size:12px !important}@media (min-width: 31.25rem){.fs-3{font-size:14px !important}}.fs-4{font-size:14px !important}@media (min-width: 31.25rem){.fs-4{font-size:16px !important}}.fs-5{font-size:16px !important}@media (min-width: 31.25rem){.fs-5{font-size:18px !important}}.fs-6{font-size:18px !important}@media (min-width: 31.25rem){.fs-6{font-size:24px !important;line-height:1.25}}.fs-7{font-size:24px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-7{font-size:32px !important}}.fs-8{font-size:32px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-8{font-size:36px !important}}.fs-9{font-size:36px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-9{font-size:42px !important}}.fs-10{font-size:42px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-10{font-size:48px !important}}.fw-300{font-weight:300 !important}.fw-400{font-weight:400 !important}.fw-500{font-weight:500 !important}.fw-700{font-weight:700 !important}.lh-0{line-height:0 !important}.lh-default{line-height:1.4}.lh-tight{line-height:1.25}.ls-5{letter-spacing:0.05em !important}.ls-10{letter-spacing:0.1em !important}.ls-0{letter-spacing:0 !important}.text-uppercase{text-transform:uppercase !important}.list-style-none{padding:0 !important;margin:0 !important;list-style:none !important}.list-style-none li::before{display:none !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-0{margin-right:-0 !important;margin-left:-0 !important}.mx-0-auto{margin-right:auto !important;margin-left:auto !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-1-auto{margin-right:auto !important;margin-left:auto !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-2-auto{margin-right:auto !important;margin-left:auto !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-3{margin-right:-.75rem !important;margin-left:-.75rem !important}.mx-3-auto{margin-right:auto !important;margin-left:auto !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-right:1rem !important;margin-left:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-4{margin-right:-1rem !important;margin-left:-1rem !important}.mx-4-auto{margin-right:auto !important;margin-left:auto !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-5-auto{margin-right:auto !important;margin-left:auto !important}.m-6{margin:2rem !important}.mt-6{margin-top:2rem !important}.mr-6{margin-right:2rem !important}.mb-6{margin-bottom:2rem !important}.ml-6{margin-left:2rem !important}.mx-6{margin-right:2rem !important;margin-left:2rem !important}.my-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-6{margin-right:-2rem !important;margin-left:-2rem !important}.mx-6-auto{margin-right:auto !important;margin-left:auto !important}.m-7{margin:2.5rem !important}.mt-7{margin-top:2.5rem !important}.mr-7{margin-right:2.5rem !important}.mb-7{margin-bottom:2.5rem !important}.ml-7{margin-left:2.5rem !important}.mx-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}.mx-7-auto{margin-right:auto !important;margin-left:auto !important}.m-8{margin:3rem !important}.mt-8{margin-top:3rem !important}.mr-8{margin-right:3rem !important}.mb-8{margin-bottom:3rem !important}.ml-8{margin-left:3rem !important}.mx-8{margin-right:3rem !important;margin-left:3rem !important}.my-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-8{margin-right:-3rem !important;margin-left:-3rem !important}.mx-8-auto{margin-right:auto !important;margin-left:auto !important}.m-9{margin:3.5rem !important}.mt-9{margin-top:3.5rem !important}.mr-9{margin-right:3.5rem !important}.mb-9{margin-bottom:3.5rem !important}.ml-9{margin-left:3.5rem !important}.mx-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}.mx-9-auto{margin-right:auto !important;margin-left:auto !important}.m-10{margin:4rem !important}.mt-10{margin-top:4rem !important}.mr-10{margin-right:4rem !important}.mb-10{margin-bottom:4rem !important}.ml-10{margin-left:4rem !important}.mx-10{margin-right:4rem !important;margin-left:4rem !important}.my-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-10{margin-right:-4rem !important;margin-left:-4rem !important}.mx-10-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 20rem){.m-xs-0{margin:0 !important}.mt-xs-0{margin-top:0 !important}.mr-xs-0{margin-right:0 !important}.mb-xs-0{margin-bottom:0 !important}.ml-xs-0{margin-left:0 !important}.mx-xs-0{margin-right:0 !important;margin-left:0 !important}.my-xs-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-xs-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 20rem){.m-xs-1{margin:.25rem !important}.mt-xs-1{margin-top:.25rem !important}.mr-xs-1{margin-right:.25rem !important}.mb-xs-1{margin-bottom:.25rem !important}.ml-xs-1{margin-left:.25rem !important}.mx-xs-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-xs-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-xs-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 20rem){.m-xs-2{margin:.5rem !important}.mt-xs-2{margin-top:.5rem !important}.mr-xs-2{margin-right:.5rem !important}.mb-xs-2{margin-bottom:.5rem !important}.ml-xs-2{margin-left:.5rem !important}.mx-xs-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-xs-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-xs-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 20rem){.m-xs-3{margin:.75rem !important}.mt-xs-3{margin-top:.75rem !important}.mr-xs-3{margin-right:.75rem !important}.mb-xs-3{margin-bottom:.75rem !important}.ml-xs-3{margin-left:.75rem !important}.mx-xs-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-xs-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-xs-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 20rem){.m-xs-4{margin:1rem !important}.mt-xs-4{margin-top:1rem !important}.mr-xs-4{margin-right:1rem !important}.mb-xs-4{margin-bottom:1rem !important}.ml-xs-4{margin-left:1rem !important}.mx-xs-4{margin-right:1rem !important;margin-left:1rem !important}.my-xs-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-xs-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 20rem){.m-xs-5{margin:1.5rem !important}.mt-xs-5{margin-top:1.5rem !important}.mr-xs-5{margin-right:1.5rem !important}.mb-xs-5{margin-bottom:1.5rem !important}.ml-xs-5{margin-left:1.5rem !important}.mx-xs-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-xs-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-xs-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 20rem){.m-xs-6{margin:2rem !important}.mt-xs-6{margin-top:2rem !important}.mr-xs-6{margin-right:2rem !important}.mb-xs-6{margin-bottom:2rem !important}.ml-xs-6{margin-left:2rem !important}.mx-xs-6{margin-right:2rem !important;margin-left:2rem !important}.my-xs-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-xs-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 20rem){.m-xs-7{margin:2.5rem !important}.mt-xs-7{margin-top:2.5rem !important}.mr-xs-7{margin-right:2.5rem !important}.mb-xs-7{margin-bottom:2.5rem !important}.ml-xs-7{margin-left:2.5rem !important}.mx-xs-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-xs-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-xs-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 20rem){.m-xs-8{margin:3rem !important}.mt-xs-8{margin-top:3rem !important}.mr-xs-8{margin-right:3rem !important}.mb-xs-8{margin-bottom:3rem !important}.ml-xs-8{margin-left:3rem !important}.mx-xs-8{margin-right:3rem !important;margin-left:3rem !important}.my-xs-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-xs-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 20rem){.m-xs-9{margin:3.5rem !important}.mt-xs-9{margin-top:3.5rem !important}.mr-xs-9{margin-right:3.5rem !important}.mb-xs-9{margin-bottom:3.5rem !important}.ml-xs-9{margin-left:3.5rem !important}.mx-xs-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-xs-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-xs-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 20rem){.m-xs-10{margin:4rem !important}.mt-xs-10{margin-top:4rem !important}.mr-xs-10{margin-right:4rem !important}.mb-xs-10{margin-bottom:4rem !important}.ml-xs-10{margin-left:4rem !important}.mx-xs-10{margin-right:4rem !important;margin-left:4rem !important}.my-xs-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-xs-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 31.25rem){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-sm-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 31.25rem){.m-sm-1{margin:.25rem !important}.mt-sm-1{margin-top:.25rem !important}.mr-sm-1{margin-right:.25rem !important}.mb-sm-1{margin-bottom:.25rem !important}.ml-sm-1{margin-left:.25rem !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-sm-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 31.25rem){.m-sm-2{margin:.5rem !important}.mt-sm-2{margin-top:.5rem !important}.mr-sm-2{margin-right:.5rem !important}.mb-sm-2{margin-bottom:.5rem !important}.ml-sm-2{margin-left:.5rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-sm-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 31.25rem){.m-sm-3{margin:.75rem !important}.mt-sm-3{margin-top:.75rem !important}.mr-sm-3{margin-right:.75rem !important}.mb-sm-3{margin-bottom:.75rem !important}.ml-sm-3{margin-left:.75rem !important}.mx-sm-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-sm-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-sm-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 31.25rem){.m-sm-4{margin:1rem !important}.mt-sm-4{margin-top:1rem !important}.mr-sm-4{margin-right:1rem !important}.mb-sm-4{margin-bottom:1rem !important}.ml-sm-4{margin-left:1rem !important}.mx-sm-4{margin-right:1rem !important;margin-left:1rem !important}.my-sm-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-sm-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 31.25rem){.m-sm-5{margin:1.5rem !important}.mt-sm-5{margin-top:1.5rem !important}.mr-sm-5{margin-right:1.5rem !important}.mb-sm-5{margin-bottom:1.5rem !important}.ml-sm-5{margin-left:1.5rem !important}.mx-sm-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-sm-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-sm-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 31.25rem){.m-sm-6{margin:2rem !important}.mt-sm-6{margin-top:2rem !important}.mr-sm-6{margin-right:2rem !important}.mb-sm-6{margin-bottom:2rem !important}.ml-sm-6{margin-left:2rem !important}.mx-sm-6{margin-right:2rem !important;margin-left:2rem !important}.my-sm-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-sm-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 31.25rem){.m-sm-7{margin:2.5rem !important}.mt-sm-7{margin-top:2.5rem !important}.mr-sm-7{margin-right:2.5rem !important}.mb-sm-7{margin-bottom:2.5rem !important}.ml-sm-7{margin-left:2.5rem !important}.mx-sm-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-sm-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-sm-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 31.25rem){.m-sm-8{margin:3rem !important}.mt-sm-8{margin-top:3rem !important}.mr-sm-8{margin-right:3rem !important}.mb-sm-8{margin-bottom:3rem !important}.ml-sm-8{margin-left:3rem !important}.mx-sm-8{margin-right:3rem !important;margin-left:3rem !important}.my-sm-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-sm-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 31.25rem){.m-sm-9{margin:3.5rem !important}.mt-sm-9{margin-top:3.5rem !important}.mr-sm-9{margin-right:3.5rem !important}.mb-sm-9{margin-bottom:3.5rem !important}.ml-sm-9{margin-left:3.5rem !important}.mx-sm-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-sm-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-sm-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 31.25rem){.m-sm-10{margin:4rem !important}.mt-sm-10{margin-top:4rem !important}.mr-sm-10{margin-right:4rem !important}.mb-sm-10{margin-bottom:4rem !important}.ml-sm-10{margin-left:4rem !important}.mx-sm-10{margin-right:4rem !important;margin-left:4rem !important}.my-sm-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-sm-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 50rem){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-md-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 50rem){.m-md-1{margin:.25rem !important}.mt-md-1{margin-top:.25rem !important}.mr-md-1{margin-right:.25rem !important}.mb-md-1{margin-bottom:.25rem !important}.ml-md-1{margin-left:.25rem !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-md-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 50rem){.m-md-2{margin:.5rem !important}.mt-md-2{margin-top:.5rem !important}.mr-md-2{margin-right:.5rem !important}.mb-md-2{margin-bottom:.5rem !important}.ml-md-2{margin-left:.5rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-md-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 50rem){.m-md-3{margin:.75rem !important}.mt-md-3{margin-top:.75rem !important}.mr-md-3{margin-right:.75rem !important}.mb-md-3{margin-bottom:.75rem !important}.ml-md-3{margin-left:.75rem !important}.mx-md-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-md-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-md-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 50rem){.m-md-4{margin:1rem !important}.mt-md-4{margin-top:1rem !important}.mr-md-4{margin-right:1rem !important}.mb-md-4{margin-bottom:1rem !important}.ml-md-4{margin-left:1rem !important}.mx-md-4{margin-right:1rem !important;margin-left:1rem !important}.my-md-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-md-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 50rem){.m-md-5{margin:1.5rem !important}.mt-md-5{margin-top:1.5rem !important}.mr-md-5{margin-right:1.5rem !important}.mb-md-5{margin-bottom:1.5rem !important}.ml-md-5{margin-left:1.5rem !important}.mx-md-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-md-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-md-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 50rem){.m-md-6{margin:2rem !important}.mt-md-6{margin-top:2rem !important}.mr-md-6{margin-right:2rem !important}.mb-md-6{margin-bottom:2rem !important}.ml-md-6{margin-left:2rem !important}.mx-md-6{margin-right:2rem !important;margin-left:2rem !important}.my-md-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-md-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 50rem){.m-md-7{margin:2.5rem !important}.mt-md-7{margin-top:2.5rem !important}.mr-md-7{margin-right:2.5rem !important}.mb-md-7{margin-bottom:2.5rem !important}.ml-md-7{margin-left:2.5rem !important}.mx-md-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-md-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-md-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 50rem){.m-md-8{margin:3rem !important}.mt-md-8{margin-top:3rem !important}.mr-md-8{margin-right:3rem !important}.mb-md-8{margin-bottom:3rem !important}.ml-md-8{margin-left:3rem !important}.mx-md-8{margin-right:3rem !important;margin-left:3rem !important}.my-md-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-md-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 50rem){.m-md-9{margin:3.5rem !important}.mt-md-9{margin-top:3.5rem !important}.mr-md-9{margin-right:3.5rem !important}.mb-md-9{margin-bottom:3.5rem !important}.ml-md-9{margin-left:3.5rem !important}.mx-md-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-md-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-md-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 50rem){.m-md-10{margin:4rem !important}.mt-md-10{margin-top:4rem !important}.mr-md-10{margin-right:4rem !important}.mb-md-10{margin-bottom:4rem !important}.ml-md-10{margin-left:4rem !important}.mx-md-10{margin-right:4rem !important;margin-left:4rem !important}.my-md-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-md-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 66.5rem){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-lg-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 66.5rem){.m-lg-1{margin:.25rem !important}.mt-lg-1{margin-top:.25rem !important}.mr-lg-1{margin-right:.25rem !important}.mb-lg-1{margin-bottom:.25rem !important}.ml-lg-1{margin-left:.25rem !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-lg-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 66.5rem){.m-lg-2{margin:.5rem !important}.mt-lg-2{margin-top:.5rem !important}.mr-lg-2{margin-right:.5rem !important}.mb-lg-2{margin-bottom:.5rem !important}.ml-lg-2{margin-left:.5rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-lg-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 66.5rem){.m-lg-3{margin:.75rem !important}.mt-lg-3{margin-top:.75rem !important}.mr-lg-3{margin-right:.75rem !important}.mb-lg-3{margin-bottom:.75rem !important}.ml-lg-3{margin-left:.75rem !important}.mx-lg-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-lg-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-lg-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 66.5rem){.m-lg-4{margin:1rem !important}.mt-lg-4{margin-top:1rem !important}.mr-lg-4{margin-right:1rem !important}.mb-lg-4{margin-bottom:1rem !important}.ml-lg-4{margin-left:1rem !important}.mx-lg-4{margin-right:1rem !important;margin-left:1rem !important}.my-lg-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-lg-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 66.5rem){.m-lg-5{margin:1.5rem !important}.mt-lg-5{margin-top:1.5rem !important}.mr-lg-5{margin-right:1.5rem !important}.mb-lg-5{margin-bottom:1.5rem !important}.ml-lg-5{margin-left:1.5rem !important}.mx-lg-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-lg-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-lg-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 66.5rem){.m-lg-6{margin:2rem !important}.mt-lg-6{margin-top:2rem !important}.mr-lg-6{margin-right:2rem !important}.mb-lg-6{margin-bottom:2rem !important}.ml-lg-6{margin-left:2rem !important}.mx-lg-6{margin-right:2rem !important;margin-left:2rem !important}.my-lg-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-lg-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 66.5rem){.m-lg-7{margin:2.5rem !important}.mt-lg-7{margin-top:2.5rem !important}.mr-lg-7{margin-right:2.5rem !important}.mb-lg-7{margin-bottom:2.5rem !important}.ml-lg-7{margin-left:2.5rem !important}.mx-lg-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-lg-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-lg-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 66.5rem){.m-lg-8{margin:3rem !important}.mt-lg-8{margin-top:3rem !important}.mr-lg-8{margin-right:3rem !important}.mb-lg-8{margin-bottom:3rem !important}.ml-lg-8{margin-left:3rem !important}.mx-lg-8{margin-right:3rem !important;margin-left:3rem !important}.my-lg-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-lg-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 66.5rem){.m-lg-9{margin:3.5rem !important}.mt-lg-9{margin-top:3.5rem !important}.mr-lg-9{margin-right:3.5rem !important}.mb-lg-9{margin-bottom:3.5rem !important}.ml-lg-9{margin-left:3.5rem !important}.mx-lg-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-lg-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-lg-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 66.5rem){.m-lg-10{margin:4rem !important}.mt-lg-10{margin-top:4rem !important}.mr-lg-10{margin-right:4rem !important}.mb-lg-10{margin-bottom:4rem !important}.ml-lg-10{margin-left:4rem !important}.mx-lg-10{margin-right:4rem !important;margin-left:4rem !important}.my-lg-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-lg-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 87.5rem){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-xl-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 87.5rem){.m-xl-1{margin:.25rem !important}.mt-xl-1{margin-top:.25rem !important}.mr-xl-1{margin-right:.25rem !important}.mb-xl-1{margin-bottom:.25rem !important}.ml-xl-1{margin-left:.25rem !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-xl-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 87.5rem){.m-xl-2{margin:.5rem !important}.mt-xl-2{margin-top:.5rem !important}.mr-xl-2{margin-right:.5rem !important}.mb-xl-2{margin-bottom:.5rem !important}.ml-xl-2{margin-left:.5rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-xl-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 87.5rem){.m-xl-3{margin:.75rem !important}.mt-xl-3{margin-top:.75rem !important}.mr-xl-3{margin-right:.75rem !important}.mb-xl-3{margin-bottom:.75rem !important}.ml-xl-3{margin-left:.75rem !important}.mx-xl-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-xl-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-xl-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 87.5rem){.m-xl-4{margin:1rem !important}.mt-xl-4{margin-top:1rem !important}.mr-xl-4{margin-right:1rem !important}.mb-xl-4{margin-bottom:1rem !important}.ml-xl-4{margin-left:1rem !important}.mx-xl-4{margin-right:1rem !important;margin-left:1rem !important}.my-xl-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-xl-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 87.5rem){.m-xl-5{margin:1.5rem !important}.mt-xl-5{margin-top:1.5rem !important}.mr-xl-5{margin-right:1.5rem !important}.mb-xl-5{margin-bottom:1.5rem !important}.ml-xl-5{margin-left:1.5rem !important}.mx-xl-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-xl-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-xl-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 87.5rem){.m-xl-6{margin:2rem !important}.mt-xl-6{margin-top:2rem !important}.mr-xl-6{margin-right:2rem !important}.mb-xl-6{margin-bottom:2rem !important}.ml-xl-6{margin-left:2rem !important}.mx-xl-6{margin-right:2rem !important;margin-left:2rem !important}.my-xl-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-xl-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 87.5rem){.m-xl-7{margin:2.5rem !important}.mt-xl-7{margin-top:2.5rem !important}.mr-xl-7{margin-right:2.5rem !important}.mb-xl-7{margin-bottom:2.5rem !important}.ml-xl-7{margin-left:2.5rem !important}.mx-xl-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-xl-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-xl-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 87.5rem){.m-xl-8{margin:3rem !important}.mt-xl-8{margin-top:3rem !important}.mr-xl-8{margin-right:3rem !important}.mb-xl-8{margin-bottom:3rem !important}.ml-xl-8{margin-left:3rem !important}.mx-xl-8{margin-right:3rem !important;margin-left:3rem !important}.my-xl-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-xl-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 87.5rem){.m-xl-9{margin:3.5rem !important}.mt-xl-9{margin-top:3.5rem !important}.mr-xl-9{margin-right:3.5rem !important}.mb-xl-9{margin-bottom:3.5rem !important}.ml-xl-9{margin-left:3.5rem !important}.mx-xl-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-xl-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-xl-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 87.5rem){.m-xl-10{margin:4rem !important}.mt-xl-10{margin-top:4rem !important}.mr-xl-10{margin-right:4rem !important}.mb-xl-10{margin-bottom:4rem !important}.ml-xl-10{margin-left:4rem !important}.mx-xl-10{margin-right:4rem !important;margin-left:4rem !important}.my-xl-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-xl-10{margin-right:-4rem !important;margin-left:-4rem !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-right:1rem !important;padding-left:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:2rem !important}.pt-6{padding-top:2rem !important}.pr-6{padding-right:2rem !important}.pb-6{padding-bottom:2rem !important}.pl-6{padding-left:2rem !important}.px-6{padding-right:2rem !important;padding-left:2rem !important}.py-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-7{padding:2.5rem !important}.pt-7{padding-top:2.5rem !important}.pr-7{padding-right:2.5rem !important}.pb-7{padding-bottom:2.5rem !important}.pl-7{padding-left:2.5rem !important}.px-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-8{padding:3rem !important}.pt-8{padding-top:3rem !important}.pr-8{padding-right:3rem !important}.pb-8{padding-bottom:3rem !important}.pl-8{padding-left:3rem !important}.px-8{padding-right:3rem !important;padding-left:3rem !important}.py-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-9{padding:3.5rem !important}.pt-9{padding-top:3.5rem !important}.pr-9{padding-right:3.5rem !important}.pb-9{padding-bottom:3.5rem !important}.pl-9{padding-left:3.5rem !important}.px-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-10{padding:4rem !important}.pt-10{padding-top:4rem !important}.pr-10{padding-right:4rem !important}.pb-10{padding-bottom:4rem !important}.pl-10{padding-left:4rem !important}.px-10{padding-right:4rem !important;padding-left:4rem !important}.py-10{padding-top:4rem !important;padding-bottom:4rem !important}@media (min-width: 20rem){.p-xs-0{padding:0 !important}.pt-xs-0{padding-top:0 !important}.pr-xs-0{padding-right:0 !important}.pb-xs-0{padding-bottom:0 !important}.pl-xs-0{padding-left:0 !important}.px-xs-0{padding-right:0 !important;padding-left:0 !important}.py-xs-0{padding-top:0 !important;padding-bottom:0 !important}.p-xs-1{padding:.25rem !important}.pt-xs-1{padding-top:.25rem !important}.pr-xs-1{padding-right:.25rem !important}.pb-xs-1{padding-bottom:.25rem !important}.pl-xs-1{padding-left:.25rem !important}.px-xs-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-xs-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-xs-2{padding:.5rem !important}.pt-xs-2{padding-top:.5rem !important}.pr-xs-2{padding-right:.5rem !important}.pb-xs-2{padding-bottom:.5rem !important}.pl-xs-2{padding-left:.5rem !important}.px-xs-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-xs-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-xs-3{padding:.75rem !important}.pt-xs-3{padding-top:.75rem !important}.pr-xs-3{padding-right:.75rem !important}.pb-xs-3{padding-bottom:.75rem !important}.pl-xs-3{padding-left:.75rem !important}.px-xs-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-xs-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-xs-4{padding:1rem !important}.pt-xs-4{padding-top:1rem !important}.pr-xs-4{padding-right:1rem !important}.pb-xs-4{padding-bottom:1rem !important}.pl-xs-4{padding-left:1rem !important}.px-xs-4{padding-right:1rem !important;padding-left:1rem !important}.py-xs-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-xs-5{padding:1.5rem !important}.pt-xs-5{padding-top:1.5rem !important}.pr-xs-5{padding-right:1.5rem !important}.pb-xs-5{padding-bottom:1.5rem !important}.pl-xs-5{padding-left:1.5rem !important}.px-xs-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-xs-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-xs-6{padding:2rem !important}.pt-xs-6{padding-top:2rem !important}.pr-xs-6{padding-right:2rem !important}.pb-xs-6{padding-bottom:2rem !important}.pl-xs-6{padding-left:2rem !important}.px-xs-6{padding-right:2rem !important;padding-left:2rem !important}.py-xs-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-xs-7{padding:2.5rem !important}.pt-xs-7{padding-top:2.5rem !important}.pr-xs-7{padding-right:2.5rem !important}.pb-xs-7{padding-bottom:2.5rem !important}.pl-xs-7{padding-left:2.5rem !important}.px-xs-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-xs-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-xs-8{padding:3rem !important}.pt-xs-8{padding-top:3rem !important}.pr-xs-8{padding-right:3rem !important}.pb-xs-8{padding-bottom:3rem !important}.pl-xs-8{padding-left:3rem !important}.px-xs-8{padding-right:3rem !important;padding-left:3rem !important}.py-xs-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-xs-9{padding:3.5rem !important}.pt-xs-9{padding-top:3.5rem !important}.pr-xs-9{padding-right:3.5rem !important}.pb-xs-9{padding-bottom:3.5rem !important}.pl-xs-9{padding-left:3.5rem !important}.px-xs-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-xs-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-xs-10{padding:4rem !important}.pt-xs-10{padding-top:4rem !important}.pr-xs-10{padding-right:4rem !important}.pb-xs-10{padding-bottom:4rem !important}.pl-xs-10{padding-left:4rem !important}.px-xs-10{padding-right:4rem !important;padding-left:4rem !important}.py-xs-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 31.25rem){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1{padding-top:.25rem !important}.pr-sm-1{padding-right:.25rem !important}.pb-sm-1{padding-bottom:.25rem !important}.pl-sm-1{padding-left:.25rem !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2{padding-top:.5rem !important}.pr-sm-2{padding-right:.5rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pl-sm-2{padding-left:.5rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-sm-3{padding:.75rem !important}.pt-sm-3{padding-top:.75rem !important}.pr-sm-3{padding-right:.75rem !important}.pb-sm-3{padding-bottom:.75rem !important}.pl-sm-3{padding-left:.75rem !important}.px-sm-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-sm-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-sm-4{padding:1rem !important}.pt-sm-4{padding-top:1rem !important}.pr-sm-4{padding-right:1rem !important}.pb-sm-4{padding-bottom:1rem !important}.pl-sm-4{padding-left:1rem !important}.px-sm-4{padding-right:1rem !important;padding-left:1rem !important}.py-sm-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-sm-5{padding:1.5rem !important}.pt-sm-5{padding-top:1.5rem !important}.pr-sm-5{padding-right:1.5rem !important}.pb-sm-5{padding-bottom:1.5rem !important}.pl-sm-5{padding-left:1.5rem !important}.px-sm-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-sm-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-sm-6{padding:2rem !important}.pt-sm-6{padding-top:2rem !important}.pr-sm-6{padding-right:2rem !important}.pb-sm-6{padding-bottom:2rem !important}.pl-sm-6{padding-left:2rem !important}.px-sm-6{padding-right:2rem !important;padding-left:2rem !important}.py-sm-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-sm-7{padding:2.5rem !important}.pt-sm-7{padding-top:2.5rem !important}.pr-sm-7{padding-right:2.5rem !important}.pb-sm-7{padding-bottom:2.5rem !important}.pl-sm-7{padding-left:2.5rem !important}.px-sm-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-sm-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-sm-8{padding:3rem !important}.pt-sm-8{padding-top:3rem !important}.pr-sm-8{padding-right:3rem !important}.pb-sm-8{padding-bottom:3rem !important}.pl-sm-8{padding-left:3rem !important}.px-sm-8{padding-right:3rem !important;padding-left:3rem !important}.py-sm-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-sm-9{padding:3.5rem !important}.pt-sm-9{padding-top:3.5rem !important}.pr-sm-9{padding-right:3.5rem !important}.pb-sm-9{padding-bottom:3.5rem !important}.pl-sm-9{padding-left:3.5rem !important}.px-sm-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-sm-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-sm-10{padding:4rem !important}.pt-sm-10{padding-top:4rem !important}.pr-sm-10{padding-right:4rem !important}.pb-sm-10{padding-bottom:4rem !important}.pl-sm-10{padding-left:4rem !important}.px-sm-10{padding-right:4rem !important;padding-left:4rem !important}.py-sm-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 50rem){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1{padding-top:.25rem !important}.pr-md-1{padding-right:.25rem !important}.pb-md-1{padding-bottom:.25rem !important}.pl-md-1{padding-left:.25rem !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2{padding-top:.5rem !important}.pr-md-2{padding-right:.5rem !important}.pb-md-2{padding-bottom:.5rem !important}.pl-md-2{padding-left:.5rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-md-3{padding:.75rem !important}.pt-md-3{padding-top:.75rem !important}.pr-md-3{padding-right:.75rem !important}.pb-md-3{padding-bottom:.75rem !important}.pl-md-3{padding-left:.75rem !important}.px-md-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-md-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-md-4{padding:1rem !important}.pt-md-4{padding-top:1rem !important}.pr-md-4{padding-right:1rem !important}.pb-md-4{padding-bottom:1rem !important}.pl-md-4{padding-left:1rem !important}.px-md-4{padding-right:1rem !important;padding-left:1rem !important}.py-md-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-md-5{padding:1.5rem !important}.pt-md-5{padding-top:1.5rem !important}.pr-md-5{padding-right:1.5rem !important}.pb-md-5{padding-bottom:1.5rem !important}.pl-md-5{padding-left:1.5rem !important}.px-md-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-md-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-md-6{padding:2rem !important}.pt-md-6{padding-top:2rem !important}.pr-md-6{padding-right:2rem !important}.pb-md-6{padding-bottom:2rem !important}.pl-md-6{padding-left:2rem !important}.px-md-6{padding-right:2rem !important;padding-left:2rem !important}.py-md-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-md-7{padding:2.5rem !important}.pt-md-7{padding-top:2.5rem !important}.pr-md-7{padding-right:2.5rem !important}.pb-md-7{padding-bottom:2.5rem !important}.pl-md-7{padding-left:2.5rem !important}.px-md-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-md-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-md-8{padding:3rem !important}.pt-md-8{padding-top:3rem !important}.pr-md-8{padding-right:3rem !important}.pb-md-8{padding-bottom:3rem !important}.pl-md-8{padding-left:3rem !important}.px-md-8{padding-right:3rem !important;padding-left:3rem !important}.py-md-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-md-9{padding:3.5rem !important}.pt-md-9{padding-top:3.5rem !important}.pr-md-9{padding-right:3.5rem !important}.pb-md-9{padding-bottom:3.5rem !important}.pl-md-9{padding-left:3.5rem !important}.px-md-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-md-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-md-10{padding:4rem !important}.pt-md-10{padding-top:4rem !important}.pr-md-10{padding-right:4rem !important}.pb-md-10{padding-bottom:4rem !important}.pl-md-10{padding-left:4rem !important}.px-md-10{padding-right:4rem !important;padding-left:4rem !important}.py-md-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 66.5rem){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1{padding-top:.25rem !important}.pr-lg-1{padding-right:.25rem !important}.pb-lg-1{padding-bottom:.25rem !important}.pl-lg-1{padding-left:.25rem !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2{padding-top:.5rem !important}.pr-lg-2{padding-right:.5rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pl-lg-2{padding-left:.5rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-lg-3{padding:.75rem !important}.pt-lg-3{padding-top:.75rem !important}.pr-lg-3{padding-right:.75rem !important}.pb-lg-3{padding-bottom:.75rem !important}.pl-lg-3{padding-left:.75rem !important}.px-lg-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-lg-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-lg-4{padding:1rem !important}.pt-lg-4{padding-top:1rem !important}.pr-lg-4{padding-right:1rem !important}.pb-lg-4{padding-bottom:1rem !important}.pl-lg-4{padding-left:1rem !important}.px-lg-4{padding-right:1rem !important;padding-left:1rem !important}.py-lg-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-lg-5{padding:1.5rem !important}.pt-lg-5{padding-top:1.5rem !important}.pr-lg-5{padding-right:1.5rem !important}.pb-lg-5{padding-bottom:1.5rem !important}.pl-lg-5{padding-left:1.5rem !important}.px-lg-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-lg-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-lg-6{padding:2rem !important}.pt-lg-6{padding-top:2rem !important}.pr-lg-6{padding-right:2rem !important}.pb-lg-6{padding-bottom:2rem !important}.pl-lg-6{padding-left:2rem !important}.px-lg-6{padding-right:2rem !important;padding-left:2rem !important}.py-lg-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-lg-7{padding:2.5rem !important}.pt-lg-7{padding-top:2.5rem !important}.pr-lg-7{padding-right:2.5rem !important}.pb-lg-7{padding-bottom:2.5rem !important}.pl-lg-7{padding-left:2.5rem !important}.px-lg-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-lg-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-lg-8{padding:3rem !important}.pt-lg-8{padding-top:3rem !important}.pr-lg-8{padding-right:3rem !important}.pb-lg-8{padding-bottom:3rem !important}.pl-lg-8{padding-left:3rem !important}.px-lg-8{padding-right:3rem !important;padding-left:3rem !important}.py-lg-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-lg-9{padding:3.5rem !important}.pt-lg-9{padding-top:3.5rem !important}.pr-lg-9{padding-right:3.5rem !important}.pb-lg-9{padding-bottom:3.5rem !important}.pl-lg-9{padding-left:3.5rem !important}.px-lg-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-lg-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-lg-10{padding:4rem !important}.pt-lg-10{padding-top:4rem !important}.pr-lg-10{padding-right:4rem !important}.pb-lg-10{padding-bottom:4rem !important}.pl-lg-10{padding-left:4rem !important}.px-lg-10{padding-right:4rem !important;padding-left:4rem !important}.py-lg-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 87.5rem){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1{padding-top:.25rem !important}.pr-xl-1{padding-right:.25rem !important}.pb-xl-1{padding-bottom:.25rem !important}.pl-xl-1{padding-left:.25rem !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2{padding-top:.5rem !important}.pr-xl-2{padding-right:.5rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pl-xl-2{padding-left:.5rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-xl-3{padding:.75rem !important}.pt-xl-3{padding-top:.75rem !important}.pr-xl-3{padding-right:.75rem !important}.pb-xl-3{padding-bottom:.75rem !important}.pl-xl-3{padding-left:.75rem !important}.px-xl-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-xl-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-xl-4{padding:1rem !important}.pt-xl-4{padding-top:1rem !important}.pr-xl-4{padding-right:1rem !important}.pb-xl-4{padding-bottom:1rem !important}.pl-xl-4{padding-left:1rem !important}.px-xl-4{padding-right:1rem !important;padding-left:1rem !important}.py-xl-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-xl-5{padding:1.5rem !important}.pt-xl-5{padding-top:1.5rem !important}.pr-xl-5{padding-right:1.5rem !important}.pb-xl-5{padding-bottom:1.5rem !important}.pl-xl-5{padding-left:1.5rem !important}.px-xl-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-xl-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-xl-6{padding:2rem !important}.pt-xl-6{padding-top:2rem !important}.pr-xl-6{padding-right:2rem !important}.pb-xl-6{padding-bottom:2rem !important}.pl-xl-6{padding-left:2rem !important}.px-xl-6{padding-right:2rem !important;padding-left:2rem !important}.py-xl-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-xl-7{padding:2.5rem !important}.pt-xl-7{padding-top:2.5rem !important}.pr-xl-7{padding-right:2.5rem !important}.pb-xl-7{padding-bottom:2.5rem !important}.pl-xl-7{padding-left:2.5rem !important}.px-xl-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-xl-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-xl-8{padding:3rem !important}.pt-xl-8{padding-top:3rem !important}.pr-xl-8{padding-right:3rem !important}.pb-xl-8{padding-bottom:3rem !important}.pl-xl-8{padding-left:3rem !important}.px-xl-8{padding-right:3rem !important;padding-left:3rem !important}.py-xl-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-xl-9{padding:3.5rem !important}.pt-xl-9{padding-top:3.5rem !important}.pr-xl-9{padding-right:3.5rem !important}.pb-xl-9{padding-bottom:3.5rem !important}.pl-xl-9{padding-left:3.5rem !important}.px-xl-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-xl-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-xl-10{padding:4rem !important}.pt-xl-10{padding-top:4rem !important}.pr-xl-10{padding-right:4rem !important}.pb-xl-10{padding-bottom:4rem !important}.pl-xl-10{padding-left:4rem !important}.px-xl-10{padding-right:4rem !important;padding-left:4rem !important}.py-xl-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media print{.site-footer,.site-button,#edit-this-page,#back-to-top,.site-nav,.main-header{display:none !important}.side-bar{width:100%;height:auto;border-right:0 !important}.site-header{border-bottom:1px solid #44434d}.site-title{font-size:16px !important;font-weight:700 !important}.text-small{font-size:8pt !important}pre.highlight{border:1px solid #44434d}.main{max-width:none;margin-left:0}}a.skip-to-main{left:-999px;position:absolute;top:auto;width:1px;height:1px;overflow:hidden;z-index:-999}a.skip-to-main:focus,a.skip-to-main:active{color:#2c84fa;background-color:#27262b;left:auto;top:auto;width:30%;height:auto;overflow:auto;margin:10px 35%;padding:5px;border-radius:15px;border:4px solid #264caf;text-align:center;font-size:1.2em;z-index:999}div.opaque{background-color:#27262b}
diff --git a/assets/css/just-the-docs-default.css b/assets/css/just-the-docs-default.css
new file mode 100644
index 00000000..96c47a3a
--- /dev/null
+++ b/assets/css/just-the-docs-default.css
@@ -0,0 +1 @@
+.highlight .c{color:#586e75}.highlight .err{color:#93a1a1}.highlight .g{color:#93a1a1}.highlight .k{color:#859900}.highlight .l{color:#93a1a1}.highlight .n{color:#93a1a1}.highlight .o{color:#859900}.highlight .x{color:#cb4b16}.highlight .p{color:#93a1a1}.highlight .cm{color:#586e75}.highlight .cp{color:#859900}.highlight .c1{color:#586e75}.highlight .cs{color:#859900}.highlight .gd{color:#2aa198}.highlight .ge{font-style:italic;color:#93a1a1}.highlight .gr{color:#dc322f}.highlight .gh{color:#cb4b16}.highlight .gi{color:#859900}.highlight .go{color:#93a1a1}.highlight .gp{color:#93a1a1}.highlight .gs{font-weight:bold;color:#93a1a1}.highlight .gu{color:#cb4b16}.highlight .gt{color:#93a1a1}.highlight .kc{color:#cb4b16}.highlight .kd{color:#268bd2}.highlight .kn{color:#859900}.highlight .kp{color:#859900}.highlight .kr{color:#268bd2}.highlight .kt{color:#dc322f}.highlight .ld{color:#93a1a1}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#555}.highlight .nb{color:#b58900}.highlight .nc{color:#268bd2}.highlight .no{color:#cb4b16}.highlight .nd{color:#268bd2}.highlight .ni{color:#cb4b16}.highlight .ne{color:#cb4b16}.highlight .nf{color:#268bd2}.highlight .nl{color:#555}.highlight .nn{color:#93a1a1}.highlight .nx{color:#555}.highlight .py{color:#93a1a1}.highlight .nt{color:#268bd2}.highlight .nv{color:#268bd2}.highlight .ow{color:#859900}.highlight .w{color:#93a1a1}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#586e75}.highlight .sc{color:#2aa198}.highlight .sd{color:#93a1a1}.highlight .s2{color:#2aa198}.highlight .se{color:#cb4b16}.highlight .sh{color:#93a1a1}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc322f}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#268bd2}.highlight .vc{color:#268bd2}.highlight .vg{color:#268bd2}.highlight .vi{color:#268bd2}.highlight .il{color:#2aa198}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}*{box-sizing:border-box}::selection{color:#fff;background:#53a3da}html{font-size:14px !important;scroll-behavior:smooth}@media (min-width: 31.25rem){html{font-size:16px !important}}body{font-family:system-ui,-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif;font-size:inherit;line-height:1.4;color:#5c5962;background-color:#fff;overflow-wrap:break-word}ol,ul,dl,pre,address,blockquote,table,div,hr,form,fieldset,noscript .table-wrapper{margin-top:0}h1,h2,h3,h4,h5,h6,#toctitle{margin-top:0;margin-bottom:1em;font-weight:500;line-height:1.25;color:#27262b}p{margin-top:1em;margin-bottom:1em}a{color:#53a3da;text-decoration:none}a:not([class]){text-decoration:underline;text-decoration-color:#eeebee;text-underline-offset:2px}a:not([class]):hover{text-decoration-color:rgba(83,163,218,0.45)}code{font-family:"SFMono-Regular",menlo,consolas,monospace;font-size:0.75em;line-height:1.4}figure,pre{margin:0}li{margin:0.25em 0}img{max-width:100%;height:auto}hr{height:1px;padding:0;margin:2rem 0;background-color:#eeebee;border:0}blockquote{margin:10px 0;margin-block-start:0;margin-inline-start:0;padding-left:15px;border-left:3px solid #eeebee}.side-bar{z-index:0;display:flex;flex-wrap:wrap;background-color:#f5f6fa}@media (min-width: 50rem){.side-bar{flex-flow:column nowrap;position:fixed;width:248px;height:100%;border-right:1px solid #eeebee;align-items:flex-end}}@media (min-width: 66.5rem){.side-bar{width:calc((100% - 1064px) / 2 + 264px);min-width:264px}}@media (min-width: 50rem){.main{position:relative;max-width:800px;margin-left:248px}}@media (min-width: 66.5rem){.main{margin-left:Max(264px, calc((100% - 1064px) / 2 + 264px))}}.main-content-wrap{padding-right:1rem;padding-left:1rem;padding-top:1rem;padding-bottom:1rem}@media (min-width: 50rem){.main-content-wrap{padding-right:2rem;padding-left:2rem}}@media (min-width: 50rem){.main-content-wrap{padding-top:2rem;padding-bottom:2rem}}.main-header{z-index:0;display:none;background-color:#f5f6fa}@media (min-width: 50rem){.main-header{display:flex;justify-content:space-between;height:60px;background-color:#fff;border-bottom:1px solid #eeebee}}.main-header.nav-open{display:block}@media (min-width: 50rem){.main-header.nav-open{display:flex}}.site-nav,.site-header,.site-footer{width:100%}@media (min-width: 66.5rem){.site-nav,.site-header,.site-footer{width:264px}}.site-nav{display:none}.site-nav.nav-open{display:block}@media (min-width: 50rem){.site-nav{display:block;padding-top:3rem;padding-bottom:1rem;overflow-y:auto;flex:1 1 auto}}.site-header{display:flex;min-height:60px;align-items:center}@media (min-width: 50rem){.site-header{height:60px;max-height:60px;border-bottom:1px solid #eeebee}}.site-title{padding-right:1rem;padding-left:1rem;flex-grow:1;display:flex;height:100%;align-items:center;padding-top:.75rem;padding-bottom:.75rem;color:#27262b;font-size:18px !important}@media (min-width: 50rem){.site-title{padding-right:2rem;padding-left:2rem}}@media (min-width: 31.25rem){.site-title{font-size:24px !important;line-height:1.25}}@media (min-width: 50rem){.site-title{padding-top:.5rem;padding-bottom:.5rem}}.site-button{display:flex;height:100%;padding:1rem;align-items:center}@media (min-width: 50rem){.site-header .site-button{display:none}}.site-title:hover{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 80%, rgba(235,237,245,0) 100%)}.site-button:hover{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 100%)}body{position:relative;padding-bottom:4rem;overflow-y:scroll}@media (min-width: 50rem){body{position:static;padding-bottom:0}}.site-footer{padding-right:1rem;padding-left:1rem;position:absolute;bottom:0;left:0;padding-top:1rem;padding-bottom:1rem;color:#959396;font-size:11px !important}@media (min-width: 50rem){.site-footer{padding-right:2rem;padding-left:2rem}}@media (min-width: 31.25rem){.site-footer{font-size:12px !important}}@media (min-width: 50rem){.site-footer{position:static;justify-self:end}}.icon{width:1.5rem;height:1.5rem;color:#53a3da}.main-content{line-height:1.6}.main-content ol,.main-content ul,.main-content dl,.main-content pre,.main-content address,.main-content blockquote,.main-content .table-wrapper{margin-top:0.5em}.main-content a{overflow:hidden;text-overflow:ellipsis}.main-content ul,.main-content ol{padding-left:1.5em}.main-content li .highlight{margin-top:.25rem}.main-content ol{list-style-type:none;counter-reset:step-counter}.main-content ol>li{position:relative}.main-content ol>li::before{position:absolute;top:0.2em;left:-1.6em;color:#959396;content:counter(step-counter);counter-increment:step-counter;font-size:12px !important}@media (min-width: 31.25rem){.main-content ol>li::before{font-size:14px !important}}@media (min-width: 31.25rem){.main-content ol>li::before{top:0.11em}}.main-content ol>li ol{counter-reset:sub-counter}.main-content ol>li ol>li::before{content:counter(sub-counter,lower-alpha);counter-increment:sub-counter}.main-content ul{list-style:none}.main-content ul>li::before{position:absolute;margin-left:-1.4em;color:#959396;content:"•"}.main-content .task-list-item::before{content:""}.main-content .task-list-item-checkbox{margin-right:0.6em;margin-left:-1.4em}.main-content hr+*{margin-top:0}.main-content h1:first-of-type{margin-top:0.5em}.main-content dl{display:grid;grid-template:auto / 10em 1fr}.main-content dt,.main-content dd{margin:0.25em 0}.main-content dt{grid-column:1;font-weight:500;text-align:right}.main-content dt::after{content:":"}.main-content dd{grid-column:2;margin-bottom:0;margin-left:1em}.main-content dd blockquote:first-child,.main-content dd div:first-child,.main-content dd dl:first-child,.main-content dd dt:first-child,.main-content dd h1:first-child,.main-content dd h2:first-child,.main-content dd h3:first-child,.main-content dd h4:first-child,.main-content dd h5:first-child,.main-content dd h6:first-child,.main-content dd li:first-child,.main-content dd ol:first-child,.main-content dd p:first-child,.main-content dd pre:first-child,.main-content dd table:first-child,.main-content dd ul:first-child,.main-content dd .table-wrapper:first-child{margin-top:0}.main-content dd dl:first-child dt:first-child,.main-content dd dl:first-child dd:nth-child(2),.main-content ol dl:first-child dt:first-child,.main-content ol dl:first-child dd:nth-child(2),.main-content ul dl:first-child dt:first-child,.main-content ul dl:first-child dd:nth-child(2){margin-top:0}.main-content .anchor-heading{position:absolute;right:-1rem;width:1.5rem;height:100%;padding-right:.25rem;padding-left:.25rem;overflow:visible}@media (min-width: 50rem){.main-content .anchor-heading{right:auto;left:-1.5rem}}.main-content .anchor-heading svg{display:inline-block;width:100%;height:100%;color:#53a3da;visibility:hidden}.main-content .anchor-heading:hover svg,.main-content .anchor-heading:focus svg,.main-content h1:hover>.anchor-heading svg,.main-content h2:hover>.anchor-heading svg,.main-content h3:hover>.anchor-heading svg,.main-content h4:hover>.anchor-heading svg,.main-content h5:hover>.anchor-heading svg,.main-content h6:hover>.anchor-heading svg{visibility:visible}.main-content summary{cursor:pointer}.main-content h1,.main-content h2,.main-content h3,.main-content h4,.main-content h5,.main-content h6,.main-content #toctitle{position:relative;margin-top:1.5em;margin-bottom:0.25em}.main-content h1+table,.main-content h1+.table-wrapper,.main-content h1+.code-example,.main-content h1+.highlighter-rouge,.main-content h1+.sectionbody .listingblock,.main-content h2+table,.main-content h2+.table-wrapper,.main-content h2+.code-example,.main-content h2+.highlighter-rouge,.main-content h2+.sectionbody .listingblock,.main-content h3+table,.main-content h3+.table-wrapper,.main-content h3+.code-example,.main-content h3+.highlighter-rouge,.main-content h3+.sectionbody .listingblock,.main-content h4+table,.main-content h4+.table-wrapper,.main-content h4+.code-example,.main-content h4+.highlighter-rouge,.main-content h4+.sectionbody .listingblock,.main-content h5+table,.main-content h5+.table-wrapper,.main-content h5+.code-example,.main-content h5+.highlighter-rouge,.main-content h5+.sectionbody .listingblock,.main-content h6+table,.main-content h6+.table-wrapper,.main-content h6+.code-example,.main-content h6+.highlighter-rouge,.main-content h6+.sectionbody .listingblock,.main-content #toctitle+table,.main-content #toctitle+.table-wrapper,.main-content #toctitle+.code-example,.main-content #toctitle+.highlighter-rouge,.main-content #toctitle+.sectionbody .listingblock{margin-top:1em}.main-content h1+p:not(.label),.main-content h2+p:not(.label),.main-content h3+p:not(.label),.main-content h4+p:not(.label),.main-content h5+p:not(.label),.main-content h6+p:not(.label),.main-content #toctitle+p:not(.label){margin-top:0}.main-content>h1:first-child,.main-content>h2:first-child,.main-content>h3:first-child,.main-content>h4:first-child,.main-content>h5:first-child,.main-content>h6:first-child,.main-content>.sect1:first-child>h2,.main-content>.sect2:first-child>h3,.main-content>.sect3:first-child>h4,.main-content>.sect4:first-child>h5,.main-content>.sect5:first-child>h6{margin-top:.5rem}.nav-list{padding:0;margin-top:0;margin-bottom:0;list-style:none}.nav-list .nav-list-item{font-size:14px !important;position:relative;margin:0}@media (min-width: 31.25rem){.nav-list .nav-list-item{font-size:16px !important}}@media (min-width: 50rem){.nav-list .nav-list-item{font-size:12px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.nav-list .nav-list-item{font-size:14px !important}}.nav-list .nav-list-item .nav-list-link{display:block;min-height:3rem;padding-top:.25rem;padding-bottom:.25rem;line-height:2.5rem;padding-right:3rem;padding-left:1rem}@media (min-width: 50rem){.nav-list .nav-list-item .nav-list-link{min-height:2rem;line-height:1.5rem;padding-right:2rem;padding-left:2rem}}.nav-list .nav-list-item .nav-list-link.external>svg{width:1rem;height:1rem;vertical-align:text-bottom}.nav-list .nav-list-item .nav-list-link.active{font-weight:600;text-decoration:none}.nav-list .nav-list-item .nav-list-link:hover,.nav-list .nav-list-item .nav-list-link.active{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 80%, rgba(235,237,245,0) 100%)}.nav-list .nav-list-item .nav-list-expander{position:absolute;right:0;width:3rem;height:3rem;padding:.75rem;color:#53a3da}@media (min-width: 50rem){.nav-list .nav-list-item .nav-list-expander{width:2rem;height:2rem;padding:.5rem}}.nav-list .nav-list-item .nav-list-expander:hover{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 100%)}.nav-list .nav-list-item .nav-list-expander svg{transform:rotate(90deg)}.nav-list .nav-list-item>.nav-list{display:none;padding-left:.75rem;list-style:none}.nav-list .nav-list-item>.nav-list .nav-list-item{position:relative}.nav-list .nav-list-item>.nav-list .nav-list-item .nav-list-link{color:#5c5962}.nav-list .nav-list-item>.nav-list .nav-list-item .nav-list-expander{color:#5c5962}.nav-list .nav-list-item.active>.nav-list-expander svg{transform:rotate(-90deg)}.nav-list .nav-list-item.active>.nav-list{display:block}.nav-category{padding:.5rem 1rem;font-weight:600;text-align:start;text-transform:uppercase;border-bottom:1px solid #eeebee;font-size:11px !important}@media (min-width: 31.25rem){.nav-category{font-size:12px !important}}@media (min-width: 50rem){.nav-category{padding:.5rem 2rem;margin-top:1rem;text-align:start}.nav-category:first-child{margin-top:0}}.nav-list.nav-category-list>.nav-list-item{margin:0}.nav-list.nav-category-list>.nav-list-item>.nav-list{padding:0}.nav-list.nav-category-list>.nav-list-item>.nav-list>.nav-list-item>.nav-list-link{color:#53a3da}.nav-list.nav-category-list>.nav-list-item>.nav-list>.nav-list-item>.nav-list-expander{color:#53a3da}.aux-nav{height:100%;overflow-x:auto;font-size:11px !important}@media (min-width: 31.25rem){.aux-nav{font-size:12px !important}}.aux-nav .aux-nav-list{display:flex;height:100%;padding:0;margin:0;list-style:none}.aux-nav .aux-nav-list-item{display:inline-block;height:100%;padding:0;margin:0}@media (min-width: 50rem){.aux-nav{padding-right:1rem}}@media (min-width: 50rem){.breadcrumb-nav{margin-top:-1rem}}.breadcrumb-nav-list{padding-left:0;margin-bottom:.75rem;list-style:none}.breadcrumb-nav-list-item{display:table-cell;font-size:11px !important}@media (min-width: 31.25rem){.breadcrumb-nav-list-item{font-size:12px !important}}.breadcrumb-nav-list-item::before{display:none}.breadcrumb-nav-list-item::after{display:inline-block;margin-right:.5rem;margin-left:.5rem;color:#959396;content:"/"}.breadcrumb-nav-list-item:last-child::after{content:""}h1,.text-alpha{font-size:32px !important;line-height:1.25;font-weight:300}@media (min-width: 31.25rem){h1,.text-alpha{font-size:36px !important}}h2,.text-beta,#toctitle{font-size:18px !important}@media (min-width: 31.25rem){h2,.text-beta,#toctitle{font-size:24px !important;line-height:1.25}}h3,.text-gamma{font-size:16px !important}@media (min-width: 31.25rem){h3,.text-gamma{font-size:18px !important}}h4,.text-delta{font-size:11px !important;font-weight:400;text-transform:uppercase;letter-spacing:0.1em}@media (min-width: 31.25rem){h4,.text-delta{font-size:12px !important}}h4 code{text-transform:none}h5,.text-epsilon{font-size:12px !important}@media (min-width: 31.25rem){h5,.text-epsilon{font-size:14px !important}}h6,.text-zeta{font-size:11px !important}@media (min-width: 31.25rem){h6,.text-zeta{font-size:12px !important}}.text-small{font-size:11px !important}@media (min-width: 31.25rem){.text-small{font-size:12px !important}}.text-mono{font-family:"SFMono-Regular",menlo,consolas,monospace !important}.text-left{text-align:left !important}.text-center{text-align:center !important}.text-right{text-align:right !important}.label,.label-blue{display:inline-block;padding:0.16em 0.56em;margin-right:.5rem;margin-left:.5rem;color:#fff;text-transform:uppercase;vertical-align:middle;background-color:#2869e6;font-size:11px !important;border-radius:12px}@media (min-width: 31.25rem){.label,.label-blue{font-size:12px !important}}.label-green{background-color:#009c7b}.label-purple{background-color:#5e41d0}.label-red{background-color:#e94c4c}.label-yellow{color:#44434d;background-color:#f7d12e}.btn{display:inline-block;box-sizing:border-box;padding:0.3em 1em;margin:0;font-family:inherit;font-size:inherit;font-weight:500;line-height:1.5;color:#53a3da;text-decoration:none;vertical-align:baseline;cursor:pointer;background-color:#f7f7f7;border-width:0;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);appearance:none}.btn:focus{text-decoration:none;outline:none;box-shadow:0 0 0 3px rgba(0,0,255,0.25)}.btn:focus:hover,.btn.selected:focus{box-shadow:0 0 0 3px rgba(0,0,255,0.25)}.btn:hover,.btn.zeroclipboard-is-hover{color:#4b9fd8}.btn:hover,.btn:active,.btn.zeroclipboard-is-hover,.btn.zeroclipboard-is-active{text-decoration:none;background-color:#f4f4f4}.btn:active,.btn.selected,.btn.zeroclipboard-is-active{background-color:#efefef;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn.selected:hover{background-color:#cfcfcf}.btn:disabled,.btn:disabled:hover,.btn.disabled,.btn.disabled:hover{color:rgba(102,102,102,0.5);cursor:default;background-color:rgba(229,229,229,0.5);background-image:none;box-shadow:none}.btn-outline{color:#53a3da;background:transparent;box-shadow:inset 0 0 0 2px #e6e1e8}.btn-outline:hover,.btn-outline:active,.btn-outline.zeroclipboard-is-hover,.btn-outline.zeroclipboard-is-active{color:#429ad6;text-decoration:none;background-color:transparent;box-shadow:inset 0 0 0 3px #e6e1e8}.btn-outline:focus{text-decoration:none;outline:none;box-shadow:inset 0 0 0 2px #5c5962,0 0 0 3px rgba(0,0,255,0.25)}.btn-outline:focus:hover,.btn-outline.selected:focus{box-shadow:inset 0 0 0 2px #5c5962}.btn-primary{color:#fff;background-color:#5739ce;background-image:linear-gradient(#6f55d5, #5739ce);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-primary:hover,.btn-primary.zeroclipboard-is-hover{color:#fff;background-color:#5132cb;background-image:linear-gradient(#6549d2,#5132cb)}.btn-primary:active,.btn-primary.selected,.btn-primary.zeroclipboard-is-active{background-color:#4f31c6;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-primary.selected:hover{background-color:#472cb2}.btn-purple{color:#fff;background-color:#5739ce;background-image:linear-gradient(#6f55d5, #5739ce);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-purple:hover,.btn-purple.zeroclipboard-is-hover{color:#fff;background-color:#5132cb;background-image:linear-gradient(#6549d2,#5132cb)}.btn-purple:active,.btn-purple.selected,.btn-purple.zeroclipboard-is-active{background-color:#4f31c6;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-purple.selected:hover{background-color:#472cb2}.btn-blue{color:#fff;background-color:#227efa;background-image:linear-gradient(#4593fb, #227efa);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-blue:hover,.btn-blue.zeroclipboard-is-hover{color:#fff;background-color:#1878fa;background-image:linear-gradient(#368afa,#1878fa)}.btn-blue:active,.btn-blue.selected,.btn-blue.zeroclipboard-is-active{background-color:#1375f9;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-blue.selected:hover{background-color:#0669ed}.btn-green{color:#fff;background-color:#10ac7d;background-image:linear-gradient(#13cc95, #10ac7d);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-green:hover,.btn-green.zeroclipboard-is-hover{color:#fff;background-color:#0fa276;background-image:linear-gradient(#12be8b,#0fa276)}.btn-green:active,.btn-green.selected,.btn-green.zeroclipboard-is-active{background-color:#0f9e73;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-green.selected:hover{background-color:#0d8662}.search{position:relative;z-index:2;flex-grow:1;height:4rem;padding:.5rem;transition:padding linear 200ms}@media (min-width: 50rem){.search{position:relative !important;width:auto !important;height:100% !important;padding:0;transition:none}}.search-input-wrap{position:relative;z-index:1;height:3rem;overflow:hidden;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);transition:height linear 200ms}@media (min-width: 50rem){.search-input-wrap{position:absolute;width:100%;max-width:536px;height:100% !important;border-radius:0;box-shadow:none;transition:width ease 400ms}}.search-input{position:absolute;width:100%;height:100%;padding:.5rem 1rem .5rem 2.5rem;font-size:16px;color:#5c5962;background-color:#fff;border-top:0;border-right:0;border-bottom:0;border-left:0;border-radius:0}@media (min-width: 50rem){.search-input{padding:.5rem 1rem .5rem 3.5rem;font-size:14px;background-color:#fff;transition:padding-left linear 200ms}}.search-input:focus{outline:0}.search-input:focus+.search-label .search-icon{color:#53a3da}.search-label{position:absolute;display:flex;height:100%;padding-left:1rem}@media (min-width: 50rem){.search-label{padding-left:2rem;transition:padding-left linear 200ms}}.search-label .search-icon{width:1.2rem;height:1.2rem;align-self:center;color:#959396}.search-results{position:absolute;left:0;display:none;width:100%;max-height:calc(100% - 4rem);overflow-y:auto;background-color:#fff;border-bottom-right-radius:4px;border-bottom-left-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}@media (min-width: 50rem){.search-results{top:100%;width:536px;max-height:calc(100vh - 200%) !important}}.search-results-list{padding-left:0;margin-bottom:.25rem;list-style:none;font-size:14px !important}@media (min-width: 31.25rem){.search-results-list{font-size:16px !important}}@media (min-width: 50rem){.search-results-list{font-size:12px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.search-results-list{font-size:14px !important}}.search-results-list-item{padding:0;margin:0}.search-result{display:block;padding:.25rem .75rem}.search-result:hover,.search-result.active{background-color:#ebedf5}.search-result-title{display:block;padding-top:.5rem;padding-bottom:.5rem}@media (min-width: 31.25rem){.search-result-title{display:inline-block;width:40%;padding-right:.5rem;vertical-align:top}}.search-result-doc{display:flex;align-items:center;word-wrap:break-word}.search-result-doc.search-result-doc-parent{opacity:0.5;font-size:12px !important}@media (min-width: 31.25rem){.search-result-doc.search-result-doc-parent{font-size:14px !important}}@media (min-width: 50rem){.search-result-doc.search-result-doc-parent{font-size:11px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.search-result-doc.search-result-doc-parent{font-size:12px !important}}.search-result-doc .search-result-icon{width:1rem;height:1rem;margin-right:.5rem;color:#53a3da;flex-shrink:0}.search-result-doc .search-result-doc-title{overflow:auto}.search-result-section{margin-left:1.5rem;word-wrap:break-word}.search-result-rel-url{display:block;margin-left:1.5rem;overflow:hidden;color:#959396;text-overflow:ellipsis;white-space:nowrap;font-size:9px !important}@media (min-width: 31.25rem){.search-result-rel-url{font-size:10px !important}}.search-result-previews{display:block;padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;margin-left:.5rem;color:#959396;word-wrap:break-word;border-left:1px solid;border-left-color:#eeebee;font-size:11px !important}@media (min-width: 31.25rem){.search-result-previews{font-size:12px !important}}@media (min-width: 31.25rem){.search-result-previews{display:inline-block;width:60%;padding-left:.5rem;margin-left:0;vertical-align:top}}.search-result-preview+.search-result-preview{margin-top:.25rem}.search-result-highlight{font-weight:bold}.search-no-result{padding:.5rem .75rem;font-size:12px !important}@media (min-width: 31.25rem){.search-no-result{font-size:14px !important}}.search-button{position:fixed;right:1rem;bottom:1rem;display:flex;width:3.5rem;height:3.5rem;background-color:#fff;border:1px solid rgba(83,163,218,0.3);border-radius:1.75rem;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);align-items:center;justify-content:center}.search-overlay{position:fixed;top:0;left:0;z-index:1;width:0;height:0;background-color:rgba(0,0,0,0.3);opacity:0;transition:opacity ease 400ms,width 0s 400ms,height 0s 400ms}.search-active .search{position:fixed;top:0;left:0;width:100%;height:100%;padding:0}.search-active .search-input-wrap{height:4rem;border-radius:0}@media (min-width: 50rem){.search-active .search-input-wrap{width:536px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}}.search-active .search-input{background-color:#fff}@media (min-width: 50rem){.search-active .search-input{padding-left:2.3rem}}@media (min-width: 50rem){.search-active .search-label{padding-left:0.6rem}}.search-active .search-results{display:block}.search-active .search-overlay{width:100%;height:100%;opacity:1;transition:opacity ease 400ms,width 0s,height 0s}@media (min-width: 50rem){.search-active .main{position:fixed;right:0;left:0}}.search-active .main-header{padding-top:4rem}@media (min-width: 50rem){.search-active .main-header{padding-top:0}}.table-wrapper{display:block;width:100%;max-width:100%;margin-bottom:1.5rem;overflow-x:auto;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}table{display:table;min-width:100%;border-collapse:separate}th,td{font-size:12px !important;min-width:120px;padding:.5rem .75rem;background-color:#fff;border-bottom:1px solid rgba(238,235,238,0.5);border-left:1px solid #eeebee}@media (min-width: 31.25rem){th,td{font-size:14px !important}}th:first-of-type,td:first-of-type{border-left:0}tbody tr:last-of-type th,tbody tr:last-of-type td{border-bottom:0}tbody tr:last-of-type td{padding-bottom:.75rem}thead th{border-bottom:1px solid #eeebee}:not(pre,figure)>code{padding:0.2em 0.15em;font-weight:400;background-color:#f5f6fa;border:1px solid #eeebee;border-radius:4px}a:visited code{border-color:#eeebee}div.highlighter-rouge,div.listingblock>div.content,figure.highlight{margin-top:0;margin-bottom:.75rem;background-color:#f5f6fa;border-radius:4px;box-shadow:none;-webkit-overflow-scrolling:touch;position:relative;padding:0}div.highlighter-rouge>button,div.listingblock>div.content>button,figure.highlight>button{width:.75rem;opacity:0;position:absolute;top:0;right:0;border:.75rem solid #f5f6fa;background-color:#f5f6fa;color:#5c5962;box-sizing:content-box}div.highlighter-rouge>button svg,div.listingblock>div.content>button svg,figure.highlight>button svg{fill:#5c5962}div.highlighter-rouge>button:active,div.listingblock>div.content>button:active,figure.highlight>button:active{text-decoration:none;outline:none;opacity:1}div.highlighter-rouge>button:focus,div.listingblock>div.content>button:focus,figure.highlight>button:focus{opacity:1}div.highlighter-rouge:hover>button,div.listingblock>div.content:hover>button,figure.highlight:hover>button{cursor:copy;opacity:1}div.highlighter-rouge div.highlight{overflow-x:auto;padding:.75rem;margin:0;border:0}div.highlighter-rouge pre.highlight,div.highlighter-rouge code{padding:0;margin:0;border:0}div.listingblock{margin-top:0;margin-bottom:.75rem}div.listingblock div.content{overflow-x:auto;padding:.75rem;margin:0;border:0}div.listingblock div.content>pre,div.listingblock code{padding:0;margin:0;border:0}figure.highlight pre,figure.highlight :not(pre)>code{overflow-x:auto;padding:.75rem;margin:0;border:0}.highlight .table-wrapper{padding:.75rem 0;margin:0;border:0;box-shadow:none}.highlight .table-wrapper td,.highlight .table-wrapper pre{font-size:11px !important;min-width:0;padding:0;background-color:#f5f6fa;border:0}@media (min-width: 31.25rem){.highlight .table-wrapper td,.highlight .table-wrapper pre{font-size:12px !important}}.highlight .table-wrapper td.gl{width:1em;padding-right:.75rem;padding-left:.75rem}.highlight .table-wrapper pre{margin:0;line-height:2}.code-example,.listingblock>.title{padding:.75rem;margin-bottom:.75rem;overflow:auto;border:1px solid #eeebee;border-radius:4px}.code-example+.highlighter-rouge,.code-example+.sectionbody .listingblock,.code-example+.content,.code-example+figure.highlight,.listingblock>.title+.highlighter-rouge,.listingblock>.title+.sectionbody .listingblock,.listingblock>.title+.content,.listingblock>.title+figure.highlight{position:relative;margin-top:-1rem;border-right:1px solid #eeebee;border-bottom:1px solid #eeebee;border-left:1px solid #eeebee;border-top-left-radius:0;border-top-right-radius:0}code.language-mermaid{padding:0;background-color:inherit;border:0}.highlight,pre.highlight{background:#f5f6fa;color:#5c5962}.highlight pre{background:#f5f6fa}.text-grey-dk-000{color:#959396 !important}.text-grey-dk-100{color:#5c5962 !important}.text-grey-dk-200{color:#44434d !important}.text-grey-dk-250{color:#302d36 !important}.text-grey-dk-300{color:#27262b !important}.text-grey-lt-000{color:#f5f6fa !important}.text-grey-lt-100{color:#eeebee !important}.text-grey-lt-200{color:#ecebed !important}.text-grey-lt-300{color:#e6e1e8 !important}.text-blue-000{color:#2c84fa !important}.text-blue-100{color:#2869e6 !important}.text-blue-200{color:#264caf !important}.text-blue-300{color:#183385 !important}.text-green-000{color:#41d693 !important}.text-green-100{color:#11b584 !important}.text-green-200{color:#009c7b !important}.text-green-300{color:#026e57 !important}.text-purple-000{color:#7253ed !important}.text-purple-100{color:#5e41d0 !important}.text-purple-200{color:#4e26af !important}.text-purple-300{color:#381885 !important}.text-yellow-000{color:#ffeb82 !important}.text-yellow-100{color:#fadf50 !important}.text-yellow-200{color:#f7d12e !important}.text-yellow-300{color:#e7af06 !important}.text-red-000{color:#f77e7e !important}.text-red-100{color:#f96e65 !important}.text-red-200{color:#e94c4c !important}.text-red-300{color:#dd2e2e !important}.bg-grey-dk-000{background-color:#959396 !important}.bg-grey-dk-100{background-color:#5c5962 !important}.bg-grey-dk-200{background-color:#44434d !important}.bg-grey-dk-250{background-color:#302d36 !important}.bg-grey-dk-300{background-color:#27262b !important}.bg-grey-lt-000{background-color:#f5f6fa !important}.bg-grey-lt-100{background-color:#eeebee !important}.bg-grey-lt-200{background-color:#ecebed !important}.bg-grey-lt-300{background-color:#e6e1e8 !important}.bg-blue-000{background-color:#2c84fa !important}.bg-blue-100{background-color:#2869e6 !important}.bg-blue-200{background-color:#264caf !important}.bg-blue-300{background-color:#183385 !important}.bg-green-000{background-color:#41d693 !important}.bg-green-100{background-color:#11b584 !important}.bg-green-200{background-color:#009c7b !important}.bg-green-300{background-color:#026e57 !important}.bg-purple-000{background-color:#7253ed !important}.bg-purple-100{background-color:#5e41d0 !important}.bg-purple-200{background-color:#4e26af !important}.bg-purple-300{background-color:#381885 !important}.bg-yellow-000{background-color:#ffeb82 !important}.bg-yellow-100{background-color:#fadf50 !important}.bg-yellow-200{background-color:#f7d12e !important}.bg-yellow-300{background-color:#e7af06 !important}.bg-red-000{background-color:#f77e7e !important}.bg-red-100{background-color:#f96e65 !important}.bg-red-200{background-color:#e94c4c !important}.bg-red-300{background-color:#dd2e2e !important}.d-block{display:block !important}.d-flex{display:flex !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-none{display:none !important}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}.float-left{float:left !important}.float-right{float:right !important}.flex-justify-start{justify-content:flex-start !important}.flex-justify-end{justify-content:flex-end !important}.flex-justify-between{justify-content:space-between !important}.flex-justify-around{justify-content:space-around !important}.v-align-baseline{vertical-align:baseline !important}.v-align-bottom{vertical-align:bottom !important}.v-align-middle{vertical-align:middle !important}.v-align-text-bottom{vertical-align:text-bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-top{vertical-align:top !important}.fs-1{font-size:9px !important}@media (min-width: 31.25rem){.fs-1{font-size:10px !important}}.fs-2{font-size:11px !important}@media (min-width: 31.25rem){.fs-2{font-size:12px !important}}.fs-3{font-size:12px !important}@media (min-width: 31.25rem){.fs-3{font-size:14px !important}}.fs-4{font-size:14px !important}@media (min-width: 31.25rem){.fs-4{font-size:16px !important}}.fs-5{font-size:16px !important}@media (min-width: 31.25rem){.fs-5{font-size:18px !important}}.fs-6{font-size:18px !important}@media (min-width: 31.25rem){.fs-6{font-size:24px !important;line-height:1.25}}.fs-7{font-size:24px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-7{font-size:32px !important}}.fs-8{font-size:32px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-8{font-size:36px !important}}.fs-9{font-size:36px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-9{font-size:42px !important}}.fs-10{font-size:42px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-10{font-size:48px !important}}.fw-300{font-weight:300 !important}.fw-400{font-weight:400 !important}.fw-500{font-weight:500 !important}.fw-700{font-weight:700 !important}.lh-0{line-height:0 !important}.lh-default{line-height:1.4}.lh-tight{line-height:1.25}.ls-5{letter-spacing:0.05em !important}.ls-10{letter-spacing:0.1em !important}.ls-0{letter-spacing:0 !important}.text-uppercase{text-transform:uppercase !important}.list-style-none{padding:0 !important;margin:0 !important;list-style:none !important}.list-style-none li::before{display:none !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-0{margin-right:-0 !important;margin-left:-0 !important}.mx-0-auto{margin-right:auto !important;margin-left:auto !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-1-auto{margin-right:auto !important;margin-left:auto !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-2-auto{margin-right:auto !important;margin-left:auto !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-3{margin-right:-.75rem !important;margin-left:-.75rem !important}.mx-3-auto{margin-right:auto !important;margin-left:auto !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-right:1rem !important;margin-left:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-4{margin-right:-1rem !important;margin-left:-1rem !important}.mx-4-auto{margin-right:auto !important;margin-left:auto !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-5-auto{margin-right:auto !important;margin-left:auto !important}.m-6{margin:2rem !important}.mt-6{margin-top:2rem !important}.mr-6{margin-right:2rem !important}.mb-6{margin-bottom:2rem !important}.ml-6{margin-left:2rem !important}.mx-6{margin-right:2rem !important;margin-left:2rem !important}.my-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-6{margin-right:-2rem !important;margin-left:-2rem !important}.mx-6-auto{margin-right:auto !important;margin-left:auto !important}.m-7{margin:2.5rem !important}.mt-7{margin-top:2.5rem !important}.mr-7{margin-right:2.5rem !important}.mb-7{margin-bottom:2.5rem !important}.ml-7{margin-left:2.5rem !important}.mx-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}.mx-7-auto{margin-right:auto !important;margin-left:auto !important}.m-8{margin:3rem !important}.mt-8{margin-top:3rem !important}.mr-8{margin-right:3rem !important}.mb-8{margin-bottom:3rem !important}.ml-8{margin-left:3rem !important}.mx-8{margin-right:3rem !important;margin-left:3rem !important}.my-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-8{margin-right:-3rem !important;margin-left:-3rem !important}.mx-8-auto{margin-right:auto !important;margin-left:auto !important}.m-9{margin:3.5rem !important}.mt-9{margin-top:3.5rem !important}.mr-9{margin-right:3.5rem !important}.mb-9{margin-bottom:3.5rem !important}.ml-9{margin-left:3.5rem !important}.mx-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}.mx-9-auto{margin-right:auto !important;margin-left:auto !important}.m-10{margin:4rem !important}.mt-10{margin-top:4rem !important}.mr-10{margin-right:4rem !important}.mb-10{margin-bottom:4rem !important}.ml-10{margin-left:4rem !important}.mx-10{margin-right:4rem !important;margin-left:4rem !important}.my-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-10{margin-right:-4rem !important;margin-left:-4rem !important}.mx-10-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 20rem){.m-xs-0{margin:0 !important}.mt-xs-0{margin-top:0 !important}.mr-xs-0{margin-right:0 !important}.mb-xs-0{margin-bottom:0 !important}.ml-xs-0{margin-left:0 !important}.mx-xs-0{margin-right:0 !important;margin-left:0 !important}.my-xs-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-xs-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 20rem){.m-xs-1{margin:.25rem !important}.mt-xs-1{margin-top:.25rem !important}.mr-xs-1{margin-right:.25rem !important}.mb-xs-1{margin-bottom:.25rem !important}.ml-xs-1{margin-left:.25rem !important}.mx-xs-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-xs-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-xs-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 20rem){.m-xs-2{margin:.5rem !important}.mt-xs-2{margin-top:.5rem !important}.mr-xs-2{margin-right:.5rem !important}.mb-xs-2{margin-bottom:.5rem !important}.ml-xs-2{margin-left:.5rem !important}.mx-xs-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-xs-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-xs-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 20rem){.m-xs-3{margin:.75rem !important}.mt-xs-3{margin-top:.75rem !important}.mr-xs-3{margin-right:.75rem !important}.mb-xs-3{margin-bottom:.75rem !important}.ml-xs-3{margin-left:.75rem !important}.mx-xs-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-xs-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-xs-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 20rem){.m-xs-4{margin:1rem !important}.mt-xs-4{margin-top:1rem !important}.mr-xs-4{margin-right:1rem !important}.mb-xs-4{margin-bottom:1rem !important}.ml-xs-4{margin-left:1rem !important}.mx-xs-4{margin-right:1rem !important;margin-left:1rem !important}.my-xs-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-xs-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 20rem){.m-xs-5{margin:1.5rem !important}.mt-xs-5{margin-top:1.5rem !important}.mr-xs-5{margin-right:1.5rem !important}.mb-xs-5{margin-bottom:1.5rem !important}.ml-xs-5{margin-left:1.5rem !important}.mx-xs-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-xs-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-xs-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 20rem){.m-xs-6{margin:2rem !important}.mt-xs-6{margin-top:2rem !important}.mr-xs-6{margin-right:2rem !important}.mb-xs-6{margin-bottom:2rem !important}.ml-xs-6{margin-left:2rem !important}.mx-xs-6{margin-right:2rem !important;margin-left:2rem !important}.my-xs-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-xs-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 20rem){.m-xs-7{margin:2.5rem !important}.mt-xs-7{margin-top:2.5rem !important}.mr-xs-7{margin-right:2.5rem !important}.mb-xs-7{margin-bottom:2.5rem !important}.ml-xs-7{margin-left:2.5rem !important}.mx-xs-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-xs-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-xs-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 20rem){.m-xs-8{margin:3rem !important}.mt-xs-8{margin-top:3rem !important}.mr-xs-8{margin-right:3rem !important}.mb-xs-8{margin-bottom:3rem !important}.ml-xs-8{margin-left:3rem !important}.mx-xs-8{margin-right:3rem !important;margin-left:3rem !important}.my-xs-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-xs-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 20rem){.m-xs-9{margin:3.5rem !important}.mt-xs-9{margin-top:3.5rem !important}.mr-xs-9{margin-right:3.5rem !important}.mb-xs-9{margin-bottom:3.5rem !important}.ml-xs-9{margin-left:3.5rem !important}.mx-xs-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-xs-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-xs-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 20rem){.m-xs-10{margin:4rem !important}.mt-xs-10{margin-top:4rem !important}.mr-xs-10{margin-right:4rem !important}.mb-xs-10{margin-bottom:4rem !important}.ml-xs-10{margin-left:4rem !important}.mx-xs-10{margin-right:4rem !important;margin-left:4rem !important}.my-xs-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-xs-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 31.25rem){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-sm-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 31.25rem){.m-sm-1{margin:.25rem !important}.mt-sm-1{margin-top:.25rem !important}.mr-sm-1{margin-right:.25rem !important}.mb-sm-1{margin-bottom:.25rem !important}.ml-sm-1{margin-left:.25rem !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-sm-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 31.25rem){.m-sm-2{margin:.5rem !important}.mt-sm-2{margin-top:.5rem !important}.mr-sm-2{margin-right:.5rem !important}.mb-sm-2{margin-bottom:.5rem !important}.ml-sm-2{margin-left:.5rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-sm-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 31.25rem){.m-sm-3{margin:.75rem !important}.mt-sm-3{margin-top:.75rem !important}.mr-sm-3{margin-right:.75rem !important}.mb-sm-3{margin-bottom:.75rem !important}.ml-sm-3{margin-left:.75rem !important}.mx-sm-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-sm-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-sm-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 31.25rem){.m-sm-4{margin:1rem !important}.mt-sm-4{margin-top:1rem !important}.mr-sm-4{margin-right:1rem !important}.mb-sm-4{margin-bottom:1rem !important}.ml-sm-4{margin-left:1rem !important}.mx-sm-4{margin-right:1rem !important;margin-left:1rem !important}.my-sm-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-sm-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 31.25rem){.m-sm-5{margin:1.5rem !important}.mt-sm-5{margin-top:1.5rem !important}.mr-sm-5{margin-right:1.5rem !important}.mb-sm-5{margin-bottom:1.5rem !important}.ml-sm-5{margin-left:1.5rem !important}.mx-sm-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-sm-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-sm-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 31.25rem){.m-sm-6{margin:2rem !important}.mt-sm-6{margin-top:2rem !important}.mr-sm-6{margin-right:2rem !important}.mb-sm-6{margin-bottom:2rem !important}.ml-sm-6{margin-left:2rem !important}.mx-sm-6{margin-right:2rem !important;margin-left:2rem !important}.my-sm-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-sm-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 31.25rem){.m-sm-7{margin:2.5rem !important}.mt-sm-7{margin-top:2.5rem !important}.mr-sm-7{margin-right:2.5rem !important}.mb-sm-7{margin-bottom:2.5rem !important}.ml-sm-7{margin-left:2.5rem !important}.mx-sm-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-sm-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-sm-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 31.25rem){.m-sm-8{margin:3rem !important}.mt-sm-8{margin-top:3rem !important}.mr-sm-8{margin-right:3rem !important}.mb-sm-8{margin-bottom:3rem !important}.ml-sm-8{margin-left:3rem !important}.mx-sm-8{margin-right:3rem !important;margin-left:3rem !important}.my-sm-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-sm-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 31.25rem){.m-sm-9{margin:3.5rem !important}.mt-sm-9{margin-top:3.5rem !important}.mr-sm-9{margin-right:3.5rem !important}.mb-sm-9{margin-bottom:3.5rem !important}.ml-sm-9{margin-left:3.5rem !important}.mx-sm-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-sm-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-sm-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 31.25rem){.m-sm-10{margin:4rem !important}.mt-sm-10{margin-top:4rem !important}.mr-sm-10{margin-right:4rem !important}.mb-sm-10{margin-bottom:4rem !important}.ml-sm-10{margin-left:4rem !important}.mx-sm-10{margin-right:4rem !important;margin-left:4rem !important}.my-sm-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-sm-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 50rem){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-md-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 50rem){.m-md-1{margin:.25rem !important}.mt-md-1{margin-top:.25rem !important}.mr-md-1{margin-right:.25rem !important}.mb-md-1{margin-bottom:.25rem !important}.ml-md-1{margin-left:.25rem !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-md-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 50rem){.m-md-2{margin:.5rem !important}.mt-md-2{margin-top:.5rem !important}.mr-md-2{margin-right:.5rem !important}.mb-md-2{margin-bottom:.5rem !important}.ml-md-2{margin-left:.5rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-md-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 50rem){.m-md-3{margin:.75rem !important}.mt-md-3{margin-top:.75rem !important}.mr-md-3{margin-right:.75rem !important}.mb-md-3{margin-bottom:.75rem !important}.ml-md-3{margin-left:.75rem !important}.mx-md-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-md-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-md-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 50rem){.m-md-4{margin:1rem !important}.mt-md-4{margin-top:1rem !important}.mr-md-4{margin-right:1rem !important}.mb-md-4{margin-bottom:1rem !important}.ml-md-4{margin-left:1rem !important}.mx-md-4{margin-right:1rem !important;margin-left:1rem !important}.my-md-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-md-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 50rem){.m-md-5{margin:1.5rem !important}.mt-md-5{margin-top:1.5rem !important}.mr-md-5{margin-right:1.5rem !important}.mb-md-5{margin-bottom:1.5rem !important}.ml-md-5{margin-left:1.5rem !important}.mx-md-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-md-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-md-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 50rem){.m-md-6{margin:2rem !important}.mt-md-6{margin-top:2rem !important}.mr-md-6{margin-right:2rem !important}.mb-md-6{margin-bottom:2rem !important}.ml-md-6{margin-left:2rem !important}.mx-md-6{margin-right:2rem !important;margin-left:2rem !important}.my-md-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-md-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 50rem){.m-md-7{margin:2.5rem !important}.mt-md-7{margin-top:2.5rem !important}.mr-md-7{margin-right:2.5rem !important}.mb-md-7{margin-bottom:2.5rem !important}.ml-md-7{margin-left:2.5rem !important}.mx-md-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-md-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-md-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 50rem){.m-md-8{margin:3rem !important}.mt-md-8{margin-top:3rem !important}.mr-md-8{margin-right:3rem !important}.mb-md-8{margin-bottom:3rem !important}.ml-md-8{margin-left:3rem !important}.mx-md-8{margin-right:3rem !important;margin-left:3rem !important}.my-md-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-md-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 50rem){.m-md-9{margin:3.5rem !important}.mt-md-9{margin-top:3.5rem !important}.mr-md-9{margin-right:3.5rem !important}.mb-md-9{margin-bottom:3.5rem !important}.ml-md-9{margin-left:3.5rem !important}.mx-md-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-md-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-md-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 50rem){.m-md-10{margin:4rem !important}.mt-md-10{margin-top:4rem !important}.mr-md-10{margin-right:4rem !important}.mb-md-10{margin-bottom:4rem !important}.ml-md-10{margin-left:4rem !important}.mx-md-10{margin-right:4rem !important;margin-left:4rem !important}.my-md-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-md-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 66.5rem){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-lg-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 66.5rem){.m-lg-1{margin:.25rem !important}.mt-lg-1{margin-top:.25rem !important}.mr-lg-1{margin-right:.25rem !important}.mb-lg-1{margin-bottom:.25rem !important}.ml-lg-1{margin-left:.25rem !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-lg-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 66.5rem){.m-lg-2{margin:.5rem !important}.mt-lg-2{margin-top:.5rem !important}.mr-lg-2{margin-right:.5rem !important}.mb-lg-2{margin-bottom:.5rem !important}.ml-lg-2{margin-left:.5rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-lg-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 66.5rem){.m-lg-3{margin:.75rem !important}.mt-lg-3{margin-top:.75rem !important}.mr-lg-3{margin-right:.75rem !important}.mb-lg-3{margin-bottom:.75rem !important}.ml-lg-3{margin-left:.75rem !important}.mx-lg-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-lg-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-lg-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 66.5rem){.m-lg-4{margin:1rem !important}.mt-lg-4{margin-top:1rem !important}.mr-lg-4{margin-right:1rem !important}.mb-lg-4{margin-bottom:1rem !important}.ml-lg-4{margin-left:1rem !important}.mx-lg-4{margin-right:1rem !important;margin-left:1rem !important}.my-lg-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-lg-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 66.5rem){.m-lg-5{margin:1.5rem !important}.mt-lg-5{margin-top:1.5rem !important}.mr-lg-5{margin-right:1.5rem !important}.mb-lg-5{margin-bottom:1.5rem !important}.ml-lg-5{margin-left:1.5rem !important}.mx-lg-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-lg-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-lg-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 66.5rem){.m-lg-6{margin:2rem !important}.mt-lg-6{margin-top:2rem !important}.mr-lg-6{margin-right:2rem !important}.mb-lg-6{margin-bottom:2rem !important}.ml-lg-6{margin-left:2rem !important}.mx-lg-6{margin-right:2rem !important;margin-left:2rem !important}.my-lg-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-lg-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 66.5rem){.m-lg-7{margin:2.5rem !important}.mt-lg-7{margin-top:2.5rem !important}.mr-lg-7{margin-right:2.5rem !important}.mb-lg-7{margin-bottom:2.5rem !important}.ml-lg-7{margin-left:2.5rem !important}.mx-lg-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-lg-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-lg-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 66.5rem){.m-lg-8{margin:3rem !important}.mt-lg-8{margin-top:3rem !important}.mr-lg-8{margin-right:3rem !important}.mb-lg-8{margin-bottom:3rem !important}.ml-lg-8{margin-left:3rem !important}.mx-lg-8{margin-right:3rem !important;margin-left:3rem !important}.my-lg-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-lg-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 66.5rem){.m-lg-9{margin:3.5rem !important}.mt-lg-9{margin-top:3.5rem !important}.mr-lg-9{margin-right:3.5rem !important}.mb-lg-9{margin-bottom:3.5rem !important}.ml-lg-9{margin-left:3.5rem !important}.mx-lg-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-lg-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-lg-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 66.5rem){.m-lg-10{margin:4rem !important}.mt-lg-10{margin-top:4rem !important}.mr-lg-10{margin-right:4rem !important}.mb-lg-10{margin-bottom:4rem !important}.ml-lg-10{margin-left:4rem !important}.mx-lg-10{margin-right:4rem !important;margin-left:4rem !important}.my-lg-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-lg-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 87.5rem){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-xl-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 87.5rem){.m-xl-1{margin:.25rem !important}.mt-xl-1{margin-top:.25rem !important}.mr-xl-1{margin-right:.25rem !important}.mb-xl-1{margin-bottom:.25rem !important}.ml-xl-1{margin-left:.25rem !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-xl-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 87.5rem){.m-xl-2{margin:.5rem !important}.mt-xl-2{margin-top:.5rem !important}.mr-xl-2{margin-right:.5rem !important}.mb-xl-2{margin-bottom:.5rem !important}.ml-xl-2{margin-left:.5rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-xl-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 87.5rem){.m-xl-3{margin:.75rem !important}.mt-xl-3{margin-top:.75rem !important}.mr-xl-3{margin-right:.75rem !important}.mb-xl-3{margin-bottom:.75rem !important}.ml-xl-3{margin-left:.75rem !important}.mx-xl-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-xl-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-xl-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 87.5rem){.m-xl-4{margin:1rem !important}.mt-xl-4{margin-top:1rem !important}.mr-xl-4{margin-right:1rem !important}.mb-xl-4{margin-bottom:1rem !important}.ml-xl-4{margin-left:1rem !important}.mx-xl-4{margin-right:1rem !important;margin-left:1rem !important}.my-xl-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-xl-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 87.5rem){.m-xl-5{margin:1.5rem !important}.mt-xl-5{margin-top:1.5rem !important}.mr-xl-5{margin-right:1.5rem !important}.mb-xl-5{margin-bottom:1.5rem !important}.ml-xl-5{margin-left:1.5rem !important}.mx-xl-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-xl-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-xl-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 87.5rem){.m-xl-6{margin:2rem !important}.mt-xl-6{margin-top:2rem !important}.mr-xl-6{margin-right:2rem !important}.mb-xl-6{margin-bottom:2rem !important}.ml-xl-6{margin-left:2rem !important}.mx-xl-6{margin-right:2rem !important;margin-left:2rem !important}.my-xl-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-xl-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 87.5rem){.m-xl-7{margin:2.5rem !important}.mt-xl-7{margin-top:2.5rem !important}.mr-xl-7{margin-right:2.5rem !important}.mb-xl-7{margin-bottom:2.5rem !important}.ml-xl-7{margin-left:2.5rem !important}.mx-xl-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-xl-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-xl-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 87.5rem){.m-xl-8{margin:3rem !important}.mt-xl-8{margin-top:3rem !important}.mr-xl-8{margin-right:3rem !important}.mb-xl-8{margin-bottom:3rem !important}.ml-xl-8{margin-left:3rem !important}.mx-xl-8{margin-right:3rem !important;margin-left:3rem !important}.my-xl-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-xl-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 87.5rem){.m-xl-9{margin:3.5rem !important}.mt-xl-9{margin-top:3.5rem !important}.mr-xl-9{margin-right:3.5rem !important}.mb-xl-9{margin-bottom:3.5rem !important}.ml-xl-9{margin-left:3.5rem !important}.mx-xl-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-xl-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-xl-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 87.5rem){.m-xl-10{margin:4rem !important}.mt-xl-10{margin-top:4rem !important}.mr-xl-10{margin-right:4rem !important}.mb-xl-10{margin-bottom:4rem !important}.ml-xl-10{margin-left:4rem !important}.mx-xl-10{margin-right:4rem !important;margin-left:4rem !important}.my-xl-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-xl-10{margin-right:-4rem !important;margin-left:-4rem !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-right:1rem !important;padding-left:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:2rem !important}.pt-6{padding-top:2rem !important}.pr-6{padding-right:2rem !important}.pb-6{padding-bottom:2rem !important}.pl-6{padding-left:2rem !important}.px-6{padding-right:2rem !important;padding-left:2rem !important}.py-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-7{padding:2.5rem !important}.pt-7{padding-top:2.5rem !important}.pr-7{padding-right:2.5rem !important}.pb-7{padding-bottom:2.5rem !important}.pl-7{padding-left:2.5rem !important}.px-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-8{padding:3rem !important}.pt-8{padding-top:3rem !important}.pr-8{padding-right:3rem !important}.pb-8{padding-bottom:3rem !important}.pl-8{padding-left:3rem !important}.px-8{padding-right:3rem !important;padding-left:3rem !important}.py-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-9{padding:3.5rem !important}.pt-9{padding-top:3.5rem !important}.pr-9{padding-right:3.5rem !important}.pb-9{padding-bottom:3.5rem !important}.pl-9{padding-left:3.5rem !important}.px-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-10{padding:4rem !important}.pt-10{padding-top:4rem !important}.pr-10{padding-right:4rem !important}.pb-10{padding-bottom:4rem !important}.pl-10{padding-left:4rem !important}.px-10{padding-right:4rem !important;padding-left:4rem !important}.py-10{padding-top:4rem !important;padding-bottom:4rem !important}@media (min-width: 20rem){.p-xs-0{padding:0 !important}.pt-xs-0{padding-top:0 !important}.pr-xs-0{padding-right:0 !important}.pb-xs-0{padding-bottom:0 !important}.pl-xs-0{padding-left:0 !important}.px-xs-0{padding-right:0 !important;padding-left:0 !important}.py-xs-0{padding-top:0 !important;padding-bottom:0 !important}.p-xs-1{padding:.25rem !important}.pt-xs-1{padding-top:.25rem !important}.pr-xs-1{padding-right:.25rem !important}.pb-xs-1{padding-bottom:.25rem !important}.pl-xs-1{padding-left:.25rem !important}.px-xs-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-xs-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-xs-2{padding:.5rem !important}.pt-xs-2{padding-top:.5rem !important}.pr-xs-2{padding-right:.5rem !important}.pb-xs-2{padding-bottom:.5rem !important}.pl-xs-2{padding-left:.5rem !important}.px-xs-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-xs-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-xs-3{padding:.75rem !important}.pt-xs-3{padding-top:.75rem !important}.pr-xs-3{padding-right:.75rem !important}.pb-xs-3{padding-bottom:.75rem !important}.pl-xs-3{padding-left:.75rem !important}.px-xs-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-xs-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-xs-4{padding:1rem !important}.pt-xs-4{padding-top:1rem !important}.pr-xs-4{padding-right:1rem !important}.pb-xs-4{padding-bottom:1rem !important}.pl-xs-4{padding-left:1rem !important}.px-xs-4{padding-right:1rem !important;padding-left:1rem !important}.py-xs-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-xs-5{padding:1.5rem !important}.pt-xs-5{padding-top:1.5rem !important}.pr-xs-5{padding-right:1.5rem !important}.pb-xs-5{padding-bottom:1.5rem !important}.pl-xs-5{padding-left:1.5rem !important}.px-xs-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-xs-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-xs-6{padding:2rem !important}.pt-xs-6{padding-top:2rem !important}.pr-xs-6{padding-right:2rem !important}.pb-xs-6{padding-bottom:2rem !important}.pl-xs-6{padding-left:2rem !important}.px-xs-6{padding-right:2rem !important;padding-left:2rem !important}.py-xs-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-xs-7{padding:2.5rem !important}.pt-xs-7{padding-top:2.5rem !important}.pr-xs-7{padding-right:2.5rem !important}.pb-xs-7{padding-bottom:2.5rem !important}.pl-xs-7{padding-left:2.5rem !important}.px-xs-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-xs-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-xs-8{padding:3rem !important}.pt-xs-8{padding-top:3rem !important}.pr-xs-8{padding-right:3rem !important}.pb-xs-8{padding-bottom:3rem !important}.pl-xs-8{padding-left:3rem !important}.px-xs-8{padding-right:3rem !important;padding-left:3rem !important}.py-xs-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-xs-9{padding:3.5rem !important}.pt-xs-9{padding-top:3.5rem !important}.pr-xs-9{padding-right:3.5rem !important}.pb-xs-9{padding-bottom:3.5rem !important}.pl-xs-9{padding-left:3.5rem !important}.px-xs-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-xs-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-xs-10{padding:4rem !important}.pt-xs-10{padding-top:4rem !important}.pr-xs-10{padding-right:4rem !important}.pb-xs-10{padding-bottom:4rem !important}.pl-xs-10{padding-left:4rem !important}.px-xs-10{padding-right:4rem !important;padding-left:4rem !important}.py-xs-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 31.25rem){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1{padding-top:.25rem !important}.pr-sm-1{padding-right:.25rem !important}.pb-sm-1{padding-bottom:.25rem !important}.pl-sm-1{padding-left:.25rem !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2{padding-top:.5rem !important}.pr-sm-2{padding-right:.5rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pl-sm-2{padding-left:.5rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-sm-3{padding:.75rem !important}.pt-sm-3{padding-top:.75rem !important}.pr-sm-3{padding-right:.75rem !important}.pb-sm-3{padding-bottom:.75rem !important}.pl-sm-3{padding-left:.75rem !important}.px-sm-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-sm-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-sm-4{padding:1rem !important}.pt-sm-4{padding-top:1rem !important}.pr-sm-4{padding-right:1rem !important}.pb-sm-4{padding-bottom:1rem !important}.pl-sm-4{padding-left:1rem !important}.px-sm-4{padding-right:1rem !important;padding-left:1rem !important}.py-sm-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-sm-5{padding:1.5rem !important}.pt-sm-5{padding-top:1.5rem !important}.pr-sm-5{padding-right:1.5rem !important}.pb-sm-5{padding-bottom:1.5rem !important}.pl-sm-5{padding-left:1.5rem !important}.px-sm-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-sm-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-sm-6{padding:2rem !important}.pt-sm-6{padding-top:2rem !important}.pr-sm-6{padding-right:2rem !important}.pb-sm-6{padding-bottom:2rem !important}.pl-sm-6{padding-left:2rem !important}.px-sm-6{padding-right:2rem !important;padding-left:2rem !important}.py-sm-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-sm-7{padding:2.5rem !important}.pt-sm-7{padding-top:2.5rem !important}.pr-sm-7{padding-right:2.5rem !important}.pb-sm-7{padding-bottom:2.5rem !important}.pl-sm-7{padding-left:2.5rem !important}.px-sm-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-sm-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-sm-8{padding:3rem !important}.pt-sm-8{padding-top:3rem !important}.pr-sm-8{padding-right:3rem !important}.pb-sm-8{padding-bottom:3rem !important}.pl-sm-8{padding-left:3rem !important}.px-sm-8{padding-right:3rem !important;padding-left:3rem !important}.py-sm-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-sm-9{padding:3.5rem !important}.pt-sm-9{padding-top:3.5rem !important}.pr-sm-9{padding-right:3.5rem !important}.pb-sm-9{padding-bottom:3.5rem !important}.pl-sm-9{padding-left:3.5rem !important}.px-sm-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-sm-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-sm-10{padding:4rem !important}.pt-sm-10{padding-top:4rem !important}.pr-sm-10{padding-right:4rem !important}.pb-sm-10{padding-bottom:4rem !important}.pl-sm-10{padding-left:4rem !important}.px-sm-10{padding-right:4rem !important;padding-left:4rem !important}.py-sm-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 50rem){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1{padding-top:.25rem !important}.pr-md-1{padding-right:.25rem !important}.pb-md-1{padding-bottom:.25rem !important}.pl-md-1{padding-left:.25rem !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2{padding-top:.5rem !important}.pr-md-2{padding-right:.5rem !important}.pb-md-2{padding-bottom:.5rem !important}.pl-md-2{padding-left:.5rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-md-3{padding:.75rem !important}.pt-md-3{padding-top:.75rem !important}.pr-md-3{padding-right:.75rem !important}.pb-md-3{padding-bottom:.75rem !important}.pl-md-3{padding-left:.75rem !important}.px-md-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-md-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-md-4{padding:1rem !important}.pt-md-4{padding-top:1rem !important}.pr-md-4{padding-right:1rem !important}.pb-md-4{padding-bottom:1rem !important}.pl-md-4{padding-left:1rem !important}.px-md-4{padding-right:1rem !important;padding-left:1rem !important}.py-md-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-md-5{padding:1.5rem !important}.pt-md-5{padding-top:1.5rem !important}.pr-md-5{padding-right:1.5rem !important}.pb-md-5{padding-bottom:1.5rem !important}.pl-md-5{padding-left:1.5rem !important}.px-md-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-md-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-md-6{padding:2rem !important}.pt-md-6{padding-top:2rem !important}.pr-md-6{padding-right:2rem !important}.pb-md-6{padding-bottom:2rem !important}.pl-md-6{padding-left:2rem !important}.px-md-6{padding-right:2rem !important;padding-left:2rem !important}.py-md-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-md-7{padding:2.5rem !important}.pt-md-7{padding-top:2.5rem !important}.pr-md-7{padding-right:2.5rem !important}.pb-md-7{padding-bottom:2.5rem !important}.pl-md-7{padding-left:2.5rem !important}.px-md-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-md-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-md-8{padding:3rem !important}.pt-md-8{padding-top:3rem !important}.pr-md-8{padding-right:3rem !important}.pb-md-8{padding-bottom:3rem !important}.pl-md-8{padding-left:3rem !important}.px-md-8{padding-right:3rem !important;padding-left:3rem !important}.py-md-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-md-9{padding:3.5rem !important}.pt-md-9{padding-top:3.5rem !important}.pr-md-9{padding-right:3.5rem !important}.pb-md-9{padding-bottom:3.5rem !important}.pl-md-9{padding-left:3.5rem !important}.px-md-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-md-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-md-10{padding:4rem !important}.pt-md-10{padding-top:4rem !important}.pr-md-10{padding-right:4rem !important}.pb-md-10{padding-bottom:4rem !important}.pl-md-10{padding-left:4rem !important}.px-md-10{padding-right:4rem !important;padding-left:4rem !important}.py-md-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 66.5rem){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1{padding-top:.25rem !important}.pr-lg-1{padding-right:.25rem !important}.pb-lg-1{padding-bottom:.25rem !important}.pl-lg-1{padding-left:.25rem !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2{padding-top:.5rem !important}.pr-lg-2{padding-right:.5rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pl-lg-2{padding-left:.5rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-lg-3{padding:.75rem !important}.pt-lg-3{padding-top:.75rem !important}.pr-lg-3{padding-right:.75rem !important}.pb-lg-3{padding-bottom:.75rem !important}.pl-lg-3{padding-left:.75rem !important}.px-lg-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-lg-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-lg-4{padding:1rem !important}.pt-lg-4{padding-top:1rem !important}.pr-lg-4{padding-right:1rem !important}.pb-lg-4{padding-bottom:1rem !important}.pl-lg-4{padding-left:1rem !important}.px-lg-4{padding-right:1rem !important;padding-left:1rem !important}.py-lg-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-lg-5{padding:1.5rem !important}.pt-lg-5{padding-top:1.5rem !important}.pr-lg-5{padding-right:1.5rem !important}.pb-lg-5{padding-bottom:1.5rem !important}.pl-lg-5{padding-left:1.5rem !important}.px-lg-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-lg-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-lg-6{padding:2rem !important}.pt-lg-6{padding-top:2rem !important}.pr-lg-6{padding-right:2rem !important}.pb-lg-6{padding-bottom:2rem !important}.pl-lg-6{padding-left:2rem !important}.px-lg-6{padding-right:2rem !important;padding-left:2rem !important}.py-lg-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-lg-7{padding:2.5rem !important}.pt-lg-7{padding-top:2.5rem !important}.pr-lg-7{padding-right:2.5rem !important}.pb-lg-7{padding-bottom:2.5rem !important}.pl-lg-7{padding-left:2.5rem !important}.px-lg-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-lg-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-lg-8{padding:3rem !important}.pt-lg-8{padding-top:3rem !important}.pr-lg-8{padding-right:3rem !important}.pb-lg-8{padding-bottom:3rem !important}.pl-lg-8{padding-left:3rem !important}.px-lg-8{padding-right:3rem !important;padding-left:3rem !important}.py-lg-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-lg-9{padding:3.5rem !important}.pt-lg-9{padding-top:3.5rem !important}.pr-lg-9{padding-right:3.5rem !important}.pb-lg-9{padding-bottom:3.5rem !important}.pl-lg-9{padding-left:3.5rem !important}.px-lg-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-lg-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-lg-10{padding:4rem !important}.pt-lg-10{padding-top:4rem !important}.pr-lg-10{padding-right:4rem !important}.pb-lg-10{padding-bottom:4rem !important}.pl-lg-10{padding-left:4rem !important}.px-lg-10{padding-right:4rem !important;padding-left:4rem !important}.py-lg-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 87.5rem){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1{padding-top:.25rem !important}.pr-xl-1{padding-right:.25rem !important}.pb-xl-1{padding-bottom:.25rem !important}.pl-xl-1{padding-left:.25rem !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2{padding-top:.5rem !important}.pr-xl-2{padding-right:.5rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pl-xl-2{padding-left:.5rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-xl-3{padding:.75rem !important}.pt-xl-3{padding-top:.75rem !important}.pr-xl-3{padding-right:.75rem !important}.pb-xl-3{padding-bottom:.75rem !important}.pl-xl-3{padding-left:.75rem !important}.px-xl-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-xl-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-xl-4{padding:1rem !important}.pt-xl-4{padding-top:1rem !important}.pr-xl-4{padding-right:1rem !important}.pb-xl-4{padding-bottom:1rem !important}.pl-xl-4{padding-left:1rem !important}.px-xl-4{padding-right:1rem !important;padding-left:1rem !important}.py-xl-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-xl-5{padding:1.5rem !important}.pt-xl-5{padding-top:1.5rem !important}.pr-xl-5{padding-right:1.5rem !important}.pb-xl-5{padding-bottom:1.5rem !important}.pl-xl-5{padding-left:1.5rem !important}.px-xl-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-xl-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-xl-6{padding:2rem !important}.pt-xl-6{padding-top:2rem !important}.pr-xl-6{padding-right:2rem !important}.pb-xl-6{padding-bottom:2rem !important}.pl-xl-6{padding-left:2rem !important}.px-xl-6{padding-right:2rem !important;padding-left:2rem !important}.py-xl-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-xl-7{padding:2.5rem !important}.pt-xl-7{padding-top:2.5rem !important}.pr-xl-7{padding-right:2.5rem !important}.pb-xl-7{padding-bottom:2.5rem !important}.pl-xl-7{padding-left:2.5rem !important}.px-xl-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-xl-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-xl-8{padding:3rem !important}.pt-xl-8{padding-top:3rem !important}.pr-xl-8{padding-right:3rem !important}.pb-xl-8{padding-bottom:3rem !important}.pl-xl-8{padding-left:3rem !important}.px-xl-8{padding-right:3rem !important;padding-left:3rem !important}.py-xl-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-xl-9{padding:3.5rem !important}.pt-xl-9{padding-top:3.5rem !important}.pr-xl-9{padding-right:3.5rem !important}.pb-xl-9{padding-bottom:3.5rem !important}.pl-xl-9{padding-left:3.5rem !important}.px-xl-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-xl-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-xl-10{padding:4rem !important}.pt-xl-10{padding-top:4rem !important}.pr-xl-10{padding-right:4rem !important}.pb-xl-10{padding-bottom:4rem !important}.pl-xl-10{padding-left:4rem !important}.px-xl-10{padding-right:4rem !important;padding-left:4rem !important}.py-xl-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media print{.site-footer,.site-button,#edit-this-page,#back-to-top,.site-nav,.main-header{display:none !important}.side-bar{width:100%;height:auto;border-right:0 !important}.site-header{border-bottom:1px solid #eeebee}.site-title{font-size:16px !important;font-weight:700 !important}.text-small{font-size:8pt !important}pre.highlight{border:1px solid #eeebee}.main{max-width:none;margin-left:0}}a.skip-to-main{left:-999px;position:absolute;top:auto;width:1px;height:1px;overflow:hidden;z-index:-999}a.skip-to-main:focus,a.skip-to-main:active{color:#53a3da;background-color:#fff;left:auto;top:auto;width:30%;height:auto;overflow:auto;margin:10px 35%;padding:5px;border-radius:15px;border:4px solid #5e41d0;text-align:center;font-size:1.2em;z-index:999}div.opaque{background-color:#fff}
diff --git a/assets/css/just-the-docs-light.css b/assets/css/just-the-docs-light.css
new file mode 100644
index 00000000..13847319
--- /dev/null
+++ b/assets/css/just-the-docs-light.css
@@ -0,0 +1 @@
+.highlight .c{color:#586e75}.highlight .err{color:#93a1a1}.highlight .g{color:#93a1a1}.highlight .k{color:#859900}.highlight .l{color:#93a1a1}.highlight .n{color:#93a1a1}.highlight .o{color:#859900}.highlight .x{color:#cb4b16}.highlight .p{color:#93a1a1}.highlight .cm{color:#586e75}.highlight .cp{color:#859900}.highlight .c1{color:#586e75}.highlight .cs{color:#859900}.highlight .gd{color:#2aa198}.highlight .ge{font-style:italic;color:#93a1a1}.highlight .gr{color:#dc322f}.highlight .gh{color:#cb4b16}.highlight .gi{color:#859900}.highlight .go{color:#93a1a1}.highlight .gp{color:#93a1a1}.highlight .gs{font-weight:bold;color:#93a1a1}.highlight .gu{color:#cb4b16}.highlight .gt{color:#93a1a1}.highlight .kc{color:#cb4b16}.highlight .kd{color:#268bd2}.highlight .kn{color:#859900}.highlight .kp{color:#859900}.highlight .kr{color:#268bd2}.highlight .kt{color:#dc322f}.highlight .ld{color:#93a1a1}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#555}.highlight .nb{color:#b58900}.highlight .nc{color:#268bd2}.highlight .no{color:#cb4b16}.highlight .nd{color:#268bd2}.highlight .ni{color:#cb4b16}.highlight .ne{color:#cb4b16}.highlight .nf{color:#268bd2}.highlight .nl{color:#555}.highlight .nn{color:#93a1a1}.highlight .nx{color:#555}.highlight .py{color:#93a1a1}.highlight .nt{color:#268bd2}.highlight .nv{color:#268bd2}.highlight .ow{color:#859900}.highlight .w{color:#93a1a1}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#586e75}.highlight .sc{color:#2aa198}.highlight .sd{color:#93a1a1}.highlight .s2{color:#2aa198}.highlight .se{color:#cb4b16}.highlight .sh{color:#93a1a1}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc322f}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#268bd2}.highlight .vc{color:#268bd2}.highlight .vg{color:#268bd2}.highlight .vi{color:#268bd2}.highlight .il{color:#2aa198}.highlight .c{color:#586e75}.highlight .err{color:#93a1a1}.highlight .g{color:#93a1a1}.highlight .k{color:#859900}.highlight .l{color:#93a1a1}.highlight .n{color:#93a1a1}.highlight .o{color:#859900}.highlight .x{color:#cb4b16}.highlight .p{color:#93a1a1}.highlight .cm{color:#586e75}.highlight .cp{color:#859900}.highlight .c1{color:#586e75}.highlight .cs{color:#859900}.highlight .gd{color:#2aa198}.highlight .ge{font-style:italic;color:#93a1a1}.highlight .gr{color:#dc322f}.highlight .gh{color:#cb4b16}.highlight .gi{color:#859900}.highlight .go{color:#93a1a1}.highlight .gp{color:#93a1a1}.highlight .gs{font-weight:bold;color:#93a1a1}.highlight .gu{color:#cb4b16}.highlight .gt{color:#93a1a1}.highlight .kc{color:#cb4b16}.highlight .kd{color:#268bd2}.highlight .kn{color:#859900}.highlight .kp{color:#859900}.highlight .kr{color:#268bd2}.highlight .kt{color:#dc322f}.highlight .ld{color:#93a1a1}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#555}.highlight .nb{color:#b58900}.highlight .nc{color:#268bd2}.highlight .no{color:#cb4b16}.highlight .nd{color:#268bd2}.highlight .ni{color:#cb4b16}.highlight .ne{color:#cb4b16}.highlight .nf{color:#268bd2}.highlight .nl{color:#555}.highlight .nn{color:#93a1a1}.highlight .nx{color:#555}.highlight .py{color:#93a1a1}.highlight .nt{color:#268bd2}.highlight .nv{color:#268bd2}.highlight .ow{color:#859900}.highlight .w{color:#93a1a1}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#586e75}.highlight .sc{color:#2aa198}.highlight .sd{color:#93a1a1}.highlight .s2{color:#2aa198}.highlight .se{color:#cb4b16}.highlight .sh{color:#93a1a1}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc322f}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#268bd2}.highlight .vc{color:#268bd2}.highlight .vg{color:#268bd2}.highlight .vi{color:#268bd2}.highlight .il{color:#2aa198}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}*{box-sizing:border-box}::selection{color:#fff;background:#7253ed}html{font-size:14px !important;scroll-behavior:smooth}@media (min-width: 31.25rem){html{font-size:16px !important}}body{font-family:system-ui,-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif;font-size:inherit;line-height:1.4;color:#5c5962;background-color:#fff;overflow-wrap:break-word}ol,ul,dl,pre,address,blockquote,table,div,hr,form,fieldset,noscript .table-wrapper{margin-top:0}h1,h2,h3,h4,h5,h6,#toctitle{margin-top:0;margin-bottom:1em;font-weight:500;line-height:1.25;color:#27262b}p{margin-top:1em;margin-bottom:1em}a{color:#7253ed;text-decoration:none}a:not([class]){text-decoration:underline;text-decoration-color:#eeebee;text-underline-offset:2px}a:not([class]):hover{text-decoration-color:rgba(114,83,237,0.45)}code{font-family:"SFMono-Regular",menlo,consolas,monospace;font-size:0.75em;line-height:1.4}figure,pre{margin:0}li{margin:0.25em 0}img{max-width:100%;height:auto}hr{height:1px;padding:0;margin:2rem 0;background-color:#eeebee;border:0}blockquote{margin:10px 0;margin-block-start:0;margin-inline-start:0;padding-left:15px;border-left:3px solid #eeebee}.side-bar{z-index:0;display:flex;flex-wrap:wrap;background-color:#f5f6fa}@media (min-width: 50rem){.side-bar{flex-flow:column nowrap;position:fixed;width:248px;height:100%;border-right:1px solid #eeebee;align-items:flex-end}}@media (min-width: 66.5rem){.side-bar{width:calc((100% - 1064px) / 2 + 264px);min-width:264px}}@media (min-width: 50rem){.main{position:relative;max-width:800px;margin-left:248px}}@media (min-width: 66.5rem){.main{margin-left:Max(264px, calc((100% - 1064px) / 2 + 264px))}}.main-content-wrap{padding-right:1rem;padding-left:1rem;padding-top:1rem;padding-bottom:1rem}@media (min-width: 50rem){.main-content-wrap{padding-right:2rem;padding-left:2rem}}@media (min-width: 50rem){.main-content-wrap{padding-top:2rem;padding-bottom:2rem}}.main-header{z-index:0;display:none;background-color:#f5f6fa}@media (min-width: 50rem){.main-header{display:flex;justify-content:space-between;height:60px;background-color:#fff;border-bottom:1px solid #eeebee}}.main-header.nav-open{display:block}@media (min-width: 50rem){.main-header.nav-open{display:flex}}.site-nav,.site-header,.site-footer{width:100%}@media (min-width: 66.5rem){.site-nav,.site-header,.site-footer{width:264px}}.site-nav{display:none}.site-nav.nav-open{display:block}@media (min-width: 50rem){.site-nav{display:block;padding-top:3rem;padding-bottom:1rem;overflow-y:auto;flex:1 1 auto}}.site-header{display:flex;min-height:60px;align-items:center}@media (min-width: 50rem){.site-header{height:60px;max-height:60px;border-bottom:1px solid #eeebee}}.site-title{padding-right:1rem;padding-left:1rem;flex-grow:1;display:flex;height:100%;align-items:center;padding-top:.75rem;padding-bottom:.75rem;color:#27262b;font-size:18px !important}@media (min-width: 50rem){.site-title{padding-right:2rem;padding-left:2rem}}@media (min-width: 31.25rem){.site-title{font-size:24px !important;line-height:1.25}}@media (min-width: 50rem){.site-title{padding-top:.5rem;padding-bottom:.5rem}}.site-button{display:flex;height:100%;padding:1rem;align-items:center}@media (min-width: 50rem){.site-header .site-button{display:none}}.site-title:hover{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 80%, rgba(235,237,245,0) 100%)}.site-button:hover{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 100%)}body{position:relative;padding-bottom:4rem;overflow-y:scroll}@media (min-width: 50rem){body{position:static;padding-bottom:0}}.site-footer{padding-right:1rem;padding-left:1rem;position:absolute;bottom:0;left:0;padding-top:1rem;padding-bottom:1rem;color:#959396;font-size:11px !important}@media (min-width: 50rem){.site-footer{padding-right:2rem;padding-left:2rem}}@media (min-width: 31.25rem){.site-footer{font-size:12px !important}}@media (min-width: 50rem){.site-footer{position:static;justify-self:end}}.icon{width:1.5rem;height:1.5rem;color:#7253ed}.main-content{line-height:1.6}.main-content ol,.main-content ul,.main-content dl,.main-content pre,.main-content address,.main-content blockquote,.main-content .table-wrapper{margin-top:0.5em}.main-content a{overflow:hidden;text-overflow:ellipsis}.main-content ul,.main-content ol{padding-left:1.5em}.main-content li .highlight{margin-top:.25rem}.main-content ol{list-style-type:none;counter-reset:step-counter}.main-content ol>li{position:relative}.main-content ol>li::before{position:absolute;top:0.2em;left:-1.6em;color:#959396;content:counter(step-counter);counter-increment:step-counter;font-size:12px !important}@media (min-width: 31.25rem){.main-content ol>li::before{font-size:14px !important}}@media (min-width: 31.25rem){.main-content ol>li::before{top:0.11em}}.main-content ol>li ol{counter-reset:sub-counter}.main-content ol>li ol>li::before{content:counter(sub-counter,lower-alpha);counter-increment:sub-counter}.main-content ul{list-style:none}.main-content ul>li::before{position:absolute;margin-left:-1.4em;color:#959396;content:"•"}.main-content .task-list-item::before{content:""}.main-content .task-list-item-checkbox{margin-right:0.6em;margin-left:-1.4em}.main-content hr+*{margin-top:0}.main-content h1:first-of-type{margin-top:0.5em}.main-content dl{display:grid;grid-template:auto / 10em 1fr}.main-content dt,.main-content dd{margin:0.25em 0}.main-content dt{grid-column:1;font-weight:500;text-align:right}.main-content dt::after{content:":"}.main-content dd{grid-column:2;margin-bottom:0;margin-left:1em}.main-content dd blockquote:first-child,.main-content dd div:first-child,.main-content dd dl:first-child,.main-content dd dt:first-child,.main-content dd h1:first-child,.main-content dd h2:first-child,.main-content dd h3:first-child,.main-content dd h4:first-child,.main-content dd h5:first-child,.main-content dd h6:first-child,.main-content dd li:first-child,.main-content dd ol:first-child,.main-content dd p:first-child,.main-content dd pre:first-child,.main-content dd table:first-child,.main-content dd ul:first-child,.main-content dd .table-wrapper:first-child{margin-top:0}.main-content dd dl:first-child dt:first-child,.main-content dd dl:first-child dd:nth-child(2),.main-content ol dl:first-child dt:first-child,.main-content ol dl:first-child dd:nth-child(2),.main-content ul dl:first-child dt:first-child,.main-content ul dl:first-child dd:nth-child(2){margin-top:0}.main-content .anchor-heading{position:absolute;right:-1rem;width:1.5rem;height:100%;padding-right:.25rem;padding-left:.25rem;overflow:visible}@media (min-width: 50rem){.main-content .anchor-heading{right:auto;left:-1.5rem}}.main-content .anchor-heading svg{display:inline-block;width:100%;height:100%;color:#7253ed;visibility:hidden}.main-content .anchor-heading:hover svg,.main-content .anchor-heading:focus svg,.main-content h1:hover>.anchor-heading svg,.main-content h2:hover>.anchor-heading svg,.main-content h3:hover>.anchor-heading svg,.main-content h4:hover>.anchor-heading svg,.main-content h5:hover>.anchor-heading svg,.main-content h6:hover>.anchor-heading svg{visibility:visible}.main-content summary{cursor:pointer}.main-content h1,.main-content h2,.main-content h3,.main-content h4,.main-content h5,.main-content h6,.main-content #toctitle{position:relative;margin-top:1.5em;margin-bottom:0.25em}.main-content h1+table,.main-content h1+.table-wrapper,.main-content h1+.code-example,.main-content h1+.highlighter-rouge,.main-content h1+.sectionbody .listingblock,.main-content h2+table,.main-content h2+.table-wrapper,.main-content h2+.code-example,.main-content h2+.highlighter-rouge,.main-content h2+.sectionbody .listingblock,.main-content h3+table,.main-content h3+.table-wrapper,.main-content h3+.code-example,.main-content h3+.highlighter-rouge,.main-content h3+.sectionbody .listingblock,.main-content h4+table,.main-content h4+.table-wrapper,.main-content h4+.code-example,.main-content h4+.highlighter-rouge,.main-content h4+.sectionbody .listingblock,.main-content h5+table,.main-content h5+.table-wrapper,.main-content h5+.code-example,.main-content h5+.highlighter-rouge,.main-content h5+.sectionbody .listingblock,.main-content h6+table,.main-content h6+.table-wrapper,.main-content h6+.code-example,.main-content h6+.highlighter-rouge,.main-content h6+.sectionbody .listingblock,.main-content #toctitle+table,.main-content #toctitle+.table-wrapper,.main-content #toctitle+.code-example,.main-content #toctitle+.highlighter-rouge,.main-content #toctitle+.sectionbody .listingblock{margin-top:1em}.main-content h1+p:not(.label),.main-content h2+p:not(.label),.main-content h3+p:not(.label),.main-content h4+p:not(.label),.main-content h5+p:not(.label),.main-content h6+p:not(.label),.main-content #toctitle+p:not(.label){margin-top:0}.main-content>h1:first-child,.main-content>h2:first-child,.main-content>h3:first-child,.main-content>h4:first-child,.main-content>h5:first-child,.main-content>h6:first-child,.main-content>.sect1:first-child>h2,.main-content>.sect2:first-child>h3,.main-content>.sect3:first-child>h4,.main-content>.sect4:first-child>h5,.main-content>.sect5:first-child>h6{margin-top:.5rem}.nav-list{padding:0;margin-top:0;margin-bottom:0;list-style:none}.nav-list .nav-list-item{font-size:14px !important;position:relative;margin:0}@media (min-width: 31.25rem){.nav-list .nav-list-item{font-size:16px !important}}@media (min-width: 50rem){.nav-list .nav-list-item{font-size:12px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.nav-list .nav-list-item{font-size:14px !important}}.nav-list .nav-list-item .nav-list-link{display:block;min-height:3rem;padding-top:.25rem;padding-bottom:.25rem;line-height:2.5rem;padding-right:3rem;padding-left:1rem}@media (min-width: 50rem){.nav-list .nav-list-item .nav-list-link{min-height:2rem;line-height:1.5rem;padding-right:2rem;padding-left:2rem}}.nav-list .nav-list-item .nav-list-link.external>svg{width:1rem;height:1rem;vertical-align:text-bottom}.nav-list .nav-list-item .nav-list-link.active{font-weight:600;text-decoration:none}.nav-list .nav-list-item .nav-list-link:hover,.nav-list .nav-list-item .nav-list-link.active{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 80%, rgba(235,237,245,0) 100%)}.nav-list .nav-list-item .nav-list-expander{position:absolute;right:0;width:3rem;height:3rem;padding:.75rem;color:#7253ed}@media (min-width: 50rem){.nav-list .nav-list-item .nav-list-expander{width:2rem;height:2rem;padding:.5rem}}.nav-list .nav-list-item .nav-list-expander:hover{background-image:linear-gradient(-90deg, #ebedf5 0%, rgba(235,237,245,0.8) 100%)}.nav-list .nav-list-item .nav-list-expander svg{transform:rotate(90deg)}.nav-list .nav-list-item>.nav-list{display:none;padding-left:.75rem;list-style:none}.nav-list .nav-list-item>.nav-list .nav-list-item{position:relative}.nav-list .nav-list-item>.nav-list .nav-list-item .nav-list-link{color:#5c5962}.nav-list .nav-list-item>.nav-list .nav-list-item .nav-list-expander{color:#5c5962}.nav-list .nav-list-item.active>.nav-list-expander svg{transform:rotate(-90deg)}.nav-list .nav-list-item.active>.nav-list{display:block}.nav-category{padding:.5rem 1rem;font-weight:600;text-align:start;text-transform:uppercase;border-bottom:1px solid #eeebee;font-size:11px !important}@media (min-width: 31.25rem){.nav-category{font-size:12px !important}}@media (min-width: 50rem){.nav-category{padding:.5rem 2rem;margin-top:1rem;text-align:start}.nav-category:first-child{margin-top:0}}.nav-list.nav-category-list>.nav-list-item{margin:0}.nav-list.nav-category-list>.nav-list-item>.nav-list{padding:0}.nav-list.nav-category-list>.nav-list-item>.nav-list>.nav-list-item>.nav-list-link{color:#7253ed}.nav-list.nav-category-list>.nav-list-item>.nav-list>.nav-list-item>.nav-list-expander{color:#7253ed}.aux-nav{height:100%;overflow-x:auto;font-size:11px !important}@media (min-width: 31.25rem){.aux-nav{font-size:12px !important}}.aux-nav .aux-nav-list{display:flex;height:100%;padding:0;margin:0;list-style:none}.aux-nav .aux-nav-list-item{display:inline-block;height:100%;padding:0;margin:0}@media (min-width: 50rem){.aux-nav{padding-right:1rem}}@media (min-width: 50rem){.breadcrumb-nav{margin-top:-1rem}}.breadcrumb-nav-list{padding-left:0;margin-bottom:.75rem;list-style:none}.breadcrumb-nav-list-item{display:table-cell;font-size:11px !important}@media (min-width: 31.25rem){.breadcrumb-nav-list-item{font-size:12px !important}}.breadcrumb-nav-list-item::before{display:none}.breadcrumb-nav-list-item::after{display:inline-block;margin-right:.5rem;margin-left:.5rem;color:#959396;content:"/"}.breadcrumb-nav-list-item:last-child::after{content:""}h1,.text-alpha{font-size:32px !important;line-height:1.25;font-weight:300}@media (min-width: 31.25rem){h1,.text-alpha{font-size:36px !important}}h2,.text-beta,#toctitle{font-size:18px !important}@media (min-width: 31.25rem){h2,.text-beta,#toctitle{font-size:24px !important;line-height:1.25}}h3,.text-gamma{font-size:16px !important}@media (min-width: 31.25rem){h3,.text-gamma{font-size:18px !important}}h4,.text-delta{font-size:11px !important;font-weight:400;text-transform:uppercase;letter-spacing:0.1em}@media (min-width: 31.25rem){h4,.text-delta{font-size:12px !important}}h4 code{text-transform:none}h5,.text-epsilon{font-size:12px !important}@media (min-width: 31.25rem){h5,.text-epsilon{font-size:14px !important}}h6,.text-zeta{font-size:11px !important}@media (min-width: 31.25rem){h6,.text-zeta{font-size:12px !important}}.text-small{font-size:11px !important}@media (min-width: 31.25rem){.text-small{font-size:12px !important}}.text-mono{font-family:"SFMono-Regular",menlo,consolas,monospace !important}.text-left{text-align:left !important}.text-center{text-align:center !important}.text-right{text-align:right !important}.label,.label-blue{display:inline-block;padding:0.16em 0.56em;margin-right:.5rem;margin-left:.5rem;color:#fff;text-transform:uppercase;vertical-align:middle;background-color:#2869e6;font-size:11px !important;border-radius:12px}@media (min-width: 31.25rem){.label,.label-blue{font-size:12px !important}}.label-green{background-color:#009c7b}.label-purple{background-color:#5e41d0}.label-red{background-color:#e94c4c}.label-yellow{color:#44434d;background-color:#f7d12e}.btn{display:inline-block;box-sizing:border-box;padding:0.3em 1em;margin:0;font-family:inherit;font-size:inherit;font-weight:500;line-height:1.5;color:#7253ed;text-decoration:none;vertical-align:baseline;cursor:pointer;background-color:#f7f7f7;border-width:0;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);appearance:none}.btn:focus{text-decoration:none;outline:none;box-shadow:0 0 0 3px rgba(0,0,255,0.25)}.btn:focus:hover,.btn.selected:focus{box-shadow:0 0 0 3px rgba(0,0,255,0.25)}.btn:hover,.btn.zeroclipboard-is-hover{color:#6a4aec}.btn:hover,.btn:active,.btn.zeroclipboard-is-hover,.btn.zeroclipboard-is-active{text-decoration:none;background-color:#f4f4f4}.btn:active,.btn.selected,.btn.zeroclipboard-is-active{background-color:#efefef;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn.selected:hover{background-color:#cfcfcf}.btn:disabled,.btn:disabled:hover,.btn.disabled,.btn.disabled:hover{color:rgba(102,102,102,0.5);cursor:default;background-color:rgba(229,229,229,0.5);background-image:none;box-shadow:none}.btn-outline{color:#7253ed;background:transparent;box-shadow:inset 0 0 0 2px #e6e1e8}.btn-outline:hover,.btn-outline:active,.btn-outline.zeroclipboard-is-hover,.btn-outline.zeroclipboard-is-active{color:#6341eb;text-decoration:none;background-color:transparent;box-shadow:inset 0 0 0 3px #e6e1e8}.btn-outline:focus{text-decoration:none;outline:none;box-shadow:inset 0 0 0 2px #5c5962,0 0 0 3px rgba(0,0,255,0.25)}.btn-outline:focus:hover,.btn-outline.selected:focus{box-shadow:inset 0 0 0 2px #5c5962}.btn-primary{color:#fff;background-color:#5739ce;background-image:linear-gradient(#6f55d5, #5739ce);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-primary:hover,.btn-primary.zeroclipboard-is-hover{color:#fff;background-color:#5132cb;background-image:linear-gradient(#6549d2,#5132cb)}.btn-primary:active,.btn-primary.selected,.btn-primary.zeroclipboard-is-active{background-color:#4f31c6;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-primary.selected:hover{background-color:#472cb2}.btn-purple{color:#fff;background-color:#5739ce;background-image:linear-gradient(#6f55d5, #5739ce);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-purple:hover,.btn-purple.zeroclipboard-is-hover{color:#fff;background-color:#5132cb;background-image:linear-gradient(#6549d2,#5132cb)}.btn-purple:active,.btn-purple.selected,.btn-purple.zeroclipboard-is-active{background-color:#4f31c6;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-purple.selected:hover{background-color:#472cb2}.btn-blue{color:#fff;background-color:#227efa;background-image:linear-gradient(#4593fb, #227efa);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-blue:hover,.btn-blue.zeroclipboard-is-hover{color:#fff;background-color:#1878fa;background-image:linear-gradient(#368afa,#1878fa)}.btn-blue:active,.btn-blue.selected,.btn-blue.zeroclipboard-is-active{background-color:#1375f9;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-blue.selected:hover{background-color:#0669ed}.btn-green{color:#fff;background-color:#10ac7d;background-image:linear-gradient(#13cc95, #10ac7d);box-shadow:0 1px 3px rgba(0,0,0,0.25),0 4px 10px rgba(0,0,0,0.12)}.btn-green:hover,.btn-green.zeroclipboard-is-hover{color:#fff;background-color:#0fa276;background-image:linear-gradient(#12be8b,#0fa276)}.btn-green:active,.btn-green.selected,.btn-green.zeroclipboard-is-active{background-color:#0f9e73;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn-green.selected:hover{background-color:#0d8662}.search{position:relative;z-index:2;flex-grow:1;height:4rem;padding:.5rem;transition:padding linear 200ms}@media (min-width: 50rem){.search{position:relative !important;width:auto !important;height:100% !important;padding:0;transition:none}}.search-input-wrap{position:relative;z-index:1;height:3rem;overflow:hidden;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);transition:height linear 200ms}@media (min-width: 50rem){.search-input-wrap{position:absolute;width:100%;max-width:536px;height:100% !important;border-radius:0;box-shadow:none;transition:width ease 400ms}}.search-input{position:absolute;width:100%;height:100%;padding:.5rem 1rem .5rem 2.5rem;font-size:16px;color:#5c5962;background-color:#fff;border-top:0;border-right:0;border-bottom:0;border-left:0;border-radius:0}@media (min-width: 50rem){.search-input{padding:.5rem 1rem .5rem 3.5rem;font-size:14px;background-color:#fff;transition:padding-left linear 200ms}}.search-input:focus{outline:0}.search-input:focus+.search-label .search-icon{color:#7253ed}.search-label{position:absolute;display:flex;height:100%;padding-left:1rem}@media (min-width: 50rem){.search-label{padding-left:2rem;transition:padding-left linear 200ms}}.search-label .search-icon{width:1.2rem;height:1.2rem;align-self:center;color:#959396}.search-results{position:absolute;left:0;display:none;width:100%;max-height:calc(100% - 4rem);overflow-y:auto;background-color:#fff;border-bottom-right-radius:4px;border-bottom-left-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}@media (min-width: 50rem){.search-results{top:100%;width:536px;max-height:calc(100vh - 200%) !important}}.search-results-list{padding-left:0;margin-bottom:.25rem;list-style:none;font-size:14px !important}@media (min-width: 31.25rem){.search-results-list{font-size:16px !important}}@media (min-width: 50rem){.search-results-list{font-size:12px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.search-results-list{font-size:14px !important}}.search-results-list-item{padding:0;margin:0}.search-result{display:block;padding:.25rem .75rem}.search-result:hover,.search-result.active{background-color:#ebedf5}.search-result-title{display:block;padding-top:.5rem;padding-bottom:.5rem}@media (min-width: 31.25rem){.search-result-title{display:inline-block;width:40%;padding-right:.5rem;vertical-align:top}}.search-result-doc{display:flex;align-items:center;word-wrap:break-word}.search-result-doc.search-result-doc-parent{opacity:0.5;font-size:12px !important}@media (min-width: 31.25rem){.search-result-doc.search-result-doc-parent{font-size:14px !important}}@media (min-width: 50rem){.search-result-doc.search-result-doc-parent{font-size:11px !important}}@media (min-width: 50rem) and (min-width: 31.25rem){.search-result-doc.search-result-doc-parent{font-size:12px !important}}.search-result-doc .search-result-icon{width:1rem;height:1rem;margin-right:.5rem;color:#7253ed;flex-shrink:0}.search-result-doc .search-result-doc-title{overflow:auto}.search-result-section{margin-left:1.5rem;word-wrap:break-word}.search-result-rel-url{display:block;margin-left:1.5rem;overflow:hidden;color:#959396;text-overflow:ellipsis;white-space:nowrap;font-size:9px !important}@media (min-width: 31.25rem){.search-result-rel-url{font-size:10px !important}}.search-result-previews{display:block;padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;margin-left:.5rem;color:#959396;word-wrap:break-word;border-left:1px solid;border-left-color:#eeebee;font-size:11px !important}@media (min-width: 31.25rem){.search-result-previews{font-size:12px !important}}@media (min-width: 31.25rem){.search-result-previews{display:inline-block;width:60%;padding-left:.5rem;margin-left:0;vertical-align:top}}.search-result-preview+.search-result-preview{margin-top:.25rem}.search-result-highlight{font-weight:bold}.search-no-result{padding:.5rem .75rem;font-size:12px !important}@media (min-width: 31.25rem){.search-no-result{font-size:14px !important}}.search-button{position:fixed;right:1rem;bottom:1rem;display:flex;width:3.5rem;height:3.5rem;background-color:#fff;border:1px solid rgba(114,83,237,0.3);border-radius:1.75rem;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);align-items:center;justify-content:center}.search-overlay{position:fixed;top:0;left:0;z-index:1;width:0;height:0;background-color:rgba(0,0,0,0.3);opacity:0;transition:opacity ease 400ms,width 0s 400ms,height 0s 400ms}.search-active .search{position:fixed;top:0;left:0;width:100%;height:100%;padding:0}.search-active .search-input-wrap{height:4rem;border-radius:0}@media (min-width: 50rem){.search-active .search-input-wrap{width:536px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}}.search-active .search-input{background-color:#fff}@media (min-width: 50rem){.search-active .search-input{padding-left:2.3rem}}@media (min-width: 50rem){.search-active .search-label{padding-left:0.6rem}}.search-active .search-results{display:block}.search-active .search-overlay{width:100%;height:100%;opacity:1;transition:opacity ease 400ms,width 0s,height 0s}@media (min-width: 50rem){.search-active .main{position:fixed;right:0;left:0}}.search-active .main-header{padding-top:4rem}@media (min-width: 50rem){.search-active .main-header{padding-top:0}}.table-wrapper{display:block;width:100%;max-width:100%;margin-bottom:1.5rem;overflow-x:auto;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08)}table{display:table;min-width:100%;border-collapse:separate}th,td{font-size:12px !important;min-width:120px;padding:.5rem .75rem;background-color:#fff;border-bottom:1px solid rgba(238,235,238,0.5);border-left:1px solid #eeebee}@media (min-width: 31.25rem){th,td{font-size:14px !important}}th:first-of-type,td:first-of-type{border-left:0}tbody tr:last-of-type th,tbody tr:last-of-type td{border-bottom:0}tbody tr:last-of-type td{padding-bottom:.75rem}thead th{border-bottom:1px solid #eeebee}:not(pre,figure)>code{padding:0.2em 0.15em;font-weight:400;background-color:#f5f6fa;border:1px solid #eeebee;border-radius:4px}a:visited code{border-color:#eeebee}div.highlighter-rouge,div.listingblock>div.content,figure.highlight{margin-top:0;margin-bottom:.75rem;background-color:#f5f6fa;border-radius:4px;box-shadow:none;-webkit-overflow-scrolling:touch;position:relative;padding:0}div.highlighter-rouge>button,div.listingblock>div.content>button,figure.highlight>button{width:.75rem;opacity:0;position:absolute;top:0;right:0;border:.75rem solid #f5f6fa;background-color:#f5f6fa;color:#5c5962;box-sizing:content-box}div.highlighter-rouge>button svg,div.listingblock>div.content>button svg,figure.highlight>button svg{fill:#5c5962}div.highlighter-rouge>button:active,div.listingblock>div.content>button:active,figure.highlight>button:active{text-decoration:none;outline:none;opacity:1}div.highlighter-rouge>button:focus,div.listingblock>div.content>button:focus,figure.highlight>button:focus{opacity:1}div.highlighter-rouge:hover>button,div.listingblock>div.content:hover>button,figure.highlight:hover>button{cursor:copy;opacity:1}div.highlighter-rouge div.highlight{overflow-x:auto;padding:.75rem;margin:0;border:0}div.highlighter-rouge pre.highlight,div.highlighter-rouge code{padding:0;margin:0;border:0}div.listingblock{margin-top:0;margin-bottom:.75rem}div.listingblock div.content{overflow-x:auto;padding:.75rem;margin:0;border:0}div.listingblock div.content>pre,div.listingblock code{padding:0;margin:0;border:0}figure.highlight pre,figure.highlight :not(pre)>code{overflow-x:auto;padding:.75rem;margin:0;border:0}.highlight .table-wrapper{padding:.75rem 0;margin:0;border:0;box-shadow:none}.highlight .table-wrapper td,.highlight .table-wrapper pre{font-size:11px !important;min-width:0;padding:0;background-color:#f5f6fa;border:0}@media (min-width: 31.25rem){.highlight .table-wrapper td,.highlight .table-wrapper pre{font-size:12px !important}}.highlight .table-wrapper td.gl{width:1em;padding-right:.75rem;padding-left:.75rem}.highlight .table-wrapper pre{margin:0;line-height:2}.code-example,.listingblock>.title{padding:.75rem;margin-bottom:.75rem;overflow:auto;border:1px solid #eeebee;border-radius:4px}.code-example+.highlighter-rouge,.code-example+.sectionbody .listingblock,.code-example+.content,.code-example+figure.highlight,.listingblock>.title+.highlighter-rouge,.listingblock>.title+.sectionbody .listingblock,.listingblock>.title+.content,.listingblock>.title+figure.highlight{position:relative;margin-top:-1rem;border-right:1px solid #eeebee;border-bottom:1px solid #eeebee;border-left:1px solid #eeebee;border-top-left-radius:0;border-top-right-radius:0}code.language-mermaid{padding:0;background-color:inherit;border:0}.highlight,pre.highlight{background:#f5f6fa;color:#5c5962}.highlight pre{background:#f5f6fa}.text-grey-dk-000{color:#959396 !important}.text-grey-dk-100{color:#5c5962 !important}.text-grey-dk-200{color:#44434d !important}.text-grey-dk-250{color:#302d36 !important}.text-grey-dk-300{color:#27262b !important}.text-grey-lt-000{color:#f5f6fa !important}.text-grey-lt-100{color:#eeebee !important}.text-grey-lt-200{color:#ecebed !important}.text-grey-lt-300{color:#e6e1e8 !important}.text-blue-000{color:#2c84fa !important}.text-blue-100{color:#2869e6 !important}.text-blue-200{color:#264caf !important}.text-blue-300{color:#183385 !important}.text-green-000{color:#41d693 !important}.text-green-100{color:#11b584 !important}.text-green-200{color:#009c7b !important}.text-green-300{color:#026e57 !important}.text-purple-000{color:#7253ed !important}.text-purple-100{color:#5e41d0 !important}.text-purple-200{color:#4e26af !important}.text-purple-300{color:#381885 !important}.text-yellow-000{color:#ffeb82 !important}.text-yellow-100{color:#fadf50 !important}.text-yellow-200{color:#f7d12e !important}.text-yellow-300{color:#e7af06 !important}.text-red-000{color:#f77e7e !important}.text-red-100{color:#f96e65 !important}.text-red-200{color:#e94c4c !important}.text-red-300{color:#dd2e2e !important}.bg-grey-dk-000{background-color:#959396 !important}.bg-grey-dk-100{background-color:#5c5962 !important}.bg-grey-dk-200{background-color:#44434d !important}.bg-grey-dk-250{background-color:#302d36 !important}.bg-grey-dk-300{background-color:#27262b !important}.bg-grey-lt-000{background-color:#f5f6fa !important}.bg-grey-lt-100{background-color:#eeebee !important}.bg-grey-lt-200{background-color:#ecebed !important}.bg-grey-lt-300{background-color:#e6e1e8 !important}.bg-blue-000{background-color:#2c84fa !important}.bg-blue-100{background-color:#2869e6 !important}.bg-blue-200{background-color:#264caf !important}.bg-blue-300{background-color:#183385 !important}.bg-green-000{background-color:#41d693 !important}.bg-green-100{background-color:#11b584 !important}.bg-green-200{background-color:#009c7b !important}.bg-green-300{background-color:#026e57 !important}.bg-purple-000{background-color:#7253ed !important}.bg-purple-100{background-color:#5e41d0 !important}.bg-purple-200{background-color:#4e26af !important}.bg-purple-300{background-color:#381885 !important}.bg-yellow-000{background-color:#ffeb82 !important}.bg-yellow-100{background-color:#fadf50 !important}.bg-yellow-200{background-color:#f7d12e !important}.bg-yellow-300{background-color:#e7af06 !important}.bg-red-000{background-color:#f77e7e !important}.bg-red-100{background-color:#f96e65 !important}.bg-red-200{background-color:#e94c4c !important}.bg-red-300{background-color:#dd2e2e !important}.d-block{display:block !important}.d-flex{display:flex !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-none{display:none !important}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 20rem){.d-xs-block{display:block !important}.d-xs-flex{display:flex !important}.d-xs-inline{display:inline !important}.d-xs-inline-block{display:inline-block !important}.d-xs-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 31.25rem){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 50rem){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 66.5rem){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}@media (min-width: 87.5rem){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-none{display:none !important}}.float-left{float:left !important}.float-right{float:right !important}.flex-justify-start{justify-content:flex-start !important}.flex-justify-end{justify-content:flex-end !important}.flex-justify-between{justify-content:space-between !important}.flex-justify-around{justify-content:space-around !important}.v-align-baseline{vertical-align:baseline !important}.v-align-bottom{vertical-align:bottom !important}.v-align-middle{vertical-align:middle !important}.v-align-text-bottom{vertical-align:text-bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-top{vertical-align:top !important}.fs-1{font-size:9px !important}@media (min-width: 31.25rem){.fs-1{font-size:10px !important}}.fs-2{font-size:11px !important}@media (min-width: 31.25rem){.fs-2{font-size:12px !important}}.fs-3{font-size:12px !important}@media (min-width: 31.25rem){.fs-3{font-size:14px !important}}.fs-4{font-size:14px !important}@media (min-width: 31.25rem){.fs-4{font-size:16px !important}}.fs-5{font-size:16px !important}@media (min-width: 31.25rem){.fs-5{font-size:18px !important}}.fs-6{font-size:18px !important}@media (min-width: 31.25rem){.fs-6{font-size:24px !important;line-height:1.25}}.fs-7{font-size:24px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-7{font-size:32px !important}}.fs-8{font-size:32px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-8{font-size:36px !important}}.fs-9{font-size:36px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-9{font-size:42px !important}}.fs-10{font-size:42px !important;line-height:1.25}@media (min-width: 31.25rem){.fs-10{font-size:48px !important}}.fw-300{font-weight:300 !important}.fw-400{font-weight:400 !important}.fw-500{font-weight:500 !important}.fw-700{font-weight:700 !important}.lh-0{line-height:0 !important}.lh-default{line-height:1.4}.lh-tight{line-height:1.25}.ls-5{letter-spacing:0.05em !important}.ls-10{letter-spacing:0.1em !important}.ls-0{letter-spacing:0 !important}.text-uppercase{text-transform:uppercase !important}.list-style-none{padding:0 !important;margin:0 !important;list-style:none !important}.list-style-none li::before{display:none !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-0{margin-right:-0 !important;margin-left:-0 !important}.mx-0-auto{margin-right:auto !important;margin-left:auto !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-1-auto{margin-right:auto !important;margin-left:auto !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-2-auto{margin-right:auto !important;margin-left:auto !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-3{margin-right:-.75rem !important;margin-left:-.75rem !important}.mx-3-auto{margin-right:auto !important;margin-left:auto !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-right:1rem !important;margin-left:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-4{margin-right:-1rem !important;margin-left:-1rem !important}.mx-4-auto{margin-right:auto !important;margin-left:auto !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-5-auto{margin-right:auto !important;margin-left:auto !important}.m-6{margin:2rem !important}.mt-6{margin-top:2rem !important}.mr-6{margin-right:2rem !important}.mb-6{margin-bottom:2rem !important}.ml-6{margin-left:2rem !important}.mx-6{margin-right:2rem !important;margin-left:2rem !important}.my-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-6{margin-right:-2rem !important;margin-left:-2rem !important}.mx-6-auto{margin-right:auto !important;margin-left:auto !important}.m-7{margin:2.5rem !important}.mt-7{margin-top:2.5rem !important}.mr-7{margin-right:2.5rem !important}.mb-7{margin-bottom:2.5rem !important}.ml-7{margin-left:2.5rem !important}.mx-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}.mx-7-auto{margin-right:auto !important;margin-left:auto !important}.m-8{margin:3rem !important}.mt-8{margin-top:3rem !important}.mr-8{margin-right:3rem !important}.mb-8{margin-bottom:3rem !important}.ml-8{margin-left:3rem !important}.mx-8{margin-right:3rem !important;margin-left:3rem !important}.my-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-8{margin-right:-3rem !important;margin-left:-3rem !important}.mx-8-auto{margin-right:auto !important;margin-left:auto !important}.m-9{margin:3.5rem !important}.mt-9{margin-top:3.5rem !important}.mr-9{margin-right:3.5rem !important}.mb-9{margin-bottom:3.5rem !important}.ml-9{margin-left:3.5rem !important}.mx-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}.mx-9-auto{margin-right:auto !important;margin-left:auto !important}.m-10{margin:4rem !important}.mt-10{margin-top:4rem !important}.mr-10{margin-right:4rem !important}.mb-10{margin-bottom:4rem !important}.ml-10{margin-left:4rem !important}.mx-10{margin-right:4rem !important;margin-left:4rem !important}.my-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-10{margin-right:-4rem !important;margin-left:-4rem !important}.mx-10-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 20rem){.m-xs-0{margin:0 !important}.mt-xs-0{margin-top:0 !important}.mr-xs-0{margin-right:0 !important}.mb-xs-0{margin-bottom:0 !important}.ml-xs-0{margin-left:0 !important}.mx-xs-0{margin-right:0 !important;margin-left:0 !important}.my-xs-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-xs-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 20rem){.m-xs-1{margin:.25rem !important}.mt-xs-1{margin-top:.25rem !important}.mr-xs-1{margin-right:.25rem !important}.mb-xs-1{margin-bottom:.25rem !important}.ml-xs-1{margin-left:.25rem !important}.mx-xs-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-xs-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-xs-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 20rem){.m-xs-2{margin:.5rem !important}.mt-xs-2{margin-top:.5rem !important}.mr-xs-2{margin-right:.5rem !important}.mb-xs-2{margin-bottom:.5rem !important}.ml-xs-2{margin-left:.5rem !important}.mx-xs-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-xs-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-xs-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 20rem){.m-xs-3{margin:.75rem !important}.mt-xs-3{margin-top:.75rem !important}.mr-xs-3{margin-right:.75rem !important}.mb-xs-3{margin-bottom:.75rem !important}.ml-xs-3{margin-left:.75rem !important}.mx-xs-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-xs-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-xs-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 20rem){.m-xs-4{margin:1rem !important}.mt-xs-4{margin-top:1rem !important}.mr-xs-4{margin-right:1rem !important}.mb-xs-4{margin-bottom:1rem !important}.ml-xs-4{margin-left:1rem !important}.mx-xs-4{margin-right:1rem !important;margin-left:1rem !important}.my-xs-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-xs-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 20rem){.m-xs-5{margin:1.5rem !important}.mt-xs-5{margin-top:1.5rem !important}.mr-xs-5{margin-right:1.5rem !important}.mb-xs-5{margin-bottom:1.5rem !important}.ml-xs-5{margin-left:1.5rem !important}.mx-xs-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-xs-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-xs-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 20rem){.m-xs-6{margin:2rem !important}.mt-xs-6{margin-top:2rem !important}.mr-xs-6{margin-right:2rem !important}.mb-xs-6{margin-bottom:2rem !important}.ml-xs-6{margin-left:2rem !important}.mx-xs-6{margin-right:2rem !important;margin-left:2rem !important}.my-xs-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-xs-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 20rem){.m-xs-7{margin:2.5rem !important}.mt-xs-7{margin-top:2.5rem !important}.mr-xs-7{margin-right:2.5rem !important}.mb-xs-7{margin-bottom:2.5rem !important}.ml-xs-7{margin-left:2.5rem !important}.mx-xs-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-xs-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-xs-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 20rem){.m-xs-8{margin:3rem !important}.mt-xs-8{margin-top:3rem !important}.mr-xs-8{margin-right:3rem !important}.mb-xs-8{margin-bottom:3rem !important}.ml-xs-8{margin-left:3rem !important}.mx-xs-8{margin-right:3rem !important;margin-left:3rem !important}.my-xs-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-xs-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 20rem){.m-xs-9{margin:3.5rem !important}.mt-xs-9{margin-top:3.5rem !important}.mr-xs-9{margin-right:3.5rem !important}.mb-xs-9{margin-bottom:3.5rem !important}.ml-xs-9{margin-left:3.5rem !important}.mx-xs-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-xs-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-xs-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 20rem){.m-xs-10{margin:4rem !important}.mt-xs-10{margin-top:4rem !important}.mr-xs-10{margin-right:4rem !important}.mb-xs-10{margin-bottom:4rem !important}.ml-xs-10{margin-left:4rem !important}.mx-xs-10{margin-right:4rem !important;margin-left:4rem !important}.my-xs-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-xs-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 31.25rem){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-sm-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 31.25rem){.m-sm-1{margin:.25rem !important}.mt-sm-1{margin-top:.25rem !important}.mr-sm-1{margin-right:.25rem !important}.mb-sm-1{margin-bottom:.25rem !important}.ml-sm-1{margin-left:.25rem !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-sm-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 31.25rem){.m-sm-2{margin:.5rem !important}.mt-sm-2{margin-top:.5rem !important}.mr-sm-2{margin-right:.5rem !important}.mb-sm-2{margin-bottom:.5rem !important}.ml-sm-2{margin-left:.5rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-sm-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 31.25rem){.m-sm-3{margin:.75rem !important}.mt-sm-3{margin-top:.75rem !important}.mr-sm-3{margin-right:.75rem !important}.mb-sm-3{margin-bottom:.75rem !important}.ml-sm-3{margin-left:.75rem !important}.mx-sm-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-sm-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-sm-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 31.25rem){.m-sm-4{margin:1rem !important}.mt-sm-4{margin-top:1rem !important}.mr-sm-4{margin-right:1rem !important}.mb-sm-4{margin-bottom:1rem !important}.ml-sm-4{margin-left:1rem !important}.mx-sm-4{margin-right:1rem !important;margin-left:1rem !important}.my-sm-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-sm-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 31.25rem){.m-sm-5{margin:1.5rem !important}.mt-sm-5{margin-top:1.5rem !important}.mr-sm-5{margin-right:1.5rem !important}.mb-sm-5{margin-bottom:1.5rem !important}.ml-sm-5{margin-left:1.5rem !important}.mx-sm-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-sm-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-sm-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 31.25rem){.m-sm-6{margin:2rem !important}.mt-sm-6{margin-top:2rem !important}.mr-sm-6{margin-right:2rem !important}.mb-sm-6{margin-bottom:2rem !important}.ml-sm-6{margin-left:2rem !important}.mx-sm-6{margin-right:2rem !important;margin-left:2rem !important}.my-sm-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-sm-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 31.25rem){.m-sm-7{margin:2.5rem !important}.mt-sm-7{margin-top:2.5rem !important}.mr-sm-7{margin-right:2.5rem !important}.mb-sm-7{margin-bottom:2.5rem !important}.ml-sm-7{margin-left:2.5rem !important}.mx-sm-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-sm-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-sm-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 31.25rem){.m-sm-8{margin:3rem !important}.mt-sm-8{margin-top:3rem !important}.mr-sm-8{margin-right:3rem !important}.mb-sm-8{margin-bottom:3rem !important}.ml-sm-8{margin-left:3rem !important}.mx-sm-8{margin-right:3rem !important;margin-left:3rem !important}.my-sm-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-sm-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 31.25rem){.m-sm-9{margin:3.5rem !important}.mt-sm-9{margin-top:3.5rem !important}.mr-sm-9{margin-right:3.5rem !important}.mb-sm-9{margin-bottom:3.5rem !important}.ml-sm-9{margin-left:3.5rem !important}.mx-sm-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-sm-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-sm-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 31.25rem){.m-sm-10{margin:4rem !important}.mt-sm-10{margin-top:4rem !important}.mr-sm-10{margin-right:4rem !important}.mb-sm-10{margin-bottom:4rem !important}.ml-sm-10{margin-left:4rem !important}.mx-sm-10{margin-right:4rem !important;margin-left:4rem !important}.my-sm-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-sm-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 50rem){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-md-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 50rem){.m-md-1{margin:.25rem !important}.mt-md-1{margin-top:.25rem !important}.mr-md-1{margin-right:.25rem !important}.mb-md-1{margin-bottom:.25rem !important}.ml-md-1{margin-left:.25rem !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-md-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 50rem){.m-md-2{margin:.5rem !important}.mt-md-2{margin-top:.5rem !important}.mr-md-2{margin-right:.5rem !important}.mb-md-2{margin-bottom:.5rem !important}.ml-md-2{margin-left:.5rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-md-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 50rem){.m-md-3{margin:.75rem !important}.mt-md-3{margin-top:.75rem !important}.mr-md-3{margin-right:.75rem !important}.mb-md-3{margin-bottom:.75rem !important}.ml-md-3{margin-left:.75rem !important}.mx-md-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-md-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-md-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 50rem){.m-md-4{margin:1rem !important}.mt-md-4{margin-top:1rem !important}.mr-md-4{margin-right:1rem !important}.mb-md-4{margin-bottom:1rem !important}.ml-md-4{margin-left:1rem !important}.mx-md-4{margin-right:1rem !important;margin-left:1rem !important}.my-md-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-md-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 50rem){.m-md-5{margin:1.5rem !important}.mt-md-5{margin-top:1.5rem !important}.mr-md-5{margin-right:1.5rem !important}.mb-md-5{margin-bottom:1.5rem !important}.ml-md-5{margin-left:1.5rem !important}.mx-md-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-md-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-md-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 50rem){.m-md-6{margin:2rem !important}.mt-md-6{margin-top:2rem !important}.mr-md-6{margin-right:2rem !important}.mb-md-6{margin-bottom:2rem !important}.ml-md-6{margin-left:2rem !important}.mx-md-6{margin-right:2rem !important;margin-left:2rem !important}.my-md-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-md-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 50rem){.m-md-7{margin:2.5rem !important}.mt-md-7{margin-top:2.5rem !important}.mr-md-7{margin-right:2.5rem !important}.mb-md-7{margin-bottom:2.5rem !important}.ml-md-7{margin-left:2.5rem !important}.mx-md-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-md-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-md-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 50rem){.m-md-8{margin:3rem !important}.mt-md-8{margin-top:3rem !important}.mr-md-8{margin-right:3rem !important}.mb-md-8{margin-bottom:3rem !important}.ml-md-8{margin-left:3rem !important}.mx-md-8{margin-right:3rem !important;margin-left:3rem !important}.my-md-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-md-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 50rem){.m-md-9{margin:3.5rem !important}.mt-md-9{margin-top:3.5rem !important}.mr-md-9{margin-right:3.5rem !important}.mb-md-9{margin-bottom:3.5rem !important}.ml-md-9{margin-left:3.5rem !important}.mx-md-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-md-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-md-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 50rem){.m-md-10{margin:4rem !important}.mt-md-10{margin-top:4rem !important}.mr-md-10{margin-right:4rem !important}.mb-md-10{margin-bottom:4rem !important}.ml-md-10{margin-left:4rem !important}.mx-md-10{margin-right:4rem !important;margin-left:4rem !important}.my-md-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-md-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 66.5rem){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-lg-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 66.5rem){.m-lg-1{margin:.25rem !important}.mt-lg-1{margin-top:.25rem !important}.mr-lg-1{margin-right:.25rem !important}.mb-lg-1{margin-bottom:.25rem !important}.ml-lg-1{margin-left:.25rem !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-lg-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 66.5rem){.m-lg-2{margin:.5rem !important}.mt-lg-2{margin-top:.5rem !important}.mr-lg-2{margin-right:.5rem !important}.mb-lg-2{margin-bottom:.5rem !important}.ml-lg-2{margin-left:.5rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-lg-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 66.5rem){.m-lg-3{margin:.75rem !important}.mt-lg-3{margin-top:.75rem !important}.mr-lg-3{margin-right:.75rem !important}.mb-lg-3{margin-bottom:.75rem !important}.ml-lg-3{margin-left:.75rem !important}.mx-lg-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-lg-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-lg-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 66.5rem){.m-lg-4{margin:1rem !important}.mt-lg-4{margin-top:1rem !important}.mr-lg-4{margin-right:1rem !important}.mb-lg-4{margin-bottom:1rem !important}.ml-lg-4{margin-left:1rem !important}.mx-lg-4{margin-right:1rem !important;margin-left:1rem !important}.my-lg-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-lg-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 66.5rem){.m-lg-5{margin:1.5rem !important}.mt-lg-5{margin-top:1.5rem !important}.mr-lg-5{margin-right:1.5rem !important}.mb-lg-5{margin-bottom:1.5rem !important}.ml-lg-5{margin-left:1.5rem !important}.mx-lg-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-lg-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-lg-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 66.5rem){.m-lg-6{margin:2rem !important}.mt-lg-6{margin-top:2rem !important}.mr-lg-6{margin-right:2rem !important}.mb-lg-6{margin-bottom:2rem !important}.ml-lg-6{margin-left:2rem !important}.mx-lg-6{margin-right:2rem !important;margin-left:2rem !important}.my-lg-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-lg-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 66.5rem){.m-lg-7{margin:2.5rem !important}.mt-lg-7{margin-top:2.5rem !important}.mr-lg-7{margin-right:2.5rem !important}.mb-lg-7{margin-bottom:2.5rem !important}.ml-lg-7{margin-left:2.5rem !important}.mx-lg-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-lg-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-lg-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 66.5rem){.m-lg-8{margin:3rem !important}.mt-lg-8{margin-top:3rem !important}.mr-lg-8{margin-right:3rem !important}.mb-lg-8{margin-bottom:3rem !important}.ml-lg-8{margin-left:3rem !important}.mx-lg-8{margin-right:3rem !important;margin-left:3rem !important}.my-lg-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-lg-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 66.5rem){.m-lg-9{margin:3.5rem !important}.mt-lg-9{margin-top:3.5rem !important}.mr-lg-9{margin-right:3.5rem !important}.mb-lg-9{margin-bottom:3.5rem !important}.ml-lg-9{margin-left:3.5rem !important}.mx-lg-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-lg-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-lg-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 66.5rem){.m-lg-10{margin:4rem !important}.mt-lg-10{margin-top:4rem !important}.mr-lg-10{margin-right:4rem !important}.mb-lg-10{margin-bottom:4rem !important}.ml-lg-10{margin-left:4rem !important}.mx-lg-10{margin-right:4rem !important;margin-left:4rem !important}.my-lg-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-lg-10{margin-right:-4rem !important;margin-left:-4rem !important}}@media (min-width: 87.5rem){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.mxn-xl-0{margin-right:-0 !important;margin-left:-0 !important}}@media (min-width: 87.5rem){.m-xl-1{margin:.25rem !important}.mt-xl-1{margin-top:.25rem !important}.mr-xl-1{margin-right:.25rem !important}.mb-xl-1{margin-bottom:.25rem !important}.ml-xl-1{margin-left:.25rem !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.mxn-xl-1{margin-right:-.25rem !important;margin-left:-.25rem !important}}@media (min-width: 87.5rem){.m-xl-2{margin:.5rem !important}.mt-xl-2{margin-top:.5rem !important}.mr-xl-2{margin-right:.5rem !important}.mb-xl-2{margin-bottom:.5rem !important}.ml-xl-2{margin-left:.5rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.mxn-xl-2{margin-right:-.5rem !important;margin-left:-.5rem !important}}@media (min-width: 87.5rem){.m-xl-3{margin:.75rem !important}.mt-xl-3{margin-top:.75rem !important}.mr-xl-3{margin-right:.75rem !important}.mb-xl-3{margin-bottom:.75rem !important}.ml-xl-3{margin-left:.75rem !important}.mx-xl-3{margin-right:.75rem !important;margin-left:.75rem !important}.my-xl-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.mxn-xl-3{margin-right:-.75rem !important;margin-left:-.75rem !important}}@media (min-width: 87.5rem){.m-xl-4{margin:1rem !important}.mt-xl-4{margin-top:1rem !important}.mr-xl-4{margin-right:1rem !important}.mb-xl-4{margin-bottom:1rem !important}.ml-xl-4{margin-left:1rem !important}.mx-xl-4{margin-right:1rem !important;margin-left:1rem !important}.my-xl-4{margin-top:1rem !important;margin-bottom:1rem !important}.mxn-xl-4{margin-right:-1rem !important;margin-left:-1rem !important}}@media (min-width: 87.5rem){.m-xl-5{margin:1.5rem !important}.mt-xl-5{margin-top:1.5rem !important}.mr-xl-5{margin-right:1.5rem !important}.mb-xl-5{margin-bottom:1.5rem !important}.ml-xl-5{margin-left:1.5rem !important}.mx-xl-5{margin-right:1.5rem !important;margin-left:1.5rem !important}.my-xl-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.mxn-xl-5{margin-right:-1.5rem !important;margin-left:-1.5rem !important}}@media (min-width: 87.5rem){.m-xl-6{margin:2rem !important}.mt-xl-6{margin-top:2rem !important}.mr-xl-6{margin-right:2rem !important}.mb-xl-6{margin-bottom:2rem !important}.ml-xl-6{margin-left:2rem !important}.mx-xl-6{margin-right:2rem !important;margin-left:2rem !important}.my-xl-6{margin-top:2rem !important;margin-bottom:2rem !important}.mxn-xl-6{margin-right:-2rem !important;margin-left:-2rem !important}}@media (min-width: 87.5rem){.m-xl-7{margin:2.5rem !important}.mt-xl-7{margin-top:2.5rem !important}.mr-xl-7{margin-right:2.5rem !important}.mb-xl-7{margin-bottom:2.5rem !important}.ml-xl-7{margin-left:2.5rem !important}.mx-xl-7{margin-right:2.5rem !important;margin-left:2.5rem !important}.my-xl-7{margin-top:2.5rem !important;margin-bottom:2.5rem !important}.mxn-xl-7{margin-right:-2.5rem !important;margin-left:-2.5rem !important}}@media (min-width: 87.5rem){.m-xl-8{margin:3rem !important}.mt-xl-8{margin-top:3rem !important}.mr-xl-8{margin-right:3rem !important}.mb-xl-8{margin-bottom:3rem !important}.ml-xl-8{margin-left:3rem !important}.mx-xl-8{margin-right:3rem !important;margin-left:3rem !important}.my-xl-8{margin-top:3rem !important;margin-bottom:3rem !important}.mxn-xl-8{margin-right:-3rem !important;margin-left:-3rem !important}}@media (min-width: 87.5rem){.m-xl-9{margin:3.5rem !important}.mt-xl-9{margin-top:3.5rem !important}.mr-xl-9{margin-right:3.5rem !important}.mb-xl-9{margin-bottom:3.5rem !important}.ml-xl-9{margin-left:3.5rem !important}.mx-xl-9{margin-right:3.5rem !important;margin-left:3.5rem !important}.my-xl-9{margin-top:3.5rem !important;margin-bottom:3.5rem !important}.mxn-xl-9{margin-right:-3.5rem !important;margin-left:-3.5rem !important}}@media (min-width: 87.5rem){.m-xl-10{margin:4rem !important}.mt-xl-10{margin-top:4rem !important}.mr-xl-10{margin-right:4rem !important}.mb-xl-10{margin-bottom:4rem !important}.ml-xl-10{margin-left:4rem !important}.mx-xl-10{margin-right:4rem !important;margin-left:4rem !important}.my-xl-10{margin-top:4rem !important;margin-bottom:4rem !important}.mxn-xl-10{margin-right:-4rem !important;margin-left:-4rem !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-right:1rem !important;padding-left:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:2rem !important}.pt-6{padding-top:2rem !important}.pr-6{padding-right:2rem !important}.pb-6{padding-bottom:2rem !important}.pl-6{padding-left:2rem !important}.px-6{padding-right:2rem !important;padding-left:2rem !important}.py-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-7{padding:2.5rem !important}.pt-7{padding-top:2.5rem !important}.pr-7{padding-right:2.5rem !important}.pb-7{padding-bottom:2.5rem !important}.pl-7{padding-left:2.5rem !important}.px-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-8{padding:3rem !important}.pt-8{padding-top:3rem !important}.pr-8{padding-right:3rem !important}.pb-8{padding-bottom:3rem !important}.pl-8{padding-left:3rem !important}.px-8{padding-right:3rem !important;padding-left:3rem !important}.py-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-9{padding:3.5rem !important}.pt-9{padding-top:3.5rem !important}.pr-9{padding-right:3.5rem !important}.pb-9{padding-bottom:3.5rem !important}.pl-9{padding-left:3.5rem !important}.px-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-10{padding:4rem !important}.pt-10{padding-top:4rem !important}.pr-10{padding-right:4rem !important}.pb-10{padding-bottom:4rem !important}.pl-10{padding-left:4rem !important}.px-10{padding-right:4rem !important;padding-left:4rem !important}.py-10{padding-top:4rem !important;padding-bottom:4rem !important}@media (min-width: 20rem){.p-xs-0{padding:0 !important}.pt-xs-0{padding-top:0 !important}.pr-xs-0{padding-right:0 !important}.pb-xs-0{padding-bottom:0 !important}.pl-xs-0{padding-left:0 !important}.px-xs-0{padding-right:0 !important;padding-left:0 !important}.py-xs-0{padding-top:0 !important;padding-bottom:0 !important}.p-xs-1{padding:.25rem !important}.pt-xs-1{padding-top:.25rem !important}.pr-xs-1{padding-right:.25rem !important}.pb-xs-1{padding-bottom:.25rem !important}.pl-xs-1{padding-left:.25rem !important}.px-xs-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-xs-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-xs-2{padding:.5rem !important}.pt-xs-2{padding-top:.5rem !important}.pr-xs-2{padding-right:.5rem !important}.pb-xs-2{padding-bottom:.5rem !important}.pl-xs-2{padding-left:.5rem !important}.px-xs-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-xs-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-xs-3{padding:.75rem !important}.pt-xs-3{padding-top:.75rem !important}.pr-xs-3{padding-right:.75rem !important}.pb-xs-3{padding-bottom:.75rem !important}.pl-xs-3{padding-left:.75rem !important}.px-xs-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-xs-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-xs-4{padding:1rem !important}.pt-xs-4{padding-top:1rem !important}.pr-xs-4{padding-right:1rem !important}.pb-xs-4{padding-bottom:1rem !important}.pl-xs-4{padding-left:1rem !important}.px-xs-4{padding-right:1rem !important;padding-left:1rem !important}.py-xs-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-xs-5{padding:1.5rem !important}.pt-xs-5{padding-top:1.5rem !important}.pr-xs-5{padding-right:1.5rem !important}.pb-xs-5{padding-bottom:1.5rem !important}.pl-xs-5{padding-left:1.5rem !important}.px-xs-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-xs-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-xs-6{padding:2rem !important}.pt-xs-6{padding-top:2rem !important}.pr-xs-6{padding-right:2rem !important}.pb-xs-6{padding-bottom:2rem !important}.pl-xs-6{padding-left:2rem !important}.px-xs-6{padding-right:2rem !important;padding-left:2rem !important}.py-xs-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-xs-7{padding:2.5rem !important}.pt-xs-7{padding-top:2.5rem !important}.pr-xs-7{padding-right:2.5rem !important}.pb-xs-7{padding-bottom:2.5rem !important}.pl-xs-7{padding-left:2.5rem !important}.px-xs-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-xs-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-xs-8{padding:3rem !important}.pt-xs-8{padding-top:3rem !important}.pr-xs-8{padding-right:3rem !important}.pb-xs-8{padding-bottom:3rem !important}.pl-xs-8{padding-left:3rem !important}.px-xs-8{padding-right:3rem !important;padding-left:3rem !important}.py-xs-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-xs-9{padding:3.5rem !important}.pt-xs-9{padding-top:3.5rem !important}.pr-xs-9{padding-right:3.5rem !important}.pb-xs-9{padding-bottom:3.5rem !important}.pl-xs-9{padding-left:3.5rem !important}.px-xs-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-xs-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-xs-10{padding:4rem !important}.pt-xs-10{padding-top:4rem !important}.pr-xs-10{padding-right:4rem !important}.pb-xs-10{padding-bottom:4rem !important}.pl-xs-10{padding-left:4rem !important}.px-xs-10{padding-right:4rem !important;padding-left:4rem !important}.py-xs-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 31.25rem){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1{padding-top:.25rem !important}.pr-sm-1{padding-right:.25rem !important}.pb-sm-1{padding-bottom:.25rem !important}.pl-sm-1{padding-left:.25rem !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2{padding-top:.5rem !important}.pr-sm-2{padding-right:.5rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pl-sm-2{padding-left:.5rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-sm-3{padding:.75rem !important}.pt-sm-3{padding-top:.75rem !important}.pr-sm-3{padding-right:.75rem !important}.pb-sm-3{padding-bottom:.75rem !important}.pl-sm-3{padding-left:.75rem !important}.px-sm-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-sm-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-sm-4{padding:1rem !important}.pt-sm-4{padding-top:1rem !important}.pr-sm-4{padding-right:1rem !important}.pb-sm-4{padding-bottom:1rem !important}.pl-sm-4{padding-left:1rem !important}.px-sm-4{padding-right:1rem !important;padding-left:1rem !important}.py-sm-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-sm-5{padding:1.5rem !important}.pt-sm-5{padding-top:1.5rem !important}.pr-sm-5{padding-right:1.5rem !important}.pb-sm-5{padding-bottom:1.5rem !important}.pl-sm-5{padding-left:1.5rem !important}.px-sm-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-sm-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-sm-6{padding:2rem !important}.pt-sm-6{padding-top:2rem !important}.pr-sm-6{padding-right:2rem !important}.pb-sm-6{padding-bottom:2rem !important}.pl-sm-6{padding-left:2rem !important}.px-sm-6{padding-right:2rem !important;padding-left:2rem !important}.py-sm-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-sm-7{padding:2.5rem !important}.pt-sm-7{padding-top:2.5rem !important}.pr-sm-7{padding-right:2.5rem !important}.pb-sm-7{padding-bottom:2.5rem !important}.pl-sm-7{padding-left:2.5rem !important}.px-sm-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-sm-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-sm-8{padding:3rem !important}.pt-sm-8{padding-top:3rem !important}.pr-sm-8{padding-right:3rem !important}.pb-sm-8{padding-bottom:3rem !important}.pl-sm-8{padding-left:3rem !important}.px-sm-8{padding-right:3rem !important;padding-left:3rem !important}.py-sm-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-sm-9{padding:3.5rem !important}.pt-sm-9{padding-top:3.5rem !important}.pr-sm-9{padding-right:3.5rem !important}.pb-sm-9{padding-bottom:3.5rem !important}.pl-sm-9{padding-left:3.5rem !important}.px-sm-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-sm-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-sm-10{padding:4rem !important}.pt-sm-10{padding-top:4rem !important}.pr-sm-10{padding-right:4rem !important}.pb-sm-10{padding-bottom:4rem !important}.pl-sm-10{padding-left:4rem !important}.px-sm-10{padding-right:4rem !important;padding-left:4rem !important}.py-sm-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 50rem){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1{padding-top:.25rem !important}.pr-md-1{padding-right:.25rem !important}.pb-md-1{padding-bottom:.25rem !important}.pl-md-1{padding-left:.25rem !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2{padding-top:.5rem !important}.pr-md-2{padding-right:.5rem !important}.pb-md-2{padding-bottom:.5rem !important}.pl-md-2{padding-left:.5rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-md-3{padding:.75rem !important}.pt-md-3{padding-top:.75rem !important}.pr-md-3{padding-right:.75rem !important}.pb-md-3{padding-bottom:.75rem !important}.pl-md-3{padding-left:.75rem !important}.px-md-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-md-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-md-4{padding:1rem !important}.pt-md-4{padding-top:1rem !important}.pr-md-4{padding-right:1rem !important}.pb-md-4{padding-bottom:1rem !important}.pl-md-4{padding-left:1rem !important}.px-md-4{padding-right:1rem !important;padding-left:1rem !important}.py-md-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-md-5{padding:1.5rem !important}.pt-md-5{padding-top:1.5rem !important}.pr-md-5{padding-right:1.5rem !important}.pb-md-5{padding-bottom:1.5rem !important}.pl-md-5{padding-left:1.5rem !important}.px-md-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-md-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-md-6{padding:2rem !important}.pt-md-6{padding-top:2rem !important}.pr-md-6{padding-right:2rem !important}.pb-md-6{padding-bottom:2rem !important}.pl-md-6{padding-left:2rem !important}.px-md-6{padding-right:2rem !important;padding-left:2rem !important}.py-md-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-md-7{padding:2.5rem !important}.pt-md-7{padding-top:2.5rem !important}.pr-md-7{padding-right:2.5rem !important}.pb-md-7{padding-bottom:2.5rem !important}.pl-md-7{padding-left:2.5rem !important}.px-md-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-md-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-md-8{padding:3rem !important}.pt-md-8{padding-top:3rem !important}.pr-md-8{padding-right:3rem !important}.pb-md-8{padding-bottom:3rem !important}.pl-md-8{padding-left:3rem !important}.px-md-8{padding-right:3rem !important;padding-left:3rem !important}.py-md-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-md-9{padding:3.5rem !important}.pt-md-9{padding-top:3.5rem !important}.pr-md-9{padding-right:3.5rem !important}.pb-md-9{padding-bottom:3.5rem !important}.pl-md-9{padding-left:3.5rem !important}.px-md-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-md-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-md-10{padding:4rem !important}.pt-md-10{padding-top:4rem !important}.pr-md-10{padding-right:4rem !important}.pb-md-10{padding-bottom:4rem !important}.pl-md-10{padding-left:4rem !important}.px-md-10{padding-right:4rem !important;padding-left:4rem !important}.py-md-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 66.5rem){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1{padding-top:.25rem !important}.pr-lg-1{padding-right:.25rem !important}.pb-lg-1{padding-bottom:.25rem !important}.pl-lg-1{padding-left:.25rem !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2{padding-top:.5rem !important}.pr-lg-2{padding-right:.5rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pl-lg-2{padding-left:.5rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-lg-3{padding:.75rem !important}.pt-lg-3{padding-top:.75rem !important}.pr-lg-3{padding-right:.75rem !important}.pb-lg-3{padding-bottom:.75rem !important}.pl-lg-3{padding-left:.75rem !important}.px-lg-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-lg-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-lg-4{padding:1rem !important}.pt-lg-4{padding-top:1rem !important}.pr-lg-4{padding-right:1rem !important}.pb-lg-4{padding-bottom:1rem !important}.pl-lg-4{padding-left:1rem !important}.px-lg-4{padding-right:1rem !important;padding-left:1rem !important}.py-lg-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-lg-5{padding:1.5rem !important}.pt-lg-5{padding-top:1.5rem !important}.pr-lg-5{padding-right:1.5rem !important}.pb-lg-5{padding-bottom:1.5rem !important}.pl-lg-5{padding-left:1.5rem !important}.px-lg-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-lg-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-lg-6{padding:2rem !important}.pt-lg-6{padding-top:2rem !important}.pr-lg-6{padding-right:2rem !important}.pb-lg-6{padding-bottom:2rem !important}.pl-lg-6{padding-left:2rem !important}.px-lg-6{padding-right:2rem !important;padding-left:2rem !important}.py-lg-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-lg-7{padding:2.5rem !important}.pt-lg-7{padding-top:2.5rem !important}.pr-lg-7{padding-right:2.5rem !important}.pb-lg-7{padding-bottom:2.5rem !important}.pl-lg-7{padding-left:2.5rem !important}.px-lg-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-lg-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-lg-8{padding:3rem !important}.pt-lg-8{padding-top:3rem !important}.pr-lg-8{padding-right:3rem !important}.pb-lg-8{padding-bottom:3rem !important}.pl-lg-8{padding-left:3rem !important}.px-lg-8{padding-right:3rem !important;padding-left:3rem !important}.py-lg-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-lg-9{padding:3.5rem !important}.pt-lg-9{padding-top:3.5rem !important}.pr-lg-9{padding-right:3.5rem !important}.pb-lg-9{padding-bottom:3.5rem !important}.pl-lg-9{padding-left:3.5rem !important}.px-lg-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-lg-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-lg-10{padding:4rem !important}.pt-lg-10{padding-top:4rem !important}.pr-lg-10{padding-right:4rem !important}.pb-lg-10{padding-bottom:4rem !important}.pl-lg-10{padding-left:4rem !important}.px-lg-10{padding-right:4rem !important;padding-left:4rem !important}.py-lg-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media (min-width: 87.5rem){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1{padding-top:.25rem !important}.pr-xl-1{padding-right:.25rem !important}.pb-xl-1{padding-bottom:.25rem !important}.pl-xl-1{padding-left:.25rem !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2{padding-top:.5rem !important}.pr-xl-2{padding-right:.5rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pl-xl-2{padding-left:.5rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-xl-3{padding:.75rem !important}.pt-xl-3{padding-top:.75rem !important}.pr-xl-3{padding-right:.75rem !important}.pb-xl-3{padding-bottom:.75rem !important}.pl-xl-3{padding-left:.75rem !important}.px-xl-3{padding-right:.75rem !important;padding-left:.75rem !important}.py-xl-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-xl-4{padding:1rem !important}.pt-xl-4{padding-top:1rem !important}.pr-xl-4{padding-right:1rem !important}.pb-xl-4{padding-bottom:1rem !important}.pl-xl-4{padding-left:1rem !important}.px-xl-4{padding-right:1rem !important;padding-left:1rem !important}.py-xl-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-xl-5{padding:1.5rem !important}.pt-xl-5{padding-top:1.5rem !important}.pr-xl-5{padding-right:1.5rem !important}.pb-xl-5{padding-bottom:1.5rem !important}.pl-xl-5{padding-left:1.5rem !important}.px-xl-5{padding-right:1.5rem !important;padding-left:1.5rem !important}.py-xl-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-xl-6{padding:2rem !important}.pt-xl-6{padding-top:2rem !important}.pr-xl-6{padding-right:2rem !important}.pb-xl-6{padding-bottom:2rem !important}.pl-xl-6{padding-left:2rem !important}.px-xl-6{padding-right:2rem !important;padding-left:2rem !important}.py-xl-6{padding-top:2rem !important;padding-bottom:2rem !important}.p-xl-7{padding:2.5rem !important}.pt-xl-7{padding-top:2.5rem !important}.pr-xl-7{padding-right:2.5rem !important}.pb-xl-7{padding-bottom:2.5rem !important}.pl-xl-7{padding-left:2.5rem !important}.px-xl-7{padding-right:2.5rem !important;padding-left:2.5rem !important}.py-xl-7{padding-top:2.5rem !important;padding-bottom:2.5rem !important}.p-xl-8{padding:3rem !important}.pt-xl-8{padding-top:3rem !important}.pr-xl-8{padding-right:3rem !important}.pb-xl-8{padding-bottom:3rem !important}.pl-xl-8{padding-left:3rem !important}.px-xl-8{padding-right:3rem !important;padding-left:3rem !important}.py-xl-8{padding-top:3rem !important;padding-bottom:3rem !important}.p-xl-9{padding:3.5rem !important}.pt-xl-9{padding-top:3.5rem !important}.pr-xl-9{padding-right:3.5rem !important}.pb-xl-9{padding-bottom:3.5rem !important}.pl-xl-9{padding-left:3.5rem !important}.px-xl-9{padding-right:3.5rem !important;padding-left:3.5rem !important}.py-xl-9{padding-top:3.5rem !important;padding-bottom:3.5rem !important}.p-xl-10{padding:4rem !important}.pt-xl-10{padding-top:4rem !important}.pr-xl-10{padding-right:4rem !important}.pb-xl-10{padding-bottom:4rem !important}.pl-xl-10{padding-left:4rem !important}.px-xl-10{padding-right:4rem !important;padding-left:4rem !important}.py-xl-10{padding-top:4rem !important;padding-bottom:4rem !important}}@media print{.site-footer,.site-button,#edit-this-page,#back-to-top,.site-nav,.main-header{display:none !important}.side-bar{width:100%;height:auto;border-right:0 !important}.site-header{border-bottom:1px solid #eeebee}.site-title{font-size:16px !important;font-weight:700 !important}.text-small{font-size:8pt !important}pre.highlight{border:1px solid #eeebee}.main{max-width:none;margin-left:0}}a.skip-to-main{left:-999px;position:absolute;top:auto;width:1px;height:1px;overflow:hidden;z-index:-999}a.skip-to-main:focus,a.skip-to-main:active{color:#7253ed;background-color:#fff;left:auto;top:auto;width:30%;height:auto;overflow:auto;margin:10px 35%;padding:5px;border-radius:15px;border:4px solid #5e41d0;text-align:center;font-size:1.2em;z-index:999}div.opaque{background-color:#fff}
diff --git a/assets/images/just-the-docs.png b/assets/images/just-the-docs.png
new file mode 100644
index 00000000..81c33065
--- /dev/null
+++ b/assets/images/just-the-docs.png
Binary files differ
diff --git a/assets/images/large-image.jpg b/assets/images/large-image.jpg
new file mode 100644
index 00000000..c007781c
--- /dev/null
+++ b/assets/images/large-image.jpg
Binary files differ
diff --git a/assets/images/search.svg b/assets/images/search.svg
new file mode 100644
index 00000000..421ca4df
--- /dev/null
+++ b/assets/images/search.svg
@@ -0,0 +1 @@
+<svg width="28" height="28" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg"><title>Search</title><g fill-rule="nonzero" fill="#959396"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg>
diff --git a/assets/images/small-image.jpg b/assets/images/small-image.jpg
new file mode 100644
index 00000000..5bf58a94
--- /dev/null
+++ b/assets/images/small-image.jpg
Binary files differ
diff --git a/assets/js/just-the-docs.js b/assets/js/just-the-docs.js
new file mode 100644
index 00000000..21c50817
--- /dev/null
+++ b/assets/js/just-the-docs.js
@@ -0,0 +1,497 @@
+(function (jtd, undefined) {
+
+// Event handling
+
+jtd.addEvent = function(el, type, handler) {
+ if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler);
+}
+jtd.removeEvent = function(el, type, handler) {
+ if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler);
+}
+jtd.onReady = function(ready) {
+ // in case the document is already rendered
+ if (document.readyState!='loading') ready();
+ // modern browsers
+ else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready);
+ // IE <= 8
+ else document.attachEvent('onreadystatechange', function(){
+ if (document.readyState=='complete') ready();
+ });
+}
+
+// Show/hide mobile menu
+
+function initNav() {
+ jtd.addEvent(document, 'click', function(e){
+ var target = e.target;
+ while (target && !(target.classList && target.classList.contains('nav-list-expander'))) {
+ target = target.parentNode;
+ }
+ if (target) {
+ e.preventDefault();
+ target.parentNode.classList.toggle('active');
+ }
+ });
+
+ const siteNav = document.getElementById('site-nav');
+ const mainHeader = document.getElementById('main-header');
+ const menuButton = document.getElementById('menu-button');
+
+ jtd.addEvent(menuButton, 'click', function(e){
+ e.preventDefault();
+
+ if (menuButton.classList.toggle('nav-open')) {
+ siteNav.classList.add('nav-open');
+ mainHeader.classList.add('nav-open');
+ } else {
+ siteNav.classList.remove('nav-open');
+ mainHeader.classList.remove('nav-open');
+ }
+ });
+}
+// Site search
+
+function initSearch() {
+ var request = new XMLHttpRequest();
+ request.open('GET', '/ostree/assets/js/search-data.json', true);
+
+ request.onload = function(){
+ if (request.status >= 200 && request.status < 400) {
+ var docs = JSON.parse(request.responseText);
+
+ lunr.tokenizer.separator = /[\s\-/]+/
+
+ var index = lunr(function(){
+ this.ref('id');
+ this.field('title', { boost: 200 });
+ this.field('content', { boost: 2 });
+ this.field('relUrl');
+ this.metadataWhitelist = ['position']
+
+ for (var i in docs) {
+
+ this.add({
+ id: i,
+ title: docs[i].title,
+ content: docs[i].content,
+ relUrl: docs[i].relUrl
+ });
+ }
+ });
+
+ searchLoaded(index, docs);
+ } else {
+ console.log('Error loading ajax request. Request status:' + request.status);
+ }
+ };
+
+ request.onerror = function(){
+ console.log('There was a connection error');
+ };
+
+ request.send();
+}
+
+function searchLoaded(index, docs) {
+ var index = index;
+ var docs = docs;
+ var searchInput = document.getElementById('search-input');
+ var searchResults = document.getElementById('search-results');
+ var mainHeader = document.getElementById('main-header');
+ var currentInput;
+ var currentSearchIndex = 0;
+
+ function showSearch() {
+ document.documentElement.classList.add('search-active');
+ }
+
+ function hideSearch() {
+ document.documentElement.classList.remove('search-active');
+ }
+
+ function update() {
+ currentSearchIndex++;
+
+ var input = searchInput.value;
+ if (input === '') {
+ hideSearch();
+ } else {
+ showSearch();
+ // scroll search input into view, workaround for iOS Safari
+ window.scroll(0, -1);
+ setTimeout(function(){ window.scroll(0, 0); }, 0);
+ }
+ if (input === currentInput) {
+ return;
+ }
+ currentInput = input;
+ searchResults.innerHTML = '';
+ if (input === '') {
+ return;
+ }
+
+ var results = index.query(function (query) {
+ var tokens = lunr.tokenizer(input)
+ query.term(tokens, {
+ boost: 10
+ });
+ query.term(tokens, {
+ wildcard: lunr.Query.wildcard.TRAILING
+ });
+ });
+
+ if ((results.length == 0) && (input.length > 2)) {
+ var tokens = lunr.tokenizer(input).filter(function(token, i) {
+ return token.str.length < 20;
+ })
+ if (tokens.length > 0) {
+ results = index.query(function (query) {
+ query.term(tokens, {
+ editDistance: Math.round(Math.sqrt(input.length / 2 - 1))
+ });
+ });
+ }
+ }
+
+ if (results.length == 0) {
+ var noResultsDiv = document.createElement('div');
+ noResultsDiv.classList.add('search-no-result');
+ noResultsDiv.innerText = 'No results found';
+ searchResults.appendChild(noResultsDiv);
+
+ } else {
+ var resultsList = document.createElement('ul');
+ resultsList.classList.add('search-results-list');
+ searchResults.appendChild(resultsList);
+
+ addResults(resultsList, results, 0, 10, 100, currentSearchIndex);
+ }
+
+ function addResults(resultsList, results, start, batchSize, batchMillis, searchIndex) {
+ if (searchIndex != currentSearchIndex) {
+ return;
+ }
+ for (var i = start; i < (start + batchSize); i++) {
+ if (i == results.length) {
+ return;
+ }
+ addResult(resultsList, results[i]);
+ }
+ setTimeout(function() {
+ addResults(resultsList, results, start + batchSize, batchSize, batchMillis, searchIndex);
+ }, batchMillis);
+ }
+
+ function addResult(resultsList, result) {
+ var doc = docs[result.ref];
+
+ var resultsListItem = document.createElement('li');
+ resultsListItem.classList.add('search-results-list-item');
+ resultsList.appendChild(resultsListItem);
+
+ var resultLink = document.createElement('a');
+ resultLink.classList.add('search-result');
+ resultLink.setAttribute('href', doc.url);
+ resultsListItem.appendChild(resultLink);
+
+ var resultTitle = document.createElement('div');
+ resultTitle.classList.add('search-result-title');
+ resultLink.appendChild(resultTitle);
+
+ // note: the SVG svg-doc is only loaded as a Jekyll include if site.search_enabled is true; see _includes/icons/icons.html
+ var resultDoc = document.createElement('div');
+ resultDoc.classList.add('search-result-doc');
+ resultDoc.innerHTML = '<svg viewBox="0 0 24 24" class="search-result-icon"><use xlink:href="#svg-doc"></use></svg>';
+ resultTitle.appendChild(resultDoc);
+
+ var resultDocTitle = document.createElement('div');
+ resultDocTitle.classList.add('search-result-doc-title');
+ resultDocTitle.innerHTML = doc.doc;
+ resultDoc.appendChild(resultDocTitle);
+ var resultDocOrSection = resultDocTitle;
+
+ if (doc.doc != doc.title) {
+ resultDoc.classList.add('search-result-doc-parent');
+ var resultSection = document.createElement('div');
+ resultSection.classList.add('search-result-section');
+ resultSection.innerHTML = doc.title;
+ resultTitle.appendChild(resultSection);
+ resultDocOrSection = resultSection;
+ }
+
+ var metadata = result.matchData.metadata;
+ var titlePositions = [];
+ var contentPositions = [];
+ for (var j in metadata) {
+ var meta = metadata[j];
+ if (meta.title) {
+ var positions = meta.title.position;
+ for (var k in positions) {
+ titlePositions.push(positions[k]);
+ }
+ }
+ if (meta.content) {
+ var positions = meta.content.position;
+ for (var k in positions) {
+ var position = positions[k];
+ var previewStart = position[0];
+ var previewEnd = position[0] + position[1];
+ var ellipsesBefore = true;
+ var ellipsesAfter = true;
+ for (var k = 0; k < 5; k++) {
+ var nextSpace = doc.content.lastIndexOf(' ', previewStart - 2);
+ var nextDot = doc.content.lastIndexOf('. ', previewStart - 2);
+ if ((nextDot >= 0) && (nextDot > nextSpace)) {
+ previewStart = nextDot + 1;
+ ellipsesBefore = false;
+ break;
+ }
+ if (nextSpace < 0) {
+ previewStart = 0;
+ ellipsesBefore = false;
+ break;
+ }
+ previewStart = nextSpace + 1;
+ }
+ for (var k = 0; k < 10; k++) {
+ var nextSpace = doc.content.indexOf(' ', previewEnd + 1);
+ var nextDot = doc.content.indexOf('. ', previewEnd + 1);
+ if ((nextDot >= 0) && (nextDot < nextSpace)) {
+ previewEnd = nextDot;
+ ellipsesAfter = false;
+ break;
+ }
+ if (nextSpace < 0) {
+ previewEnd = doc.content.length;
+ ellipsesAfter = false;
+ break;
+ }
+ previewEnd = nextSpace;
+ }
+ contentPositions.push({
+ highlight: position,
+ previewStart: previewStart, previewEnd: previewEnd,
+ ellipsesBefore: ellipsesBefore, ellipsesAfter: ellipsesAfter
+ });
+ }
+ }
+ }
+
+ if (titlePositions.length > 0) {
+ titlePositions.sort(function(p1, p2){ return p1[0] - p2[0] });
+ resultDocOrSection.innerHTML = '';
+ addHighlightedText(resultDocOrSection, doc.title, 0, doc.title.length, titlePositions);
+ }
+
+ if (contentPositions.length > 0) {
+ contentPositions.sort(function(p1, p2){ return p1.highlight[0] - p2.highlight[0] });
+ var contentPosition = contentPositions[0];
+ var previewPosition = {
+ highlight: [contentPosition.highlight],
+ previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd,
+ ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter
+ };
+ var previewPositions = [previewPosition];
+ for (var j = 1; j < contentPositions.length; j++) {
+ contentPosition = contentPositions[j];
+ if (previewPosition.previewEnd < contentPosition.previewStart) {
+ previewPosition = {
+ highlight: [contentPosition.highlight],
+ previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd,
+ ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter
+ }
+ previewPositions.push(previewPosition);
+ } else {
+ previewPosition.highlight.push(contentPosition.highlight);
+ previewPosition.previewEnd = contentPosition.previewEnd;
+ previewPosition.ellipsesAfter = contentPosition.ellipsesAfter;
+ }
+ }
+
+ var resultPreviews = document.createElement('div');
+ resultPreviews.classList.add('search-result-previews');
+ resultLink.appendChild(resultPreviews);
+
+ var content = doc.content;
+ for (var j = 0; j < Math.min(previewPositions.length, 3); j++) {
+ var position = previewPositions[j];
+
+ var resultPreview = document.createElement('div');
+ resultPreview.classList.add('search-result-preview');
+ resultPreviews.appendChild(resultPreview);
+
+ if (position.ellipsesBefore) {
+ resultPreview.appendChild(document.createTextNode('... '));
+ }
+ addHighlightedText(resultPreview, content, position.previewStart, position.previewEnd, position.highlight);
+ if (position.ellipsesAfter) {
+ resultPreview.appendChild(document.createTextNode(' ...'));
+ }
+ }
+ }
+ var resultRelUrl = document.createElement('span');
+ resultRelUrl.classList.add('search-result-rel-url');
+ resultRelUrl.innerText = doc.relUrl;
+ resultTitle.appendChild(resultRelUrl);
+ }
+
+ function addHighlightedText(parent, text, start, end, positions) {
+ var index = start;
+ for (var i in positions) {
+ var position = positions[i];
+ var span = document.createElement('span');
+ span.innerHTML = text.substring(index, position[0]);
+ parent.appendChild(span);
+ index = position[0] + position[1];
+ var highlight = document.createElement('span');
+ highlight.classList.add('search-result-highlight');
+ highlight.innerHTML = text.substring(position[0], index);
+ parent.appendChild(highlight);
+ }
+ var span = document.createElement('span');
+ span.innerHTML = text.substring(index, end);
+ parent.appendChild(span);
+ }
+ }
+
+ jtd.addEvent(searchInput, 'focus', function(){
+ setTimeout(update, 0);
+ });
+
+ jtd.addEvent(searchInput, 'keyup', function(e){
+ switch (e.keyCode) {
+ case 27: // When esc key is pressed, hide the results and clear the field
+ searchInput.value = '';
+ break;
+ case 38: // arrow up
+ case 40: // arrow down
+ case 13: // enter
+ e.preventDefault();
+ return;
+ }
+ update();
+ });
+
+ jtd.addEvent(searchInput, 'keydown', function(e){
+ switch (e.keyCode) {
+ case 38: // arrow up
+ e.preventDefault();
+ var active = document.querySelector('.search-result.active');
+ if (active) {
+ active.classList.remove('active');
+ if (active.parentElement.previousSibling) {
+ var previous = active.parentElement.previousSibling.querySelector('.search-result');
+ previous.classList.add('active');
+ }
+ }
+ return;
+ case 40: // arrow down
+ e.preventDefault();
+ var active = document.querySelector('.search-result.active');
+ if (active) {
+ if (active.parentElement.nextSibling) {
+ var next = active.parentElement.nextSibling.querySelector('.search-result');
+ active.classList.remove('active');
+ next.classList.add('active');
+ }
+ } else {
+ var next = document.querySelector('.search-result');
+ if (next) {
+ next.classList.add('active');
+ }
+ }
+ return;
+ case 13: // enter
+ e.preventDefault();
+ var active = document.querySelector('.search-result.active');
+ if (active) {
+ active.click();
+ } else {
+ var first = document.querySelector('.search-result');
+ if (first) {
+ first.click();
+ }
+ }
+ return;
+ }
+ });
+
+ jtd.addEvent(document, 'click', function(e){
+ if (e.target != searchInput) {
+ hideSearch();
+ }
+ });
+}
+
+// Switch theme
+
+jtd.getTheme = function() {
+ var cssFileHref = document.querySelector('[rel="stylesheet"]').getAttribute('href');
+ return cssFileHref.substring(cssFileHref.lastIndexOf('-') + 1, cssFileHref.length - 4);
+}
+
+jtd.setTheme = function(theme) {
+ var cssFile = document.querySelector('[rel="stylesheet"]');
+ cssFile.setAttribute('href', '/ostree/assets/css/just-the-docs-' + theme + '.css');
+}
+
+// Scroll site-nav to ensure the link to the current page is visible
+
+function scrollNav() {
+ const href = document.location.pathname;
+ const siteNav = document.getElementById('site-nav');
+ const targetLink = siteNav.querySelector('a[href="' + href + '"], a[href="' + href + '/"]');
+ if(targetLink){
+ const rect = targetLink.getBoundingClientRect();
+ siteNav.scrollBy(0, rect.top - 3*rect.height);
+ }
+}
+
+// Document ready
+
+jtd.onReady(function(){
+ initNav();
+ initSearch();
+ scrollNav();
+});
+
+// Copy button on code
+
+jtd.onReady(function(){
+
+ var codeBlocks = document.querySelectorAll('div.highlighter-rouge, div.listingblock > div.content, figure.highlight');
+
+ // note: the SVG svg-copied and svg-copy is only loaded as a Jekyll include if site.enable_copy_code_button is true; see _includes/icons/icons.html
+ var svgCopied = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copied"></use></svg>';
+ var svgCopy = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copy"></use></svg>';
+
+ codeBlocks.forEach(codeBlock => {
+ var copyButton = document.createElement('button');
+ var timeout = null;
+ copyButton.type = 'button';
+ copyButton.ariaLabel = 'Copy code to clipboard';
+ copyButton.innerHTML = svgCopy;
+ codeBlock.append(copyButton);
+
+ copyButton.addEventListener('click', function () {
+ if(timeout === null) {
+ var code = (codeBlock.querySelector('pre:not(.lineno, .highlight)') || codeBlock.querySelector('code')).innerText;
+ window.navigator.clipboard.writeText(code);
+
+ copyButton.innerHTML = svgCopied;
+
+ var timeoutSetting = 4000;
+
+ timeout = setTimeout(function () {
+ copyButton.innerHTML = svgCopy;
+ timeout = null;
+ }, timeoutSetting);
+ }
+ });
+ });
+
+});
+
+})(window.jtd = window.jtd || {});
+
+
diff --git a/assets/js/search-data.json b/assets/js/search-data.json
new file mode 100644
index 00000000..1d8ca663
--- /dev/null
+++ b/assets/js/search-data.json
@@ -0,0 +1,793 @@
+{"0": {
+ "doc": "Contributing",
+ "title": "Contributing",
+ "content": ". | Submitting patches | Commit message style | Running the test suite | Coding style | Contributing Tutorial | Release process | . ",
+ "url": "/ostree/CONTRIBUTING/",
+
+ "relUrl": "/CONTRIBUTING/"
+ },"1": {
+ "doc": "Contributing",
+ "title": "Submitting patches",
+ "content": "A majority of current maintainers prefer the GitHub pull request model, and this motivated moving the primary git repository to https://github.com/ostreedev/ostree. However, we do not use the “Merge pull request” button, because we do not like merge commits for one-patch pull requests, among other reasons. See this issue for more information. Instead, we use an instance of Homu, currently known as cgwalters-bot. As a review proceeds, the preferred method is to push fixup! commits. Any commits committed with the --fixup option will have have the word fixup! in its commit title. This is to indicate that this particular commit will be squashed with the commit that was specified in this command, git commit --fixup &lt;commit ref or hash&gt;. Homu knows how to use --autosquash when performing the final merge. See the Git documentation for more information. Alternative methods if you don’t like GitHub (also fully supported): . | Send mail to ostree-list@gnome.org, with the patch attached | Attach them to https://bugzilla.gnome.org/ | . It is likely however once a patch is ready to apply a maintainer will push it to a GitHub PR, and merge via Homu. ",
+ "url": "/ostree/CONTRIBUTING/#submitting-patches",
+
+ "relUrl": "/CONTRIBUTING/#submitting-patches"
+ },"2": {
+ "doc": "Contributing",
+ "title": "Commit message style",
+ "content": "Please look at git log and match the commit log style, which is very similar to the Linux kernel. You may use Signed-off-by, but we’re not requiring it. General Commit Message Guidelines: . | Title . | Specify the context or category of the changes e.g. lib for library changes, docs for document changes, bin/&lt;command-name&gt; for command changes, etc. | Begin the title with the first letter of the first word capitalized. | Aim for less than 50 characters, otherwise 72 characters max. | Do not end the title with a period. | Use an imperative tone. | . | Body . | Separate the body with a blank line after the title. | Begin a paragraph with the first letter of the first word capitalized. | Each paragraph should be formatted within 72 characters. | Content should be about what was changed and why this change was made. | If your commit fixes an issue, the commit message should end with Closes: #&lt;number&gt;. | . | . Commit Message example: . &lt;context&gt;: Less than 50 characters for subject title A paragraph of the body should be within 72 characters. This paragraph is also less than 72 characters. For more information see How to Write a Git Commit Message . Editing a Committed Message: . To edit the message from the most recent commit run git commit --amend. To change older commits on the branch use git rebase -i. For a successful rebase have the branch track upstream main. Once the changes have been made and saved, run git push --force origin &lt;branch-name&gt;. ",
+ "url": "/ostree/CONTRIBUTING/#commit-message-style",
+
+ "relUrl": "/CONTRIBUTING/#commit-message-style"
+ },"3": {
+ "doc": "Contributing",
+ "title": "Running the test suite",
+ "content": "OSTree uses both make check and supports the Installed Tests model as well (if --enable-installed-tests is provided). ",
+ "url": "/ostree/CONTRIBUTING/#running-the-test-suite",
+
+ "relUrl": "/CONTRIBUTING/#running-the-test-suite"
+ },"4": {
+ "doc": "Contributing",
+ "title": "Coding style",
+ "content": "Indentation is GNU. Files should start with the appropriate mode lines. Use GCC __attribute__((cleanup)) wherever possible. If interacting with a third party library, try defining local cleanup macros. Use GError and GCancellable where appropriate. Prefer returning gboolean to signal success/failure, and have output values as parameters. Prefer linear control flow inside functions (aside from standard loops). In other words, avoid “early exits” or use of goto besides goto out;. This is an example of an “early exit”: . static gboolean myfunc (...) { gboolean ret = FALSE; /* some code */ /* some more code */ if (condition) return FALSE; /* some more code */ ret = TRUE; out: return ret; } . If you must shortcut, use: . if (condition) { ret = TRUE; goto out; } . A consequence of this restriction is that you are encouraged to avoid deep nesting of loops or conditionals. Create internal static helper functions, particularly inside loops. For example, rather than: . while (condition) { /* some code */ if (condition) { for (i = 0; i &lt; somevalue; i++) { if (condition) { /* deeply nested code */ } /* more nested code */ } } } . Instead do this: . static gboolean helperfunc (..., GError **error) { if (condition) { /* deeply nested code */ } /* more nested code */ return ret; } while (condition) { /* some code */ if (!condition) continue; for (i = 0; i &lt; somevalue; i++) { if (!helperfunc (..., i, error)) goto out; } } . ",
+ "url": "/ostree/CONTRIBUTING/#coding-style",
+
+ "relUrl": "/CONTRIBUTING/#coding-style"
+ },"5": {
+ "doc": "Contributing",
+ "title": "Contributing Tutorial",
+ "content": "For a detailed walk-through on building, modifying, and testing, see this tutorial on how to start contributing to OSTree. ",
+ "url": "/ostree/CONTRIBUTING/#contributing-tutorial",
+
+ "relUrl": "/CONTRIBUTING/#contributing-tutorial"
+ },"6": {
+ "doc": "Contributing",
+ "title": "Release process",
+ "content": "Releases can be performed by creating a new release ticket and following the steps in the checklist there. ",
+ "url": "/ostree/CONTRIBUTING/#release-process",
+
+ "relUrl": "/CONTRIBUTING/#release-process"
+ },"7": {
+ "doc": "Historical OSTree README",
+ "title": "OSTree",
+ "content": " ",
+ "url": "/ostree/README-historical/#ostree",
+
+ "relUrl": "/README-historical/#ostree"
+ },"8": {
+ "doc": "Historical OSTree README",
+ "title": "Problem statement",
+ "content": "Hacking on the core operating system is painful - this includes most of GNOME from upower and NetworkManager up to gnome-shell. I want a system that matches these requirements: . | Does not disturb your existing OS | Is not terribly slow to use | Shares your $HOME - you have your data | Allows easy rollback | Ideally allows access to existing apps | . ",
+ "url": "/ostree/README-historical/#problem-statement",
+
+ "relUrl": "/README-historical/#problem-statement"
+ },"9": {
+ "doc": "Historical OSTree README",
+ "title": "Comparison with existing tools",
+ "content": ". | Virtualization . Fails on points 2) and 3). Actually qemu-kvm can be pretty fast, but in a lot of cases there is no substitute for actually booting on bare metal; GNOME 3 really needs some hardware GPU acceleration. | Rebuilding distribution packages . Fails on points 1) and 4). Is also just very annoying: dpkg/rpm both want tarballs, which you don’t have since you’re working from git. The suggested “mock/pbuilder” type chroot builds are slow. And even with non-chroot builds there is lots of pointless build wrapping going on. Both dpkg and rpm also are poor at helping you revert back to the original system. All of this can be scripted to be less bad of course - and I have worked on such scripts. But fundamentally you’re still fighting the system, and if you’re hacking on a lowlevel library like say glib, you can easily get yourself to the point where you need a recovery CD - at that point your edit/compile/debug cycle is just too long. | “sudo make install” . Now your system is in an undefined state. You can use e.g. rpm -qV to try to find out what you overwrote, but neither dpkg nor rpm will help clean up any files left over that aren’t shipped by the old package. This is most realistic option for people hacking on system components currently, but ostree will be better. | LXC / containers . Fails on 3), and 4) is questionable. Also shares the annoying part of rebuilding distribution packages. LXC is focused on running multiple server systems at the same time, which isn’t what we want (at least, not right now), and honestly even trying to support that for a graphical desktop would be a lot of tricky work, for example getting two GDM instances not to fight over VT allocations. But some bits of the technology may make sense to use. | jhbuild + distribution packages . The state of the art in GNOME - but can only build non-root things - this means you can’t build NetworkManager, and thus are permanently stuck on whatever the distro provides. | . ",
+ "url": "/ostree/README-historical/#comparison-with-existing-tools",
+
+ "relUrl": "/README-historical/#comparison-with-existing-tools"
+ },"10": {
+ "doc": "Historical OSTree README",
+ "title": "Who is ostree for?",
+ "content": "First - operating system developers and testers. I specifically keep a few people in mind - Dan Williams and Eric Anholt, as well as myself obviously. For Eric Anholt, a key use case for him is being able to try out the latest gnome-shell, and combine it with his work on Mesa, and see how it works/performs - while retaining the ability to roll back if one or both breaks. The rollback concept is absolutely key for shipping anything to enthusiasts or knowledable testers. With a system like this, a tester can easily perform a local rollback - something just not well supported by dpkg/rpm. (What about Conary? See below.) . Also, distributing operating system trees (instead of packages) gives us a sane place to perform automated QA before we ship it to testers. We should never be wasting these people’s time. Even better, this system would allow testers to bisect across operating system builds, and do so very efficiently. ",
+ "url": "/ostree/README-historical/#who-is-ostree-for",
+
+ "relUrl": "/README-historical/#who-is-ostree-for"
+ },"11": {
+ "doc": "Historical OSTree README",
+ "title": "The core idea - chroots",
+ "content": "chroots are the original lightweight “virtualization”. Let’s use them. So basically, you install a mainstream distribution (say Debian). It has a root filesystem like this: . /usr /etc /home ... Now, what we can do is have a system that installs chroots as a subdirectory of the root, like: . /ostree/gnomeos-3.0-opt-393a4555/{usr,etc,sbin,...} /ostree/gnomeos-3.2-opt-7e9788a2/{usr,etc,sbin,...} . These live in the same root filesystem as your regular distribution (Note though, the root partition should be reasonably sized, or hopefully you’ve used just one big partition). You should be able to boot into one of these roots. Since ostree lives inside a distro created partition, a tricky part here is that we need to know how to interact with the installed distribution’s grub. This is an annoying but tractable problem. First, we install a kernel+initramfs alongside the distribution’s. Then, we have a “trampoline” ostree-init binary which is statically linked, and boot the kernel with init=/ostree/ostree-init. This then takes care of chrooting and running the init binary. An important note here is that we bind mount the real /home. This means you have your data. This also implies we share uid/gid, so /etc/passwd will have to be in sync. Probably what we’ll do is have a script to pull the data from the “host” OS. I’ve decided for now to move /var into /ostree to avoid sharing it with the “host” distribution, because in practice we’re likely to hit incompatibilities. Do note however /etc lives inside the OSTree; it’s presently versioned and readonly like everything else. On a pure OSTree system, the filesystem layout will look like this: . |-- boot |-- home |-- ostree |-- var |-- current -&gt; gnomeos-3.2-opt-7e9788a2 |-- gnomeos-3.0-opt-393a4555 | |-- etc | |-- lib | |-- mnt | |-- proc | |-- run | |-- sbin | |-- srv | |-- sys | `-- usr | `-- gnomeos-3.2-opt-7e9788a2 |-- etc |-- lib |-- mnt |-- proc |-- run |-- sbin |-- srv |-- sys | `-- usr |-- root . ",
+ "url": "/ostree/README-historical/#the-core-idea---chroots",
+
+ "relUrl": "/README-historical/#the-core-idea---chroots"
+ },"12": {
+ "doc": "Historical OSTree README",
+ "title": "Making this efficient",
+ "content": "One of the first things you’ll probably ask is “but won’t that use a lot of disk space”? Indeed, it will, if you just unpack a set of RPMs or .debs into each root. Besides chroots, there’s another old Unix idea we can take advantage of - hard links. These allow sharing the underlying data of a file, with the tradeoff that changing any one file will change all names that point to it. This mutability means that we have to either: . | Make sure everything touching the operating system breaks hard links This is probably tractable over a long period of time, but if anything has a bug, then it corrupts the file effectively. | Make the core OS read-only, with a well-defined mechanism for mutating under the control of ostree. | . I chose 2. ",
+ "url": "/ostree/README-historical/#making-this-efficient",
+
+ "relUrl": "/README-historical/#making-this-efficient"
+ },"13": {
+ "doc": "Historical OSTree README",
+ "title": "A userspace content-addressed versioning filesystem",
+ "content": "At its very core, that’s what ostree is. Just like git. If you understand git, you know it’s not like other revision control systems. git is effectively a specialized, userspace filesystem, and that is a very powerful idea. At the core of git is the idea of “content-addressed objects”. For background on this, see http://book.git-scm.com/7_how_git_stores_objects.html . Why not just use git? Basically because git is designed mainly for source trees - it goes to effort to be sure it’s compressing text for example, under the assumption that you have a lot of text. Its handling of binaries is very generic and unoptimized. In contrast, ostree is explicitly designed for binaries, and in particular one type of binary - ELF executables (or it will be once we start using bsdiff). Another big difference versus git is that ostree uses hard links between “checkouts” and the repository. This means each checkout uses almost no additional space, and is extremely fast to check out. We can do this because again each checkout is designed to be read-only. So we mentioned above there are: . /ostree/gnomeos-3.2-opt-7e9788a2 /ostree/gnomeos-3.2-opt-393a4555 . There is also a “repository” that looks like this: . /ostree/repo/objects/17/a95e8ca0ba655b09cb68d7288342588e867ee0.file /ostree/repo/objects/17/68625e7ff5a8db77904c77489dc6f07d4afdba.meta /ostree/repo/objects/17/cc01589dd8540d85c0f93f52b708500dbaa5a9.file /ostree/repo/objects/30 /ostree/repo/objects/30/6359b3ca7684358a3988afd005013f13c0c533.meta /ostree/repo/objects/30/8f3c03010cedd930b1db756ce659c064f0cd7f.meta /ostree/repo/objects/30/8cf0fd8e63dfff6a5f00ba5a48f3b92fb52de7.file /ostree/repo/objects/30/6cad7f027d69a46bb376044434bbf28d63e88d.file . Each object is either metadata (like a commit or tree), or a hard link to a regular file. Note that also unlike git, the checksum here includes metadata such as uid, gid, permissions, and extended attributes. (It does not include file access times, since those shouldn’t matter for the OS) . This is another important component to allowing the hardlinks. We wouldn’t want say all empty files to be shared necessarily. (Though maybe this is wrong, and since the OS is readonly, we can make all files owned by root without loss of generality). However this tradeoff means that we probably need a second index by content, so we don’t have to redownload the entire OS if permissions change =) . ",
+ "url": "/ostree/README-historical/#a-userspace-content-addressed-versioning-filesystem",
+
+ "relUrl": "/README-historical/#a-userspace-content-addressed-versioning-filesystem"
+ },"14": {
+ "doc": "Historical OSTree README",
+ "title": "Atomic upgrades, rollback",
+ "content": "OSTree is designed to atomically swap operating systems - such that during an upgrade and reboot process, you either get the full new system, or the old one. There is no “Please don’t turn off your computer”. We do this by simply using a symbolic link like: . /ostree/current -&gt; /ostree/gnomeos-3.4-opt-e3b0c4429 . Where gnomeos-e3b0c4429 has the full regular filesystem tree with usr/ etc/ directories as above. To upgrade or rollback (there is no difference internally), we simply check out a new tree into gnomeos-b90ae4763 for example, then swap the “current” symbolic link, then remove the old tree. But does this mean you have to reboot for OS upgrades? Very likely, yes - and this is no different from RPM/deb or whatever. They just typically lie to you about it =) . A typical model with RPM/deb is to unpack the new files, then use some IPC mechanism (SIGHUP, a control binary like /usr/sbin/apachectl) to signal the running process to reload. There are multiple problems with this - one is that in the new state, daemon A may depend on the updated configuration in daemon B. This may not be particularly common in default configurations, but it’s highly likely that that some deployments will have e.g. apache talking to a local MySQL instance. So you really want to do is only apply the updated configuration when all the files are in place; not after each RPM or .deb is installed. What’s even harder is the massive set of race conditions that are possible while RPM/deb are in the process of upgrading. Cron jobs are very likely to hit this. If we want the ability to apply updates to a live system, we could first pause execution of non-upgrade userspace tasks. This could be done via SIGSTOP for example. Then, we can swap around the filesystem tree, and then finally attempt to apply updates via SIGHUP, and if possible, restart processes. ",
+ "url": "/ostree/README-historical/#atomic-upgrades-rollback",
+
+ "relUrl": "/README-historical/#atomic-upgrades-rollback"
+ },"15": {
+ "doc": "Historical OSTree README",
+ "title": "Configuration Management",
+ "content": "By now if you’ve thought about this problem domain before, you’re wondering about configuration management. In other words, if the OS is read only, how do I edit /etc/sudoers? . Well, have you ever been a system administrator on a zypper/yum system, done an RPM update, which then drops .rpmnew files in your /etc/ that you have to go and hunt for with “find” or something, and said to yourself, “Wow, this system is awesome!!!” ? Right, that’s what I thought. Configuration (and systems) management is a tricky problem, and I certainly don’t have a magic bullet. However, one large conceptual improvement I think is defaulting to “rebase” versus “merge”. This means that we won’t permit direct modification of /etc - instead, you HAVE to write a script which accomplishes your goals. To generate a tree, we check out a new copy, then run your script on top. If the script fails, we can roll back the update, or drop to a shell if interactive. However, we also need to consider cases where the administrator modifies state indirectly by a program. Think “adduser” for example. Possible approaches: . | Patch all of these programs to know how to write to the writable location, instead of the R/O bind mount overlay. | Move the data to /var | . ",
+ "url": "/ostree/README-historical/#configuration-management",
+
+ "relUrl": "/README-historical/#configuration-management"
+ },"16": {
+ "doc": "Historical OSTree README",
+ "title": "What about “packages”?",
+ "content": "There are several complex and separate issues hiding in this seemingly simple question. I think OSTree always makes sense to use as a core operating system builder and updater. By “core” here I mean the parts that aren’t removable. Debian has Essential: yes, any other distribution has this too implicitly in the set of dependencies for their updater tool. Now, let me just say I will absolutely support using something like apt/yum/zypper (and consequently deb/rpm) on top of OSTree. This isn’t trivial, but there aren’t any conceptual issues. Concretely for example, RPM or .deb might make sense as a delivery vehicle for third party OS extensions. A canoncial example is the NVidia graphics driver. If one is using OSTree to build an operating system, then there has to be some API for applications. And that demands its own targeted solution - something like an evolved glick (zeroinstall is also similar). Current package systems are totally broken for application deployment though; for example, they will remove files away from under running applications on update. And we clearly need the ability to install and upgrade applications without rebooting the OS. ",
+ "url": "/ostree/README-historical/#what-about-packages",
+
+ "relUrl": "/README-historical/#what-about-packages"
+ },"17": {
+ "doc": "Historical OSTree README",
+ "title": "Details of RPM installation",
+ "content": "We should be able to install LSB rpms. This implies providing “rpm”. The tricky part here is since the OS itself is not assembled via RPMs, we need to fake up a database of “provides” as if we were. Even harder would be maintaining binary compatibilty with any arbitrary %post scripts that may be run. ",
+ "url": "/ostree/README-historical/#details-of-rpm-installation",
+
+ "relUrl": "/README-historical/#details-of-rpm-installation"
+ },"18": {
+ "doc": "Historical OSTree README",
+ "title": "What about BTRFS? Doesn’t it solve everything?",
+ "content": "In short, BTRFS is not a magic bullet, but yes - it helps significantly. The obvious thing to do is layer BTRFS under dpkg/rpm, and have a separate subvolume for /home so rollbacks don’t lose your data. See e.g. http://fedoraproject.org/wiki/Features/SystemRollbackWithBtrfs . As a general rule an issue with the BTRFS is that it can’t roll back just changes to things installed by RPM (i.e. what’s in rpm -qal). For example, it’s possible to e.g. run yum update, then edit something in /etc, reboot and notice things are broken, then roll back and have silently lost your changes to /etc. Another example is adding a new binary in /usr/local. You could say, “OK, we’ll use subvolumes for those!”. But then what about /var (and your VM images that live in /var/lib/libvirt ?) . Finally, probably the biggest disadvantage of the rpm/dpkg + BTRFS approach is it doesn’t solve the race conditions that happen when unpacking packages into the live system. This problem is really important to me. Note though ostree can definitely take advantage of BTRFS features! In particular, we could use “reflink” http://lwn.net/Articles/331808/ instead of hard links, and avoid having the object store corrupted if somehow the files are modified directly. ",
+ "url": "/ostree/README-historical/#what-about-btrfs--doesnt-it-solve-everything",
+
+ "relUrl": "/README-historical/#what-about-btrfs--doesnt-it-solve-everything"
+ },"19": {
+ "doc": "Historical OSTree README",
+ "title": "Other systems",
+ "content": "I’ve spent a long time thinking about this problem, and here are some of the other possible solutions out there I looked at, and why I didn’t use them: . | Git: http://git-scm.com/ . Really awesome, and the core inspiration here. But like I mentioned above, not at all designed for binaries - we can make different tradeoffs. | bup: https://github.com/apenwarr/bup . bup is cool. But it shares the negative tradeoffs with git, though it does add positives of its own. It also inspired me. | git-annex: http://git-annex.branchable.com/git-annex/ . Looks interesting; I think this will share the same negative tradeoffs with git as far as using it for an OS goes. | schroot: http://www.debian-administration.org/articles/566 . Like LXC/containers, but just using a chroot. | NixOS: http://nixos.org/ . The NixOS people have a lot of really good ideas, and they’ve definitely thought about the problem space. However, their approach of checksumming all inputs to a package is pretty wacky. I don’t see the point, and moreover it uses gobs of disk space. | Conary: http://wiki.rpath.com/wiki/Conary:Updates_and_Rollbacks . If rpm/dpkg are like CVS, Conary is closer to Subversion. It’s not bad, but ostree is better than it for the exact same reasons git is better than Subversion. | BTRFS: http://en.wikipedia.org/wiki/Btrfs . See above. | Solaris IPS: http://hub.opensolaris.org/bin/view/Project+pkg/ . Rollback is ZFS level, so I think this shares the same tradeoffs as BTRFS+RPM/deb. They probably have some vertical integration though which definitely helps. Obviously we can’t use ZFS. | Jhbuild: https://live.gnome.org/Jhbuild . What we’ve been using in GNOME, and has the essential property of allowing you to “fall back” to a stable system. But ostree will blow it out of the water. | . ",
+ "url": "/ostree/README-historical/#other-systems",
+
+ "relUrl": "/README-historical/#other-systems"
+ },"20": {
+ "doc": "Historical OSTree README",
+ "title": "Development",
+ "content": ". | OSTree wiki page: https://live.gnome.org/OSTree . | ostbuild wiki page: https://live.gnome.org/OSTree/Ostbuild . | Git repository: http://git.gnome.org/browse/ostree/ . | Deploying OSTree in the Gnome servers: https://bugzilla.gnome.org/show_bug.cgi?id=669772 . | . ",
+ "url": "/ostree/README-historical/#development",
+
+ "relUrl": "/README-historical/#development"
+ },"21": {
+ "doc": "Historical OSTree README",
+ "title": "Historical OSTree README",
+ "content": "This file is outdated, but some of the text here is still useful for historical context. I’m preserving it (explicitly still in the tree) for posterity. ",
+ "url": "/ostree/README-historical/",
+
+ "relUrl": "/README-historical/"
+ },"22": {
+ "doc": "Adapting existing mainstream distributions",
+ "title": "Adapting existing mainstream distributions",
+ "content": ". | System layout | Booting and initramfs technology | /usr/lib/passwd | Adapting existing package managers . | Licensing for this document: | . | . ",
+ "url": "/ostree/adapting-existing/",
+
+ "relUrl": "/adapting-existing/"
+ },"23": {
+ "doc": "Adapting existing mainstream distributions",
+ "title": "System layout",
+ "content": "First, OSTree encourages systems to implement UsrMove This is simply to avoid the need for more bind mounts. By default OSTree’s dracut hook creates a read-only bind mount over /usr; you can of course generate individual bind-mounts for /bin, all the /lib variants, etc. So it is not intended to be a hard requirement. Remember, because by default the system is booted into a chroot equivalent, there has to be some way to refer to the actual physical root filesystem. Therefore, your operating system tree should contain an empty /sysroot directory; at boot time, OSTree will make this a bind mount to the physical / root directory. There is precedent for this name in the initramfs context. You should furthermore make a toplevel symbolic link /ostree which points to /sysroot/ostree, so that the OSTree tool at runtime can consistently find the system data regardless of whether it’s operating on a physical root or inside a deployment. Because OSTree only preserves /var across upgrades (each deployment’s chroot directory will be garbage collected eventually), you will need to choose how to handle other toplevel writable directories specified by the Filesystem Hierarchy Standard. Your operating system may of course choose not to support some of these such as /usr/local, but following is the recommended set: . | /home → /var/home | /opt → /var/opt | /srv → /var/srv | /root → /var/roothome | /usr/local → /var/usrlocal | /mnt → /var/mnt | /tmp → /sysroot/tmp | . Furthermore, since /var is empty by default, your operating system will need to dynamically create the targets of these at boot. A good way to do this is using systemd-tmpfiles, if your OS uses systemd. For example: . d /var/log/journal 0755 root root - L /var/home - - - - ../sysroot/home d /var/opt 0755 root root - d /var/srv 0755 root root - d /var/roothome 0700 root root - d /var/usrlocal 0755 root root - d /var/usrlocal/bin 0755 root root - d /var/usrlocal/etc 0755 root root - d /var/usrlocal/games 0755 root root - d /var/usrlocal/include 0755 root root - d /var/usrlocal/lib 0755 root root - d /var/usrlocal/man 0755 root root - d /var/usrlocal/sbin 0755 root root - d /var/usrlocal/share 0755 root root - d /var/usrlocal/src 0755 root root - d /var/mnt 0755 root root - d /run/media 0755 root root - . Particularly note here the double indirection of /home. By default, each deployment will share the global toplevel /home directory on the physical root filesystem. It is then up to higher levels of management tools to keep /etc/passwd or equivalent synchronized between operating systems. Each deployment can easily be reconfigured to have its own home directory set simply by making /var/home a real directory. ",
+ "url": "/ostree/adapting-existing/#system-layout",
+
+ "relUrl": "/adapting-existing/#system-layout"
+ },"24": {
+ "doc": "Adapting existing mainstream distributions",
+ "title": "Booting and initramfs technology",
+ "content": "OSTree comes with optional dracut+systemd integration code which follows this logic: . | Parse the ostree= kernel command line argument in the initramfs | Set up a read-only bind mount on /usr | Bind mount the deployment’s /sysroot to the physical / | Use mount(MS_MOVE) to make the deployment root appear to be the root filesystem | . After these steps, systemd switches root. If you are not using dracut or systemd, using OSTree should still be possible, but you will have to write the integration code. See the existing sources in src/switchroot as a reference. Patches to support other initramfs technologies and init systems, if sufficiently clean, will likely be accepted upstream. A further specific note regarding sysvinit: OSTree used to support recording device files such as the /dev/initctl FIFO, but no longer does. It’s recommended to just patch your initramfs to create this at boot. ",
+ "url": "/ostree/adapting-existing/#booting-and-initramfs-technology",
+
+ "relUrl": "/adapting-existing/#booting-and-initramfs-technology"
+ },"25": {
+ "doc": "Adapting existing mainstream distributions",
+ "title": "/usr/lib/passwd",
+ "content": "Unlike traditional package systems, OSTree trees contain numeric uid and gids. Furthermore, it does not have a %post type mechanism where useradd could be invoked. In order to ship an OS that contains both system users and users dynamically created on client machines, you will need to choose a solution for /etc/passwd. The core problem is that if you add a user to the system for a daemon, the OSTree upgrade process for /etc will simply notice that because /etc/passwd differs from the previous default, it will keep the modified config file, and your new OS user will not be visible. The solution chosen for the Gnome Continuous operating system is to create /usr/lib/passwd, and to include a NSS module nss-altfiles which instructs glibc to read from it. Then, the build system places all system users there, freeing up /etc/passwd to be purely a database of local users. See also a more recent effort from Systemd Stateless . ",
+ "url": "/ostree/adapting-existing/#usrlibpasswd",
+
+ "relUrl": "/adapting-existing/#usrlibpasswd"
+ },"26": {
+ "doc": "Adapting existing mainstream distributions",
+ "title": "Adapting existing package managers",
+ "content": "The largest endeavor is likely to be redesigning your distribution’s package manager to be on top of OSTree, particularly if you want to keep compatibility with the “old way” of installing into the physical /. This section will use examples from both dpkg and rpm as the author has familiarity with both; but the abstract concepts should apply to most traditional package managers. There are many levels of possible integration; initially, we will describe the most naive implementation which is the simplest but also the least efficient. We will assume here that the admin is booted into an OSTree-enabled system, and wants to add a set of packages. Many package managers store their state in /var; but since in the OSTree model that directory is shared between independent versions, the package database must first be found in the per-deployment /usr directory. It becomes read-only; remember, all upgrades involve constructing a new filesystem tree, so your package manager will also need to create a copy of its database. Most likely, if you want to continue supporting non-OSTree deployments, simply have your package manager fall back to the legacy /var location if the one in /usr is not found. To install a set of new packages (without removing any existing ones), enumerate the set of packages in the currently booted deployment, and perform dependency resolution to compute the complete set of new packages. Download and unpack these new packages to a temporary directory. Now, because we are merely installing new packages and not removing anything, we can make the major optimization of reusing our existing filesystem tree, and merely layering the composed filesystem tree of these new packages on top. A command like this: . ostree commit -b osname/releasename/description --tree=ref=$osname/$releasename/$description --tree=dir=/var/tmp/newpackages.13A8D0/ . will create a new commit in the $osname/$releasename/$description branch. The OSTree SHA256 checksum of all the files in /var/tmp/newpackages.13A8D0/ will be computed, but we will not re-checksum the present existing tree. In this layering model, earlier directories will take precedence, but files in later layers will silently override earlier layers. Then to actually deploy this tree for the next boot: ostree admin deploy $osname/$releasename/$description . This is essentially what rpm-ostree does to support its package layering model. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/adapting-existing/#adapting-existing-package-managers",
+
+ "relUrl": "/adapting-existing/#adapting-existing-package-managers"
+ },"27": {
+ "doc": "Atomic Upgrades",
+ "title": "Atomic Upgrades",
+ "content": ". | You can turn off the power anytime you want… | Simple upgrades via HTTP | Upgrades via external tools (e.g. package managers) | Assembling a new deployment directory | Atomically swapping boot configuration | The bootversion | The /ostree/boot directory . | Licensing for this document: | . | . ",
+ "url": "/ostree/atomic-upgrades/",
+
+ "relUrl": "/atomic-upgrades/"
+ },"28": {
+ "doc": "Atomic Upgrades",
+ "title": "You can turn off the power anytime you want…",
+ "content": "OSTree is designed to implement fully atomic and safe upgrades; more generally, atomic transitions between lists of bootable deployments. If the system crashes or you pull the power, you will have either the old system, or the new one. ",
+ "url": "/ostree/atomic-upgrades/#you-can-turn-off-the-power-anytime-you-want",
+
+ "relUrl": "/atomic-upgrades/#you-can-turn-off-the-power-anytime-you-want"
+ },"29": {
+ "doc": "Atomic Upgrades",
+ "title": "Simple upgrades via HTTP",
+ "content": "First, the most basic model OSTree supports is one where it replicates pre-generated filesystem trees from a server over HTTP, tracking exactly one ref, which is stored in the .origin file for the deployment. The command ostree admin upgrade implements this. To begin a simple upgrade, OSTree fetches the contents of the ref from the remote server. Suppose we’re tracking a ref named exampleos/buildmain/x86_64-runtime. OSTree fetches the URL http://example.com/repo/refs/heads/exampleos/buildmain/x86_64-runtime, which contains a SHA256 checksum. This determines the tree to deploy, and /etc will be merged from currently booted tree. If we do not have this commit, then we perform a pull process. At present (without static deltas), this involves quite simply just fetching each individual object that we do not have, asynchronously. Put in other words, we only download changed files (zlib-compressed). Each object has its checksum validated and is stored in /ostree/repo/objects/. Once the pull is complete, we have downloaded all the objects that we need to perform a deployment. ",
+ "url": "/ostree/atomic-upgrades/#simple-upgrades-via-http",
+
+ "relUrl": "/atomic-upgrades/#simple-upgrades-via-http"
+ },"30": {
+ "doc": "Atomic Upgrades",
+ "title": "Upgrades via external tools (e.g. package managers)",
+ "content": "As mentioned in the introduction, OSTree is also designed to allow a model where filesystem trees are computed on the client. It is completely agnostic as to how those trees are generated; they could be computed with traditional packages, packages with post-deployment scripts on top, or built by developers directly from revision control locally, etc. At a practical level, most package managers today (dpkg and rpm) operate “live” on the currently booted filesystem. The way they could work with OSTree is to, instead, take the list of installed packages in the currently booted tree, and compute a new filesystem from that. A later chapter describes in more details how this could work: Adapting Existing Systems. For the purposes of this section, let’s assume that we have a newly generated filesystem tree stored in the repo (which shares storage with the existing booted tree). We can then move on to checking it back out of the repo into a deployment. ",
+ "url": "/ostree/atomic-upgrades/#upgrades-via-external-tools-eg-package-managers",
+
+ "relUrl": "/atomic-upgrades/#upgrades-via-external-tools-eg-package-managers"
+ },"31": {
+ "doc": "Atomic Upgrades",
+ "title": "Assembling a new deployment directory",
+ "content": "Given a commit to deploy, OSTree first allocates a directory for it. This is of the form /boot/loader/entries/ostree-$stateroot-$checksum.$serial.conf. The $serial is normally 0, but if a given commit is deployed more than once, it will be incremented. This is supported because the previous deployment may have configuration in /etc that we do not want to use or overwrite. Now that we have a deployment directory, a 3-way merge is performed between the (by default) currently booted deployment’s /etc, its default configuration, and the new deployment (based on its /usr/etc). How it works is: . | Files in the currently booted deployment’s /etc which were modified from the default /usr/etc (of the same deployment) are retained. | Files in the currently booted deployment’s /etc which were not modified from the default /usr/etc (of the same deployment) are upgraded to the new defaults from the new deployment’s /usr/etc. | . Roughly, this means that as soon as you modify or add a file in /etc, this file will be propagated forever as is (though there is a corner-case, where if your modification eventually exactly matches a future default file, then the file will go back to following future default updates from that point on). You can use ostree admin config-diff to see the differences between your booted deployment’s /etc and the OSTree defaults. A command like diff {/usr,}/etc will additional print line-level differences. ",
+ "url": "/ostree/atomic-upgrades/#assembling-a-new-deployment-directory",
+
+ "relUrl": "/atomic-upgrades/#assembling-a-new-deployment-directory"
+ },"32": {
+ "doc": "Atomic Upgrades",
+ "title": "Atomically swapping boot configuration",
+ "content": "At this point, a new deployment directory has been created as a hardlink farm; the running system is untouched, and the bootloader configuration is untouched. We want to add this deployment to the “deployment list”. To support a more general case, OSTree supports atomic transitioning between arbitrary sets of deployments, with the restriction that the currently booted deployment must always be in the new set. In the normal case, we have exactly one deployment, which is the booted one, and we want to add the new deployment to the list. A more complex command might allow creating 100 deployments as part of one atomic transaction, so that one can set up an automated system to bisect across them. ",
+ "url": "/ostree/atomic-upgrades/#atomically-swapping-boot-configuration",
+
+ "relUrl": "/atomic-upgrades/#atomically-swapping-boot-configuration"
+ },"33": {
+ "doc": "Atomic Upgrades",
+ "title": "The bootversion",
+ "content": "OSTree allows swapping between boot configurations by implementing the “swapped directory pattern” in /boot. This means it is a symbolic link to one of two directories /ostree/boot.[0|1]. To swap the contents atomically, if the current version is 0, we create /ostree/boot.1, populate it with the new contents, then atomically swap the symbolic link. Finally, the old contents can be garbage collected at any point. ",
+ "url": "/ostree/atomic-upgrades/#the-bootversion",
+
+ "relUrl": "/atomic-upgrades/#the-bootversion"
+ },"34": {
+ "doc": "Atomic Upgrades",
+ "title": "The /ostree/boot directory",
+ "content": "However, we want to optimize for the case where the set of kernel/initramfs/devicetree sets is the same between both the old and new deployment lists. This happens when doing an upgrade that does not include the kernel; think of a simple translation update. OSTree optimizes for this case because on some systems /boot may be on a separate medium such as flash storage not optimized for significant amounts of write traffic. Related to this, modern OSTree has support for having /boot be a read-only mount by default - it will automatically remount read-write just for the portion of time necessary to update the bootloader configuration. To implement this, OSTree also maintains the directory /ostree/boot.$bootversion, which is a set of symbolic links to the deployment directories. The $bootversion here must match the version of /boot. However, in order to allow atomic transitions of this directory, this is also a swapped directory, so just like /boot, it has a version of 0 or 1 appended. Each bootloader entry has a special ostree= argument which refers to one of these symbolic links. This is parsed at runtime in the initramfs. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/atomic-upgrades/#the-ostreeboot-directory",
+
+ "relUrl": "/atomic-upgrades/#the-ostreeboot-directory"
+ },"35": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "Writing a buildsystem and managing repositories",
+ "content": ". | Build vs buy | Initializing | Writing your own OSTree buildsystem | Constructing trees from unions | Migrating content between repositories | More sophisticated repository management . | Licensing for this document: | . | . OSTree is not a package system. It does not directly support building source code. Rather, it is a tool for transporting and managing content, along with package-system independent aspects like bootloader management for updates. We’ll assume here that we’re planning to generate commits on a build server, then have client systems replicate it. Doing client-side assembly is also possible of course, but this discussion will focus primarily on server-side concerns. ",
+ "url": "/ostree/buildsystem-and-repos/",
+
+ "relUrl": "/buildsystem-and-repos/"
+ },"36": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "Build vs buy",
+ "content": "Therefore, you need to either pick an existing tool for writing content into an OSTree repository, or write your own. An example tool is rpm-ostree - it takes as input RPMs, and commits them (currently oriented for server-side, but aiming to do client-side too). ",
+ "url": "/ostree/buildsystem-and-repos/#build-vs-buy",
+
+ "relUrl": "/buildsystem-and-repos/#build-vs-buy"
+ },"37": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "Initializing",
+ "content": "For this initial discussion, we’re assuming you have a single archive repository: . mkdir repo ostree --repo=repo init --mode=archive . You can export this via a static webserver, and configure clients to pull from it. ",
+ "url": "/ostree/buildsystem-and-repos/#initializing",
+
+ "relUrl": "/buildsystem-and-repos/#initializing"
+ },"38": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "Writing your own OSTree buildsystem",
+ "content": "There exist many, many systems that basically follow this pattern: . $pkg --installroot=/path/to/tmpdir install foo bar baz $imagesystem commit --root=/path/to/tmpdir . For various values of $pkg such as yum, apt-get, etc., and values of $imagesystem could be simple tarballs, Amazon Machine Images, ISOs, etc. Now obviously in this document, we’re going to talk about the situation where $imagesystem is OSTree. The general idea with OSTree is that wherever you might store a series of tarballs for applications or OS images, OSTree is likely going to be better. For example, it supports GPG signatures, binary deltas, writing bootloader configuration, etc. OSTree does not include a package/component build system simply because there already exist plenty of good ones - rather, it is intended to provide an infrastructure layer. The above mentioned rpm-ostree compose tree chooses RPM as the value of $pkg - so binaries are built as RPMs, then committed as a whole into an OSTree commit. But let’s discuss building our own. If you’re just experimenting, it’s quite easy to start with the command line. We’ll assume for this purpose that you have a build process that outputs a directory tree - we’ll call this tool $pkginstallroot (which could be yum --installroot or debootstrap, etc.). Your initial prototype is going to look like: . $pkginstallroot /path/to/tmpdir ostree --repo=repo commit -s 'build' -b exampleos/x86_64/standard --tree=dir=/path/to/tmpdir . Alternatively, if your build system can generate a tarball, you can commit that tarball into OSTree. For example, OpenEmbedded can output a tarball, and one can commit it via: . ostree commit -s 'build' -b exampleos/x86_64/standard --tree=tar=myos.tar . ",
+ "url": "/ostree/buildsystem-and-repos/#writing-your-own-ostree-buildsystem",
+
+ "relUrl": "/buildsystem-and-repos/#writing-your-own-ostree-buildsystem"
+ },"39": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "Constructing trees from unions",
+ "content": "The above is a very simplistic model, and you will quickly notice that it’s slow. This is because OSTree has to re-checksum and recompress the content each time it’s committed. (Most of the CPU time is spent in compression which gets thrown away if the content turns out to be already stored). A more advanced approach is to store components in OSTree itself, then union them, and recommit them. At this point, we recommend taking a look at the OSTree API, and choose a programming language supported by GObject Introspection to write your buildsystem scripts. Python may be a good choice, or you could choose custom C code, etc. For the purposes of this tutorial we will use shell script, but it’s strongly recommended to choose a real programming language for your build system. Let’s say that your build system produces separate artifacts (whether those are RPMs, zip files, or whatever). These artifacts should be the result of make install DESTDIR= or similar. Basically equivalent to RPMs/debs. Further, in order to make things fast, we will need a separate bare-user repository in order to perform checkouts quickly via hardlinks. We’ll then export content into the archive repository for use by client systems. mkdir build-repo ostree --repo=build-repo init --mode=bare-user . You can begin committing those as individual branches: . ostree --repo=build-repo commit -b exampleos/x86_64/bash --tree=tar=bash-4.2-bin.tar.gz ostree --repo=build-repo commit -b exampleos/x86_64/systemd --tree=tar=systemd-224-bin.tar.gz . Set things up so that whenever a package changes, you redo the commit with the new package version - conceptually, the branch tracks the individual package versions over time, and defaults to “latest”. This isn’t required - one could also include the version in the branch name, and have metadata outside to determine “latest” (or the desired version). Now, to construct our final tree: . rm -rf exampleos-build for package in bash systemd; do ostree --repo=build-repo checkout -U --union exampleos/x86_64/${package} exampleos-build done # Set up a \"rofiles-fuse\" mount point; this ensures that any processes # we run for post-processing of the tree don't corrupt the hardlinks. mkdir -p mnt rofiles-fuse exampleos-build mnt # Now run global \"triggers\", generate cache files: ldconfig -r mnt (Insert other programs here) fusermount -u mnt ostree --repo=build-repo commit -b exampleos/x86_64/standard --link-checkout-speedup exampleos-build . There are a number of interesting things going on here. The major architectural change is that we’re using --link-checkout-speedup. This is a way to tell OSTree that our checkout is made via hardlinks, and to scan the repository in order to build up a reverse (device, inode) -&gt; checksum mapping. In order for this mapping to be accurate, we needed the rofiles-fuse to ensure that any changed files had new inodes (and hence a new checksum). ",
+ "url": "/ostree/buildsystem-and-repos/#constructing-trees-from-unions",
+
+ "relUrl": "/buildsystem-and-repos/#constructing-trees-from-unions"
+ },"40": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "Migrating content between repositories",
+ "content": "Now that we have content in our build-repo repository (in bare-user mode), we need to move the exampleos/x86_64/standard branch content into the repository just named repo (in archive mode) for export, which will involve zlib compression of new objects. We likely want to generate static deltas after that as well. Let’s copy the content: . ostree --repo=repo pull-local build-repo exampleos/x86_64/standard . Clients can now incrementally download new objects - however, this would also be a good time to generate a delta from the previous commit. ostree --repo=repo static-delta generate exampleos/x86_64/standard . ",
+ "url": "/ostree/buildsystem-and-repos/#migrating-content-between-repositories",
+
+ "relUrl": "/buildsystem-and-repos/#migrating-content-between-repositories"
+ },"41": {
+ "doc": "Writing a buildsystem and managing repositories",
+ "title": "More sophisticated repository management",
+ "content": "Next, see Repository Management for the next steps in managing content in OSTree repositories. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/buildsystem-and-repos/#more-sophisticated-repository-management",
+
+ "relUrl": "/buildsystem-and-repos/#more-sophisticated-repository-management"
+ },"42": {
+ "doc": "OSTree Contributing Tutorial",
+ "title": "OSTree Contributing Tutorial",
+ "content": "The following guide is about OSTree forking, building, adding a command, testing the command, and submitting the change. | Getting Started | Building OSTree . | Install Build Dependencies | OSTree Build Commands . | Notes | Tip | . | . | Testing a Build . | Testing in a Container | Testing in a Virtual Machine | . | Tutorial: Adding a basic builtin command to ostree . | Modifying OSTree | Adding a new API function to libostree | OSTree Tests | Submitting a Patch | Returning Workflow | . | . ",
+ "url": "/ostree/contributing-tutorial/",
+
+ "relUrl": "/contributing-tutorial/"
+ },"43": {
+ "doc": "OSTree Contributing Tutorial",
+ "title": "Getting Started",
+ "content": "Fork https://github.com/ostreedev/ostree, then run the following commands. $ git clone https://github.com/&lt;username&gt;/ostree &amp;&amp; cd ostree $ git remote add upstream https://github.com/ostreedev/ostree $ git checkout main $ git fetch upstream &amp;&amp; git branch --set-upstream-to=upstream/main main . Make a branch from main for your patch. $ git checkout -b &lt;name-of-branch&gt; $ git branch --set-upstream-to=upstream/main &lt;name-of-branch&gt; . ",
+ "url": "/ostree/contributing-tutorial/#getting-started",
+
+ "relUrl": "/contributing-tutorial/#getting-started"
+ },"44": {
+ "doc": "OSTree Contributing Tutorial",
+ "title": "Building OSTree",
+ "content": "Install Build Dependencies . Execute one of the following group commands as superuser depending on your machine’s package manager. For Fedora: . $ dnf install @buildsys-build dnf-plugins-core &amp;&amp; \\ dnf builddep ostree . For CentOS: . $ yum install yum-utils dnf-plugins-core &amp;&amp; \\ yum-builddep ostree . For Debian based distros: . $ apt-get update &amp;&amp; \\ apt-get install build-essential &amp;&amp; \\ apt-get build-dep ostree . build.sh will have a list of packages needed to build ostree. OSTree Build Commands . These are the basic commands to build OSTree. Depending on the OS that OSTree will be built for, the flags or options for ./autogen.sh and ./configure will vary. See ostree-build.sh in this tutorial below for specific commands to building OSTree for Fedora 28 and Fedora 28 Atomic Host. # optional: autogen.sh will run this if necessary git submodule update --init env NOCONFIGURE=1 ./autogen.sh # run ./configure if makefile does not exist ./configure make make install DESTDIR=/path/to/install/binary . Notes . Running git submodule update --init is optional since autogen.sh will check to see if one of the submodule files for example from libglnx/ or from bsdiff/ exists. Additionally, autogen.sh will check to see if the environment variable NOCONFIGURE is set. To run ./configure manually, run autogen in a modified environment as such, env NOCONFIGURE=1 ./autogen.sh. Otherwise, leave NOCONFIGURE empty and autogen.sh will run ./configure as part of the autogen.sh command when it executes. For more information on --prefix see Variables for Installation Directories. make install will generate files for /bin and /lib. If DESTDIR is unspecified then OSTree will be installed in the default directory i.e. /usr/local/bin and its static libraries in /usr/local/lib. Note that the /usr/local portion of the path can be changed using the --prefix option for ./configure. See this GNU guide on DESTDIR Staged Installs for more information. Tip . Make allows parallel execution of recipes. Use make -j&lt;N&gt; to speed up the build. &lt;N&gt; is typically $((2 * $(nproc))) for optimal performance, where nproc is the number of processing units (CPU cores) available. See page 106 of the GNU Make Manual for more information about the --jobs or -j option. ",
+ "url": "/ostree/contributing-tutorial/#building-ostree",
+
+ "relUrl": "/contributing-tutorial/#building-ostree"
+ },"45": {
+ "doc": "OSTree Contributing Tutorial",
+ "title": "Testing a Build",
+ "content": "It is best practice to build software (definitely including ostree) in a container or virtual machine first. Testing in a Container . There are a variety of container engines available and many distributions have pre-packaged versions of e.g. Podman and Docker. If you choose to use Docker upstream, you may want to follow this post-installation guide for Docker. This will allow you to run Docker as a non-root user on a Linux based host machine. You will need to have pushed a remote git branch $REMOTE_BRANCH (see ostree-git.sh below) in order to pull your changes into a container. The example below uses Docker to manage containers. Save the contents of this Dockerfile somewhere on your machine: . # this pulls the fedora 28 image FROM registry.fedoraproject.org/fedora:28 # install ostree dependencies RUN dnf update -y &amp;&amp; \\ dnf -y install @buildsys-build dnf-plugins-core &amp;&amp; \\ dnf -y builddep ostree &amp;&amp; \\ dnf clean all # clone ostree and update main branch COPY ostree-git.sh / RUN ../ostree-git.sh # builds ostree + any additional commands COPY ostree-build.sh / # entry into the container will start at this directory WORKDIR /ostree # run the following as `/bin/sh -c` # or enter the container to execute ./ostree-build.sh RUN ../ostree-build.sh . Save the following bash scripts in the same directory as the Dockerfile. Then change the mode bit of these files so that they are executable, by running chmod +x ostree-git.sh ostree-build.sh . #!/bin/bash # ostree-git.sh # Clone ostree and update main branch set -euo pipefail # Set $USERNAME to your GitHub username here. USERNAME=\"\" # clone your fork of the OSTree repo, this will be in the \"/\" directory git clone https://github.com/$USERNAME/ostree.git cd ostree # Add upstream as remote and update main branch git checkout main git remote add upstream https://github.com/ostreedev/ostree.git git pull --rebase upstream main . #!/bin/bash # ostree-build.sh # Build and test OSTree set -euo pipefail # $REMOTE_BRANCH is the name of the remote branch in your # repository that contains changes (e.g. my-patch). REMOTE_BRANCH=\"\" # fetch updates from origin # origin url should be your forked ostree repository git fetch origin # go to branch with changes # if this branch already exists then checkout that branch exit_code=\"$(git checkout --track origin/$REMOTE_BRANCH; echo $?)\" if [[ \"$exit_code\" == 1 ]] then echo \"This branch:\" $REMOTE_BRANCH \"is not a remote branch.\" exit fi # make sure branch with changes is up-to-date git pull origin $REMOTE_BRANCH # build OSTree commands for Fedora 28 and Fedora 28 Atomic Host ./autogen.sh --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc ./configure --prefix=/usr make -j$((2 * $(nproc))) make install # any additional commands go here . Build the container . Run docker build in the same directory of the Dockerfile like so: . $ docker build -t ostree-fedora-test . When this build is done, the -t option tags the image as ostree-fedora-test. Note: Do not forget the dot . at the end of the above command which specifies the location of the Dockerfile. You will see ostree-fedora-test listed when running docker images: . REPOSITORY TAG IMAGE ID CREATED SIZE ostree-fedora-test latest 817c04cc3656 1 day ago 978MB . Entering the Container . To start the ostree-fedora-test container, run: . $ docker run -it --rm --entrypoint /bin/sh --name ostree-testing ostree-fedora-test . Note: . --rm option tells Docker to automatically clean up the container and remove the file system when the container exits. Otherwise remove it manually by running docker rm &lt;container name&gt;. The state of the container will not be saved when the shell prompt exits. Best practice is modify the Dockerfile to modify the image. Testing in a Container Workflow . | Edit the changes to OSTree on your local machine. | git add to stage the changed files, git commit and then git push origin &lt;local-branch&gt;:&lt;remote-branch&gt;. | Testing on a new container vs. Testing on an existing container: . If the ostree-testing container was newly built right after your changes have been committed, then the container’s build of ostree should contain your changes. Else: Within the ostree-testing container, run ../ostree-build.sh in the ostree directory. This will pull in changes from your branch and create a new ostree build. | make install will install OSTree in the default location i.e. /usr/..in a Fedora 28 container. | Test ostree. | . Testing in a Virtual Machine . To create a Fedora 28 Atomic Host Vagrant VM, run the following commands: . $ mkdir atomic &amp;&amp; cd atomic $ vagrant init fedora/28-atomic-host &amp;&amp; vagrant up . An option is to use rsync to transfer ostree files to a Vagrant VM. To find the IP address of a Vagrant VM, run vagrant ssh-config in the same directory as the Vagrantfile. Steps to rsync files to test an ostree build: . | Copy the contents of your public ssh key on your host machine e.g. id_rsa.pub to /home/vagrant/.ssh/authorized_keys on the VM. | Run sudo su, followed by ssh localhost then press Ctrl+c to exit from the decision prompt. This will create the .ssh directory with the right permissions. | Using Vagrant as the user, run sudo cp ~/.ssh/authorized_keys /root/.ssh/. So that user root has the the same login credentials. | To override the Read-only file system warning, run sudo ostree admin unlock. | &lt;ostree-install-dir&gt; will serve as the local install location for ostree and the path to this directory should be absolute when specified in DESTDIR. | Set rsync to sync changes in /etc and /usr from &lt;ostree-install-dir&gt;/ on the host to the VM: . $ rsync -av &lt;ostree-install-dir&gt;/etc/ root@&lt;ip-address&gt;:/etc $ rsync -av &lt;ostree-install-dir&gt;/usr/ root@&lt;ip-address&gt;:/usr . Using option -n will execute the commands as a trial, which is helpful to list the files that will be synced. | Run the commands in step 6 each time a new ostree build is executed to update the change. Running ls -lt in the directory where the changed file is expected, is a simple way to check when a particular file was last modified. Proceed to the test changes ostree with the most recent changes. | . ",
+ "url": "/ostree/contributing-tutorial/#testing-a-build",
+
+ "relUrl": "/contributing-tutorial/#testing-a-build"
+ },"46": {
+ "doc": "OSTree Contributing Tutorial",
+ "title": "Tutorial: Adding a basic builtin command to ostree",
+ "content": "Modifying OSTree . This will add a command which prints Hello OSTree! when ostree hello-ostree is entered. | Create a file in src/ostree named ot-builtin-hello-ostree.c. Code that lives in here belongs to OSTree, and uses functionality from libostree. | Add the following to ot-builtin-hello-ostree.c: . #include \"config.h\" #include \"ot-main.h\" #include \"ot-builtins.h\" #include \"ostree.h\" #include \"otutil.h\" // Structure for options such as ostree hello-ostree --option. static GOptionEntry options[] = { { NULL }, }; gboolean ostree_builtin_hello_ostree (int argc, char **argv, OstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error) { g_autoptr(OstreeRepo) repo = NULL; // Creates new command context, ready to be parsed. // Input to g_option_context_new shows when running ostree &lt;command&gt; --help g_autoptr(GOptionContext) context = g_option_context_new (\"\"); // Parses the command context according to the ostree CLI. if (!ostree_option_context_parse (context, options, &amp;argc, &amp;argv, invocation, &amp;repo, cancellable, error)) return FALSE; g_print(\"Hello OSTree!\\n\"); return TRUE; } . This defines the functionality for hello-ostree. Now we have to make sure the CLI can refer to the execution function, and that autotools knows to build this file. Note: libostree codebase supports C99 features. | Add the following in src/ostree/main.c: . { \"hello-ostree\", // The name of the command OSTREE_BUILTIN_FLAG_NO_REPO, // Flag not to require the `--repo` argument, see \"ot-main.h\" ostree_builtin_hello_ostree, // Execution function for the command \"Print hello message\" }, // Short description to appear when `ostree hello-ostree --help` is entered . | Add a macro for the function declaration of ostree_builtin_hello_ostree, in ot-builtins.h: . BUILTINPROTO(hello_ostree); . This makes the function definition visible to the CLI. | Configure automake to include ot-builtin-hello-ostree.c in the build, by adding an entry in Makefile-ostree.am under ostree_SOURCES: . src/ostree/ot-builtin-hello-ostree.c \\ . | Rebuild ostree: . $ make &amp;&amp; make install DESTDIR=/path/to/install/the/content . | Execute the new ostree binary, from where you installed it: . $ ostree hello-ostree Hello OSTree! . | . Adding a new API function to libostree . This will add a new API function ostree_kernel_args_foo() in src/libostree/ostree-kernel-args.c. | Add the following to src/libostree/ostree-kernel-args.h: _OSTREE_PUBLIC gboolean ostree_kernel_args_foo (const char *arg, GCancellable *cancellable, GError **error); . | Add the following to ostree-kernel-args.c: /** * ostree_kernel_args_foo: * @arg: Description of the arg * * Description of the function * * Since: $NEWVERSION //The new libostree version, for example 2022.5 **/ gboolean ostree_kernel_args_foo (const char *arg, GCancellable *cancellable, GError **error) { //Add code here } . | Add the following to src/libostree/libostree-devel.sym: LIBOSTREE_$NEWVERSION { // The new libostree version global: ostree_kernel_args_foo; // Function name } LIBOSTREE_$LASTSTABLE; // The last stable libostree version . | Add the following to Makefile-libostree.am: if BUILDOPT_IS_DEVEL_BUILD symbol_files += $(top_srcdir)/src/libostree/libostree-devel.sym endif . | Add function name ostree_kernel_args_foo to apidoc/ostree-sections.txt under &lt;FILE&gt;ostree-kernel-args&lt;/FILE&gt;. | Call function ostree_kernel_args_foo() in your code. | . OSTree Tests . Tests for OSTree are done by shell scripting, by running OSTree commands and examining output. These steps will go through adding a test for hello-ostree. | Create a file in tests called test-hello-ostree.sh. | Add the following to test-hello-ostree.sh: . set -euo pipefail # Ensure the test will not silently fail . $(dirname $0)/libtest.sh # Make libtest.sh functions available echo \"1..1\" # Declare which test is being run out of how many pushd ${test_tmpdir} ${CMD_PREFIX} ostree hello-ostree &gt; hello-output.txt assert_file_has_content hello-output.txt \"Hello OSTree!\" popd echo \"ok hello ostree\" # Indicate test success . Many tests require a fake repository setting up (as most OSTree commands require --repo to be specified). See test-pull-depth.sh for an example of this setup. | Configure automake to include test-hello-ostree.sh in the build, by adding an entry in Makefile-tests.am under _installed_or_uninstalled_test_scripts: . tests/test-hello-ostree.sh \\ . | Make sure test-hello-ostree.sh has executable permissions! . $ chmod +x tests/test-hello-ostree.sh . | Run the test: . $ make check TESTS=\"tests/test-hello-ostree.sh\" . Multiple tests can be specified: make check TESTS=\"test1 test2 ...\". To run all tests, use make check. Hopefully, the test passes! The following will be printed: . PASS: tests/test-hello-ostree.sh 1 hello ostree ============================================================================ Testsuite summary for libostree 2018.8 ============================================================================ # TOTAL: 1 # PASS: 1 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ============================================================================ . | . Submitting a Patch . After you have committed your changes and tested, you are ready to submit your patch! . You should make sure your commits are placed on top of the latest changes from upstream/main: . $ git pull --rebase upstream main . To submit your patch, open a pull request from your forked repository. Most often, you’ll be merging into ostree:main from &lt;username&gt;:&lt;branch name&gt;. If some of your changes are complete and you would like feedback, you may also open a pull request that has WIP (Work In Progress) in the title. Before a pull request is considered merge ready, your commit messages should fall within the specified guideline. See Commit message style. See CONTRIBUTING.md for information on squashing commits, and alternative options to submit patches. Returning Workflow . When returning to work on a patch, it is recommended to update your fork with the latest changes in the upstream main branch. If creating a new branch: . $ git checkout main $ git pull upstream main $ git checkout -b &lt;name-of-patch&gt; . If continuing on a branch already created: . $ git checkout &lt;name-of-patch&gt; $ git pull --rebase upstream main . ",
+ "url": "/ostree/contributing-tutorial/#tutorial-adding-a-basic-builtin-command-to-ostree",
+
+ "relUrl": "/contributing-tutorial/#tutorial-adding-a-basic-builtin-command-to-ostree"
+ },"47": {
+ "doc": "Deployments",
+ "title": "Deployments",
+ "content": ". | Overview . | “stateroot” (AKA “osname”): Group of deployments that share /var | Contents of a deployment | Staged deployments | The system /boot . | Licensing for this document: | . | . | . ",
+ "url": "/ostree/deployment/",
+
+ "relUrl": "/deployment/"
+ },"48": {
+ "doc": "Deployments",
+ "title": "Overview",
+ "content": "Built on top of the OSTree versioning filesystem core is a layer that knows how to deploy, parallel install, and manage Unix-like operating systems (accessible via ostree admin). The core content of these operating systems are treated as read-only, but they transparently share storage. A deployment is physically located at a path of the form /ostree/deploy/$stateroot/deploy/$checksum. OSTree is designed to boot directly into exactly one deployment at a time; each deployment is intended to be a target for chroot() or equivalent. “stateroot” (AKA “osname”): Group of deployments that share /var . Each deployment is grouped in exactly one “stateroot” (also known as an “osname”); the former term is preferred. From above, you can see that a stateroot is physically represented in the /ostree/deploy/$stateroot directory. For example, OSTree can allow parallel installing Debian in /ostree/deploy/debian and Red Hat Enterprise Linux in /ostree/deploy/rhel (subject to operating system support, present released versions of these operating systems may not support this). Each stateroot has exactly one copy of the traditional Unix /var, stored physically in /ostree/deploy/$stateroot/var. OSTree provides support tools for systemd to create a Linux bind mount that ensures the booted deployment sees the shared copy of /var. OSTree does not touch the contents of /var. Operating system components such as daemon services are required to create any directories they require there at runtime (e.g. /var/cache/$daemonname), and to manage upgrading data formats inside those directories. Contents of a deployment . A deployment begins with a specific commit (represented as a SHA256 hash) in the OSTree repository in /ostree/repo. This commit refers to a filesystem tree that represents the underlying basis of a deployment. For short, we will call this the “tree”, to distinguish it from the concept of a deployment. First, the tree must include a kernel (and optionally an initramfs). The current standard locations for these are /usr/lib/modules/$kver/vmlinuz and /usr/lib/modules/$kver/initramfs.img. The “boot checksum” will be computed automatically. This follows the current Fedora kernel layout, and is the current recommended path. However, older versions of libostree don’t support this; you may need to also put kernels in the previous (legacy) paths, which are vmlinuz(-.*)?-$checksum in either /boot or /usr/lib/ostree-boot. The checksum should be a SHA256 hash of the kernel contents; it must be pre-computed before storing the kernel in the repository. Optionally, the directory can also contain an initramfs, stored as initramfs(-.*)?-$checksum and/or a device tree, stored as devicetree(-.*)?-$checksum. If an initramfs or devicetree exist, the checksum must include all of the kernel, initramfs and devicetree contents. OSTree will use this to determine which kernels are shared. The rationale for this is to avoid computing checksums on the client by default. The deployment should not have a traditional UNIX /etc; instead, it should include /usr/etc. This is the “default configuration”. When OSTree creates a deployment, it performs a 3-way merge using the old default configuration, the active system’s /etc, and the new default configuration. In the final filesystem tree for a deployment then, /etc is a regular writable directory. Besides the exceptions of /var and /etc then, the rest of the contents of the tree are checked out as hard links into the repository. It’s strongly recommended that operating systems ship all of their content in /usr, but this is not a hard requirement. Finally, a deployment may have a .origin file, stored next to its directory. This file tells ostree admin upgrade how to upgrade it. At the moment, OSTree only supports upgrading a single refspec. However, in the future OSTree may support a syntax for composing layers of trees, for example. Staged deployments . As mentioned above, when OSTree creates a new deployment, a 3-way merge is done to update its /etc. Depending on the nature of the system, this can cause an issue: if a user or program modifies the booted /etc after the pending deployment is created but before rebooting, those modifications will be lost. OSTree does not do a second /etc merge on reboot. To counter this, OSTree supports staged deployments. In this flow, deployments are created using e.g. ostree admin upgrade --stage on the CLI. The new deployment is still created when the command is invoked, but the 3-way /etc merge is delayed until the system is rebooted or shut down. Additionally, updating the bootloader is also delayed. This is done by the ostree-finalize-staged.service systemd unit. The main disadvantage of this approach is that rebooting can take longer and the failure mode can be confusing (the machine will reboot into the same deployment). In systems where the workload is well-understood and not subject to the /etc issue above, it may be better to not stage deployments. The system /boot . While OSTree parallel installs deployments cleanly inside the /ostree directory, ultimately it has to control the system’s /boot directory. The way this works is via the Boot Loader Specification, which is a standard for bootloader-independent drop-in configuration files. When a tree is deployed, it will have a configuration file generated of the form /boot/loader/entries/ostree-$stateroot-$checksum.$serial.conf. This configuration file will include a special ostree= kernel argument that allows the initramfs to find (and chroot() into) the specified deployment. At present, not all bootloaders implement the BootLoaderSpec, so OSTree contains code for some of these to regenerate native config files (such as /boot/syslinux/syslinux.conf) based on the entries. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/deployment/#overview",
+
+ "relUrl": "/deployment/#overview"
+ },"49": {
+ "doc": "OSTree data formats",
+ "title": "OSTree data formats",
+ "content": ". | On the topic of “smart servers” | The archive format | archive efficiency | Aside: bare formats | Static deltas | Static delta repository layout | Static delta internal structure . | The delta superblock | . | A delta part | Fallback objects . | Licensing for this document: | . | . ",
+ "url": "/ostree/formats/",
+
+ "relUrl": "/formats/"
+ },"50": {
+ "doc": "OSTree data formats",
+ "title": "On the topic of “smart servers”",
+ "content": "One really crucial difference between OSTree and git is that git has a “smart server”. Even when fetching over https://, it isn’t just a static webserver, but one that e.g. dynamically computes and compresses pack files for each client. In contrast, the author of OSTree feels that for operating system updates, many deployments will want to use simple static webservers, the same target most package systems were designed to use. The primary advantages are security and compute efficiency. Services like Amazon S3 and CDNs are a canonical target, as well as a stock static nginx server. ",
+ "url": "/ostree/formats/#on-the-topic-of-smart-servers",
+
+ "relUrl": "/formats/#on-the-topic-of-smart-servers"
+ },"51": {
+ "doc": "OSTree data formats",
+ "title": "The archive format",
+ "content": "In the repo section, the concept of objects was introduced, where file/content objects are checksummed and managed individually. (Unlike a package system, which operates on compressed aggregates). The archive format simply gzip-compresses each content object. Metadata objects are stored uncompressed. This means that it’s easy to serve via static HTTP. Note: the repo config file still uses the historical term archive-z2 as mode. But this essentially indicates the modern archive format. When you commit new content, you will see new .filez files appearing in objects/. ",
+ "url": "/ostree/formats/#the-archive-format",
+
+ "relUrl": "/formats/#the-archive-format"
+ },"52": {
+ "doc": "OSTree data formats",
+ "title": "archive efficiency",
+ "content": "The advantages of archive: . | It’s easy to understand and implement | Can be served directly over plain HTTP by a static webserver | Clients can download/unpack updates incrementally | Space efficient on the server | . The biggest disadvantage of this format is that for a client to perform an update, one HTTP request per changed file is required. In some scenarios, this actually isn’t bad at all, particularly with techniques to reduce HTTP overhead, such as HTTP/2. In order to make this format work well, you should design your content such that large data that changes infrequently (e.g. graphic images) are stored separately from small frequently changing data (application code). Other disadvantages of archive: . | It’s quite bad when clients are performing an initial pull (without HTTP/2), | One doesn’t know the total size (compressed or uncompressed) of content before downloading everything | . ",
+ "url": "/ostree/formats/#archive-efficiency",
+
+ "relUrl": "/formats/#archive-efficiency"
+ },"53": {
+ "doc": "OSTree data formats",
+ "title": "Aside: bare formats",
+ "content": "The most common operation is to pull from a remote archive repository into a local one. This latter is not compressed on disk. In other words, pulling to a local repository is similar to unpacking (but not installing) the content of an RPM/deb package. The bare repository format is the simplest one. In this mode regular files are directly stored to disk, and all metadata (e.g. uid/gid and xattrs) is reflected to the filesystem. It allows further direct access to content and metadata, but it may require elevated privileges when writing objects to the repository. The bare-user format is a bit special in that the uid/gid and xattrs from the content are ignored. This is primarily useful if you want to have the same OSTree-managed content that can be run on a host system or an unprivileged container. Similarly, the bare-split-xattrs format is a special mode where xattrs are stored as separate repository objects, and not directly reflected to the filesystem. This is primarily useful when transporting xattrs through lossy environments (e.g. tar streams and containerized environments). It also allows carrying security-sensitive xattrs (e.g. SELinux labels) out-of-band without involving OS filesystem logic. ",
+ "url": "/ostree/formats/#aside-bare-formats",
+
+ "relUrl": "/formats/#aside-bare-formats"
+ },"54": {
+ "doc": "OSTree data formats",
+ "title": "Static deltas",
+ "content": "OSTree itself was originally focused on a continuous delivery model, where client systems are expected to update regularly. However, many OS vendors would like to supply content that’s updated e.g. once a month or less often. For this model, we can do a lot better to support batched updates than a basic archive repo. However, we still want to preserve the model of “static webserver only”. Given this, OSTree has gained the concept of a “static delta”. These deltas are targeted to be a delta between two specific commit objects, including “bsdiff” and “rsync-style” deltas within a content object. Static deltas also support from NULL, where the client can more efficiently download a commit object from scratch - this is mostly useful when using OSTree for containers, rather than OS images. For OS images, one tends to download an installer ISO or qcow2 image which is a single file that contains the tree data already. Effectively, we’re spending server-side storage (and one-time compute cost), and gaining efficiency in client network bandwidth. ",
+ "url": "/ostree/formats/#static-deltas",
+
+ "relUrl": "/formats/#static-deltas"
+ },"55": {
+ "doc": "OSTree data formats",
+ "title": "Static delta repository layout",
+ "content": "Since static deltas may not exist, the client first needs to attempt to locate one. Suppose a client wants to retrieve commit ${new} while currently running ${current}. In order to save space, these two commits are “modified base64” - the / character is replaced with _. Like the commit objects, a “prefix directory” is used to make management easier for filesystem tools. A delta is named $(mbase64 $from)-$(mbase64 $to), for example GpTyZaVut2jXFPWnO4LJiKEdRTvOw_mFUCtIKW1NIX0-L8f+VVDkEBKNc1Ncd+mDUrSVR4EyybQGCkuKtkDnTwk, which in SHA256 format is 1a94f265a56eb768d714f5a73b82c988a11d453bcec3f985502b48296d4d217d-2fc7fe5550e410128d73535c77e98352b495478132c9b4060a4b8ab640e74f09. Finally, the actual content can be found in deltas/$fromprefix/$fromsuffix-$to. ",
+ "url": "/ostree/formats/#static-delta-repository-layout",
+
+ "relUrl": "/formats/#static-delta-repository-layout"
+ },"56": {
+ "doc": "OSTree data formats",
+ "title": "Static delta internal structure",
+ "content": "A delta is itself a directory. Inside, there is a file called superblock which contains metadata. The rest of the files will be integers bearing packs of content. The file format of static deltas should be currently considered an OSTree implementation detail. Obviously, nothing stops one from writing code which is compatible with OSTree today. However, we would like the flexibility to expand and change things, and having multiple codebases makes that more problematic. Please contact the authors with any requests. That said, one critical thing to understand about the design is that delta payloads are a bit more like “restricted programs” than they are raw data. There’s a “compilation” phase which generates output that the client executes. This “updates as code” model allows for multiple content generation strategies. The design of this was inspired by that of Chromium: ChromiumOS Autoupdate. The delta superblock . The superblock contains: . | arbitrary metadata | delta generation timestamp | the new commit object | An array of recursive deltas to apply | An array of per-part metadata, including total object sizes (compressed and uncompressed), | An array of fallback objects | . Let’s define a delta part, then return to discuss details: . ",
+ "url": "/ostree/formats/#static-delta-internal-structure",
+
+ "relUrl": "/formats/#static-delta-internal-structure"
+ },"57": {
+ "doc": "OSTree data formats",
+ "title": "A delta part",
+ "content": "A delta part is a combination of a raw blob of data, plus a very restricted bytecode that operates on it. Say for example two files happen to share a common section. It’s possible for the delta compilation to include that section once in the delta data blob, then generate instructions to write out that blob twice when generating both objects. Realistically though, it’s very common for most of a delta to just be “stream of new objects” - if one considers it, it doesn’t make sense to have too much duplication inside operating system content at this level. So then, what’s more interesting is that OSTree static deltas support a per-file delta algorithm called bsdiff that most notably works well on executable code. The current delta compiler scans for files with matching basenames in each commit that have a similar size, and attempts a bsdiff between them. (It would make sense later to have a build system provide a hint for this - for example, files within a same package). A generated bsdiff is included in the payload blob, and applying it is an instruction. ",
+ "url": "/ostree/formats/#a-delta-part",
+
+ "relUrl": "/formats/#a-delta-part"
+ },"58": {
+ "doc": "OSTree data formats",
+ "title": "Fallback objects",
+ "content": "It’s possible for there to be large-ish files which might be resistant to bsdiff. A good example is that it’s common for operating systems to use an “initramfs”, which is itself a compressed filesystem. This “internal compression” defeats bsdiff analysis. For these types of objects, the delta superblock contains an array of “fallback objects”. These objects aren’t included in the delta parts - the client simply fetches them from the underlying .filez object. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/formats/#fallback-objects",
+
+ "relUrl": "/formats/#fallback-objects"
+ },"59": {
+ "doc": "Using Linux IMA with OSTree",
+ "title": "Using Linux IMA with OSTree",
+ "content": ". | Linux IMA | IMA signatures and OSTree checksum | Signing . | Generating a key | Signing a commit | Applying a policy | Linux EVM | . | Further references | . ",
+ "url": "/ostree/ima/",
+
+ "relUrl": "/ima/"
+ },"60": {
+ "doc": "Using Linux IMA with OSTree",
+ "title": "Linux IMA",
+ "content": "The Linux Integrity Measurement Architecture provides a mechanism to cryptographically sign the digest of a regular file, and policies can be applied to e.g. require that code executed by the root user have a valid signed digest. The alignment between Linux IMA and ostree is quite strong. OSTree provides a content-addressable object store, where files are intended to be immutable. This is implemented with a basic read-only bind mount. While IMA does not actually prevent mutating files, any changed (or unsigned) files would (depending on policy) not be readable or executable. ",
+ "url": "/ostree/ima/#linux-ima",
+
+ "relUrl": "/ima/#linux-ima"
+ },"61": {
+ "doc": "Using Linux IMA with OSTree",
+ "title": "IMA signatures and OSTree checksum",
+ "content": "Mechanically, IMA signatures appear as a security.ima extended attribute on the file. This is a signed digest of just the file content (and not any metadata) . OSTree’s checksums in contrast include not just the file content, but also metadata such as uid, gid and mode and extended attributes; . Together, this means that adding an IMA signature to a file in the OSTree model appears as a new object (with a new digest). A nice property is that this enables the transactional addition (or removal) of IMA signatures. However, adding IMA signatures to files that were previously unsigned also today duplicates disk space. ",
+ "url": "/ostree/ima/#ima-signatures-and-ostree-checksum",
+
+ "relUrl": "/ima/#ima-signatures-and-ostree-checksum"
+ },"62": {
+ "doc": "Using Linux IMA with OSTree",
+ "title": "Signing",
+ "content": "To apply IMA signatures to an OSTree commit, there is an ima-sign command implemented currently in the ostree-rs-ext project. Generating a key . There is documentation for this in man evmctl and the upstream IMA page; we will not replicate it here. Signing a commit . ima-sign requires 4 things: . | An OSTree repository (could be any mode; archive or e.g. bare-user) | A ref or commit digest (e.g. exampleos/x86_64/stable) | A digest algorithm (usually sha256, but you may use e.g. sha512 as well) | An RSA private key | . You can then add IMA signatures to all regular files in the commit: . $ ostree-ext-cli ima-sign --repo=repo exampleos/x86_64/stable sha256 /path/to/key.pem . Many different choices are possible for the signing model. For example, your build system could store individual components/packages in their own ostree refs, and sign them at build time. This would avoid re-signing all binaries when creating production builds. Although note you still likely want to sign generated artifacts from unioning individual components, such as a dpkg/rpm database or equivalent and cache files such as the ldconfig and GTK+ icon caches, etc. Applying a policy . Signing a commit by itself will have little to no effect. You will also need to include in your builds an IMA policy. Linux EVM . The EVM subsystem builds on IMA, and adds another signature which covers most file data, such as the uid, gid and mode and selected security-relevant extended attributes. This is quite close to the ostree native checksum - the ordering of the fields is different so the checksums are physically different, but logically they are very close. However, the focus of the EVM design seems to mostly be on machine-specific signatures with keys stored in a TPM. Note that doing this on a per-machine basis would add a new security.evm extended attribute, and crucially that changes the ostree digest - so from ostree’s perspective, these objects will appear corrupt. In the future, ostree may learn to ignore the presence of security.evm extended attributes. There is also some support for “portable” EVM signatures - by default, EVM signatures also include the inode number and generation which are inherently machine-specific. A future ostree enhancement may instead also focus on supporting signing commits with these “portable” EVM signatures in addition to IMA. ",
+ "url": "/ostree/ima/#signing",
+
+ "relUrl": "/ima/#signing"
+ },"63": {
+ "doc": "Using Linux IMA with OSTree",
+ "title": "Further references",
+ "content": ". | https://sourceforge.net/p/linux-ima/wiki/Home/ | https://en.opensuse.org/SDB:Ima_evm | https://wiki.gentoo.org/wiki/Integrity_Measurement_Architecture | https://fedoraproject.org/wiki/Changes/Signed_RPM_Contents | https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/enhancing-security-with-the-kernel-integrity-subsystem_managing-monitoring-and-updating-the-kernel | . ",
+ "url": "/ostree/ima/#further-references",
+
+ "relUrl": "/ima/#further-references"
+ },"64": {
+ "doc": "libostree",
+ "title": "libostree",
+ "content": ". | Operating systems and distributions using OSTree | Distribution build tools | Projects linking to libostree | Language bindings | Building | API Reference | Manual Pages | Contributing | Licensing | . This project is now known as “libostree”, though it is still appropriate to use the previous name: “OSTree” (or “ostree”). The focus is on projects which use libostree’s shared library, rather than users directly invoking the command line tools (except for build systems). However, in most of the rest of the documentation, we will use the term “OSTree”, since it’s slightly shorter, and changing all documentation at once is impractical. We expect to transition to the new name over time. As implied above, libostree is both a shared library and suite of command line tools that combines a “git-like” model for committing and downloading bootable filesystem trees, along with a layer for deploying them and managing the bootloader configuration. The core OSTree model is like git in that it checksums individual files and has a content-addressed-object store. It’s unlike git in that it “checks out” the files via hardlinks, and they thus need to be immutable to prevent corruption. Therefore, another way to think of OSTree is that it’s just a more polished version of Linux VServer hardlinks. Features: . | Transactional upgrades and rollback for the system | Replicating content incrementally over HTTP via GPG signatures and “pinned TLS” support | Support for parallel installing more than just 2 bootable roots | Binary history on the server side (and client) | Introspectable shared library API for build and deployment systems | Flexible support for multiple branches and repositories, supporting projects like flatpak which use libostree for applications, rather than hosts. | . ",
+ "url": "/ostree/",
+
+ "relUrl": "/"
+ },"65": {
+ "doc": "libostree",
+ "title": "Operating systems and distributions using OSTree",
+ "content": "Endless OS uses libostree for their host system as well as flatpak. See their eos-updater and deb-ostree-builder projects. Fedora derivatives use rpm-ostree (noted below); there are 4 variants using OSTree: . | Fedora CoreOS | Fedora Silverblue | Fedora Kinoite | Fedora IoT | . Red Hat Enterprise Linux CoreOS is a derivative of Fedora CoreOS, used in OpenShift 4. The machine-config-operator manages upgrades. RHEL CoreOS is also the successor to RHEL Atomic Host, which uses rpm-ostree as well. GNOME Continuous is where OSTree was born - as a high performance continuous delivery/testing system for GNOME. Liri OS has the option to install their distribution using ostree. TorizonCore uses libostree and Aktualizr as the base for OTA updates from compatible platforms, including Torizon OTA. ",
+ "url": "/ostree/#operating-systems-and-distributions-using-ostree",
+
+ "relUrl": "/#operating-systems-and-distributions-using-ostree"
+ },"66": {
+ "doc": "libostree",
+ "title": "Distribution build tools",
+ "content": "meta-updater is a layer available for OpenEmbedded systems. QtOTA is Qt’s over-the-air update framework which uses libostree. The BuildStream build and integration tool supports importing and exporting from libostree repos. Fedora coreos-assembler is the build tool used to generate Fedora CoreOS derivatives. ",
+ "url": "/ostree/#distribution-build-tools",
+
+ "relUrl": "/#distribution-build-tools"
+ },"67": {
+ "doc": "libostree",
+ "title": "Projects linking to libostree",
+ "content": "rpm-ostree is used by the Fedora-derived operating systems listed above. It is a full hybrid image/package system. By default it uses libostree to atomically replicate a base OS (all dependency resolution is done on the server), but it supports “package layering”, where additional RPMs can be layered on top of the base. This brings a “best of both worlds”” model for image and package systems. eos-updater is a daemon that implements updates on EndlessOS. flatpak uses libostree for desktop application containers. Unlike most of the other systems here, flatpak does not use the “libostree host system” aspects (e.g. bootloader management), just the “git-like hardlink dedup”. For example, flatpak supports a per-user OSTree repository. ",
+ "url": "/ostree/#projects-linking-to-libostree",
+
+ "relUrl": "/#projects-linking-to-libostree"
+ },"68": {
+ "doc": "libostree",
+ "title": "Language bindings",
+ "content": "libostree is accessible via GObject Introspection; any language which has implemented the GI binding model should work. For example, Both pygobject and gjs are known to work and further are actually used in libostree’s test suite today. Some bindings take the approach of using GI as a lower level and write higher level manual bindings on top; this is more common for statically compiled languages. Here’s a list of such bindings: . | ostree-go | ostree-rs | . ",
+ "url": "/ostree/#language-bindings",
+
+ "relUrl": "/#language-bindings"
+ },"69": {
+ "doc": "libostree",
+ "title": "Building",
+ "content": "Releases are available as GPG signed git tags, and most recent versions support extended validation using git-evtag. However, in order to build from a git clone, you must update the submodules. If you’re packaging OSTree and want a tarball, I recommend using a “recursive git archive” script. There are several available online; this code in OSTree is an example. Once you have a git clone or recursive archive, building is the same as almost every autotools project: . git submodule update --init env NOCONFIGURE=1 ./autogen.sh ./configure --prefix=... make make install DESTDIR=/path/to/dest . ",
+ "url": "/ostree/#building",
+
+ "relUrl": "/#building"
+ },"70": {
+ "doc": "libostree",
+ "title": "API Reference",
+ "content": "The libostree API documentation is available in Reference. ",
+ "url": "/ostree/#api-reference",
+
+ "relUrl": "/#api-reference"
+ },"71": {
+ "doc": "libostree",
+ "title": "Manual Pages",
+ "content": "The ostree manual pages are available in Manual. ",
+ "url": "/ostree/#manual-pages",
+
+ "relUrl": "/#manual-pages"
+ },"72": {
+ "doc": "libostree",
+ "title": "Contributing",
+ "content": "See Contributing. ",
+ "url": "/ostree/#contributing",
+
+ "relUrl": "/#contributing"
+ },"73": {
+ "doc": "libostree",
+ "title": "Licensing",
+ "content": "The licensing for the code of libostree can be canonically found in the individual files; and the overall status in the COPYING file in the source. Currently, that’s LGPLv2+. This also covers the man pages and API docs. The license for the manual documentation in the doc/ directory is: SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) This is intended to allow use by Wikipedia and other projects. In general, files should have a SPDX-License-Identifier and that is canonical. ",
+ "url": "/ostree/#licensing",
+
+ "relUrl": "/#licensing"
+ },"74": {
+ "doc": "OSTree Overview",
+ "title": "OSTree Overview",
+ "content": ". | Introduction | Hello World example | Comparison with “package managers” | Comparison with block/image replication | Atomic transitions between parallel-installable read-only filesystem trees . | Licensing for this document: | . | . ",
+ "url": "/ostree/introduction/",
+
+ "relUrl": "/introduction/"
+ },"75": {
+ "doc": "OSTree Overview",
+ "title": "Introduction",
+ "content": "OSTree is an upgrade system for Linux-based operating systems that performs atomic upgrades of complete filesystem trees. It is not a package system; rather, it is intended to complement them. A primary model is composing packages on a server, and then replicating them to clients. The underlying architecture might be summarized as “git for operating system binaries”. It operates in userspace, and will work on top of any Linux filesystem. At its core is a git-like content-addressed object store with branches (or “refs”) to track meaningful filesystem trees within the store. Similarly, one can check out or commit to these branches. Layered on top of that is bootloader configuration, management of /etc, and other functions to perform an upgrade beyond just replicating files. You can use OSTree standalone in the pure replication model, but another approach is to add a package manager on top, thus creating a hybrid tree/package system. ",
+ "url": "/ostree/introduction/#introduction",
+
+ "relUrl": "/introduction/#introduction"
+ },"76": {
+ "doc": "OSTree Overview",
+ "title": "Hello World example",
+ "content": "OSTree is mostly used as a library, but a quick tour of using its CLI tools can give a general idea of how it works at its most basic level. You can create a new OSTree repository using init: . $ ostree --repo=repo init . This will create a new repo directory containing your repository. Feel free to inspect it. Now, let’s prepare some data to add to the repo: . $ mkdir tree $ echo \"Hello world!\" &gt; tree/hello.txt . We can now import our tree/ directory using the commit command: . $ ostree --repo=repo commit --branch=foo tree/ . This will create a new branch foo pointing to the full tree imported from tree/. In fact, we could now delete tree/ if we wanted to. To check that we indeed now have a foo branch, you can use the refs command: . $ ostree --repo=repo refs foo . We can also inspect the filesystem tree using the ls and cat commands: . $ ostree --repo=repo ls foo d00775 1000 1000 0 / -00664 1000 1000 13 /hello.txt $ ostree --repo=repo cat foo /hello.txt Hello world! . And finally, we can check out our tree from the repository: . $ ostree --repo=repo checkout foo tree-checkout/ $ cat tree-checkout/hello.txt Hello world! . ",
+ "url": "/ostree/introduction/#hello-world-example",
+
+ "relUrl": "/introduction/#hello-world-example"
+ },"77": {
+ "doc": "OSTree Overview",
+ "title": "Comparison with “package managers”",
+ "content": "Because OSTree is designed for deploying core operating systems, a comparison with traditional “package managers” such as dpkg and rpm is illustrative. Packages are traditionally composed of partial filesystem trees with metadata and scripts attached, and these are dynamically assembled on the client machine, after a process of dependency resolution. In contrast, OSTree only supports recording and deploying complete (bootable) filesystem trees. It has no built-in knowledge of how a given filesystem tree was generated or the origin of individual files, or dependencies, descriptions of individual components. Put another way, OSTree only handles delivery and deployment; you will likely still want to include inside each tree metadata about the individual components that went into the tree. For example, a system administrator may want to know what version of OpenSSL was included in your tree, so you should support the equivalent of rpm -q or dpkg -L. The OSTree core emphasizes replicating read-only OS trees via HTTP, and where the OS includes (if desired) an entirely separate mechanism to install applications, stored in /var if they’re system global, or /home for per-user application installation. An example application mechanism is http://docker.io/ . However, it is entirely possible to use OSTree underneath a package system, where the contents of /usr are computed on the client. For example, when installing a package, rather than changing the currently running filesystem, the package manager could assemble a new filesystem tree that layers the new packages on top of a base tree, record it in the local OSTree repository, and then set it up for the next boot. To support this model, OSTree provides an (introspectable) C shared library. ",
+ "url": "/ostree/introduction/#comparison-with-package-managers",
+
+ "relUrl": "/introduction/#comparison-with-package-managers"
+ },"78": {
+ "doc": "OSTree Overview",
+ "title": "Comparison with block/image replication",
+ "content": "OSTree shares some similarity with “dumb” replication and stateless deployments, such as the model common in “cloud” deployments where nodes are booted from an (effectively) readonly disk, and user data is kept on a different volumes. The advantage of “dumb” replication, shared by both OSTree and the cloud model, is that it’s reliable and predictable. But unlike many default image-based deployments, OSTree supports exactly two persistent writable directories that are preserved across upgrades: /etc and /var. Because OSTree operates at the Unix filesystem layer, it works on top of any filesystem or block storage layout; it’s possible to replicate a given filesystem tree from an OSTree repository into plain ext4, BTRFS, XFS, or in general any Unix-compatible filesystem that supports hard links. Note: OSTree will transparently take advantage of some BTRFS features if deployed on it. OSTree is orthogonal to virtualization mechanisms like AMIs and qcow2 images, though it’s most useful though if you plan to update stateful VMs in-place, rather than generating new images. In practice, users of “bare metal” configurations will find the OSTree model most useful. ",
+ "url": "/ostree/introduction/#comparison-with-blockimage-replication",
+
+ "relUrl": "/introduction/#comparison-with-blockimage-replication"
+ },"79": {
+ "doc": "OSTree Overview",
+ "title": "Atomic transitions between parallel-installable read-only filesystem trees",
+ "content": "Another deeply fundamental difference between both package managers and image-based replication is that OSTree is designed to parallel-install multiple versions of multiple independent operating systems. OSTree relies on a new toplevel ostree directory; it can in fact parallel install inside an existing OS or distribution occupying the physical / root. On each client machine, there is an OSTree repository stored in /ostree/repo, and a set of “deployments” stored in /ostree/deploy/$STATEROOT/$CHECKSUM. Each deployment is primarily composed of a set of hardlinks into the repository. This means each version is deduplicated; an upgrade process only costs disk space proportional to the new files, plus some constant overhead. The model OSTree emphasizes is that the OS read-only content is kept in the classic Unix /usr; it comes with code to create a Linux read-only bind mount to prevent inadvertent corruption. There is exactly one /var writable directory shared between each deployment for a given OS. The OSTree core code does not touch content in this directory; it is up to the code in each operating system for how to manage and upgrade state. Finally, each deployment has its own writable copy of the configuration store /etc. On upgrade, OSTree will perform a basic 3-way diff, and apply any local changes to the new copy, while leaving the old untouched. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/introduction/#atomic-transitions-between-parallel-installable-read-only-filesystem-trees",
+
+ "relUrl": "/introduction/#atomic-transitions-between-parallel-installable-read-only-filesystem-trees"
+ },"80": {
+ "doc": "Related Projects",
+ "title": "Related Projects",
+ "content": ". | Combining dpkg/rpm + (BTRFS/LVM) | ChromiumOS updater | Ubuntu Image Based Updates | Clear Linux Software update | casync | Mender.io | OLPC update | NixOS / Nix | Solaris IPS | Google servers (custom rsync-like approach, live updates) | Conary | bmap | Git | Conda | rpm-ostree | GNOME Continuous | Docker | Docker-related: Balena | Torizon Platform . | TorizonCore | TorizonCore Builder | Torizon OTA . | Licensing for this document: | . | . | . OSTree is in many ways very evolutionary. It builds on concepts and ideas introduced from many different projects such as Systemd Stateless, Systemd Bootloader Spec, Chromium Autoupdate, the much older Fedora/Red Hat Stateless Project, Linux VServer and many more. As mentioned elsewhere, OSTree is strongly influenced by package manager designs as well. This page is not intended to be an exhaustive list of such projects, but we will try to keep it up to date, and relatively agnostic. Broadly speaking, projects in this area fall into two camps; either a tool to snapshot systems on the client side (dpkg/rpm + BTRFS/LVM), or a tool to compose on a server and replicate (ChromiumOS, Clear Linux). OSTree is flexible enough to do both. Note that this section of the documentation is almost entirely focused on the “ostree for host” model; the flatpak project uses libostree to store application data, distinct from the host system management model. ",
+ "url": "/ostree/related-projects/",
+
+ "relUrl": "/related-projects/"
+ },"81": {
+ "doc": "Related Projects",
+ "title": "Combining dpkg/rpm + (BTRFS/LVM)",
+ "content": "In this approach, one uses a block/filesystem snapshot tool underneath the system package manager. The oVirt Node imgbased tool is an example of this approach, as are a few others below. Regarding BTRFS in particular - the OSTree author believes that Linux storage is a wide world, and while BTRFS is quite good, it is not everywhere now, nor will it be in the near future. There are other recently developed filesystems like f2fs, and Red Hat Enterprise Linux still defaults to XFS. Using a snapshot tool underneath a package manager does help significantly. In the rest of this text, we will use “BTRFS” as a mostly generic tool for filesystem snapshots. The obvious thing to do is layer BTRFS under dpkg/rpm, and have a separate subvolume for /home so rollbacks don’t lose your data. See e.g. Fedora BTRFS Rollback Feature. More generally, if you want to use BTRFS to roll back changes made by dpkg/rpm, you have to carefully set up the partition layout so that the files laid out by dpkg/rpm are installed in a subvolume to snapshot. This problem in many ways is addressed by the changes OSTree forces, such as putting all local state in /var (e.g. /usr/local -&gt; /var/usrlocal). Then one can BTRFS snapshot /usr. This gets pretty far, except handling /etc is messy. This is something OSTree does well. In general, if one really tries to flesh out the BTRFS approach, a nontrivial middle layer of code between dpkg/rpm and BTRFS (or deep awareness of BTRFS in dpkg/rpm itself) will be required. A good example of this is the snapper.io project. The OSTree author believes that having total freedom at the block storage layer is better for general purpose operating systems. For example, the ability to choose dm-crypt per deployment is quite useful; not every site wants to pay the performance penalty. One can choose LVM or not, etc. Where applicable, OSTree does take advantage of copy-on-write/reflink features offered by the kernel for /etc. It uses the now generic ioctl(FICLONE) and copy_file_range(). Another major distinction between the default OSTree usage and package managers is whether updates are “online” or “offline” by default. The default OSTree design writes updates into a new root, leaving the running system unchanged. This means preparing updates is completely non-disruptive and safe - if the system runs out of disk space in the middle, it’s easy to recover. However, there is work in the rpm-ostree project to support online updates as well. OSTree supports using “bare-user” repositories, which do not require root to use. Using a filesystem-level layer without root is more difficult and would likely require a setuid helper or privileged service. Finally, see the next portion around ChromiumOS for why a hybrid but integrated package/image system improves on this. ",
+ "url": "/ostree/related-projects/#combining-dpkgrpm--btrfslvm",
+
+ "relUrl": "/related-projects/#combining-dpkgrpm--btrfslvm"
+ },"82": {
+ "doc": "Related Projects",
+ "title": "ChromiumOS updater",
+ "content": "Many people who look at OSTree are most interested in using it as an updater for embedded or fixed-purpose systems, similar to use cases from the ChromiumOS updater. The ChromiumOS approach uses two partitions that are swapped via the bootloader. It has a very network-efficient update protocol, using a custom binary delta scheme between filesystem snapshots. This model even allows for switching filesystem types in an update. A major downside of this approach is that the OS size is doubled on disk always. In contrast, OSTree uses plain Unix hardlinks, which means it essentially only requires disk space proportional to the changed files, plus some small fixed overhead. This means with OSTree, one can easily have more than two trees (deployments). Another example is that the system OSTree repository could also be used for application containers. Finally, the author of OSTree believes that what one really wants for many cases is image replication with the ability to layer on some additional components (e.g. packages) - a hybrid model. This is what rpm-ostree is aiming to support. ",
+ "url": "/ostree/related-projects/#chromiumos-updater",
+
+ "relUrl": "/related-projects/#chromiumos-updater"
+ },"83": {
+ "doc": "Related Projects",
+ "title": "Ubuntu Image Based Updates",
+ "content": "See https://wiki.ubuntu.com/ImageBasedUpgrades. Very architecturally similar to ChromeOS, although more interesting is discussion for supporting package installation on top, similar to rpm-ostree package layering. ",
+ "url": "/ostree/related-projects/#ubuntu-image-based-updates",
+
+ "relUrl": "/related-projects/#ubuntu-image-based-updates"
+ },"84": {
+ "doc": "Related Projects",
+ "title": "Clear Linux Software update",
+ "content": "The Clear Linux Software update system is not very well documented. This mailing list post has some reverse-engineered design documentation. Like OSTree static deltas, it also uses bsdiff for network efficiency. More information will be filled in here over time. The OSTree author believes that at the moment, the “CL updater” is not truly atomic in the sense that because it applies updates live, there is a window where the OS root may be inconsistent. ",
+ "url": "/ostree/related-projects/#clear-linux-software-update",
+
+ "relUrl": "/related-projects/#clear-linux-software-update"
+ },"85": {
+ "doc": "Related Projects",
+ "title": "casync",
+ "content": "The systemd casync project is relatively new. Currently, it is more of a storage library, and doesn’t support higher level logic for things like GPG signatures, versioning information, etc. This is mostly the OstreeRepo layer. Moving up to the OstreeSysroot level - things like managing the bootloader configuration, and most importantly implementing correct merging for /etc are missing. casync also is unaware of SELinux. OSTree is really today a shared library, and has been for quite some time. This has made it easy to build higher level projects such as rpm-ostree which has quite a bit more, such as a DBus API and other projects consume that, such as Cockpit. A major issue with casync today is that it doesn’t support garbage collection on the server side. OSTree’s GC works symmetrically on the server and client side. Broadly speaking, casync is a twist on the dual partition approach, and shares the general purpose disadvantages of those. ",
+ "url": "/ostree/related-projects/#casync",
+
+ "relUrl": "/related-projects/#casync"
+ },"86": {
+ "doc": "Related Projects",
+ "title": "Mender.io",
+ "content": "Mender.io is another implementation of the dual partition approach. ",
+ "url": "/ostree/related-projects/#menderio",
+
+ "relUrl": "/related-projects/#menderio"
+ },"87": {
+ "doc": "Related Projects",
+ "title": "OLPC update",
+ "content": "OSTree is basically a generalization of olpc-update, except using plain HTTP instead of rsync. OSTree has the notion of separate trees that one can track independently or parallel install, while still sharing storage via the hardlinked repository, whereas olpc-update uses version numbers for a single OS. OSTree has built-in plain old HTTP replication which can be served from a static webserver, whereas olpc-update uses rsync (more server load, but more efficient on the network side). The OSTree solution to improving network bandwidth consumption is via static deltas. See this comment for a comparison. ",
+ "url": "/ostree/related-projects/#olpc-update",
+
+ "relUrl": "/related-projects/#olpc-update"
+ },"88": {
+ "doc": "Related Projects",
+ "title": "NixOS / Nix",
+ "content": "See NixOS. It was a very influential project for OSTree. NixOS and OSTree both support the idea of independent “roots” that are bootable. In NixOS, files in a package are accessed by a path depending on the checksums of package inputs (build dependencies) - see Nix store. However, OSTree uses a commit/deploy model - it isn’t tied to any particular directory layout, and you can put whatever data you want inside an OSTree, for example the standard FHS layout. A both positive and negative of the Nix model is that a change in the build dependencies (e.g. being built with a newer gcc), requires a cascading rebuild of everything. It’s good because it makes it easy to do massive system-wide changes such as gcc upgrades, and allows installing multiple versions of packages at once. However, a security update to e.g. glibc forces a rebuild of everything from scratch, and so Nix is not practical at scale. OSTree supports using a build system that just rebuilds individual components (packages) as they change, without forcing a rebuild of their dependencies. Nix automatically detects runtime package dependencies by scanning content for hashes. OSTree only supports only system-level images, and doesn’t do dependency management. Nix can store arbitrary files, using nix-store --add, but, more commonly, paths are added as the result of running a derivation file generated using the Nix language. OSTree is build-system agnostic; filesystem trees are committed using a simple C API, and this is the only way to commit files. OSTree automatically shares the storage of identical data using hard links into a content-addressed store. Nix can deduplicate using hard links as well, using the auto-optimise-store option, but this is not on by default, and Nix does not guarantee that all of its files are in the content-addressed store. OSTree provides a git-like command line interface for browsing the content-addressed store, while Nix does not have this functionality. Nix used to use the immutable bit to prevent modifications to /nix/store, but now it uses a read-only bind mount. The bind mount can be privately remounted, allowing per-process privileged write access. OSTree uses the immutable bit on the root of the deployment, and mounts /usr as read-only. NixOS supports switching OS images on-the-fly, by maintaining both booted-system and current-system roots. It is not clear how well this approach works. OSTree currently requries a reboot to switch images. Finally, NixOS supports installing user-specific packages from trusted repositories without requiring root, using a trusted daemon. Flatpak, based on OSTree, similarly has a policykit-based system helper that allows you to authenticate via polkit to install into the system repository. ",
+ "url": "/ostree/related-projects/#nixos--nix",
+
+ "relUrl": "/related-projects/#nixos--nix"
+ },"89": {
+ "doc": "Related Projects",
+ "title": "Solaris IPS",
+ "content": "See Solaris IPS. Broadly, this is a similar design as to a combination of BTRFS+RPM/deb. There is a bootloader management system which combines with the snapshots. It’s relatively well thought through - however, it is a client-side system assembly. If one wants to image servers and replicate reliably, that’d be a different system. ",
+ "url": "/ostree/related-projects/#solaris-ips",
+
+ "relUrl": "/related-projects/#solaris-ips"
+ },"90": {
+ "doc": "Related Projects",
+ "title": "Google servers (custom rsync-like approach, live updates)",
+ "content": "This paper talks about how Google was (at least at one point) managing updates for the host systems for some servers: Live Upgrading Thousands of Servers from an Ancient Red Hat Distribution to 10 Year Newer Debian Based One (USENIX LISA 2013) . ",
+ "url": "/ostree/related-projects/#google-servers-custom-rsync-like-approach-live-updates",
+
+ "relUrl": "/related-projects/#google-servers-custom-rsync-like-approach-live-updates"
+ },"91": {
+ "doc": "Related Projects",
+ "title": "Conary",
+ "content": "See Conary Updates and Rollbacks. If rpm/dpkg are like CVS, Conary is closer to Subversion. It’s not bad, but e.g. its rollback model is rather ad-hoc and not atomic. It also is a fully client side system and doesn’t have an image-like replication with deltas. ",
+ "url": "/ostree/related-projects/#conary",
+
+ "relUrl": "/related-projects/#conary"
+ },"92": {
+ "doc": "Related Projects",
+ "title": "bmap",
+ "content": "See bmap. A tool for optimized copying of disk images. Intended for offline use, so not directly comparable. ",
+ "url": "/ostree/related-projects/#bmap",
+
+ "relUrl": "/related-projects/#bmap"
+ },"93": {
+ "doc": "Related Projects",
+ "title": "Git",
+ "content": "Although OSTree has been called “Git for Binaries”, and the two share the idea of a hashed content store, the implementation details are quite different. OSTree supports extended attributes and uses SHA256 instead of Git’s SHA1. It “checks out” files via hardlinks, rather than copying, and thus requires the checkout to be immutable. At the moment, OSTree commits may have at most one parent, as opposed to Git which allows an arbitrary number. Git uses a smart-delta protocol for updates, while OSTree uses 1 HTTP request per changed file, or can generate static deltas. ",
+ "url": "/ostree/related-projects/#git",
+
+ "relUrl": "/related-projects/#git"
+ },"94": {
+ "doc": "Related Projects",
+ "title": "Conda",
+ "content": "Conda is an “OS-agnostic, system-level binary package manager and ecosystem”; although most well-known for its accompanying Python distribution anaconda, its scope has been expanding quickly. The package format is very similar to well-known ones such as RPM. However, unlike typical RPMs, the packages are built to be relocatable. Also, the package manager runs natively on Windows. Conda’s main advantage is its ability to install collections of packages into “environments” by unpacking them all to the same directory. Conda reduces duplication across environments using hardlinks, similar to OSTree’s sharing between deployments (although Conda uses package / file path instead of file hash). Overall, it is quite similar to rpm-ostree in functionality and scope. ",
+ "url": "/ostree/related-projects/#conda",
+
+ "relUrl": "/related-projects/#conda"
+ },"95": {
+ "doc": "Related Projects",
+ "title": "rpm-ostree",
+ "content": "This builds on top of ostree to support building RPMs into OSTree images, and even composing RPMs on-the-fly using an overlay filesystem. It is being developed by Fedora, Red Hat, and CentOS as part of Project Atomic. ",
+ "url": "/ostree/related-projects/#rpm-ostree",
+
+ "relUrl": "/related-projects/#rpm-ostree"
+ },"96": {
+ "doc": "Related Projects",
+ "title": "GNOME Continuous",
+ "content": "This is a service that incrementally rebuilds and tests GNOME on every commit. The need to make and distribute snapshots for this system was the original inspiration for ostree. ",
+ "url": "/ostree/related-projects/#gnome-continuous",
+
+ "relUrl": "/related-projects/#gnome-continuous"
+ },"97": {
+ "doc": "Related Projects",
+ "title": "Docker",
+ "content": "It makes sense to compare OSTree and Docker as far as wire formats go. OSTree is not itself a container tool, but can be used as a transport/storage format for container tools. Docker has (at the time of this writing) two format versions (v1 and v2). v1 is deprecated, so we’ll look at format version 2. A Docker image is a series of layers, and a layer is essentially JSON metadata plus a tarball. The tarballs capture changes between layers, including handling deleting files in higher layers. Because the payload format is just tar, Docker hence captures (numeric) uid/gid and xattrs. This “layering” model is an interesting and powerful part of Docker, allowing different images to reference a shared base. OSTree doesn’t implement this natively, but it’s not difficult to implement in higher level tools. For example in flatpak, there’s a concept of a SDK and runtime, and it would make a lot of sense for the SDK to depend on the runtime, to avoid clients downloading data twice (even if it’s deduplicated on disk). That gets to an advantage of OSTree over Docker; OSTree checksums individual files (not tarballs), and uses this for deduplication. Docker (natively) only shares storage via layering. The biggest feature OSTree has over Docker though is support for (static) deltas, and even without pre-configured static deltas, the archive format has “natural” deltas. Particularly for a “base operating system”, one really wants on-wire deltas. It’d likely be possible to extend Docker with this concept. A core challenge both share is around metadata (particularly signing) and search/discovery (the ostree summary file doesn’t scale very well). One major issue Docker has is that it checksums compressed data, and furthermore the tar format is flexible, with multiple ways to represent data, making it hard to impossible to reassemble and verify from on-disk state. The tarsum effort was intended to address this, but it was not adopted in the end for v2. ",
+ "url": "/ostree/related-projects/#docker",
+
+ "relUrl": "/related-projects/#docker"
+ },"98": {
+ "doc": "Related Projects",
+ "title": "Docker-related: Balena",
+ "content": "The Balena project forks Docker and aims to even use Docker/OCI format for the root filesystem, and adds wire deltas using librsync. See also discussion on libostree-list. ",
+ "url": "/ostree/related-projects/#docker-related-balena",
+
+ "relUrl": "/related-projects/#docker-related-balena"
+ },"99": {
+ "doc": "Related Projects",
+ "title": "Torizon Platform",
+ "content": "Torizon is an open-source software platform that simplifies the development and maintenance of embedded Linux software. It is designed to be used out-of-the-box on devices requiring high reliability, allowing you to focus on your application and not on building and maintaining the operating system. TorizonCore . The platform OS - TorizonCore - is a minimal OS with a Docker runtime and libostree + Aktualizr. The main goal of this system is to allow application developers to use containers, while the maintainers of TorizonCore focus on the base system updates. TorizonCore Builder . Since the TorizonCore OS is meant as a binary distribution, OS customization is made easier with TorizonCore Builder, as the tool abstracts the handling of OSTree concepts from the final users. Torizon OTA . Torizon OTA is a hosted OTA update system that provides OS updates to TorizonCore using OSTree and Aktualizr. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/related-projects/#torizon-platform",
+
+ "relUrl": "/related-projects/#torizon-platform"
+ },"100": {
+ "doc": "Anatomy of an OSTree repository",
+ "title": "Anatomy of an OSTree repository",
+ "content": ". | Core object types and data model . | Commit objects | Dirtree objects | Dirmeta objects | Content objects | Xattrs objects | . | Repository types and locations . | Refs | The summary file . | Licensing for this document: | . | . | . ",
+ "url": "/ostree/repo/",
+
+ "relUrl": "/repo/"
+ },"101": {
+ "doc": "Anatomy of an OSTree repository",
+ "title": "Core object types and data model",
+ "content": "OSTree is deeply inspired by git; the core layer is a userspace content-addressed 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. 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. And most crucially, its content objects include uid, gid, and extended attributes (but still no timestamps). 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. This type of object is stored as files ending with .dirtree in the objects directory. 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. These type of objects are stored as files ending with .dirmeta in the objects directory. 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. These parts together form the SHA256 hash for content objects. The content type objects in this format exist only in archive OSTree repositories. Today the content part is gzip’ed and the objects are stored as files ending with .filez in the objects directory. Because the SHA256 hash is formed over the uncompressed content, these files do not match the hash they are named as. The OSTree data format intentionally does not contain timestamps. The reasoning is that data files may be downloaded at different times, and by different build systems, and so will have different timestamps but identical physical content. These files may be large, so most users would like them to be shared, both in the repository and between the repository and deployments. This could cause problems with programs that check if files are out-of-date by comparing timestamps. For Git, the logical choice is to not mess with timestamps, because unnecessary rebuilding is better than a broken tree. However, OSTree has to hardlink files to check them out, and commits are assumed to be internally consistent with no build steps needed. For this reason, OSTree acts as though all timestamps are set to time_t 0, so that comparisons will be considered up-to-date. Note that for a few releases, OSTree used 1 to fix warnings such as GNU Tar emitting “implausibly old time stamp” with 0; however, until we have a mechanism to transition cleanly to 1, for compatibilty OSTree is reverted to use zero again. Xattrs objects . In some repository modes (e.g. bare-split-xattrs), xattrs are stored on the side of the content objects they refer to. This is done via two dedicated object types, file-xattrs and file-xattrs-link. file-xattrs store xattrs data, encoded as GVariant. Each object is keyed by the checksum of the xattrs content, allowing for multiple references. file-xattrs-link are hardlinks which are associated to file objects. Each object is keyed by the same checksum of the corresponding file object. The target of the hardlink is an existing file-xattrs object. In case of reaching the limit of too many links, this object could be a plain file too. ",
+ "url": "/ostree/repo/#core-object-types-and-data-model",
+
+ "relUrl": "/repo/#core-object-types-and-data-model"
+ },"102": {
+ "doc": "Anatomy of an OSTree repository",
+ "title": "Repository types and locations",
+ "content": "Also unlike git, an OSTree repository can be in one of five separate modes: bare, bare-split-xattrs, bare-user, bare-user-only, and archive. A bare repository is one where content files are just stored as regular files; it’s designed to be the source of a “hardlink farm”, where each operating system checkout is merely links into it. If you want to store files owned by e.g. root in this mode, you must run OSTree as root. The bare-split-xattrs mode is similar to the above one, but it does store xattrs as separate objects. This is meant to avoid conflicts with kernel-enforced constraints (e.g. on SELinux labels) and with other softwares that may perform ephemeral changes to xattrs (e.g. container runtimes). The bare-user mode is a later addition that is like bare in that files are unpacked, but it can (and should generally) be created as non-root. In this mode, extended metadata such as owner uid, gid, and extended attributes are stored in extended attributes under the name user.ostreemeta but not actually applied. The bare-user mode is useful for build systems that run as non-root but want to generate root-owned content, as well as non-root container systems. The bare-user-only mode is a variant to the bare-user mode. Unlike bare-user, neither ownership nor extended attributes are stored. These repos are meant to to be checked out in user mode (with the -U flag), where this information is not applied anyway. Hence this mode may lose metadata. The main advantage of bare-user-only is that repos can be stored on filesystems which do not support extended attributes, such as tmpfs. In contrast, the archive mode is designed for serving via plain HTTP. Like tar files, it can be read/written by non-root users. On an OSTree-deployed system, the “system repository” is /ostree/repo. It can be read by any uid, but only written by root. The ostree command will by default operate on the system repository; you may provide the --repo argument to override this, or set the $OSTREE_REPO environment variable. ",
+ "url": "/ostree/repo/#repository-types-and-locations",
+
+ "relUrl": "/repo/#repository-types-and-locations"
+ },"103": {
+ "doc": "Anatomy of an OSTree repository",
+ "title": "Refs",
+ "content": "Like git, OSTree uses the terminology “references” (abbreviated “refs”) which are text files that name (refer to) particular commits. See the Git Documentation for information on how git uses them. Unlike git though, it doesn’t usually make sense to have a “main” branch. There is a convention for references in OSTree that looks like this: exampleos/buildmain/x86_64-runtime and exampleos/buildmain/x86_64-devel-debug. These two refs point to two different generated filesystem trees. In this example, the “runtime” tree contains just enough to run a basic system, and “devel-debug” contains all of the developer tools and debuginfo. The ostree supports a simple syntax using the caret ^ to refer to the parent of a given commit. For example, exampleos/buildmain/x86_64-runtime^ refers to the previous build, and exampleos/buildmain/x86_64-runtime^^ refers to the one before that. ",
+ "url": "/ostree/repo/#refs",
+
+ "relUrl": "/repo/#refs"
+ },"104": {
+ "doc": "Anatomy of an OSTree repository",
+ "title": "The summary file",
+ "content": "A later addition to OSTree is the concept of a “summary” file, created via the ostree summary -u command. This was introduced for a few reasons. A primary use case is to be compatible with Metalink, which requires a single file with a known checksum as a target. The summary file primarily contains two mappings: . | A mapping of the refs and their checksums, equivalent to fetching the ref file individually | A list of all static deltas, along with their metadata checksums | . This currently means that it grows linearly with both items. On the other hand, using the summary file, a client can enumerate branches. Further, fetching the summary file over e.g. pinned TLS creates a strong end-to-end verification of the commit or static delta. The summary file can also be GPG signed (detached). This is currently the only way to provide GPG signatures (transitively) on deltas. If a repository administrator creates a summary file, they must thereafter run ostree summary -u to update it whenever a ref is updated or a static delta is generated. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/repo/#the-summary-file",
+
+ "relUrl": "/repo/#the-summary-file"
+ },"105": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Managing content in OSTree repositories",
+ "content": ". | Mirroring repositories | Separate development vs release repositories | Promoting content along OSTree branches - “buildmain”, “smoketested” | Promoting content between OSTree repositories | Derived data - static deltas and the summary file | Pruning our build and dev repositories | Generating “scratch” deltas for efficient initial downloads . | Licensing for this document: | . | . Once you have a build system going, if you actually want client systems to retrieve the content, you will quickly feel a need for “repository management”. The command line tool ostree does cover some core functionality, but doesn’t include very high level workflows. One reason is that how content is delivered and managed has concerns very specific to the organization. For example, some operating system content vendors may want integration with a specific errata notification system when generating commits. In this section, we will describe some high level ideas and methods for managing content in OSTree repositories, mostly independent of any particular model or tool. That said, there is an associated upstream project ostree-releng-scripts which has some scripts that are intended to implement portions of this document. Another example of software which can assist in managing OSTree repositories today is the Pulp Project, which has a Pulp OSTree plugin. ",
+ "url": "/ostree/repository-management/",
+
+ "relUrl": "/repository-management/"
+ },"106": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Mirroring repositories",
+ "content": "It’s very common to want to perform a full or partial mirror, in particular across organizational boundaries (e.g. an upstream OS provider, and a user that wants offline and faster access to the content). OSTree supports both full and partial mirroring of the base archive content, although not yet of static deltas. To create a mirror, first create an archive repository (you don’t need to run this as root), then add the upstream as a remote, then use pull --mirror. ostree --repo=repo init --mode=archive ostree --repo=repo remote add exampleos https://exampleos.com/ostree/repo ostree --repo=repo pull --mirror exampleos:exampleos/x86_64/standard . You can use the --depth=-1 option to retrieve all history, or a positive integer like 3 to retrieve just the last 3 commits. See also the rsync-repos script in ostree-releng-scripts. ",
+ "url": "/ostree/repository-management/#mirroring-repositories",
+
+ "relUrl": "/repository-management/#mirroring-repositories"
+ },"107": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Separate development vs release repositories",
+ "content": "By default, OSTree accumulates server side history. This is actually optional in that your build system can (using the API) write a commit with no parent. But first, we’ll investigate the ramifications of server side history. Many content vendors will want to separate their internal development with what is made public to the world. Therefore, you will want (at least) two OSTree repositories, we’ll call them “dev” and “prod”. To phrase this another way, let’s say you have a continuous delivery system which is building from git and committing into your “dev” OSTree repository. This might happen tens to hundreds of times per day. That’s a substantial amount of history over time, and it’s unlikely most of your content consumers (i.e. not developers/testers) will be interested in all of it. The original vision of OSTree was to fulfill this “dev” role, and in particular the “archive” format was designed for it. Then, what you’ll want to do is promote content from “dev” to “prod”. We’ll discuss this later, but first, let’s talk about promotion inside our “dev” repository. ",
+ "url": "/ostree/repository-management/#separate-development-vs-release-repositories",
+
+ "relUrl": "/repository-management/#separate-development-vs-release-repositories"
+ },"108": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Promoting content along OSTree branches - “buildmain”, “smoketested”",
+ "content": "Besides multiple repositories, OSTree also supports multiple branches inside one repository, equivalent to git’s branches. We saw in an earlier section an example branch name like exampleos/x86_64/standard. Choosing the branch name for your “prod” repository is absolutely critical as client systems will reference it. It becomes an important part of your face to the world, in the same way the “main” branch in a git repository is. But with your “dev” repository internally, it can be very useful to use OSTree’s branching concepts to represent different stages in a software delivery pipeline. Deriving from exampleos/x86_64/standard, let’s say our “dev” repository contains exampleos/x86_64/buildmain/standard. We choose the term “buildmain” to represent something that came straight from git main. It may not be tested very much. Our next step should be to hook up a testing system (Jenkins, Buildbot, etc.) to this. When a build (commit) passes some tests, we want to “promote” that commit. Let’s create a new branch called smoketested to say that some basic sanity checks pass on the complete system. This might be where human testers get involved, for example. This is a basic way to “promote” the buildmain commit that passed testing: . ostree commit -b exampleos/x86_64/smoketested/standard -s 'Passed tests' --tree=ref=aec070645fe53... Here we’re generating a new commit object (perhaps include in the commit log links to build logs, etc.), but we’re reusing the content from the buildmain commit aec070645fe53 that passed the smoketests. For a more sophisticated implementation of this model, see the do-release-tags script, which includes support for things like propagating version numbers across commit promotion. We can easily generalize this model to have an arbitrary number of stages like exampleos/x86_64/stage-1-pass/standard, exampleos/x86_64/stage-2-pass/standard, etc. depending on business requirements and logic. In this suggested model, the “stages” are increasingly expensive. The logic is that we don’t want to spend substantial time on e.g. network performance tests if something basic like a systemd unit file fails on bootup. ",
+ "url": "/ostree/repository-management/#promoting-content-along-ostree-branches---buildmain-smoketested",
+
+ "relUrl": "/repository-management/#promoting-content-along-ostree-branches---buildmain-smoketested"
+ },"109": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Promoting content between OSTree repositories",
+ "content": "Now, we have our internal continuous delivery stream flowing, it’s being tested and works. We want to periodically take the latest commit on exampleos/x86_64/stage-3-pass/standard and expose it in our “prod” repository as exampleos/x86_64/standard, with a much smaller history. We’ll have other business requirements such as writing release notes (and potentially putting them in the OSTree commit message), etc. In Build Systems we saw how the pull-local command can be used to migrate content from the “build” repository (in bare-user mode) into an archive repository for serving to client systems. Following this section, we now have three repositories, let’s call them repo-build, repo-dev, and repo-prod. We’ve been pulling content from repo-build into repo-dev (which involves gzip compression among other things since it is a format change). When using pull-local to migrate content between two archive repositories, the binary content is taken unmodified. Let’s go ahead and generate a new commit in our prod repository: . checksum=$(ostree --repo=repo-dev rev-parse exampleos/x86_64/stage-3-pass/standard`) ostree --repo=repo-prod pull-local repo-dev ${checksum} ostree --repo=repo-prod commit -b exampleos/x86_64/standard \\ -s 'Release 1.2.3' --add-metadata-string=version=1.2.3 \\ --tree=ref=${checksum} . There are a few things going on here. First, we found the latest commit checksum for the “stage-3 dev”, and told pull-local to copy it, without using the branch name. We do this because we don’t want to expose the exampleos/x86_64/stage-3-pass/standard branch name in our “prod” repository. Next, we generate a new commit in prod that’s referencing the exact binary content in dev. If the “dev” and “prod” repositories are on the same Unix filesystem, (like git) OSTree will make use of hard links to avoid copying any content at all - making the process very fast. Another interesting thing to notice here is that we’re adding an version metadata string to the commit. This is an optional piece of metadata, but we are encouraging its use in the OSTree ecosystem of tools. Commands like ostree admin status show it by default. ",
+ "url": "/ostree/repository-management/#promoting-content-between-ostree-repositories",
+
+ "relUrl": "/repository-management/#promoting-content-between-ostree-repositories"
+ },"110": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Derived data - static deltas and the summary file",
+ "content": "As discussed in Formats, the archive repository we use for “prod” requires one HTTP fetch per client request by default. If we’re only performing a release e.g. once a week, it’s appropriate to use “static deltas” to speed up client updates. So once we’ve used the above command to pull content from repo-dev into repo-prod, let’s generate a delta against the previous commit: . ostree --repo=repo-prod static-delta generate exampleos/x86_64/standard . We may also want to support client systems upgrading from two commits previous. ostree --repo=repo-prod static-delta generate --from=exampleos/x86_64/standard^^ --to=exampleos/x86_64/standard . Generating a full permutation of deltas across all prior versions can get expensive, and there is some support in the OSTree core for static deltas which “recurse” to a parent. This can help create a model where clients download a chain of deltas. Support for this is not fully implemented yet however. Regardless of whether or not you choose to generate static deltas, you should update the summary file: . ostree --repo=repo-prod summary -u . (Remember, the summary command cannot be run concurrently, so this should be triggered serially by other jobs). There is some more information on the design of the summary file in Repo. ",
+ "url": "/ostree/repository-management/#derived-data---static-deltas-and-the-summary-file",
+
+ "relUrl": "/repository-management/#derived-data---static-deltas-and-the-summary-file"
+ },"111": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Pruning our build and dev repositories",
+ "content": "First, the OSTree author believes you should not use OSTree as a “primary content store”. The binaries in an OSTree repository should be derived from a git repository. Your build system should record proper metadata such as the configuration options used to generate the build, and you should be able to rebuild it if necessary. Art assets should be stored in a system that’s designed for that (e.g. Git LFS). Another way to say this is that five years down the line, we are unlikely to care about retaining the exact binaries from an OS build on Wednesday afternoon three years ago. We want to save space and prune our “dev” repository. ostree --repo=repo-dev prune --refs-only --keep-younger-than=\"6 months ago\" . That will truncate the history older than 6 months. Deleted commits will have “tombstone markers” added so that you know they were explicitly deleted, but all content in them (that is not referenced by a still retained commit) will be garbage collected. ",
+ "url": "/ostree/repository-management/#pruning-our-build-and-dev-repositories",
+
+ "relUrl": "/repository-management/#pruning-our-build-and-dev-repositories"
+ },"112": {
+ "doc": "Managing content in OSTree repositories",
+ "title": "Generating “scratch” deltas for efficient initial downloads",
+ "content": "In general, the happy path for OSTree downloads is via static deltas. If you are in a situation where you want to download an OSTree commit from an uninitialized repo (or one with unrelated history), you can generate “scratch” (aka --empty deltas) which bundle all objects for that commit. The tradeoff here is increasing server disk space in return for many fewer client HTTP requests. For example: . $ ostree --repo=/path/to/repo static-delta generate --empty --to=exampleos/x86_64/testing-devel $ ostree --repo=/path/to/repo summary -u . After that, clients fetching that commit will prefer fetching the “scratch” delta if they don’t have the original ref. Licensing for this document: . SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) . ",
+ "url": "/ostree/repository-management/#generating-scratch-deltas-for-efficient-initial-downloads",
+
+ "relUrl": "/repository-management/#generating-scratch-deltas-for-efficient-initial-downloads"
+ }
+}
diff --git a/assets/js/vendor/lunr.min.js b/assets/js/vendor/lunr.min.js
new file mode 100644
index 00000000..46c594b8
--- /dev/null
+++ b/assets/js/vendor/lunr.min.js
@@ -0,0 +1,61 @@
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
+ * Copyright (C) 2020 Oliver Nightingale
+ * @license MIT
+ */
+/**
+ * ORIGINAL MIT LICENSE
+ * Copyright (C) 2013 by Oliver Nightingale
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+!function(){var e,t,r,i,n,s,o,a,u,l,c,h,d,f,p,y,m,g,x,v,w,Q,k,S,E,L,b,P,T=function(e){var t=new T.Builder;return t.pipeline.add(T.trimmer,T.stopWordFilter,T.stemmer),t.searchPipeline.add(T.stemmer),e.call(t,t),t.build()};T.version="2.3.9"
+/*!
+* lunr.utils
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.utils={},T.utils.warn=(e=this,function(t){e.console&&console.warn&&console.warn(t)}),T.utils.asString=function(e){return null==e?"":e.toString()},T.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i<r.length;i++){var n=r[i],s=e[n];if(Array.isArray(s))t[n]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[n]=s}}return t},T.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},T.FieldRef.joiner="/",T.FieldRef.fromString=function(e){var t=e.indexOf(T.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var r=e.slice(0,t),i=e.slice(t+1);return new T.FieldRef(i,r,e)},T.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+T.FieldRef.joiner+this.docRef),this._stringValue}
+/*!
+* lunr.Set
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},T.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},T.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},T.Set.prototype.contains=function(e){return!!this.elements[e]},T.Set.prototype.intersect=function(e){var t,r,i,n=[];if(e===T.Set.complete)return this;if(e===T.Set.empty)return e;this.length<e.length?(t=this,r=e):(t=e,r=this),i=Object.keys(t.elements);for(var s=0;s<i.length;s++){var o=i[s];o in r.elements&&n.push(o)}return new T.Set(n)},T.Set.prototype.union=function(e){return e===T.Set.complete?T.Set.complete:e===T.Set.empty?this:new T.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},T.idf=function(e,t){var r=0;for(var i in e)"_index"!=i&&(r+=Object.keys(e[i]).length);var n=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},T.Token=function(e,t){this.str=e||"",this.metadata=t||{}},T.Token.prototype.toString=function(){return this.str},T.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},T.Token.prototype.clone=function(e){return e=e||function(e){return e},new T.Token(e(this.str,this.metadata),this.metadata)}
+/*!
+* lunr.tokenizer
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new T.Token(T.utils.asString(e).toLowerCase(),T.utils.clone(t))}));for(var r=e.toString().toLowerCase(),i=r.length,n=[],s=0,o=0;s<=i;s++){var a=s-o;if(r.charAt(s).match(T.tokenizer.separator)||s==i){if(a>0){var u=T.utils.clone(t)||{};u.position=[o,a],u.index=n.length,n.push(new T.Token(r.slice(o,s),u))}o=s+1}}return n},T.tokenizer.separator=/[\s\-]+/
+/*!
+* lunr.Pipeline
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.Pipeline=function(){this._stack=[]},T.Pipeline.registeredFunctions=Object.create(null),T.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&T.utils.warn("Overwriting existing registered function: "+t),e.label=t,T.Pipeline.registeredFunctions[e.label]=e},T.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||T.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},T.Pipeline.load=function(e){var t=new T.Pipeline;return e.forEach((function(e){var r=T.Pipeline.registeredFunctions[e];if(!r)throw new Error("Cannot load unregistered function: "+e);t.add(r)})),t},T.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){T.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},T.Pipeline.prototype.after=function(e,t){T.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");r+=1,this._stack.splice(r,0,t)},T.Pipeline.prototype.before=function(e,t){T.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");this._stack.splice(r,0,t)},T.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},T.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var i=this._stack[r],n=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(null!=o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)n.push(o[a]);else n.push(o)}e=n}return e},T.Pipeline.prototype.runString=function(e,t){var r=new T.Token(e,t);return this.run([r]).map((function(e){return e.toString()}))},T.Pipeline.prototype.reset=function(){this._stack=[]},T.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return T.Pipeline.warnIfFunctionNotRegistered(e),e.label}))}
+/*!
+* lunr.Vector
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.Vector=function(e){this._magnitude=0,this.elements=e||[]},T.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,i=r-t,n=Math.floor(i/2),s=this.elements[2*n];i>1&&(s<e&&(t=n),s>e&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e||s>e?2*n:s<e?2*(n+1):void 0},T.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},T.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=r(this.elements[i+1],t):this.elements.splice(i,0,e,t)},T.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var i=this.elements[r];e+=i*i}return this._magnitude=Math.sqrt(e)},T.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,i=e.elements,n=r.length,s=i.length,o=0,a=0,u=0,l=0;u<n&&l<s;)(o=r[u])<(a=i[l])?u+=2:o>a?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},T.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},T.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},T.Vector.prototype.toJSON=function(){return this.elements}
+/*!
+* lunr.stemmer
+* Copyright (C) 2020 Oliver Nightingale
+* Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+*/,T.stemmer=(t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},r={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},i="[aeiouy]",n="[^aeiou][^aeiouy]*",s=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),o=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),a=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),u=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),l=/^(.+?)(ss|i)es$/,c=/^(.+?)([^s])s$/,h=/^(.+?)eed$/,d=/^(.+?)(ed|ing)$/,f=/.$/,p=/(at|bl|iz)$/,y=new RegExp("([^aeiouylsz])\\1$"),m=new RegExp("^"+n+i+"[^aeiouwxy]$"),g=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,v=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,w=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,Q=/^(.+?)(s|t)(ion)$/,k=/^(.+?)e$/,S=/ll$/,E=new RegExp("^"+n+i+"[^aeiouwxy]$"),L=function(e){var i,n,L,b,P,T,O;if(e.length<3)return e;if("y"==(L=e.substr(0,1))&&(e=L.toUpperCase()+e.substr(1)),P=c,(b=l).test(e)?e=e.replace(b,"$1$2"):P.test(e)&&(e=e.replace(P,"$1$2")),P=d,(b=h).test(e)){var I=b.exec(e);(b=s).test(I[1])&&(b=f,e=e.replace(b,""))}else P.test(e)&&(i=(I=P.exec(e))[1],(P=u).test(i)&&(T=y,O=m,(P=p).test(e=i)?e+="e":T.test(e)?(b=f,e=e.replace(b,"")):O.test(e)&&(e+="e")));return(b=g).test(e)&&(e=(i=(I=b.exec(e))[1])+"i"),(b=x).test(e)&&(i=(I=b.exec(e))[1],n=I[2],(b=s).test(i)&&(e=i+t[n])),(b=v).test(e)&&(i=(I=b.exec(e))[1],n=I[2],(b=s).test(i)&&(e=i+r[n])),P=Q,(b=w).test(e)?(i=(I=b.exec(e))[1],(b=o).test(i)&&(e=i)):P.test(e)&&(i=(I=P.exec(e))[1]+I[2],(P=o).test(i)&&(e=i)),(b=k).test(e)&&(i=(I=b.exec(e))[1],P=a,T=E,((b=o).test(i)||P.test(i)&&!T.test(i))&&(e=i)),P=o,(b=S).test(e)&&P.test(e)&&(b=f,e=e.replace(b,"")),"y"==L&&(e=L.toLowerCase()+e.substr(1)),e},function(e){return e.update(L)}),T.Pipeline.registerFunction(T.stemmer,"stemmer")
+/*!
+* lunr.stopWordFilter
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},T.stopWordFilter=T.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),T.Pipeline.registerFunction(T.stopWordFilter,"stopWordFilter")
+/*!
+* lunr.trimmer
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},T.Pipeline.registerFunction(T.trimmer,"trimmer")
+/*!
+* lunr.TokenSet
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.TokenSet=function(){this.final=!1,this.edges={},this.id=T.TokenSet._nextId,T.TokenSet._nextId+=1},T.TokenSet._nextId=1,T.TokenSet.fromArray=function(e){for(var t=new T.TokenSet.Builder,r=0,i=e.length;r<i;r++)t.insert(e[r]);return t.finish(),t.root},T.TokenSet.fromClause=function(e){return"editDistance"in e?T.TokenSet.fromFuzzyString(e.term,e.editDistance):T.TokenSet.fromString(e.term)},T.TokenSet.fromFuzzyString=function(e,t){for(var r=new T.TokenSet,i=[{node:r,editsRemaining:t,str:e}];i.length;){var n=i.pop();if(n.str.length>0){var s,o=n.str.charAt(0);o in n.node.edges?s=n.node.edges[o]:(s=new T.TokenSet,n.node.edges[o]=s),1==n.str.length&&(s.final=!0),i.push({node:s,editsRemaining:n.editsRemaining,str:n.str.slice(1)})}if(0!=n.editsRemaining){if("*"in n.node.edges)var a=n.node.edges["*"];else{a=new T.TokenSet;n.node.edges["*"]=a}if(0==n.str.length&&(a.final=!0),i.push({node:a,editsRemaining:n.editsRemaining-1,str:n.str}),n.str.length>1&&i.push({node:n.node,editsRemaining:n.editsRemaining-1,str:n.str.slice(1)}),1==n.str.length&&(n.node.final=!0),n.str.length>=1){if("*"in n.node.edges)var u=n.node.edges["*"];else{u=new T.TokenSet;n.node.edges["*"]=u}1==n.str.length&&(u.final=!0),i.push({node:u,editsRemaining:n.editsRemaining-1,str:n.str.slice(1)})}if(n.str.length>1){var l,c=n.str.charAt(0),h=n.str.charAt(1);h in n.node.edges?l=n.node.edges[h]:(l=new T.TokenSet,n.node.edges[h]=l),1==n.str.length&&(l.final=!0),i.push({node:l,editsRemaining:n.editsRemaining-1,str:c+n.str.slice(2)})}}}return r},T.TokenSet.fromString=function(e){for(var t=new T.TokenSet,r=t,i=0,n=e.length;i<n;i++){var s=e[i],o=i==n-1;if("*"==s)t.edges[s]=t,t.final=o;else{var a=new T.TokenSet;a.final=o,t.edges[s]=a,t=a}}return r},T.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),i=Object.keys(r.node.edges),n=i.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<n;s++){var o=i[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},T.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,i=0;i<r;i++){var n=t[i];e=e+n+this.edges[n].id}return e},T.TokenSet.prototype.intersect=function(e){for(var t=new T.TokenSet,r=void 0,i=[{qNode:e,output:t,node:this}];i.length;){r=i.pop();for(var n=Object.keys(r.qNode.edges),s=n.length,o=Object.keys(r.node.edges),a=o.length,u=0;u<s;u++)for(var l=n[u],c=0;c<a;c++){var h=o[c];if(h==l||"*"==l){var d=r.node.edges[h],f=r.qNode.edges[l],p=d.final&&f.final,y=void 0;h in r.output.edges?(y=r.output.edges[h]).final=y.final||p:((y=new T.TokenSet).final=p,r.output.edges[h]=y),i.push({qNode:f,output:y,node:d})}}}return t},T.TokenSet.Builder=function(){this.previousWord="",this.root=new T.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},T.TokenSet.Builder.prototype.insert=function(e){var t,r=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)r++;this.minimize(r),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(i=r;i<e.length;i++){var n=new T.TokenSet,s=e[i];t.edges[s]=n,this.uncheckedNodes.push({parent:t,char:s,child:n}),t=n}t.final=!0,this.previousWord=e},T.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},T.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}}
+/*!
+* lunr.Index
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},T.Index.prototype.search=function(e){return this.query((function(t){new T.QueryParser(e,t).parse()}))},T.Index.prototype.query=function(e){for(var t=new T.Query(this.fields),r=Object.create(null),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)i[this.fields[a]]=new T.Vector;e.call(t,t);for(a=0;a<t.clauses.length;a++){var u=t.clauses[a],l=null,c=T.Set.empty;l=u.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):[u.term];for(var h=0;h<l.length;h++){var d=l[h];u.term=d;var f=T.TokenSet.fromClause(u),p=this.tokenSet.intersect(f).toArray();if(0===p.length&&u.presence===T.Query.presence.REQUIRED){for(var y=0;y<u.fields.length;y++){s[F=u.fields[y]]=T.Set.empty}break}for(var m=0;m<p.length;m++){var g=p[m],x=this.invertedIndex[g],v=x._index;for(y=0;y<u.fields.length;y++){var w=x[F=u.fields[y]],Q=Object.keys(w),k=g+"/"+F,S=new T.Set(Q);if(u.presence==T.Query.presence.REQUIRED&&(c=c.union(S),void 0===s[F]&&(s[F]=T.Set.complete)),u.presence!=T.Query.presence.PROHIBITED){if(i[F].upsert(v,u.boost,(function(e,t){return e+t})),!n[k]){for(var E=0;E<Q.length;E++){var L,b=Q[E],P=new T.FieldRef(b,F),O=w[b];void 0===(L=r[P])?r[P]=new T.MatchData(g,F,O):L.add(g,F,O)}n[k]=!0}}else void 0===o[F]&&(o[F]=T.Set.empty),o[F]=o[F].union(S)}}}if(u.presence===T.Query.presence.REQUIRED)for(y=0;y<u.fields.length;y++){s[F=u.fields[y]]=s[F].intersect(c)}}var I=T.Set.complete,R=T.Set.empty;for(a=0;a<this.fields.length;a++){var F;s[F=this.fields[a]]&&(I=I.intersect(s[F])),o[F]&&(R=R.union(o[F]))}var C=Object.keys(r),N=[],j=Object.create(null);if(t.isNegated()){C=Object.keys(this.fieldVectors);for(a=0;a<C.length;a++){P=C[a];var _=T.FieldRef.fromString(P);r[P]=new T.MatchData}}for(a=0;a<C.length;a++){var D=(_=T.FieldRef.fromString(C[a])).docRef;if(I.contains(D)&&!R.contains(D)){var A,B=this.fieldVectors[_],V=i[_.fieldName].similarity(B);if(void 0!==(A=j[D]))A.score+=V,A.matchData.combine(r[_]);else{var z={ref:D,score:V,matchData:r[_]};j[D]=z,N.push(z)}}}return N.sort((function(e,t){return t.score-e.score}))},T.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:T.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},T.Index.load=function(e){var t={},r={},i=e.fieldVectors,n=Object.create(null),s=e.invertedIndex,o=new T.TokenSet.Builder,a=T.Pipeline.load(e.pipeline);e.version!=T.version&&T.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+T.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var l=(h=i[u])[0],c=h[1];r[l]=new T.Vector(c)}for(u=0;u<s.length;u++){var h,d=(h=s[u])[0],f=h[1];o.insert(d),n[d]=f}return o.finish(),t.fields=e.fields,t.fieldVectors=r,t.invertedIndex=n,t.tokenSet=o.root,t.pipeline=a,new T.Index(t)}
+/*!
+* lunr.Builder
+* Copyright (C) 2020 Oliver Nightingale
+*/,T.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=T.tokenizer,this.pipeline=new T.Pipeline,this.searchPipeline=new T.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},T.Builder.prototype.ref=function(e){this._ref=e},T.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},T.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},T.Builder.prototype.k1=function(e){this._k1=e},T.Builder.prototype.add=function(e,t){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var n=0;n<i.length;n++){var s=i[n],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),l=this.pipeline.run(u),c=new T.FieldRef(r,s),h=Object.create(null);this.fieldTermFrequencies[c]=h,this.fieldLengths[c]=0,this.fieldLengths[c]+=l.length;for(var d=0;d<l.length;d++){var f=l[d];if(null==h[f]&&(h[f]=0),h[f]+=1,null==this.invertedIndex[f]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var y=0;y<i.length;y++)p[i[y]]=Object.create(null);this.invertedIndex[f]=p}null==this.invertedIndex[f][s][r]&&(this.invertedIndex[f][s][r]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var g=this.metadataWhitelist[m],x=f.metadata[g];null==this.invertedIndex[f][s][r][g]&&(this.invertedIndex[f][s][r][g]=[]),this.invertedIndex[f][s][r][g].push(x)}}}},T.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,r={},i={},n=0;n<t;n++){var s=T.FieldRef.fromString(e[n]),o=s.fieldName;i[o]||(i[o]=0),i[o]+=1,r[o]||(r[o]=0),r[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(n=0;n<a.length;n++){var u=a[n];r[u]=r[u]/i[u]}this.averageFieldLength=r},T.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),r=t.length,i=Object.create(null),n=0;n<r;n++){for(var s=T.FieldRef.fromString(t[n]),o=s.fieldName,a=this.fieldLengths[s],u=new T.Vector,l=this.fieldTermFrequencies[s],c=Object.keys(l),h=c.length,d=this._fields[o].boost||1,f=this._documents[s.docRef].boost||1,p=0;p<h;p++){var y,m,g,x=c[p],v=l[x],w=this.invertedIndex[x]._index;void 0===i[x]?(y=T.idf(this.invertedIndex[x],this.documentCount),i[x]=y):y=i[x],m=y*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+v),m*=d,m*=f,g=Math.round(1e3*m)/1e3,u.insert(w,g)}e[s]=u}this.fieldVectors=e},T.Builder.prototype.createTokenSet=function(){this.tokenSet=T.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},T.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new T.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},T.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},T.MatchData=function(e,t,r){for(var i=Object.create(null),n=Object.keys(r||{}),s=0;s<n.length;s++){var o=n[s];i[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},T.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var i=t[r],n=Object.keys(e.metadata[i]);null==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<n.length;s++){var o=n[s],a=Object.keys(e.metadata[i][o]);null==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[i][o][l]?this.metadata[i][o][l]=e.metadata[i][o][l]:this.metadata[i][o][l]=this.metadata[i][o][l].concat(e.metadata[i][o][l])}}}},T.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var i=Object.keys(r),n=0;n<i.length;n++){var s=i[n];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},T.Query=function(e){this.clauses=[],this.allFields=e},T.Query.wildcard=new String("*"),T.Query.wildcard.NONE=0,T.Query.wildcard.LEADING=1,T.Query.wildcard.TRAILING=2,T.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},T.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=T.Query.wildcard.NONE),e.wildcard&T.Query.wildcard.LEADING&&e.term.charAt(0)!=T.Query.wildcard&&(e.term="*"+e.term),e.wildcard&T.Query.wildcard.TRAILING&&e.term.slice(-1)!=T.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=T.Query.presence.OPTIONAL),this.clauses.push(e),this},T.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=T.Query.presence.PROHIBITED)return!1;return!0},T.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,T.utils.clone(t))}),this),this;var r=t||{};return r.term=e.toString(),this.clause(r),this},T.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},T.QueryParseError.prototype=new Error,T.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},T.QueryLexer.prototype.run=function(){for(var e=T.QueryLexer.lexText;e;)e=e(this)},T.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,i=0;i<this.escapeCharPositions.length;i++)r=this.escapeCharPositions[i],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},T.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},T.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},T.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return T.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},T.QueryLexer.prototype.width=function(){return this.pos-this.start},T.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},T.QueryLexer.prototype.backup=function(){this.pos-=1},T.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=T.QueryLexer.EOS&&this.backup()},T.QueryLexer.prototype.more=function(){return this.pos<this.length},T.QueryLexer.EOS="EOS",T.QueryLexer.FIELD="FIELD",T.QueryLexer.TERM="TERM",T.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",T.QueryLexer.BOOST="BOOST",T.QueryLexer.PRESENCE="PRESENCE",T.QueryLexer.lexField=function(e){return e.backup(),e.emit(T.QueryLexer.FIELD),e.ignore(),T.QueryLexer.lexText},T.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(T.QueryLexer.TERM)),e.ignore(),e.more())return T.QueryLexer.lexText},T.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(T.QueryLexer.EDIT_DISTANCE),T.QueryLexer.lexText},T.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(T.QueryLexer.BOOST),T.QueryLexer.lexText},T.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(T.QueryLexer.TERM)},T.QueryLexer.termSeparator=T.tokenizer.separator,T.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==T.QueryLexer.EOS)return T.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return T.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(T.QueryLexer.TERM),T.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(T.QueryLexer.TERM),T.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(T.QueryLexer.PRESENCE),T.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(T.QueryLexer.PRESENCE),T.QueryLexer.lexText;if(t.match(T.QueryLexer.termSeparator))return T.QueryLexer.lexTerm}else e.escapeCharacter()}},T.QueryParser=function(e,t){this.lexer=new T.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},T.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=T.QueryParser.parseClause;e;)e=e(this);return this.query},T.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},T.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},T.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},T.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case T.QueryLexer.PRESENCE:return T.QueryParser.parsePresence;case T.QueryLexer.FIELD:return T.QueryParser.parseField;case T.QueryLexer.TERM:return T.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new T.QueryParseError(r,t.start,t.end)}},T.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=T.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=T.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new T.QueryParseError(r,t.start,t.end)}var i=e.peekLexeme();if(null==i){r="expecting term or field, found nothing";throw new T.QueryParseError(r,t.start,t.end)}switch(i.type){case T.QueryLexer.FIELD:return T.QueryParser.parseField;case T.QueryLexer.TERM:return T.QueryParser.parseTerm;default:r="expecting term or field, found '"+i.type+"'";throw new T.QueryParseError(r,i.start,i.end)}}},T.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),i="unrecognised field '"+t.str+"', possible fields: "+r;throw new T.QueryParseError(i,t.start,t.end)}e.currentClause.fields=[t.str];var n=e.peekLexeme();if(null==n){i="expecting term, found nothing";throw new T.QueryParseError(i,t.start,t.end)}if(n.type===T.QueryLexer.TERM)return T.QueryParser.parseTerm;i="expecting term, found '"+n.type+"'";throw new T.QueryParseError(i,n.start,n.end)}},T.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case T.QueryLexer.TERM:return e.nextClause(),T.QueryParser.parseTerm;case T.QueryLexer.FIELD:return e.nextClause(),T.QueryParser.parseField;case T.QueryLexer.EDIT_DISTANCE:return T.QueryParser.parseEditDistance;case T.QueryLexer.BOOST:return T.QueryParser.parseBoost;case T.QueryLexer.PRESENCE:return e.nextClause(),T.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new T.QueryParseError(i,r.start,r.end)}else e.nextClause()}},T.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new T.QueryParseError(i,t.start,t.end)}e.currentClause.editDistance=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case T.QueryLexer.TERM:return e.nextClause(),T.QueryParser.parseTerm;case T.QueryLexer.FIELD:return e.nextClause(),T.QueryParser.parseField;case T.QueryLexer.EDIT_DISTANCE:return T.QueryParser.parseEditDistance;case T.QueryLexer.BOOST:return T.QueryParser.parseBoost;case T.QueryLexer.PRESENCE:return e.nextClause(),T.QueryParser.parsePresence;default:i="Unexpected lexeme type '"+n.type+"'";throw new T.QueryParseError(i,n.start,n.end)}else e.nextClause()}},T.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="boost must be numeric";throw new T.QueryParseError(i,t.start,t.end)}e.currentClause.boost=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case T.QueryLexer.TERM:return e.nextClause(),T.QueryParser.parseTerm;case T.QueryLexer.FIELD:return e.nextClause(),T.QueryParser.parseField;case T.QueryLexer.EDIT_DISTANCE:return T.QueryParser.parseEditDistance;case T.QueryLexer.BOOST:return T.QueryParser.parseBoost;case T.QueryLexer.PRESENCE:return e.nextClause(),T.QueryParser.parsePresence;default:i="Unexpected lexeme type '"+n.type+"'";throw new T.QueryParseError(i,n.start,n.end)}else e.nextClause()}},b=this,P=function(){return T},"function"==typeof define&&define.amd?define(P):"object"==typeof exports?module.exports=P():b.lunr=P()}();
diff --git a/atomic-upgrades/index.html b/atomic-upgrades/index.html
new file mode 100644
index 00000000..83a1fd20
--- /dev/null
+++ b/atomic-upgrades/index.html
@@ -0,0 +1,427 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Atomic Upgrades | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Atomic Upgrades" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/atomic-upgrades/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/atomic-upgrades/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Atomic Upgrades" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Atomic Upgrades","url":"https://ostreedev.github.io/ostree/atomic-upgrades/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item active"><a href="/ostree/atomic-upgrades/" class="nav-list-link active">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="atomic-upgrades">
+
+
+ <a href="#atomic-upgrades" class="anchor-heading" aria-labelledby="atomic-upgrades"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Atomic Upgrades
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#you-can-turn-off-the-power-anytime-you-want" id="markdown-toc-you-can-turn-off-the-power-anytime-you-want">You can turn off the power anytime you want…</a></li>
+ <li><a href="#simple-upgrades-via-http" id="markdown-toc-simple-upgrades-via-http">Simple upgrades via HTTP</a></li>
+ <li><a href="#upgrades-via-external-tools-eg-package-managers" id="markdown-toc-upgrades-via-external-tools-eg-package-managers">Upgrades via external tools (e.g. package managers)</a></li>
+ <li><a href="#assembling-a-new-deployment-directory" id="markdown-toc-assembling-a-new-deployment-directory">Assembling a new deployment directory</a></li>
+ <li><a href="#atomically-swapping-boot-configuration" id="markdown-toc-atomically-swapping-boot-configuration">Atomically swapping boot configuration</a></li>
+ <li><a href="#the-bootversion" id="markdown-toc-the-bootversion">The bootversion</a></li>
+ <li><a href="#the-ostreeboot-directory" id="markdown-toc-the-ostreeboot-directory">The /ostree/boot directory</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+</ol>
+<h2 id="you-can-turn-off-the-power-anytime-you-want">
+
+
+ <a href="#you-can-turn-off-the-power-anytime-you-want" class="anchor-heading" aria-labelledby="you-can-turn-off-the-power-anytime-you-want"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> You can turn off the power anytime you want…
+
+
+</h2>
+
+
+<p>OSTree is designed to implement fully atomic and safe upgrades;
+more generally, atomic transitions between lists of bootable
+deployments. If the system crashes or you pull the power, you
+will have either the old system, or the new one.</p>
+<h2 id="simple-upgrades-via-http">
+
+
+ <a href="#simple-upgrades-via-http" class="anchor-heading" aria-labelledby="simple-upgrades-via-http"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Simple upgrades via HTTP
+
+
+</h2>
+
+
+<p>First, the most basic model OSTree supports is one where it replicates
+pre-generated filesystem trees from a server over HTTP, tracking
+exactly one ref, which is stored in the <code class="language-plaintext highlighter-rouge">.origin</code> file for the
+deployment. The command <code class="language-plaintext highlighter-rouge">ostree admin upgrade</code>
+implements this.</p>
+
+<p>To begin a simple upgrade, OSTree fetches the contents of the ref from
+the remote server. Suppose we’re tracking a ref named
+<code class="language-plaintext highlighter-rouge">exampleos/buildmain/x86_64-runtime</code>. OSTree fetches the URL
+<code class="language-plaintext highlighter-rouge">http://example.com/repo/refs/heads/exampleos/buildmain/x86_64-runtime</code>,
+which contains a SHA256 checksum. This determines the tree to deploy,
+and <code class="language-plaintext highlighter-rouge">/etc</code> will be merged from currently booted tree.</p>
+
+<p>If we do not have this commit, then we perform a pull process.
+At present (without static deltas), this involves quite simply just
+fetching each individual object that we do not have, asynchronously.
+Put in other words, we only download changed files (zlib-compressed).
+Each object has its checksum validated and is stored in <code class="language-plaintext highlighter-rouge">/ostree/repo/objects/</code>.</p>
+
+<p>Once the pull is complete, we have downloaded all the objects that we need
+to perform a deployment.</p>
+<h2 id="upgrades-via-external-tools-eg-package-managers">
+
+
+ <a href="#upgrades-via-external-tools-eg-package-managers" class="anchor-heading" aria-labelledby="upgrades-via-external-tools-eg-package-managers"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Upgrades via external tools (e.g. package managers)
+
+
+</h2>
+
+
+<p>As mentioned in the introduction, OSTree is also designed to allow a
+model where filesystem trees are computed on the client. It is
+completely agnostic as to how those trees are generated; they could be
+computed with traditional packages, packages with post-deployment
+scripts on top, or built by developers directly from revision control
+locally, etc.</p>
+
+<p>At a practical level, most package managers today (<code class="language-plaintext highlighter-rouge">dpkg</code> and <code class="language-plaintext highlighter-rouge">rpm</code>)
+operate “live” on the currently booted filesystem. The way they could
+work with OSTree is to, instead, take the list of installed packages in
+the currently booted tree, and compute a new filesystem from that. A
+later chapter describes in more details how this could work:
+<a href="/ostree/adapting-existing/">Adapting Existing Systems</a>.</p>
+
+<p>For the purposes of this section, let’s assume that we have a
+newly generated filesystem tree stored in the repo (which shares
+storage with the existing booted tree). We can then move on to
+checking it back out of the repo into a deployment.</p>
+<h2 id="assembling-a-new-deployment-directory">
+
+
+ <a href="#assembling-a-new-deployment-directory" class="anchor-heading" aria-labelledby="assembling-a-new-deployment-directory"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Assembling a new deployment directory
+
+
+</h2>
+
+
+<p>Given a commit to deploy, OSTree first allocates a directory for
+it. This is of the form <code class="language-plaintext highlighter-rouge">/boot/loader/entries/ostree-$stateroot-$checksum.$serial.conf</code>.
+The <code class="language-plaintext highlighter-rouge">$serial</code> is normally <code class="language-plaintext highlighter-rouge">0</code>, but if a
+given commit is deployed more than once, it will be incremented.
+This is supported because the previous deployment may have
+configuration in <code class="language-plaintext highlighter-rouge">/etc</code> that we do not want to use or overwrite.</p>
+
+<p>Now that we have a deployment directory, a 3-way merge is performed
+between the (by default) currently booted deployment’s <code class="language-plaintext highlighter-rouge">/etc</code>, its
+default configuration, and the new deployment (based on its <code class="language-plaintext highlighter-rouge">/usr/etc</code>).</p>
+
+<p>How it works is:</p>
+<ul>
+ <li>Files in the currently booted deployment’s <code class="language-plaintext highlighter-rouge">/etc</code> which were modified
+from the default <code class="language-plaintext highlighter-rouge">/usr/etc</code> (of the same deployment) are retained.</li>
+ <li>Files in the currently booted deployment’s <code class="language-plaintext highlighter-rouge">/etc</code> which were not
+modified from the default <code class="language-plaintext highlighter-rouge">/usr/etc</code> (of the same deployment) are
+upgraded to the new defaults from the new deployment’s <code class="language-plaintext highlighter-rouge">/usr/etc</code>.</li>
+</ul>
+
+<p>Roughly, this means that as soon as you modify or add a file in <code class="language-plaintext highlighter-rouge">/etc</code>,
+this file will be propagated forever as is (though there is a
+corner-case, where if your modification eventually exactly matches a
+future default file, then the file will go back to following future
+default updates from that point on).</p>
+
+<p>You can use <code class="language-plaintext highlighter-rouge">ostree admin config-diff</code> to see the differences between
+your booted deployment’s <code class="language-plaintext highlighter-rouge">/etc</code> and the OSTree defaults. A command like
+<code class="language-plaintext highlighter-rouge">diff {/usr,}/etc</code> will additional print line-level differences.</p>
+<h2 id="atomically-swapping-boot-configuration">
+
+
+ <a href="#atomically-swapping-boot-configuration" class="anchor-heading" aria-labelledby="atomically-swapping-boot-configuration"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Atomically swapping boot configuration
+
+
+</h2>
+
+
+<p>At this point, a new deployment directory has been created as a
+hardlink farm; the running system is untouched, and the bootloader
+configuration is untouched. We want to add this deployment to the
+“deployment list”.</p>
+
+<p>To support a more general case, OSTree supports atomic transitioning
+between arbitrary sets of deployments, with the restriction that the
+currently booted deployment must always be in the new set. In the
+normal case, we have exactly one deployment, which is the booted one,
+and we want to add the new deployment to the list. A more complex
+command might allow creating 100 deployments as part of one atomic
+transaction, so that one can set up an automated system to bisect
+across them.</p>
+<h2 id="the-bootversion">
+
+
+ <a href="#the-bootversion" class="anchor-heading" aria-labelledby="the-bootversion"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The bootversion
+
+
+</h2>
+
+
+<p>OSTree allows swapping between boot configurations by implementing the
+“swapped directory pattern” in <code class="language-plaintext highlighter-rouge">/boot</code>. This means it is a symbolic
+link to one of two directories <code class="language-plaintext highlighter-rouge">/ostree/boot.[0|1]</code>. To swap the
+contents atomically, if the current version is <code class="language-plaintext highlighter-rouge">0</code>, we create
+<code class="language-plaintext highlighter-rouge">/ostree/boot.1</code>, populate it with the new contents, then atomically
+swap the symbolic link. Finally, the old contents can be garbage
+collected at any point.</p>
+<h2 id="the-ostreeboot-directory">
+
+
+ <a href="#the-ostreeboot-directory" class="anchor-heading" aria-labelledby="the-ostreeboot-directory"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The /ostree/boot directory
+
+
+</h2>
+
+
+<p>However, we want to optimize for the case where the set of
+kernel/initramfs/devicetree sets is the same between both the old and new
+deployment lists. This happens when doing an upgrade that does not
+include the kernel; think of a simple translation update. OSTree
+optimizes for this case because on some systems <code class="language-plaintext highlighter-rouge">/boot</code> may be on a
+separate medium such as flash storage not optimized for significant
+amounts of write traffic. Related to this, modern OSTree has support
+for having <code class="language-plaintext highlighter-rouge">/boot</code> be a read-only mount by default - it will
+automatically remount read-write just for the portion of time
+necessary to update the bootloader configuration.</p>
+
+<p>To implement this, OSTree also maintains the directory
+<code class="language-plaintext highlighter-rouge">/ostree/boot.$bootversion</code>, which is a set
+of symbolic links to the deployment directories. The
+<code class="language-plaintext highlighter-rouge">$bootversion</code> here must match the version of
+<code class="language-plaintext highlighter-rouge">/boot</code>. However, in order to allow atomic transitions of
+<em>this</em> directory, this is also a swapped directory,
+so just like <code class="language-plaintext highlighter-rouge">/boot</code>, it has a version of <code class="language-plaintext highlighter-rouge">0</code> or <code class="language-plaintext highlighter-rouge">1</code> appended.</p>
+
+<p>Each bootloader entry has a special <code class="language-plaintext highlighter-rouge">ostree=</code> argument which refers to
+one of these symbolic links. This is parsed at runtime in the
+initramfs.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/atomic-upgrades.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/buildsystem-and-repos/index.html b/buildsystem-and-repos/index.html
new file mode 100644
index 00000000..ef9f070a
--- /dev/null
+++ b/buildsystem-and-repos/index.html
@@ -0,0 +1,460 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Writing a buildsystem and managing repositories | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Writing a buildsystem and managing repositories" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/buildsystem-and-repos/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/buildsystem-and-repos/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Writing a buildsystem and managing repositories" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Writing a buildsystem and managing repositories","url":"https://ostreedev.github.io/ostree/buildsystem-and-repos/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item active"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link active">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="writing-a-buildsystem-and-managing-repositories">
+
+
+ <a href="#writing-a-buildsystem-and-managing-repositories" class="anchor-heading" aria-labelledby="writing-a-buildsystem-and-managing-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Writing a buildsystem and managing repositories
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#build-vs-buy" id="markdown-toc-build-vs-buy">Build vs buy</a></li>
+ <li><a href="#initializing" id="markdown-toc-initializing">Initializing</a></li>
+ <li><a href="#writing-your-own-ostree-buildsystem" id="markdown-toc-writing-your-own-ostree-buildsystem">Writing your own OSTree buildsystem</a></li>
+ <li><a href="#constructing-trees-from-unions" id="markdown-toc-constructing-trees-from-unions">Constructing trees from unions</a></li>
+ <li><a href="#migrating-content-between-repositories" id="markdown-toc-migrating-content-between-repositories">Migrating content between repositories</a></li>
+ <li><a href="#more-sophisticated-repository-management" id="markdown-toc-more-sophisticated-repository-management">More sophisticated repository management</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+</ol>
+
+<p>OSTree is not a package system. It does not directly support building
+source code. Rather, it is a tool for transporting and managing
+content, along with package-system independent aspects like bootloader
+management for updates.</p>
+
+<p>We’ll assume here that we’re planning to generate commits on a build
+server, then have client systems replicate it. Doing client-side
+assembly is also possible of course, but this discussion will focus
+primarily on server-side concerns.</p>
+<h2 id="build-vs-buy">
+
+
+ <a href="#build-vs-buy" class="anchor-heading" aria-labelledby="build-vs-buy"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Build vs buy
+
+
+</h2>
+
+
+<p>Therefore, you need to either pick an existing tool for writing
+content into an OSTree repository, or write your own. An example
+tool is <a href="https://github.com/coreos/rpm-ostree">rpm-ostree</a> - it
+takes as input RPMs, and commits them (currently oriented for
+server-side, but aiming to do client-side too).</p>
+<h2 id="initializing">
+
+
+ <a href="#initializing" class="anchor-heading" aria-labelledby="initializing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Initializing
+
+
+</h2>
+
+
+<p>For this initial discussion, we’re assuming you have a single
+<code class="language-plaintext highlighter-rouge">archive</code> repository:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir repo
+ostree --repo=repo init --mode=archive
+</code></pre></div></div>
+
+<p>You can export this via a static webserver, and configure clients to
+pull from it.</p>
+<h2 id="writing-your-own-ostree-buildsystem">
+
+
+ <a href="#writing-your-own-ostree-buildsystem" class="anchor-heading" aria-labelledby="writing-your-own-ostree-buildsystem"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Writing your own OSTree buildsystem
+
+
+</h2>
+
+
+<p>There exist many, many systems that basically follow this pattern:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$pkg --installroot=/path/to/tmpdir install foo bar baz
+$imagesystem commit --root=/path/to/tmpdir
+</code></pre></div></div>
+
+<p>For various values of <code class="language-plaintext highlighter-rouge">$pkg</code> such as <code class="language-plaintext highlighter-rouge">yum</code>, <code class="language-plaintext highlighter-rouge">apt-get</code>, etc., and
+values of <code class="language-plaintext highlighter-rouge">$imagesystem</code> could be simple tarballs, Amazon Machine
+Images, ISOs, etc.</p>
+
+<p>Now obviously in this document, we’re going to talk about the
+situation where <code class="language-plaintext highlighter-rouge">$imagesystem</code> is OSTree. The general idea with
+OSTree is that wherever you might store a series of tarballs for
+applications or OS images, OSTree is likely going to be better. For
+example, it supports GPG signatures, binary deltas, writing bootloader
+configuration, etc.</p>
+
+<p>OSTree does not include a package/component build system simply
+because there already exist plenty of good ones - rather, it is
+intended to provide an infrastructure layer.</p>
+
+<p>The above mentioned <code class="language-plaintext highlighter-rouge">rpm-ostree compose tree</code> chooses RPM as the value
+of <code class="language-plaintext highlighter-rouge">$pkg</code> - so binaries are built as RPMs, then committed as a whole
+into an OSTree commit.</p>
+
+<p>But let’s discuss building our own. If you’re just experimenting,
+it’s quite easy to start with the command line. We’ll assume for this
+purpose that you have a build process that outputs a directory tree -
+we’ll call this tool <code class="language-plaintext highlighter-rouge">$pkginstallroot</code> (which could be <code class="language-plaintext highlighter-rouge">yum
+--installroot</code> or <code class="language-plaintext highlighter-rouge">debootstrap</code>, etc.).</p>
+
+<p>Your initial prototype is going to look like:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$pkginstallroot /path/to/tmpdir
+ostree --repo=repo commit -s 'build' -b exampleos/x86_64/standard --tree=dir=/path/to/tmpdir
+</code></pre></div></div>
+
+<p>Alternatively, if your build system can generate a tarball, you can
+commit that tarball into OSTree. For example,
+<a href="http://www.openembedded.org/">OpenEmbedded</a> can output a tarball, and
+one can commit it via:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree commit -s 'build' -b exampleos/x86_64/standard --tree=tar=myos.tar
+</code></pre></div></div>
+<h2 id="constructing-trees-from-unions">
+
+
+ <a href="#constructing-trees-from-unions" class="anchor-heading" aria-labelledby="constructing-trees-from-unions"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Constructing trees from unions
+
+
+</h2>
+
+
+<p>The above is a very simplistic model, and you will quickly notice that
+it’s slow. This is because OSTree has to re-checksum and recompress
+the content each time it’s committed. (Most of the CPU time is spent
+in compression which gets thrown away if the content turns out to be
+already stored).</p>
+
+<p>A more advanced approach is to store components in OSTree itself, then
+union them, and recommit them. At this point, we recommend taking a
+look at the OSTree API, and choose a programming language supported by
+<a href="https://wiki.gnome.org/Projects/GObjectIntrospection">GObject Introspection</a>
+to write your buildsystem scripts. Python may be a good choice, or
+you could choose custom C code, etc.</p>
+
+<p>For the purposes of this tutorial we will use shell script, but it’s
+strongly recommended to choose a real programming language for your
+build system.</p>
+
+<p>Let’s say that your build system produces separate artifacts (whether
+those are RPMs, zip files, or whatever). These artifacts should be
+the result of <code class="language-plaintext highlighter-rouge">make install DESTDIR=</code> or similar. Basically
+equivalent to RPMs/debs.</p>
+
+<p>Further, in order to make things fast, we will need a separate
+<code class="language-plaintext highlighter-rouge">bare-user</code> repository in order to perform checkouts quickly via
+hardlinks. We’ll then export content into the <code class="language-plaintext highlighter-rouge">archive</code> repository
+for use by client systems.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir build-repo
+ostree --repo=build-repo init --mode=bare-user
+</code></pre></div></div>
+
+<p>You can begin committing those as individual branches:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=build-repo commit -b exampleos/x86_64/bash --tree=tar=bash-4.2-bin.tar.gz
+ostree --repo=build-repo commit -b exampleos/x86_64/systemd --tree=tar=systemd-224-bin.tar.gz
+</code></pre></div></div>
+
+<p>Set things up so that whenever a package changes, you redo the
+<code class="language-plaintext highlighter-rouge">commit</code> with the new package version - conceptually, the branch
+tracks the individual package versions over time, and defaults to
+“latest”. This isn’t required - one could also include the version in
+the branch name, and have metadata outside to determine “latest” (or
+the desired version).</p>
+
+<p>Now, to construct our final tree:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rm -rf exampleos-build
+for package in bash systemd; do
+ ostree --repo=build-repo checkout -U --union exampleos/x86_64/${package} exampleos-build
+done
+# Set up a "rofiles-fuse" mount point; this ensures that any processes
+# we run for post-processing of the tree don't corrupt the hardlinks.
+mkdir -p mnt
+rofiles-fuse exampleos-build mnt
+# Now run global "triggers", generate cache files:
+ldconfig -r mnt
+ (Insert other programs here)
+fusermount -u mnt
+ostree --repo=build-repo commit -b exampleos/x86_64/standard --link-checkout-speedup exampleos-build
+</code></pre></div></div>
+
+<p>There are a number of interesting things going on here. The major
+architectural change is that we’re using <code class="language-plaintext highlighter-rouge">--link-checkout-speedup</code>.
+This is a way to tell OSTree that our checkout is made via hardlinks,
+and to scan the repository in order to build up a reverse <code class="language-plaintext highlighter-rouge">(device,
+inode) -&gt; checksum</code> mapping.</p>
+
+<p>In order for this mapping to be accurate, we needed the <code class="language-plaintext highlighter-rouge">rofiles-fuse</code>
+to ensure that any changed files had new inodes (and hence a new
+checksum).</p>
+<h2 id="migrating-content-between-repositories">
+
+
+ <a href="#migrating-content-between-repositories" class="anchor-heading" aria-labelledby="migrating-content-between-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Migrating content between repositories
+
+
+</h2>
+
+
+<p>Now that we have content in our <code class="language-plaintext highlighter-rouge">build-repo</code> repository (in
+<code class="language-plaintext highlighter-rouge">bare-user</code> mode), we need to move the <code class="language-plaintext highlighter-rouge">exampleos/x86_64/standard</code>
+branch content into the repository just named <code class="language-plaintext highlighter-rouge">repo</code> (in <code class="language-plaintext highlighter-rouge">archive</code>
+mode) for export, which will involve zlib compression of new objects.
+We likely want to generate static deltas after that as well.</p>
+
+<p>Let’s copy the content:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo pull-local build-repo exampleos/x86_64/standard
+</code></pre></div></div>
+
+<p>Clients can now incrementally download new objects - however, this
+would also be a good time to generate a delta from the previous
+commit.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo static-delta generate exampleos/x86_64/standard
+</code></pre></div></div>
+<h2 id="more-sophisticated-repository-management">
+
+
+ <a href="#more-sophisticated-repository-management" class="anchor-heading" aria-labelledby="more-sophisticated-repository-management"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> More sophisticated repository management
+
+
+</h2>
+
+
+<p>Next, see <a href="/ostree/repository-management/">Repository Management</a> for the
+next steps in managing content in OSTree repositories.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/buildsystem-and-repos.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/contributing-tutorial/index.html b/contributing-tutorial/index.html
new file mode 100644
index 00000000..b3789ffc
--- /dev/null
+++ b/contributing-tutorial/index.html
@@ -0,0 +1,848 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>OSTree Contributing Tutorial | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="OSTree Contributing Tutorial" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/contributing-tutorial/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/contributing-tutorial/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="OSTree Contributing Tutorial" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"OSTree Contributing Tutorial","url":"https://ostreedev.github.io/ostree/contributing-tutorial/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item active"><a href="/ostree/contributing-tutorial/" class="nav-list-link active">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="ostree-contributing-tutorial">
+
+
+ <a href="#ostree-contributing-tutorial" class="anchor-heading" aria-labelledby="ostree-contributing-tutorial"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree Contributing Tutorial
+
+
+</h1>
+
+
+<p>The following guide is about OSTree forking, building, adding a command, testing the command, and submitting the change.</p>
+
+<ol id="markdown-toc">
+ <li><a href="#getting-started" id="markdown-toc-getting-started">Getting Started</a></li>
+ <li><a href="#building-ostree" id="markdown-toc-building-ostree">Building OSTree</a> <ol>
+ <li><a href="#install-build-dependencies" id="markdown-toc-install-build-dependencies">Install Build Dependencies</a></li>
+ <li><a href="#ostree-build-commands" id="markdown-toc-ostree-build-commands">OSTree Build Commands</a> <ol>
+ <li><a href="#notes" id="markdown-toc-notes">Notes</a></li>
+ <li><a href="#tip" id="markdown-toc-tip">Tip</a></li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li><a href="#testing-a-build" id="markdown-toc-testing-a-build">Testing a Build</a> <ol>
+ <li><a href="#testing-in-a-container" id="markdown-toc-testing-in-a-container">Testing in a Container</a></li>
+ <li><a href="#testing-in-a-virtual-machine" id="markdown-toc-testing-in-a-virtual-machine">Testing in a Virtual Machine</a></li>
+ </ol>
+ </li>
+ <li><a href="#tutorial-adding-a-basic-builtin-command-to-ostree" id="markdown-toc-tutorial-adding-a-basic-builtin-command-to-ostree">Tutorial: Adding a basic builtin command to ostree</a> <ol>
+ <li><a href="#modifying-ostree" id="markdown-toc-modifying-ostree">Modifying OSTree</a></li>
+ <li><a href="#adding-a-new-api-function-to-libostree" id="markdown-toc-adding-a-new-api-function-to-libostree">Adding a new API function to libostree</a></li>
+ <li><a href="#ostree-tests" id="markdown-toc-ostree-tests">OSTree Tests</a></li>
+ <li><a href="#submitting-a-patch" id="markdown-toc-submitting-a-patch">Submitting a Patch</a></li>
+ <li><a href="#returning-workflow" id="markdown-toc-returning-workflow">Returning Workflow</a></li>
+ </ol>
+ </li>
+</ol>
+<h2 id="getting-started">
+
+
+ <a href="#getting-started" class="anchor-heading" aria-labelledby="getting-started"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Getting Started
+
+
+</h2>
+
+
+<p>Fork https://github.com/ostreedev/ostree, then run the following commands.</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git clone https://github.com/&lt;username&gt;/ostree <span class="o">&amp;&amp;</span> <span class="nb">cd </span>ostree
+<span class="nv">$ </span>git remote add upstream https://github.com/ostreedev/ostree
+<span class="nv">$ </span>git checkout main
+<span class="nv">$ </span>git fetch upstream <span class="o">&amp;&amp;</span> git branch <span class="nt">--set-upstream-to</span><span class="o">=</span>upstream/main main
+</code></pre></div></div>
+<p>Make a branch from main for your patch.</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git checkout <span class="nt">-b</span> &lt;name-of-branch&gt;
+<span class="nv">$ </span>git branch <span class="nt">--set-upstream-to</span><span class="o">=</span>upstream/main &lt;name-of-branch&gt;
+</code></pre></div></div>
+<h2 id="building-ostree">
+
+
+ <a href="#building-ostree" class="anchor-heading" aria-labelledby="building-ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Building OSTree
+
+
+</h2>
+
+<h3 id="install-build-dependencies">
+
+
+ <a href="#install-build-dependencies" class="anchor-heading" aria-labelledby="install-build-dependencies"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Install Build Dependencies
+
+
+</h3>
+
+
+<p>Execute one of the following group commands as superuser depending on your machine’s package manager.</p>
+
+<p>For Fedora:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>dnf <span class="nb">install</span> @buildsys-build dnf-plugins-core <span class="o">&amp;&amp;</span> <span class="se">\</span>
+dnf builddep ostree
+</code></pre></div></div>
+
+<p>For CentOS:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>yum <span class="nb">install </span>yum-utils dnf-plugins-core <span class="o">&amp;&amp;</span> <span class="se">\</span>
+yum-builddep ostree
+</code></pre></div></div>
+
+<p>For Debian based distros:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>apt-get update <span class="o">&amp;&amp;</span> <span class="se">\</span>
+apt-get <span class="nb">install </span>build-essential <span class="o">&amp;&amp;</span> <span class="se">\</span>
+apt-get build-dep ostree
+</code></pre></div></div>
+
+<p><a href="https://github.com/ostreedev/ostree/blob/main/ci/build.sh">build.sh</a> will have a list of packages needed to build ostree.</p>
+<h3 id="ostree-build-commands">
+
+
+ <a href="#ostree-build-commands" class="anchor-heading" aria-labelledby="ostree-build-commands"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree Build Commands
+
+
+</h3>
+
+
+<p>These are the basic commands to build OSTree. Depending on the OS that OSTree will be built for, the flags or options for <code class="language-plaintext highlighter-rouge">./autogen.sh</code> and <code class="language-plaintext highlighter-rouge">./configure</code> will vary.</p>
+
+<p>See <code class="language-plaintext highlighter-rouge">ostree-build.sh</code> in this tutorial below for specific commands to building OSTree for Fedora 28 and Fedora 28 Atomic Host.</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># optional: autogen.sh will run this if necessary</span>
+git submodule update <span class="nt">--init</span>
+
+<span class="nb">env </span><span class="nv">NOCONFIGURE</span><span class="o">=</span>1 ./autogen.sh
+
+<span class="c"># run ./configure if makefile does not exist</span>
+./configure
+
+make
+make <span class="nb">install </span><span class="nv">DESTDIR</span><span class="o">=</span>/path/to/install/binary
+</code></pre></div></div>
+<h4 id="notes">
+
+
+ <a href="#notes" class="anchor-heading" aria-labelledby="notes"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Notes
+
+
+</h4>
+
+
+<p>Running <code class="language-plaintext highlighter-rouge">git submodule update --init</code> is optional since <code class="language-plaintext highlighter-rouge">autogen.sh</code> will check to see if one of the submodule files for example from <code class="language-plaintext highlighter-rouge">libglnx/</code> or from <code class="language-plaintext highlighter-rouge">bsdiff/</code> exists.</p>
+
+<p>Additionally, <code class="language-plaintext highlighter-rouge">autogen.sh</code> will check to see if the environment variable <code class="language-plaintext highlighter-rouge">NOCONFIGURE</code> is set. To run <code class="language-plaintext highlighter-rouge">./configure</code> manually, run autogen in a modified environment as such, <code class="language-plaintext highlighter-rouge">env NOCONFIGURE=1 ./autogen.sh</code>.</p>
+
+<p>Otherwise, leave <code class="language-plaintext highlighter-rouge">NOCONFIGURE</code> empty and <code class="language-plaintext highlighter-rouge">autogen.sh</code> will run <code class="language-plaintext highlighter-rouge">./configure</code> as part of the <code class="language-plaintext highlighter-rouge">autogen.sh</code> command when it executes.</p>
+
+<p>For more information on <code class="language-plaintext highlighter-rouge">--prefix</code> see <a href="https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#Directory-Variables">Variables for Installation Directories</a>.</p>
+
+<p><code class="language-plaintext highlighter-rouge">make install</code> will generate files for <code class="language-plaintext highlighter-rouge">/bin</code> and <code class="language-plaintext highlighter-rouge">/lib</code>. If <code class="language-plaintext highlighter-rouge">DESTDIR</code> is unspecified then OSTree will be installed in the default directory i.e. <code class="language-plaintext highlighter-rouge">/usr/local/bin</code> and its static libraries in <code class="language-plaintext highlighter-rouge">/usr/local/lib</code>. Note that the <code class="language-plaintext highlighter-rouge">/usr/local</code> portion of the path can be changed using the <code class="language-plaintext highlighter-rouge">--prefix</code> option for <code class="language-plaintext highlighter-rouge">./configure</code>.</p>
+
+<p>See this <a href="https://www.gnu.org/prep/standards/html_node/DESTDIR.html">GNU guide on <code class="language-plaintext highlighter-rouge">DESTDIR</code> Staged Installs</a> for more information.</p>
+<h4 id="tip">
+
+
+ <a href="#tip" class="anchor-heading" aria-labelledby="tip"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Tip
+
+
+</h4>
+
+
+<p>Make allows parallel execution of recipes. Use <code class="language-plaintext highlighter-rouge">make -j&lt;N&gt;</code> to speed up the build. <code class="language-plaintext highlighter-rouge">&lt;N&gt;</code> is typically <code class="language-plaintext highlighter-rouge">$((2 * $(nproc)))</code> for optimal performance, where <code class="language-plaintext highlighter-rouge">nproc</code> is the number of processing units (CPU cores) available.</p>
+
+<p>See page 106 of the <a href="https://www.gnu.org/software/make/manual/make.pdf">GNU Make Manual</a> for more information about the <code class="language-plaintext highlighter-rouge">--jobs</code> or <code class="language-plaintext highlighter-rouge">-j</code> option.</p>
+<h2 id="testing-a-build">
+
+
+ <a href="#testing-a-build" class="anchor-heading" aria-labelledby="testing-a-build"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Testing a Build
+
+
+</h2>
+
+
+<p>It is best practice to build software (definitely including ostree) in a container or virtual machine first.</p>
+<h3 id="testing-in-a-container">
+
+
+ <a href="#testing-in-a-container" class="anchor-heading" aria-labelledby="testing-in-a-container"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Testing in a Container
+
+
+</h3>
+
+
+<p>There are a variety of container engines available and many distributions have pre-packaged versions of e.g. <a href="https://github.com/projectatomic/libpod">Podman</a> and Docker.</p>
+
+<p>If you choose to use <a href="https://docs.docker.com/v17.09/engine/installation/linux/docker-ce/fedora/">Docker upstream</a>, you may want to follow this <a href="https://docs.docker.com/v17.09/engine/installation/linux/linux-postinstall/">post-installation guide for Docker</a>. This will allow you to run Docker as a non-root user on a Linux based host machine.</p>
+
+<p>You will need to have pushed a remote git branch <code class="language-plaintext highlighter-rouge">$REMOTE_BRANCH</code> (see <code class="language-plaintext highlighter-rouge">ostree-git.sh below</code>) in order to pull your changes into a container.</p>
+
+<p>The example below uses Docker to manage containers. Save the contents of this <strong>Dockerfile</strong> somewhere on your machine:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># this pulls the fedora 28 image</span>
+FROM registry.fedoraproject.org/fedora:28
+
+<span class="c"># install ostree dependencies</span>
+RUN dnf update <span class="nt">-y</span> <span class="o">&amp;&amp;</span> <span class="se">\</span>
+ dnf <span class="nt">-y</span> <span class="nb">install</span> @buildsys-build dnf-plugins-core <span class="o">&amp;&amp;</span> <span class="se">\</span>
+ dnf <span class="nt">-y</span> builddep ostree <span class="o">&amp;&amp;</span> <span class="se">\</span>
+ dnf clean all
+
+<span class="c"># clone ostree and update main branch</span>
+COPY ostree-git.sh /
+RUN ../ostree-git.sh
+
+<span class="c"># builds ostree + any additional commands</span>
+COPY ostree-build.sh /
+
+<span class="c"># entry into the container will start at this directory</span>
+WORKDIR /ostree
+
+<span class="c"># run the following as `/bin/sh -c`</span>
+<span class="c"># or enter the container to execute ./ostree-build.sh</span>
+RUN ../ostree-build.sh
+
+</code></pre></div></div>
+
+<p>Save the following bash scripts in the same directory as the Dockerfile. Then change the mode bit of these files so that they are executable, by running <code class="language-plaintext highlighter-rouge">chmod +x ostree-git.sh ostree-build.sh</code></p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
+
+<span class="c"># ostree-git.sh</span>
+<span class="c"># Clone ostree and update main branch</span>
+
+<span class="nb">set</span> <span class="nt">-euo</span> pipefail
+
+<span class="c"># Set $USERNAME to your GitHub username here.</span>
+<span class="nv">USERNAME</span><span class="o">=</span><span class="s2">""</span>
+
+<span class="c"># clone your fork of the OSTree repo, this will be in the "/" directory</span>
+git clone https://github.com/<span class="nv">$USERNAME</span>/ostree.git
+<span class="nb">cd </span>ostree
+
+<span class="c"># Add upstream as remote and update main branch</span>
+git checkout main
+git remote add upstream https://github.com/ostreedev/ostree.git
+git pull <span class="nt">--rebase</span> upstream main
+</code></pre></div></div>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
+
+<span class="c"># ostree-build.sh</span>
+<span class="c"># Build and test OSTree</span>
+
+<span class="nb">set</span> <span class="nt">-euo</span> pipefail
+
+<span class="c"># $REMOTE_BRANCH is the name of the remote branch in your</span>
+<span class="c"># repository that contains changes (e.g. my-patch).</span>
+<span class="nv">REMOTE_BRANCH</span><span class="o">=</span><span class="s2">""</span>
+
+<span class="c"># fetch updates from origin</span>
+<span class="c"># origin url should be your forked ostree repository</span>
+git fetch origin
+
+<span class="c"># go to branch with changes</span>
+<span class="c"># if this branch already exists then checkout that branch</span>
+<span class="nv">exit_code</span><span class="o">=</span><span class="s2">"</span><span class="si">$(</span>git checkout <span class="nt">--track</span> origin/<span class="nv">$REMOTE_BRANCH</span><span class="p">;</span> <span class="nb">echo</span> <span class="nv">$?</span><span class="si">)</span><span class="s2">"</span>
+<span class="k">if</span> <span class="o">[[</span> <span class="s2">"</span><span class="nv">$exit_code</span><span class="s2">"</span> <span class="o">==</span> 1 <span class="o">]]</span>
+<span class="k">then
+ </span><span class="nb">echo</span> <span class="s2">"This branch:"</span> <span class="nv">$REMOTE_BRANCH</span> <span class="s2">"is not a remote branch."</span>
+ <span class="nb">exit
+</span><span class="k">fi</span>
+
+<span class="c"># make sure branch with changes is up-to-date</span>
+git pull origin <span class="nv">$REMOTE_BRANCH</span>
+
+<span class="c"># build OSTree commands for Fedora 28 and Fedora 28 Atomic Host</span>
+./autogen.sh <span class="nt">--prefix</span><span class="o">=</span>/usr <span class="nt">--libdir</span><span class="o">=</span>/usr/lib64 <span class="nt">--sysconfdir</span><span class="o">=</span>/etc
+./configure <span class="nt">--prefix</span><span class="o">=</span>/usr
+make <span class="nt">-j</span><span class="k">$((</span><span class="m">2</span> <span class="o">*</span> <span class="si">$(</span><span class="nb">nproc</span><span class="si">)</span><span class="k">))</span>
+make <span class="nb">install</span>
+
+<span class="c"># any additional commands go here</span>
+</code></pre></div></div>
+
+<p><strong>Build the container</strong></p>
+
+<p>Run <code class="language-plaintext highlighter-rouge">docker build</code> in the same directory of the <code class="language-plaintext highlighter-rouge">Dockerfile</code> like so:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker build <span class="nt">-t</span> ostree-fedora-test <span class="nb">.</span>
+</code></pre></div></div>
+
+<p>When this build is done, the <code class="language-plaintext highlighter-rouge">-t</code> option tags the image as <code class="language-plaintext highlighter-rouge">ostree-fedora-test</code>.</p>
+
+<p><strong>Note</strong>: Do not forget the dot <strong>.</strong> at the end of the above command which specifies the location of the Dockerfile.</p>
+
+<p>You will see <code class="language-plaintext highlighter-rouge">ostree-fedora-test</code> listed when running <code class="language-plaintext highlighter-rouge">docker images</code>:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>REPOSITORY TAG IMAGE ID CREATED SIZE
+ostree-fedora-test latest 817c04cc3656 1 day ago 978MB
+</code></pre></div></div>
+
+<p><strong>Entering the Container</strong></p>
+
+<p>To <strong>start</strong> the <code class="language-plaintext highlighter-rouge">ostree-fedora-test</code> container, run:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker run <span class="nt">-it</span> <span class="nt">--rm</span> <span class="nt">--entrypoint</span> /bin/sh <span class="nt">--name</span> ostree-testing ostree-fedora-test
+</code></pre></div></div>
+
+<p><strong>Note</strong>:</p>
+
+<p><code class="language-plaintext highlighter-rouge">--rm</code> option tells <a href="https://docs.docker.com/engine/reference/run/#clean-up---rm">Docker to automatically clean up the container and remove the file system when the container exits</a>. Otherwise remove it manually by running <code class="language-plaintext highlighter-rouge">docker rm &lt;container name&gt;</code>.</p>
+
+<p>The state of the container will not be saved when the shell prompt exits. Best practice is modify the Dockerfile to modify the image.</p>
+
+<p><strong>Testing in a Container Workflow</strong></p>
+
+<ol>
+ <li>Edit the changes to OSTree on your local machine.</li>
+ <li><code class="language-plaintext highlighter-rouge">git add</code> to stage the changed files, <code class="language-plaintext highlighter-rouge">git commit</code> and then <code class="language-plaintext highlighter-rouge">git push origin &lt;local-branch&gt;:&lt;remote-branch&gt;</code>.</li>
+ <li>
+ <p>Testing on a <em>new</em> container vs. Testing on an <em>existing</em> container:</p>
+
+ <p>If the <code class="language-plaintext highlighter-rouge">ostree-testing</code> container was newly built right after your changes have been committed, then the container’s build of <code class="language-plaintext highlighter-rouge">ostree</code> should contain your changes.</p>
+
+ <p>Else: Within the <code class="language-plaintext highlighter-rouge">ostree-testing</code> container, run <code class="language-plaintext highlighter-rouge">../ostree-build.sh</code> in the ostree directory. This will pull in changes from your branch and create a new <code class="language-plaintext highlighter-rouge">ostree</code> build.</p>
+ </li>
+ <li>
+ <p><code class="language-plaintext highlighter-rouge">make install</code> will install OSTree in the default location i.e. <code class="language-plaintext highlighter-rouge">/usr/..</code>in a Fedora 28 container.</p>
+ </li>
+ <li>Test <code class="language-plaintext highlighter-rouge">ostree</code>.</li>
+</ol>
+<h3 id="testing-in-a-virtual-machine">
+
+
+ <a href="#testing-in-a-virtual-machine" class="anchor-heading" aria-labelledby="testing-in-a-virtual-machine"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Testing in a Virtual Machine
+
+
+</h3>
+
+
+<p>To create a Fedora 28 Atomic Host Vagrant VM, run the following commands:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">mkdir </span>atomic <span class="o">&amp;&amp;</span> <span class="nb">cd </span>atomic
+<span class="nv">$ </span>vagrant init fedora/28-atomic-host <span class="o">&amp;&amp;</span> vagrant up
+</code></pre></div></div>
+
+<p>An option is to use <code class="language-plaintext highlighter-rouge">rsync</code> to transfer <code class="language-plaintext highlighter-rouge">ostree</code> files to a Vagrant VM.</p>
+
+<p>To find the IP address of a Vagrant VM, run <code class="language-plaintext highlighter-rouge">vagrant ssh-config</code> in the same directory as the <code class="language-plaintext highlighter-rouge">Vagrantfile</code>.</p>
+
+<p><strong>Steps to <code class="language-plaintext highlighter-rouge">rsync</code> files to test an <code class="language-plaintext highlighter-rouge">ostree</code> build</strong>:</p>
+
+<ol>
+ <li>
+ <p>Copy the contents of your public ssh key on your host machine e.g. <code class="language-plaintext highlighter-rouge">id_rsa.pub</code> to <code class="language-plaintext highlighter-rouge">/home/vagrant/.ssh/authorized_keys</code> on the VM.</p>
+ </li>
+ <li>
+ <p>Run <code class="language-plaintext highlighter-rouge">sudo su</code>, followed by <code class="language-plaintext highlighter-rouge">ssh localhost</code> then press <kbd>Ctrl</kbd>+<kbd>c</kbd> to exit from the decision prompt. This will create the <code class="language-plaintext highlighter-rouge">.ssh</code> directory with the right permissions.</p>
+ </li>
+ <li>
+ <p>Using <code class="language-plaintext highlighter-rouge">Vagrant</code> as the user, run <code class="language-plaintext highlighter-rouge">sudo cp ~/.ssh/authorized_keys /root/.ssh/</code>. So that user <code class="language-plaintext highlighter-rouge">root</code> has the the same login credentials.</p>
+ </li>
+ <li>
+ <p>To override the <code class="language-plaintext highlighter-rouge">Read-only file system</code> warning, run <code class="language-plaintext highlighter-rouge">sudo ostree admin unlock</code>.</p>
+ </li>
+ <li>
+ <p><code class="language-plaintext highlighter-rouge">&lt;ostree-install-dir&gt;</code> will serve as the local install location for <code class="language-plaintext highlighter-rouge">ostree</code> and the path to this directory should be <em>absolute</em> when specified in <code class="language-plaintext highlighter-rouge">DESTDIR</code>.</p>
+ </li>
+ <li>
+ <p>Set <code class="language-plaintext highlighter-rouge">rsync</code> to sync changes in <code class="language-plaintext highlighter-rouge">/etc</code> and <code class="language-plaintext highlighter-rouge">/usr</code> from <code class="language-plaintext highlighter-rouge">&lt;ostree-install-dir&gt;/</code> on the host to the VM:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ rsync -av &lt;ostree-install-dir&gt;/etc/ root@&lt;ip-address&gt;:/etc
+ $ rsync -av &lt;ostree-install-dir&gt;/usr/ root@&lt;ip-address&gt;:/usr
+</code></pre></div> </div>
+
+ <p>Using option <code class="language-plaintext highlighter-rouge">-n</code> will execute the commands as a trial, which is helpful to list the files that will be synced.</p>
+ </li>
+ <li>
+ <p>Run the commands in step 6 each time a new <code class="language-plaintext highlighter-rouge">ostree</code> build is executed to update the change. Running <code class="language-plaintext highlighter-rouge">ls -lt</code> in the directory where the changed file is expected, is a simple way to check when a particular file was last modified. Proceed to the test changes <code class="language-plaintext highlighter-rouge">ostree</code> with the most recent changes.</p>
+ </li>
+</ol>
+<h2 id="tutorial-adding-a-basic-builtin-command-to-ostree">
+
+
+ <a href="#tutorial-adding-a-basic-builtin-command-to-ostree" class="anchor-heading" aria-labelledby="tutorial-adding-a-basic-builtin-command-to-ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Tutorial: Adding a basic builtin command to ostree
+
+
+</h2>
+
+<h3 id="modifying-ostree">
+
+
+ <a href="#modifying-ostree" class="anchor-heading" aria-labelledby="modifying-ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Modifying OSTree
+
+
+</h3>
+
+
+<p>This will add a command which prints <code class="language-plaintext highlighter-rouge">Hello OSTree!</code> when <code class="language-plaintext highlighter-rouge">ostree hello-ostree</code> is entered.</p>
+
+<ol>
+ <li>
+ <p>Create a file in <code class="language-plaintext highlighter-rouge">src/ostree</code> named <code class="language-plaintext highlighter-rouge">ot-builtin-hello-ostree.c</code>. Code that lives in here belongs to OSTree, and uses functionality from libostree.</p>
+ </li>
+ <li>
+ <p>Add the following to <code class="language-plaintext highlighter-rouge">ot-builtin-hello-ostree.c</code>:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> #include "config.h"
+
+ #include "ot-main.h"
+ #include "ot-builtins.h"
+ #include "ostree.h"
+ #include "otutil.h"
+
+ // Structure for options such as ostree hello-ostree --option.
+ static GOptionEntry options[] = {
+ { NULL },
+ };
+
+ gboolean
+ ostree_builtin_hello_ostree (int argc, char **argv, OstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error)
+ {
+ g_autoptr(OstreeRepo) repo = NULL;
+
+ // Creates new command context, ready to be parsed.
+ // Input to g_option_context_new shows when running ostree &lt;command&gt; --help
+ g_autoptr(GOptionContext) context = g_option_context_new ("");
+
+ // Parses the command context according to the ostree CLI.
+ if (!ostree_option_context_parse (context, options, &amp;argc, &amp;argv, invocation, &amp;repo, cancellable, error))
+ return FALSE;
+
+ g_print("Hello OSTree!\n");
+
+ return TRUE;
+ }
+</code></pre></div> </div>
+
+ <p>This defines the functionality for <code class="language-plaintext highlighter-rouge">hello-ostree</code>. Now we have to make sure the CLI can refer to the execution function, and that autotools knows to build this file.
+ Note: libostree codebase supports C99 features.</p>
+ </li>
+ <li>
+ <p>Add the following in <code class="language-plaintext highlighter-rouge">src/ostree/main.c</code>:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> { "hello-ostree", // The name of the command
+ OSTREE_BUILTIN_FLAG_NO_REPO, // Flag not to require the `--repo` argument, see "ot-main.h"
+ ostree_builtin_hello_ostree, // Execution function for the command
+ "Print hello message" }, // Short description to appear when `ostree hello-ostree --help` is entered
+</code></pre></div> </div>
+ </li>
+ <li>
+ <p>Add a macro for the function declaration of <code class="language-plaintext highlighter-rouge">ostree_builtin_hello_ostree</code>, in <code class="language-plaintext highlighter-rouge">ot-builtins.h</code>:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> BUILTINPROTO(hello_ostree);
+</code></pre></div> </div>
+
+ <p>This makes the function definition visible to the CLI.</p>
+ </li>
+ <li>
+ <p>Configure automake to include <code class="language-plaintext highlighter-rouge">ot-builtin-hello-ostree.c</code> in the build, by adding an entry in <code class="language-plaintext highlighter-rouge">Makefile-ostree.am</code> under <code class="language-plaintext highlighter-rouge">ostree_SOURCES</code>:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> src/ostree/ot-builtin-hello-ostree.c \
+</code></pre></div> </div>
+ </li>
+ <li>
+ <p>Rebuild ostree:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ make &amp;&amp; make install DESTDIR=/path/to/install/the/content
+</code></pre></div> </div>
+ </li>
+ <li>
+ <p>Execute the new <code class="language-plaintext highlighter-rouge">ostree</code> binary, from where you installed it:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ ostree hello-ostree
+ Hello OSTree!
+</code></pre></div> </div>
+ </li>
+</ol>
+<h3 id="adding-a-new-api-function-to-libostree">
+
+
+ <a href="#adding-a-new-api-function-to-libostree" class="anchor-heading" aria-labelledby="adding-a-new-api-function-to-libostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Adding a new API function to libostree
+
+
+</h3>
+
+
+<p>This will add a new API function <code class="language-plaintext highlighter-rouge">ostree_kernel_args_foo()</code> in <code class="language-plaintext highlighter-rouge">src/libostree/ostree-kernel-args.c</code>.</p>
+
+<ol>
+ <li>
+ <p>Add the following to <code class="language-plaintext highlighter-rouge">src/libostree/ostree-kernel-args.h</code>:
+ _OSTREE_PUBLIC
+ gboolean ostree_kernel_args_foo (const char *arg, GCancellable *cancellable, GError **error);</p>
+ </li>
+ <li>
+ <p>Add the following to <code class="language-plaintext highlighter-rouge">ostree-kernel-args.c</code>:
+ /**
+ * ostree_kernel_args_foo:
+ * @arg: Description of the arg
+ *
+ * Description of the function
+ *
+ * Since: $NEWVERSION //The new libostree version, for example 2022.5
+ **/
+ gboolean
+ ostree_kernel_args_foo (const char *arg, GCancellable *cancellable, GError **error)
+ {
+ //Add code here
+ }</p>
+ </li>
+ <li>
+ <p>Add the following to <code class="language-plaintext highlighter-rouge">src/libostree/libostree-devel.sym</code>:
+ LIBOSTREE_$NEWVERSION { // The new libostree version
+ global:
+ ostree_kernel_args_foo; // Function name
+ } LIBOSTREE_$LASTSTABLE; // The last stable libostree version</p>
+ </li>
+ <li>
+ <p>Add the following to <code class="language-plaintext highlighter-rouge">Makefile-libostree.am</code>:
+ if BUILDOPT_IS_DEVEL_BUILD
+ symbol_files += $(top_srcdir)/src/libostree/libostree-devel.sym
+ endif</p>
+ </li>
+ <li>
+ <p>Add function name <code class="language-plaintext highlighter-rouge">ostree_kernel_args_foo</code> to <code class="language-plaintext highlighter-rouge">apidoc/ostree-sections.txt</code> under <code class="language-plaintext highlighter-rouge">&lt;FILE&gt;ostree-kernel-args&lt;/FILE&gt;</code>.</p>
+ </li>
+ <li>
+ <p>Call function <code class="language-plaintext highlighter-rouge">ostree_kernel_args_foo()</code> in your code.</p>
+ </li>
+</ol>
+<h3 id="ostree-tests">
+
+
+ <a href="#ostree-tests" class="anchor-heading" aria-labelledby="ostree-tests"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree Tests
+
+
+</h3>
+
+
+<p>Tests for OSTree are done by shell scripting, by running OSTree commands and examining output. These steps will go through adding a test for <code class="language-plaintext highlighter-rouge">hello-ostree</code>.</p>
+
+<ol>
+ <li>
+ <p>Create a file in <code class="language-plaintext highlighter-rouge">tests</code> called <code class="language-plaintext highlighter-rouge">test-hello-ostree.sh</code>.</p>
+ </li>
+ <li>
+ <p>Add the following to <code class="language-plaintext highlighter-rouge">test-hello-ostree.sh</code>:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> set -euo pipefail # Ensure the test will not silently fail
+
+ . $(dirname $0)/libtest.sh # Make libtest.sh functions available
+
+ echo "1..1" # Declare which test is being run out of how many
+
+ pushd ${test_tmpdir}
+
+ ${CMD_PREFIX} ostree hello-ostree &gt; hello-output.txt
+ assert_file_has_content hello-output.txt "Hello OSTree!"
+
+ popd
+
+ echo "ok hello ostree" # Indicate test success
+</code></pre></div> </div>
+
+ <p>Many tests require a fake repository setting up (as most OSTree commands require <code class="language-plaintext highlighter-rouge">--repo</code> to be specified). See <code class="language-plaintext highlighter-rouge">test-pull-depth.sh</code> for an example of this setup.</p>
+ </li>
+ <li>
+ <p>Configure automake to include <code class="language-plaintext highlighter-rouge">test-hello-ostree.sh</code> in the build, by adding an entry in <code class="language-plaintext highlighter-rouge">Makefile-tests.am</code> under <code class="language-plaintext highlighter-rouge">_installed_or_uninstalled_test_scripts</code>:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> tests/test-hello-ostree.sh \
+</code></pre></div> </div>
+ </li>
+ <li>
+ <p>Make sure <code class="language-plaintext highlighter-rouge">test-hello-ostree.sh</code> has executable permissions!</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ chmod +x tests/test-hello-ostree.sh
+</code></pre></div> </div>
+ </li>
+ <li>
+ <p>Run the test:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ make check TESTS="tests/test-hello-ostree.sh"
+</code></pre></div> </div>
+
+ <p>Multiple tests can be specified: <code class="language-plaintext highlighter-rouge">make check TESTS="test1 test2 ..."</code>. To run all tests, use <code class="language-plaintext highlighter-rouge">make check</code>.</p>
+
+ <p>Hopefully, the test passes! The following will be printed:</p>
+
+ <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> PASS: tests/test-hello-ostree.sh 1 hello ostree
+ ============================================================================
+ Testsuite summary for libostree 2018.8
+ ============================================================================
+ # TOTAL: 1
+ # PASS: 1
+ # SKIP: 0
+ # XFAIL: 0
+ # FAIL: 0
+ # XPASS: 0
+ # ERROR: 0
+ ============================================================================
+</code></pre></div> </div>
+ </li>
+</ol>
+<h3 id="submitting-a-patch">
+
+
+ <a href="#submitting-a-patch" class="anchor-heading" aria-labelledby="submitting-a-patch"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Submitting a Patch
+
+
+</h3>
+
+
+<p>After you have committed your changes and tested, you are ready to submit your patch!</p>
+
+<p>You should make sure your commits are placed on top of the latest changes from <code class="language-plaintext highlighter-rouge">upstream/main</code>:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git pull <span class="nt">--rebase</span> upstream main
+</code></pre></div></div>
+
+<p>To submit your patch, open a pull request from your forked repository. Most often, you’ll be merging into <code class="language-plaintext highlighter-rouge">ostree:main</code> from <code class="language-plaintext highlighter-rouge">&lt;username&gt;:&lt;branch name&gt;</code>.</p>
+
+<p>If some of your changes are complete and you would like feedback, you may also open a pull request that has WIP (Work In Progress) in the title.</p>
+
+<p>Before a pull request is considered merge ready, your commit messages should fall within the specified guideline. See <a href="/ostree/CONTRIBUTING/#commit-message-style">Commit message style</a>.</p>
+
+<p>See <a href="/ostree/CONTRIBUTING/#submitting-patches">CONTRIBUTING.md</a> for information on squashing commits, and alternative options to submit patches.</p>
+<h3 id="returning-workflow">
+
+
+ <a href="#returning-workflow" class="anchor-heading" aria-labelledby="returning-workflow"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Returning Workflow
+
+
+</h3>
+
+
+<p>When returning to work on a patch, it is recommended to update your fork with the latest changes in the upstream main branch.</p>
+
+<p>If creating a new branch:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git checkout main
+<span class="nv">$ </span>git pull upstream main
+<span class="nv">$ </span>git checkout <span class="nt">-b</span> &lt;name-of-patch&gt;
+</code></pre></div></div>
+
+<p>If continuing on a branch already created:</p>
+
+<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git checkout &lt;name-of-patch&gt;
+<span class="nv">$ </span>git pull <span class="nt">--rebase</span> upstream main
+</code></pre></div></div>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/contributing-tutorial.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/deployment/index.html b/deployment/index.html
new file mode 100644
index 00000000..51e77350
--- /dev/null
+++ b/deployment/index.html
@@ -0,0 +1,397 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Deployments | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Deployments" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/deployment/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/deployment/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Deployments" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Deployments","url":"https://ostreedev.github.io/ostree/deployment/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item active"><a href="/ostree/deployment/" class="nav-list-link active">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="deployments">
+
+
+ <a href="#deployments" class="anchor-heading" aria-labelledby="deployments"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Deployments
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#overview" id="markdown-toc-overview">Overview</a> <ol>
+ <li><a href="#stateroot-aka-osname-group-of-deployments-that-share-var" id="markdown-toc-stateroot-aka-osname-group-of-deployments-that-share-var">“stateroot” (AKA “osname”): Group of deployments that share /var</a></li>
+ <li><a href="#contents-of-a-deployment" id="markdown-toc-contents-of-a-deployment">Contents of a deployment</a></li>
+ <li><a href="#staged-deployments" id="markdown-toc-staged-deployments">Staged deployments</a></li>
+ <li><a href="#the-system-boot" id="markdown-toc-the-system-boot">The system /boot</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol>
+<h2 id="overview">
+
+
+ <a href="#overview" class="anchor-heading" aria-labelledby="overview"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Overview
+
+
+</h2>
+
+
+<p>Built on top of the OSTree versioning filesystem core is a layer
+that knows how to deploy, parallel install, and manage Unix-like
+operating systems (accessible via <code class="language-plaintext highlighter-rouge">ostree admin</code>). The core content of these operating systems
+are treated as read-only, but they transparently share storage.</p>
+
+<p>A deployment is physically located at a path of the form
+<code class="language-plaintext highlighter-rouge">/ostree/deploy/$stateroot/deploy/$checksum</code>.
+OSTree is designed to boot directly into exactly one deployment
+at a time; each deployment is intended to be a target for
+<code class="language-plaintext highlighter-rouge">chroot()</code> or equivalent.</p>
+<h3 id="stateroot-aka-osname-group-of-deployments-that-share-var">
+
+
+ <a href="#stateroot-aka-osname-group-of-deployments-that-share-var" class="anchor-heading" aria-labelledby="stateroot-aka-osname-group-of-deployments-that-share-var"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> “stateroot” (AKA “osname”): Group of deployments that share /var
+
+
+</h3>
+
+
+<p>Each deployment is grouped in exactly one “stateroot” (also known as an “osname”);
+the former term is preferred.</p>
+
+<p>From above, you can see that a stateroot is physically represented in the
+<code class="language-plaintext highlighter-rouge">/ostree/deploy/$stateroot</code> directory. For example, OSTree can allow parallel
+installing Debian in <code class="language-plaintext highlighter-rouge">/ostree/deploy/debian</code> and Red Hat Enterprise Linux in
+<code class="language-plaintext highlighter-rouge">/ostree/deploy/rhel</code> (subject to operating system support, present released
+versions of these operating systems may not support this).</p>
+
+<p>Each stateroot has exactly one copy of the traditional Unix <code class="language-plaintext highlighter-rouge">/var</code>,
+stored physically in <code class="language-plaintext highlighter-rouge">/ostree/deploy/$stateroot/var</code>. OSTree provides
+support tools for <code class="language-plaintext highlighter-rouge">systemd</code> to create a Linux bind mount that ensures
+the booted deployment sees the shared copy of <code class="language-plaintext highlighter-rouge">/var</code>.</p>
+
+<p>OSTree does not touch the contents of <code class="language-plaintext highlighter-rouge">/var</code>. Operating system
+components such as daemon services are required to create any
+directories they require there at runtime
+(e.g. <code class="language-plaintext highlighter-rouge">/var/cache/$daemonname</code>), and to manage upgrading data formats
+inside those directories.</p>
+<h3 id="contents-of-a-deployment">
+
+
+ <a href="#contents-of-a-deployment" class="anchor-heading" aria-labelledby="contents-of-a-deployment"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Contents of a deployment
+
+
+</h3>
+
+
+<p>A deployment begins with a specific commit (represented as a
+SHA256 hash) in the OSTree repository in <code class="language-plaintext highlighter-rouge">/ostree/repo</code>. This commit refers
+to a filesystem tree that represents the underlying basis of a
+deployment. For short, we will call this the “tree”, to
+distinguish it from the concept of a deployment.</p>
+
+<p>First, the tree must include a kernel (and optionally an initramfs). The
+current standard locations for these are <code class="language-plaintext highlighter-rouge">/usr/lib/modules/$kver/vmlinuz</code> and
+<code class="language-plaintext highlighter-rouge">/usr/lib/modules/$kver/initramfs.img</code>. The “boot checksum” will be computed
+automatically. This follows the current Fedora kernel layout, and is
+the current recommended path. However, older versions of libostree don’t
+support this; you may need to also put kernels in the previous (legacy)
+paths, which are <code class="language-plaintext highlighter-rouge">vmlinuz(-.*)?-$checksum</code> in either <code class="language-plaintext highlighter-rouge">/boot</code> or <code class="language-plaintext highlighter-rouge">/usr/lib/ostree-boot</code>.
+The checksum should be a SHA256 hash of the kernel contents; it must be
+pre-computed before storing the kernel in the repository. Optionally,
+the directory can also contain an initramfs, stored as
+<code class="language-plaintext highlighter-rouge">initramfs(-.*)?-$checksum</code> and/or a device tree, stored as
+<code class="language-plaintext highlighter-rouge">devicetree(-.*)?-$checksum</code>. If an initramfs or devicetree exist,
+the checksum must include all of the kernel, initramfs and devicetree contents.
+OSTree will use this to determine which kernels are shared. The rationale for
+this is to avoid computing checksums on the client by default.</p>
+
+<p>The deployment should not have a traditional UNIX <code class="language-plaintext highlighter-rouge">/etc</code>; instead, it
+should include <code class="language-plaintext highlighter-rouge">/usr/etc</code>. This is the “default configuration”. When
+OSTree creates a deployment, it performs a 3-way merge using the
+<em>old</em> default configuration, the active system’s <code class="language-plaintext highlighter-rouge">/etc</code>, and the new
+default configuration. In the final filesystem tree for a deployment
+then, <code class="language-plaintext highlighter-rouge">/etc</code> is a regular writable directory.</p>
+
+<p>Besides the exceptions of <code class="language-plaintext highlighter-rouge">/var</code> and <code class="language-plaintext highlighter-rouge">/etc</code> then, the rest of the
+contents of the tree are checked out as hard links into the
+repository. It’s strongly recommended that operating systems ship all
+of their content in <code class="language-plaintext highlighter-rouge">/usr</code>, but this is not a hard requirement.</p>
+
+<p>Finally, a deployment may have a <code class="language-plaintext highlighter-rouge">.origin</code> file, stored next to its
+directory. This file tells <code class="language-plaintext highlighter-rouge">ostree admin upgrade</code> how to upgrade it.
+At the moment, OSTree only supports upgrading a single refspec.
+However, in the future OSTree may support a syntax for composing
+layers of trees, for example.</p>
+<h3 id="staged-deployments">
+
+
+ <a href="#staged-deployments" class="anchor-heading" aria-labelledby="staged-deployments"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Staged deployments
+
+
+</h3>
+
+
+<p>As mentioned above, when OSTree creates a new deployment, a 3-way merge is done
+to update its <code class="language-plaintext highlighter-rouge">/etc</code>. Depending on the nature of the system, this can cause an
+issue: if a user or program modifies the booted <code class="language-plaintext highlighter-rouge">/etc</code> <em>after</em> the pending
+deployment is created but <em>before</em> rebooting, those modifications will be lost.
+OSTree does not do a second <code class="language-plaintext highlighter-rouge">/etc</code> merge on reboot.</p>
+
+<p>To counter this, OSTree supports staged deployments. In this flow, deployments
+are created using e.g. <code class="language-plaintext highlighter-rouge">ostree admin upgrade --stage</code> on the CLI. The new
+deployment is still created when the command is invoked, but the 3-way <code class="language-plaintext highlighter-rouge">/etc</code>
+merge is delayed until the system is rebooted or shut down. Additionally,
+updating the bootloader is also delayed. This is done by the
+<code class="language-plaintext highlighter-rouge">ostree-finalize-staged.service</code> systemd unit.</p>
+
+<p>The main disadvantage of this approach is that rebooting can take longer and the
+failure mode can be confusing (the machine will reboot into the same
+deployment). In systems where the workload is well-understood and not subject to
+the <code class="language-plaintext highlighter-rouge">/etc</code> issue above, it may be better to not stage deployments.</p>
+<h3 id="the-system-boot">
+
+
+ <a href="#the-system-boot" class="anchor-heading" aria-labelledby="the-system-boot"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The system /boot
+
+
+</h3>
+
+
+<p>While OSTree parallel installs deployments cleanly inside the
+<code class="language-plaintext highlighter-rouge">/ostree</code> directory, ultimately it has to control the system’s <code class="language-plaintext highlighter-rouge">/boot</code>
+directory. The way this works is via the
+<a href="http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec">Boot Loader Specification</a>,
+which is a standard for bootloader-independent drop-in configuration
+files.</p>
+
+<p>When a tree is deployed, it will have a configuration file generated
+of the form
+<code class="language-plaintext highlighter-rouge">/boot/loader/entries/ostree-$stateroot-$checksum.$serial.conf</code>. This
+configuration file will include a special <code class="language-plaintext highlighter-rouge">ostree=</code> kernel argument
+that allows the initramfs to find (and <code class="language-plaintext highlighter-rouge">chroot()</code> into) the specified
+deployment.</p>
+
+<p>At present, not all bootloaders implement the BootLoaderSpec, so
+OSTree contains code for some of these to regenerate native config
+files (such as <code class="language-plaintext highlighter-rouge">/boot/syslinux/syslinux.conf</code>) based on the entries.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/deployment.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/formats/index.html b/formats/index.html
new file mode 100644
index 00000000..2f5edcc3
--- /dev/null
+++ b/formats/index.html
@@ -0,0 +1,518 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>OSTree data formats | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="OSTree data formats" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/formats/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/formats/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="OSTree data formats" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"OSTree data formats","url":"https://ostreedev.github.io/ostree/formats/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item active"><a href="/ostree/formats/" class="nav-list-link active">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="ostree-data-formats">
+
+
+ <a href="#ostree-data-formats" class="anchor-heading" aria-labelledby="ostree-data-formats"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree data formats
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#on-the-topic-of-smart-servers" id="markdown-toc-on-the-topic-of-smart-servers">On the topic of “smart servers”</a></li>
+ <li><a href="#the-archive-format" id="markdown-toc-the-archive-format">The archive format</a></li>
+ <li><a href="#archive-efficiency" id="markdown-toc-archive-efficiency">archive efficiency</a></li>
+ <li><a href="#aside-bare-formats" id="markdown-toc-aside-bare-formats">Aside: bare formats</a></li>
+ <li><a href="#static-deltas" id="markdown-toc-static-deltas">Static deltas</a></li>
+ <li><a href="#static-delta-repository-layout" id="markdown-toc-static-delta-repository-layout">Static delta repository layout</a></li>
+ <li><a href="#static-delta-internal-structure" id="markdown-toc-static-delta-internal-structure">Static delta internal structure</a> <ol>
+ <li><a href="#the-delta-superblock" id="markdown-toc-the-delta-superblock">The delta superblock</a></li>
+ </ol>
+ </li>
+ <li><a href="#a-delta-part" id="markdown-toc-a-delta-part">A delta part</a></li>
+ <li><a href="#fallback-objects" id="markdown-toc-fallback-objects">Fallback objects</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+</ol>
+<h2 id="on-the-topic-of-smart-servers">
+
+
+ <a href="#on-the-topic-of-smart-servers" class="anchor-heading" aria-labelledby="on-the-topic-of-smart-servers"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> On the topic of “smart servers”
+
+
+</h2>
+
+
+<p>One really crucial difference between OSTree and git is that git has a
+“smart server”. Even when fetching over <code class="language-plaintext highlighter-rouge">https://</code>, it isn’t just a
+static webserver, but one that e.g. dynamically computes and
+compresses pack files for each client.</p>
+
+<p>In contrast, the author of OSTree feels that for operating system
+updates, many deployments will want to use simple static webservers,
+the same target most package systems were designed to use. The
+primary advantages are security and compute efficiency. Services like
+Amazon S3 and CDNs are a canonical target, as well as a stock static
+nginx server.</p>
+<h2 id="the-archive-format">
+
+
+ <a href="#the-archive-format" class="anchor-heading" aria-labelledby="the-archive-format"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The archive format
+
+
+</h2>
+
+
+<p>In the <a href="repo">repo</a> section, the concept of objects was introduced,
+where file/content objects are checksummed and managed individually.
+(Unlike a package system, which operates on compressed aggregates).</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">archive</code> format simply gzip-compresses each content object.
+Metadata objects are stored uncompressed. This means that it’s easy
+to serve via static HTTP. Note: the repo config file still uses the
+historical term <code class="language-plaintext highlighter-rouge">archive-z2</code> as mode. But this essentially indicates
+the modern <code class="language-plaintext highlighter-rouge">archive</code> format.</p>
+
+<p>When you commit new content, you will see new <code class="language-plaintext highlighter-rouge">.filez</code> files appearing
+in <code class="language-plaintext highlighter-rouge">objects/</code>.</p>
+<h2 id="archive-efficiency">
+
+
+ <a href="#archive-efficiency" class="anchor-heading" aria-labelledby="archive-efficiency"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> archive efficiency
+
+
+</h2>
+
+
+<p>The advantages of <code class="language-plaintext highlighter-rouge">archive</code>:</p>
+
+<ul>
+ <li>It’s easy to understand and implement</li>
+ <li>Can be served directly over plain HTTP by a static webserver</li>
+ <li>Clients can download/unpack updates incrementally</li>
+ <li>Space efficient on the server</li>
+</ul>
+
+<p>The biggest disadvantage of this format is that for a client to
+perform an update, one HTTP request per changed file is required. In
+some scenarios, this actually isn’t bad at all, particularly with
+techniques to reduce HTTP overhead, such as
+<a href="https://en.wikipedia.org/wiki/HTTP/2">HTTP/2</a>.</p>
+
+<p>In order to make this format work well, you should design your content
+such that large data that changes infrequently (e.g. graphic images)
+are stored separately from small frequently changing data (application
+code).</p>
+
+<p>Other disadvantages of <code class="language-plaintext highlighter-rouge">archive</code>:</p>
+
+<ul>
+ <li>It’s quite bad when clients are performing an initial pull (without HTTP/2),</li>
+ <li>One doesn’t know the total size (compressed or uncompressed) of content
+before downloading everything</li>
+</ul>
+<h2 id="aside-bare-formats">
+
+
+ <a href="#aside-bare-formats" class="anchor-heading" aria-labelledby="aside-bare-formats"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Aside: bare formats
+
+
+</h2>
+
+
+<p>The most common operation is to pull from a remote <code class="language-plaintext highlighter-rouge">archive</code> repository
+into a local one. This latter is not compressed on disk. In other
+words, pulling to a local repository is similar to unpacking (but not
+installing) the content of an RPM/deb package.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">bare</code> repository format is the simplest one. In this mode regular files
+are directly stored to disk, and all metadata (e.g. uid/gid and xattrs) is
+reflected to the filesystem.
+It allows further direct access to content and metadata, but it may require
+elevated privileges when writing objects to the repository.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">bare-user</code> format is a bit special in that the uid/gid and xattrs
+from the content are ignored. This is primarily useful if you want to
+have the same OSTree-managed content that can be run on a host system
+or an unprivileged container.</p>
+
+<p>Similarly, the <code class="language-plaintext highlighter-rouge">bare-split-xattrs</code> format is a special mode where xattrs
+are stored as separate repository objects, and not directly reflected to
+the filesystem.
+This is primarily useful when transporting xattrs through lossy environments
+(e.g. tar streams and containerized environments). It also allows carrying
+security-sensitive xattrs (e.g. SELinux labels) out-of-band without involving
+OS filesystem logic.</p>
+<h2 id="static-deltas">
+
+
+ <a href="#static-deltas" class="anchor-heading" aria-labelledby="static-deltas"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Static deltas
+
+
+</h2>
+
+
+<p>OSTree itself was originally focused on a continuous delivery model, where
+client systems are expected to update regularly. However, many OS vendors
+would like to supply content that’s updated e.g. once a month or less often.</p>
+
+<p>For this model, we can do a lot better to support batched updates than
+a basic <code class="language-plaintext highlighter-rouge">archive</code> repo. However, we still want to preserve the
+model of “static webserver only”. Given this, OSTree has gained the
+concept of a “static delta”.</p>
+
+<p>These deltas are targeted to be a delta between two specific commit
+objects, including “bsdiff” and “rsync-style” deltas within a content
+object. Static deltas also support <code class="language-plaintext highlighter-rouge">from NULL</code>, where the client can
+more efficiently download a commit object from scratch - this is
+mostly useful when using OSTree for containers, rather than OS images.
+For OS images, one tends to download an installer ISO or qcow2 image
+which is a single file that contains the tree data already.</p>
+
+<p>Effectively, we’re spending server-side storage (and one-time compute
+cost), and gaining efficiency in client network bandwidth.</p>
+<h2 id="static-delta-repository-layout">
+
+
+ <a href="#static-delta-repository-layout" class="anchor-heading" aria-labelledby="static-delta-repository-layout"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Static delta repository layout
+
+
+</h2>
+
+
+<p>Since static deltas may not exist, the client first needs to attempt
+to locate one. Suppose a client wants to retrieve commit <code class="language-plaintext highlighter-rouge">${new}</code>
+while currently running <code class="language-plaintext highlighter-rouge">${current}</code>.</p>
+
+<p>In order to save space, these two commits are “modified base64” - the
+<code class="language-plaintext highlighter-rouge">/</code> character is replaced with <code class="language-plaintext highlighter-rouge">_</code>.</p>
+
+<p>Like the commit objects, a “prefix directory” is used to make
+management easier for filesystem tools.</p>
+
+<p>A delta is named <code class="language-plaintext highlighter-rouge">$(mbase64 $from)-$(mbase64 $to)</code>, for example
+<code class="language-plaintext highlighter-rouge">GpTyZaVut2jXFPWnO4LJiKEdRTvOw_mFUCtIKW1NIX0-L8f+VVDkEBKNc1Ncd+mDUrSVR4EyybQGCkuKtkDnTwk</code>,
+which in SHA256 format is
+<code class="language-plaintext highlighter-rouge">1a94f265a56eb768d714f5a73b82c988a11d453bcec3f985502b48296d4d217d-2fc7fe5550e410128d73535c77e98352b495478132c9b4060a4b8ab640e74f09</code>.</p>
+
+<p>Finally, the actual content can be found in
+<code class="language-plaintext highlighter-rouge">deltas/$fromprefix/$fromsuffix-$to</code>.</p>
+<h2 id="static-delta-internal-structure">
+
+
+ <a href="#static-delta-internal-structure" class="anchor-heading" aria-labelledby="static-delta-internal-structure"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Static delta internal structure
+
+
+</h2>
+
+
+<p>A delta is itself a directory. Inside, there is a file called
+<code class="language-plaintext highlighter-rouge">superblock</code> which contains metadata. The rest of the files will be
+integers bearing packs of content.</p>
+
+<p>The file format of static deltas should be currently considered an
+OSTree implementation detail. Obviously, nothing stops one from
+writing code which is compatible with OSTree today. However, we would
+like the flexibility to expand and change things, and having multiple
+codebases makes that more problematic. Please contact the authors
+with any requests.</p>
+
+<p>That said, one critical thing to understand about the design is that
+delta payloads are a bit more like “restricted programs” than they are
+raw data. There’s a “compilation” phase which generates output that
+the client executes.</p>
+
+<p>This “updates as code” model allows for multiple content generation
+strategies. The design of this was inspired by that of Chromium:
+<a href="http://dev.chromium.org/chromium-os/chromiumos-design-docs/filesystem-autoupdate">ChromiumOS Autoupdate</a>.</p>
+<h3 id="the-delta-superblock">
+
+
+ <a href="#the-delta-superblock" class="anchor-heading" aria-labelledby="the-delta-superblock"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The delta superblock
+
+
+</h3>
+
+
+<p>The superblock contains:</p>
+
+<ul>
+ <li>arbitrary metadata</li>
+ <li>delta generation timestamp</li>
+ <li>the new commit object</li>
+ <li>An array of recursive deltas to apply</li>
+ <li>An array of per-part metadata, including total object sizes (compressed and uncompressed),</li>
+ <li>An array of fallback objects</li>
+</ul>
+
+<p>Let’s define a delta part, then return to discuss details:</p>
+<h2 id="a-delta-part">
+
+
+ <a href="#a-delta-part" class="anchor-heading" aria-labelledby="a-delta-part"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> A delta part
+
+
+</h2>
+
+
+<p>A delta part is a combination of a raw blob of data, plus a very
+restricted bytecode that operates on it. Say for example two files
+happen to share a common section. It’s possible for the delta
+compilation to include that section once in the delta data blob, then
+generate instructions to write out that blob twice when generating
+both objects.</p>
+
+<p>Realistically though, it’s very common for most of a delta to just be
+“stream of new objects” - if one considers it, it doesn’t make sense
+to have too much duplication inside operating system content at this
+level.</p>
+
+<p>So then, what’s more interesting is that OSTree static deltas support
+a per-file delta algorithm called
+<a href="https://github.com/mendsley/bsdiff">bsdiff</a> that most notably works
+well on executable code.</p>
+
+<p>The current delta compiler scans for files with matching basenames in
+each commit that have a similar size, and attempts a bsdiff between
+them. (It would make sense later to have a build system provide a
+hint for this - for example, files within a same package).</p>
+
+<p>A generated bsdiff is included in the payload blob, and applying it is
+an instruction.</p>
+<h2 id="fallback-objects">
+
+
+ <a href="#fallback-objects" class="anchor-heading" aria-labelledby="fallback-objects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Fallback objects
+
+
+</h2>
+
+
+<p>It’s possible for there to be large-ish files which might be resistant
+to bsdiff. A good example is that it’s common for operating systems
+to use an “initramfs”, which is itself a compressed filesystem. This
+“internal compression” defeats bsdiff analysis.</p>
+
+<p>For these types of objects, the delta superblock contains an array of
+“fallback objects”. These objects aren’t included in the delta
+parts - the client simply fetches them from the underlying <code class="language-plaintext highlighter-rouge">.filez</code>
+object.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/formats.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/ima/index.html b/ima/index.html
new file mode 100644
index 00000000..53dfff2d
--- /dev/null
+++ b/ima/index.html
@@ -0,0 +1,397 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Using Linux IMA with OSTree | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Using Linux IMA with OSTree" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/ima/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/ima/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Using Linux IMA with OSTree" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Using Linux IMA with OSTree","url":"https://ostreedev.github.io/ostree/ima/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item active"><a href="/ostree/ima/" class="nav-list-link active">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="using-linux-ima-with-ostree">
+
+
+ <a href="#using-linux-ima-with-ostree" class="anchor-heading" aria-labelledby="using-linux-ima-with-ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Using Linux IMA with OSTree
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#linux-ima" id="markdown-toc-linux-ima">Linux IMA</a></li>
+ <li><a href="#ima-signatures-and-ostree-checksum" id="markdown-toc-ima-signatures-and-ostree-checksum">IMA signatures and OSTree checksum</a></li>
+ <li><a href="#signing" id="markdown-toc-signing">Signing</a> <ol>
+ <li><a href="#generating-a-key" id="markdown-toc-generating-a-key">Generating a key</a></li>
+ <li><a href="#signing-a-commit" id="markdown-toc-signing-a-commit">Signing a commit</a></li>
+ <li><a href="#applying-a-policy" id="markdown-toc-applying-a-policy">Applying a policy</a></li>
+ <li><a href="#linux-evm" id="markdown-toc-linux-evm">Linux EVM</a></li>
+ </ol>
+ </li>
+ <li><a href="#further-references" id="markdown-toc-further-references">Further references</a></li>
+</ol>
+<h2 id="linux-ima">
+
+
+ <a href="#linux-ima" class="anchor-heading" aria-labelledby="linux-ima"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Linux IMA
+
+
+</h2>
+
+
+<p>The <a href="https://sourceforge.net/p/linux-ima/wiki/Home/">Linux Integrity Measurement Architecture</a>
+provides a mechanism to cryptographically sign the digest of a regular
+file, and policies can be applied to e.g. require that code executed
+by the root user have a valid signed digest.</p>
+
+<p>The alignment between Linux IMA and ostree is quite strong. OSTree
+provides a content-addressable object store, where files are intended
+to be immutable. This is implemented with a basic read-only bind mount.</p>
+
+<p>While IMA does not actually prevent mutating files, any changed (or unsigned)
+files would (depending on policy) not be readable or executable.</p>
+<h2 id="ima-signatures-and-ostree-checksum">
+
+
+ <a href="#ima-signatures-and-ostree-checksum" class="anchor-heading" aria-labelledby="ima-signatures-and-ostree-checksum"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> IMA signatures and OSTree checksum
+
+
+</h2>
+
+
+<p>Mechanically, IMA signatures appear as a <code class="language-plaintext highlighter-rouge">security.ima</code> extended attribute
+on the file. This is a signed digest of just the file content (and not
+any metadata)</p>
+
+<p>OSTree’s checksums in contrast include not just the file content, but also
+metadata such as uid, gid and mode and extended attributes;</p>
+
+<p>Together, this means that adding an IMA signature to a file in the OSTree
+model appears as a new object (with a new digest). A nice property is that
+this enables the transactional addition (or removal) of IMA signatures.
+However, adding IMA signatures to files that were previously unsigned
+also today duplicates disk space.</p>
+<h2 id="signing">
+
+
+ <a href="#signing" class="anchor-heading" aria-labelledby="signing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Signing
+
+
+</h2>
+
+
+<p>To apply IMA signatures to an OSTree commit, there is an <code class="language-plaintext highlighter-rouge">ima-sign</code>
+command implemented currently in the <a href="https://github.com/ostreedev/ostree-rs-ext/">ostree-rs-ext</a>
+project.</p>
+<h3 id="generating-a-key">
+
+
+ <a href="#generating-a-key" class="anchor-heading" aria-labelledby="generating-a-key"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Generating a key
+
+
+</h3>
+
+
+<p>There is documentation for this in <code class="language-plaintext highlighter-rouge">man evmctl</code> and the upstream IMA
+page; we will not replicate it here.</p>
+<h3 id="signing-a-commit">
+
+
+ <a href="#signing-a-commit" class="anchor-heading" aria-labelledby="signing-a-commit"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Signing a commit
+
+
+</h3>
+
+
+<p><code class="language-plaintext highlighter-rouge">ima-sign</code> requires 4 things:</p>
+
+<ul>
+ <li>An OSTree repository (could be any mode; <code class="language-plaintext highlighter-rouge">archive</code> or e.g. <code class="language-plaintext highlighter-rouge">bare-user</code>)</li>
+ <li>A ref or commit digest (e.g. <code class="language-plaintext highlighter-rouge">exampleos/x86_64/stable</code>)</li>
+ <li>A digest algorithm (usually <code class="language-plaintext highlighter-rouge">sha256</code>, but you may use e.g. <code class="language-plaintext highlighter-rouge">sha512</code> as well)</li>
+ <li>An RSA private key</li>
+</ul>
+
+<p>You can then add IMA signatures to all regular files in the commit:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree-ext-cli ima-sign --repo=repo exampleos/x86_64/stable sha256 /path/to/key.pem
+</code></pre></div></div>
+
+<p>Many different choices are possible for the signing model. For example,
+your build system could store individual components/packages in their own
+ostree refs, and sign them at build time. This would avoid re-signing
+all binaries when creating production builds. Although note you
+still likely want to sign generated artifacts from unioning individual
+components, such as a dpkg/rpm database or equivalent and cache files
+such as the <code class="language-plaintext highlighter-rouge">ldconfig</code> and GTK+ icon caches, etc.</p>
+<h3 id="applying-a-policy">
+
+
+ <a href="#applying-a-policy" class="anchor-heading" aria-labelledby="applying-a-policy"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Applying a policy
+
+
+</h3>
+
+
+<p>Signing a commit by itself will have little to no effect. You will also
+need to include in your builds an <a href="https://sourceforge.net/p/linux-ima/wiki/Home/#defining-an-lsm-specific-policy">IMA policy</a>.</p>
+<h3 id="linux-evm">
+
+
+ <a href="#linux-evm" class="anchor-heading" aria-labelledby="linux-evm"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Linux EVM
+
+
+</h3>
+
+
+<p>The EVM subsystem builds on IMA, and adds another signature which
+covers most file data, such as the uid, gid and mode and selected
+security-relevant extended attributes.</p>
+
+<p>This is quite close to the ostree native checksum - the ordering
+of the fields is different so the checksums are physically different, but
+logically they are very close.</p>
+
+<p>However, the focus of the EVM design seems to mostly
+be on machine-specific signatures with keys stored in a TPM.
+Note that doing this on a per-machine basis would add a new
+<code class="language-plaintext highlighter-rouge">security.evm</code> extended attribute, and crucially that
+<em>changes the ostree digest</em> - so from ostree’s perspective,
+these objects will appear corrupt.</p>
+
+<p>In the future, ostree may learn to ignore the presence of <code class="language-plaintext highlighter-rouge">security.evm</code>
+extended attributes.</p>
+
+<p>There is also some support for “portable” EVM signatures - by
+default, EVM signatures also include the inode number and generation
+which are inherently machine-specific.</p>
+
+<p>A future ostree enhancement may instead also focus on supporting
+signing commits with these “portable” EVM signatures in addition to IMA.</p>
+<h2 id="further-references">
+
+
+ <a href="#further-references" class="anchor-heading" aria-labelledby="further-references"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Further references
+
+
+</h2>
+
+
+<ul>
+ <li>https://sourceforge.net/p/linux-ima/wiki/Home/</li>
+ <li>https://en.opensuse.org/SDB:Ima_evm</li>
+ <li>https://wiki.gentoo.org/wiki/Integrity_Measurement_Architecture</li>
+ <li>https://fedoraproject.org/wiki/Changes/Signed_RPM_Contents</li>
+ <li>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/enhancing-security-with-the-kernel-integrity-subsystem_managing-monitoring-and-updating-the-kernel</li>
+</ul>
+
+<!-- SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later) -->
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/ima.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..e5473abf
--- /dev/null
+++ b/index.html
@@ -0,0 +1,455 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>libostree | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="libostree" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="libostree" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebSite","description":"ostree documentation","headline":"libostree","name":"ostreedev/ostree","url":"https://ostreedev.github.io/ostree/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item active"><a href="/ostree/" class="nav-list-link active">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="libostree">
+
+
+ <a href="#libostree" class="anchor-heading" aria-labelledby="libostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> libostree
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#operating-systems-and-distributions-using-ostree" id="markdown-toc-operating-systems-and-distributions-using-ostree">Operating systems and distributions using OSTree</a></li>
+ <li><a href="#distribution-build-tools" id="markdown-toc-distribution-build-tools">Distribution build tools</a></li>
+ <li><a href="#projects-linking-to-libostree" id="markdown-toc-projects-linking-to-libostree">Projects linking to libostree</a></li>
+ <li><a href="#language-bindings" id="markdown-toc-language-bindings">Language bindings</a></li>
+ <li><a href="#building" id="markdown-toc-building">Building</a></li>
+ <li><a href="#api-reference" id="markdown-toc-api-reference">API Reference</a></li>
+ <li><a href="#manual-pages" id="markdown-toc-manual-pages">Manual Pages</a></li>
+ <li><a href="#contributing" id="markdown-toc-contributing">Contributing</a></li>
+ <li><a href="#licensing" id="markdown-toc-licensing">Licensing</a></li>
+</ol>
+
+<p>This project is now known as “libostree”, though it is still appropriate to use
+the previous name: “OSTree” (or “ostree”). The focus is on projects which use
+libostree’s shared library, rather than users directly invoking the command line
+tools (except for build systems). However, in most of the rest of the
+documentation, we will use the term “OSTree”, since it’s slightly shorter, and
+changing all documentation at once is impractical. We expect to transition to
+the new name over time.</p>
+
+<p>As implied above, libostree is both a shared library and suite of command line
+tools that combines a “git-like” model for committing and downloading bootable
+filesystem trees, along with a layer for deploying them and managing the
+bootloader configuration.</p>
+
+<p>The core OSTree model is like git in that it checksums individual files and has
+a content-addressed-object store. It’s unlike git in that it “checks out” the
+files via hardlinks, and they thus need to be immutable to prevent corruption.
+Therefore, another way to think of OSTree is that it’s just a more polished
+version of
+<a href="http://linux-vserver.org/index.php?title=util-vserver:Vhashify&amp;oldid=2285">Linux VServer hardlinks</a>.</p>
+
+<p><strong>Features:</strong></p>
+
+<ul>
+ <li>Transactional upgrades and rollback for the system</li>
+ <li>Replicating content incrementally over HTTP via GPG signatures and “pinned TLS” support</li>
+ <li>Support for parallel installing more than just 2 bootable roots</li>
+ <li>Binary history on the server side (and client)</li>
+ <li>Introspectable shared library API for build and deployment systems</li>
+ <li>Flexible support for multiple branches and repositories, supporting
+projects like <a href="https://github.com/flatpak/flatpak">flatpak</a> which
+use libostree for applications, rather than hosts.</li>
+</ul>
+<h2 id="operating-systems-and-distributions-using-ostree">
+
+
+ <a href="#operating-systems-and-distributions-using-ostree" class="anchor-heading" aria-labelledby="operating-systems-and-distributions-using-ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Operating systems and distributions using OSTree
+
+
+</h2>
+
+
+<p><a href="https://endlessos.com/">Endless OS</a> uses libostree for their host system as
+well as flatpak. See
+their <a href="https://github.com/endlessm/eos-updater">eos-updater</a>
+and <a href="https://github.com/dbnicholson/deb-ostree-builder">deb-ostree-builder</a>
+projects.</p>
+
+<p>Fedora derivatives use rpm-ostree (noted below); there are 4 variants using OSTree:</p>
+
+<ul>
+ <li><a href="https://getfedora.org/en/coreos/">Fedora CoreOS</a></li>
+ <li><a href="https://silverblue.fedoraproject.org/">Fedora Silverblue</a></li>
+ <li><a href="https://kinoite.fedoraproject.org/">Fedora Kinoite</a></li>
+ <li><a href="https://iot.fedoraproject.org/">Fedora IoT</a></li>
+</ul>
+
+<p>Red Hat Enterprise Linux CoreOS is a derivative of Fedora CoreOS, used in <a href="https://try.openshift.com/">OpenShift 4</a>.
+The <a href="https://github.com/openshift/machine-config-operator/blob/master/docs/OSUpgrades.md">machine-config-operator</a>
+manages upgrades. RHEL CoreOS is also the successor to RHEL Atomic Host, which
+uses rpm-ostree as well.</p>
+
+<p><a href="https://wiki.gnome.org/Projects/GnomeContinuous">GNOME Continuous</a> is
+where OSTree was born - as a high performance continuous delivery/testing
+system for GNOME.</p>
+
+<p><a href="https://liri.io/download/silverblue/">Liri OS</a> has the option to install
+their distribution using ostree.</p>
+
+<p><a href="https://developer.toradex.com/knowledge-base/torizoncore-overview">TorizonCore</a>
+uses libostree and Aktualizr as the base for OTA updates from compatible
+platforms, including <a href="https://developer.toradex.com/knowledge-base/torizon-update-system">Torizon OTA</a>.</p>
+<h2 id="distribution-build-tools">
+
+
+ <a href="#distribution-build-tools" class="anchor-heading" aria-labelledby="distribution-build-tools"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Distribution build tools
+
+
+</h2>
+
+
+<p><a href="https://github.com/advancedtelematic/meta-updater">meta-updater</a> is
+a layer available for <a href="http://www.openembedded.org/wiki/Main_Page">OpenEmbedded</a>
+systems.</p>
+
+<p><a href="http://doc.qt.io/QtOTA/">QtOTA</a> is Qt’s over-the-air update framework
+which uses libostree.</p>
+
+<p>The <a href="https://gitlab.com/BuildStream/buildstream">BuildStream</a> build and
+integration tool supports importing and exporting from libostree repos.</p>
+
+<p>Fedora <a href="https://github.com/coreos/coreos-assembler">coreos-assembler</a> is
+the build tool used to generate Fedora CoreOS derivatives.</p>
+<h2 id="projects-linking-to-libostree">
+
+
+ <a href="#projects-linking-to-libostree" class="anchor-heading" aria-labelledby="projects-linking-to-libostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Projects linking to libostree
+
+
+</h2>
+
+
+<p><a href="https://github.com/projectatomic/rpm-ostree">rpm-ostree</a> is used by the
+Fedora-derived operating systems listed above. It is a full hybrid
+image/package system. By default it uses libostree to atomically replicate a base OS
+(all dependency resolution is done on the server), but it supports “package layering”, where
+additional RPMs can be layered on top of the base. This brings a “best of both worlds””
+model for image and package systems.</p>
+
+<p><a href="https://github.com/endlessm/eos-updater">eos-updater</a> is a daemon that implements updates
+on EndlessOS.</p>
+
+<p><a href="https://github.com/flatpak/flatpak">flatpak</a> uses libostree for desktop
+application containers. Unlike most of the other systems here, flatpak does not
+use the “libostree host system” aspects (e.g. bootloader management), just the
+“git-like hardlink dedup”. For example, flatpak supports a per-user OSTree
+repository.</p>
+<h2 id="language-bindings">
+
+
+ <a href="#language-bindings" class="anchor-heading" aria-labelledby="language-bindings"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Language bindings
+
+
+</h2>
+
+
+<p>libostree is accessible via <a href="https://gi.readthedocs.io/en/latest/">GObject Introspection</a>;
+any language which has implemented the GI binding model should work.
+For example, Both <a href="https://pygobject.readthedocs.io/en/latest/">pygobject</a>
+and <a href="https://gitlab.gnome.org/GNOME/gjs">gjs</a> are known to work
+and further are actually used in libostree’s test suite today.</p>
+
+<p>Some bindings take the approach of using GI as a lower level and
+write higher level manual bindings on top; this is more common
+for statically compiled languages. Here’s a list of such bindings:</p>
+
+<ul>
+ <li><a href="https://github.com/ostreedev/ostree-go/">ostree-go</a></li>
+ <li><a href="https://github.com/ostreedev/ostree/tree/main/rust-bindings">ostree-rs</a></li>
+</ul>
+<h2 id="building">
+
+
+ <a href="#building" class="anchor-heading" aria-labelledby="building"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Building
+
+
+</h2>
+
+
+<p>Releases are available as GPG signed git tags, and most recent
+versions support extended validation using
+<a href="https://github.com/cgwalters/git-evtag">git-evtag</a>.</p>
+
+<p>However, in order to build from a git clone, you must update the
+submodules. If you’re packaging OSTree and want a tarball, I
+recommend using a “recursive git archive” script. There are several
+available online;
+<a href="https://github.com/ostreedev/ostree/blob/main/packaging/Makefile.dist-packaging#L11">this code</a>
+in OSTree is an example.</p>
+
+<p>Once you have a git clone or recursive archive, building is the
+same as almost every autotools project:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git submodule update --init
+env NOCONFIGURE=1 ./autogen.sh
+./configure --prefix=...
+make
+make install DESTDIR=/path/to/dest
+</code></pre></div></div>
+<h2 id="api-reference">
+
+
+ <a href="#api-reference" class="anchor-heading" aria-labelledby="api-reference"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> API Reference
+
+
+</h2>
+
+
+<p>The libostree API documentation is available in <a href="reference/">Reference</a>.</p>
+<h2 id="manual-pages">
+
+
+ <a href="#manual-pages" class="anchor-heading" aria-labelledby="manual-pages"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Manual Pages
+
+
+</h2>
+
+
+<p>The ostree manual pages are available in <a href="man/">Manual</a>.</p>
+<h2 id="contributing">
+
+
+ <a href="#contributing" class="anchor-heading" aria-labelledby="contributing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Contributing
+
+
+</h2>
+
+
+<p>See <a href="/ostree/CONTRIBUTING/">Contributing</a>.</p>
+<h2 id="licensing">
+
+
+ <a href="#licensing" class="anchor-heading" aria-labelledby="licensing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing
+
+
+</h2>
+
+
+<p>The licensing for the <em>code</em> of libostree can be canonically found in the individual files;
+and the overall status in the <a href="https://github.com/ostreedev/ostree/blob/main/COPYING">COPYING</a>
+file in the source. Currently, that’s LGPLv2+. This also covers the man pages and API docs.</p>
+
+<p>The license for the manual documentation in the <code class="language-plaintext highlighter-rouge">doc/</code> directory is:
+<code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code>
+This is intended to allow use by Wikipedia and other projects.</p>
+
+<p>In general, files should have a <code class="language-plaintext highlighter-rouge">SPDX-License-Identifier</code> and that is canonical.</p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/index.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/introduction/index.html b/introduction/index.html
new file mode 100644
index 00000000..62d0fc5a
--- /dev/null
+++ b/introduction/index.html
@@ -0,0 +1,451 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>OSTree Overview | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="OSTree Overview" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/introduction/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/introduction/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="OSTree Overview" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"OSTree Overview","url":"https://ostreedev.github.io/ostree/introduction/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item active"><a href="/ostree/introduction/" class="nav-list-link active">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="ostree-overview">
+
+
+ <a href="#ostree-overview" class="anchor-heading" aria-labelledby="ostree-overview"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OSTree Overview
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#introduction" id="markdown-toc-introduction">Introduction</a></li>
+ <li><a href="#hello-world-example" id="markdown-toc-hello-world-example">Hello World example</a></li>
+ <li><a href="#comparison-with-package-managers" id="markdown-toc-comparison-with-package-managers">Comparison with “package managers”</a></li>
+ <li><a href="#comparison-with-blockimage-replication" id="markdown-toc-comparison-with-blockimage-replication">Comparison with block/image replication</a></li>
+ <li><a href="#atomic-transitions-between-parallel-installable-read-only-filesystem-trees" id="markdown-toc-atomic-transitions-between-parallel-installable-read-only-filesystem-trees">Atomic transitions between parallel-installable read-only filesystem trees</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+</ol>
+<h2 id="introduction">
+
+
+ <a href="#introduction" class="anchor-heading" aria-labelledby="introduction"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Introduction
+
+
+</h2>
+
+
+<p>OSTree is an upgrade system for Linux-based operating systems that
+performs atomic upgrades of complete filesystem trees. It is
+not a package system; rather, it is intended to complement them.
+A primary model is composing packages on a server, and then
+replicating them to clients.</p>
+
+<p>The underlying architecture might be summarized as “git for
+operating system binaries”. It operates in userspace, and will
+work on top of any Linux filesystem. At its core is a git-like
+content-addressed object store with branches (or “refs”) to track
+meaningful filesystem trees within the store. Similarly, one can
+check out or commit to these branches.</p>
+
+<p>Layered on top of that is bootloader configuration, management of
+<code class="language-plaintext highlighter-rouge">/etc</code>, and other functions to perform an upgrade beyond just
+replicating files.</p>
+
+<p>You can use OSTree standalone in the pure replication model,
+but another approach is to add a package manager on top,
+thus creating a hybrid tree/package system.</p>
+<h2 id="hello-world-example">
+
+
+ <a href="#hello-world-example" class="anchor-heading" aria-labelledby="hello-world-example"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Hello World example
+
+
+</h2>
+
+
+<p>OSTree is mostly used as a library, but a quick tour of using its
+CLI tools can give a general idea of how it works at its most
+basic level.</p>
+
+<p>You can create a new OSTree repository using <code class="language-plaintext highlighter-rouge">init</code>:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo init
+</code></pre></div></div>
+
+<p>This will create a new <code class="language-plaintext highlighter-rouge">repo</code> directory containing your
+repository. Feel free to inspect it.</p>
+
+<p>Now, let’s prepare some data to add to the repo:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ mkdir tree
+$ echo "Hello world!" &gt; tree/hello.txt
+</code></pre></div></div>
+
+<p>We can now import our <code class="language-plaintext highlighter-rouge">tree/</code> directory using the <code class="language-plaintext highlighter-rouge">commit</code>
+command:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo commit --branch=foo tree/
+</code></pre></div></div>
+
+<p>This will create a new branch <code class="language-plaintext highlighter-rouge">foo</code> pointing to the full tree
+imported from <code class="language-plaintext highlighter-rouge">tree/</code>. In fact, we could now delete <code class="language-plaintext highlighter-rouge">tree/</code> if we
+wanted to.</p>
+
+<p>To check that we indeed now have a <code class="language-plaintext highlighter-rouge">foo</code> branch, you can use the
+<code class="language-plaintext highlighter-rouge">refs</code> command:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo refs
+foo
+</code></pre></div></div>
+
+<p>We can also inspect the filesystem tree using the <code class="language-plaintext highlighter-rouge">ls</code> and <code class="language-plaintext highlighter-rouge">cat</code>
+commands:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo ls foo
+d00775 1000 1000 0 /
+-00664 1000 1000 13 /hello.txt
+$ ostree --repo=repo cat foo /hello.txt
+Hello world!
+</code></pre></div></div>
+
+<p>And finally, we can check out our tree from the repository:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=repo checkout foo tree-checkout/
+$ cat tree-checkout/hello.txt
+Hello world!
+</code></pre></div></div>
+<h2 id="comparison-with-package-managers">
+
+
+ <a href="#comparison-with-package-managers" class="anchor-heading" aria-labelledby="comparison-with-package-managers"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Comparison with “package managers”
+
+
+</h2>
+
+
+<p>Because OSTree is designed for deploying core operating
+systems, a comparison with traditional “package managers” such
+as dpkg and rpm is illustrative. Packages are traditionally
+composed of partial filesystem trees with metadata and scripts
+attached, and these are dynamically assembled on the client
+machine, after a process of dependency resolution.</p>
+
+<p>In contrast, OSTree only supports recording and deploying
+<em>complete</em> (bootable) filesystem trees. It
+has no built-in knowledge of how a given filesystem tree was
+generated or the origin of individual files, or dependencies,
+descriptions of individual components. Put another way, OSTree
+only handles delivery and deployment; you will likely still want
+to include inside each tree metadata about the individual
+components that went into the tree. For example, a system
+administrator may want to know what version of OpenSSL was
+included in your tree, so you should support the equivalent of
+<code class="language-plaintext highlighter-rouge">rpm -q</code> or <code class="language-plaintext highlighter-rouge">dpkg -L</code>.</p>
+
+<p>The OSTree core emphasizes replicating read-only OS trees via
+HTTP, and where the OS includes (if desired) an entirely
+separate mechanism to install applications, stored in <code class="language-plaintext highlighter-rouge">/var</code> if they’re system global, or
+<code class="language-plaintext highlighter-rouge">/home</code> for per-user
+application installation. An example application mechanism is
+<a href="http://docker.io/">http://docker.io/</a></p>
+
+<p>However, it is entirely possible to use OSTree underneath a
+package system, where the contents of <code class="language-plaintext highlighter-rouge">/usr</code> are computed on the client.
+For example, when installing a package, rather than changing the
+currently running filesystem, the package manager could assemble
+a new filesystem tree that layers the new packages on top of a
+base tree, record it in the local OSTree repository, and then
+set it up for the next boot. To support this model, OSTree
+provides an (introspectable) C shared library.</p>
+<h2 id="comparison-with-blockimage-replication">
+
+
+ <a href="#comparison-with-blockimage-replication" class="anchor-heading" aria-labelledby="comparison-with-blockimage-replication"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Comparison with block/image replication
+
+
+</h2>
+
+
+<p>OSTree shares some similarity with “dumb” replication and
+stateless deployments, such as the model common in “cloud”
+deployments where nodes are booted from an (effectively)
+readonly disk, and user data is kept on a different volumes.
+The advantage of “dumb” replication, shared by both OSTree and
+the cloud model, is that it’s <em>reliable</em>
+and <em>predictable</em>.</p>
+
+<p>But unlike many default image-based deployments, OSTree supports
+exactly two persistent writable directories that are preserved across
+upgrades: <code class="language-plaintext highlighter-rouge">/etc</code> and <code class="language-plaintext highlighter-rouge">/var</code>.</p>
+
+<p>Because OSTree operates at the Unix filesystem layer, it works
+on top of any filesystem or block storage layout; it’s possible
+to replicate a given filesystem tree from an OSTree repository
+into plain ext4, BTRFS, XFS, or in general any Unix-compatible
+filesystem that supports hard links. Note: OSTree will
+transparently take advantage of some BTRFS features if deployed
+on it.</p>
+
+<p>OSTree is orthogonal to virtualization mechanisms like AMIs and qcow2
+images, though it’s most useful though if you plan to update stateful
+VMs in-place, rather than generating new images.</p>
+
+<p>In practice, users of “bare metal” configurations will find the OSTree
+model most useful.</p>
+<h2 id="atomic-transitions-between-parallel-installable-read-only-filesystem-trees">
+
+
+ <a href="#atomic-transitions-between-parallel-installable-read-only-filesystem-trees" class="anchor-heading" aria-labelledby="atomic-transitions-between-parallel-installable-read-only-filesystem-trees"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Atomic transitions between parallel-installable read-only filesystem trees
+
+
+</h2>
+
+
+<p>Another deeply fundamental difference between both package
+managers and image-based replication is that OSTree is
+designed to parallel-install <em>multiple versions</em> of multiple
+<em>independent</em> operating systems. OSTree
+relies on a new toplevel <code class="language-plaintext highlighter-rouge">ostree</code> directory; it can in fact
+parallel install inside an existing OS or distribution
+occupying the physical <code class="language-plaintext highlighter-rouge">/</code> root.</p>
+
+<p>On each client machine, there is an OSTree repository stored
+in <code class="language-plaintext highlighter-rouge">/ostree/repo</code>, and a set of “deployments” stored in <code class="language-plaintext highlighter-rouge">/ostree/deploy/$STATEROOT/$CHECKSUM</code>.
+Each deployment is primarily composed of a set of hardlinks
+into the repository. This means each version is deduplicated;
+an upgrade process only costs disk space proportional to the
+new files, plus some constant overhead.</p>
+
+<p>The model OSTree emphasizes is that the OS read-only content
+is kept in the classic Unix <code class="language-plaintext highlighter-rouge">/usr</code>; it comes with code to
+create a Linux read-only bind mount to prevent inadvertent
+corruption. There is exactly one <code class="language-plaintext highlighter-rouge">/var</code> writable directory shared
+between each deployment for a given OS. The OSTree core code
+does not touch content in this directory; it is up to the code
+in each operating system for how to manage and upgrade state.</p>
+
+<p>Finally, each deployment has its own writable copy of the
+configuration store <code class="language-plaintext highlighter-rouge">/etc</code>. On upgrade, OSTree will
+perform a basic 3-way diff, and apply any local changes to the
+new copy, while leaving the old untouched.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/introduction.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/man/index.html b/man/index.html
new file mode 100644
index 00000000..9bda7c08
--- /dev/null
+++ b/man/index.html
@@ -0,0 +1 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OSTree Manual</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="index"><div class="titlepage"><div><div><h2 class="title"><a name="index"></a>OSTree Manual</h2></div></div></div><dl><dt><a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-cleanup.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-cleanup</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-config-diff.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-config-diff</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-deploy.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-deploy</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-init-fs.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-init-fs</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-instutil.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-instutil</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-os-init.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-os-init</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-pin.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-pin</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-set-origin.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-set-origin</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-status.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-status</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-switch.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-switch</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-undeploy.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-undeploy</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-unlock.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-unlock</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin-upgrade.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-upgrade</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-admin.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-cat.html"><span class="citerefentry"><span class="refentrytitle">ostree-cat</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-checkout.html"><span class="citerefentry"><span class="refentrytitle">ostree-checkout</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-checksum.html"><span class="citerefentry"><span class="refentrytitle">ostree-checksum</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-commit.html"><span class="citerefentry"><span class="refentrytitle">ostree-commit</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-config.html"><span class="citerefentry"><span class="refentrytitle">ostree-config</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-create-usb.html"><span class="citerefentry"><span class="refentrytitle">ostree-create-usb</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-diff.html"><span class="citerefentry"><span class="refentrytitle">ostree-diff</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-export.html"><span class="citerefentry"><span class="refentrytitle">ostree-export</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-find-remotes.html"><span class="citerefentry"><span class="refentrytitle">ostree-find-remotes</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-fsck.html"><span class="citerefentry"><span class="refentrytitle">ostree-fsck</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-gpg-sign.html"><span class="citerefentry"><span class="refentrytitle">ostree-gpg-sign</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-init.html"><span class="citerefentry"><span class="refentrytitle">ostree-init</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-log.html"><span class="citerefentry"><span class="refentrytitle">ostree-log</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-ls.html"><span class="citerefentry"><span class="refentrytitle">ostree-ls</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-prune.html"><span class="citerefentry"><span class="refentrytitle">ostree-prune</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-pull-local.html"><span class="citerefentry"><span class="refentrytitle">ostree-pull-local</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-pull.html"><span class="citerefentry"><span class="refentrytitle">ostree-pull</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-refs.html"><span class="citerefentry"><span class="refentrytitle">ostree-refs</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-remote.html"><span class="citerefentry"><span class="refentrytitle">ostree-remote</span>(1)</span></a></dt><dd></dd><dt><a href="ostree.repo-config.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo-config</span>(5)</span></a></dt><dd></dd><dt><a href="ostree.repo.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo</span>(5)</span></a></dt><dd></dd><dt><a href="ostree-reset.html"><span class="citerefentry"><span class="refentrytitle">ostree-reset</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-rev-parse.html"><span class="citerefentry"><span class="refentrytitle">ostree-rev-parse</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-show.html"><span class="citerefentry"><span class="refentrytitle">ostree-show</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-sign.html"><span class="citerefentry"><span class="refentrytitle">ostree-sign</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-static-delta.html"><span class="citerefentry"><span class="refentrytitle">ostree-static-delta</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-summary.html"><span class="citerefentry"><span class="refentrytitle">ostree-summary</span>(1)</span></a></dt><dd></dd><dt><a href="ostree-trivial-httpd.html"><span class="citerefentry"><span class="refentrytitle">ostree-trivial-httpd</span>(1)</span></a></dt><dd></dd><dt><a href="rofiles-fuse.html"><span class="citerefentry"><span class="refentrytitle">rofiles-fuse</span>(1)</span></a></dt><dd></dd></dl></div></body></html>
diff --git a/man/ostree-admin-cleanup.html b/man/ostree-admin-cleanup.html
new file mode 100644
index 00000000..ba54cb38
--- /dev/null
+++ b/man/ostree-admin-cleanup.html
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin cleanup</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-cleanup &#8212; Delete untagged deployments and repository objects</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin cleanup </code> </p></div></div><div class="refsect1"><a name="idm45734977252432"></a><h2>Description</h2><p>
+ OSTree sysroot cleans up other bootversions and old deployments. If/when a pull or deployment is interrupted, a partially written state may remain on disk. This command cleans up any such partial states.
+ </p></div><div class="refsect1"><a name="idm45734977251248"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin cleanup</strong></span></p></div></div></body></html>
diff --git a/man/ostree-admin-config-diff.html b/man/ostree-admin-config-diff.html
new file mode 100644
index 00000000..4afd746a
--- /dev/null
+++ b/man/ostree-admin-config-diff.html
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin config-diff</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-config-diff &#8212; Diff current /etc configuration versus default</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin config-diff</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm46004368390528"></a><h2>Description</h2><p>
+ Prints the differences between the current /etc directory and the default configuration in /usr/etc. Newly added files (present in /etc but not in /usr/etc) will be prefixed with 'A'. Modified files will be prefixed with 'M', and deleted files with 'D'.
+ </p></div><div class="refsect1"><a name="idm46004368389344"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--os</code>="STATEROOT"</span></dt><dd><p>
+ Use a different operating system stateroot than the current one.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46004368386400"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin config-diff</strong></span></p><pre class="programlisting">
+ M shadow
+ A example.txt
+ </pre></div></div></body></html>
diff --git a/man/ostree-admin-deploy.html b/man/ostree-admin-deploy.html
new file mode 100644
index 00000000..6f171b66
--- /dev/null
+++ b/man/ostree-admin-deploy.html
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin deploy</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-deploy &#8212; Checkout a revision as the new default deployment</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin deploy</code> [OPTIONS...] {REFSPEC}</p></div></div><div class="refsect1"><a name="idm45567581265968"></a><h2>Description</h2><p>
+ Takes a commit or revision REFSPEC, and queues the new deployment as default upon reboot.
+ </p></div><div class="refsect1"><a name="idm45567583043568"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--os</code>="STATEROOT"</span></dt><dd><p>
+ Use a different operating system root than the current one.
+ </p></dd><dt><span class="term"><code class="option">--origin-file</code>="FILENAME"</span></dt><dd><p>
+ Use FILENAME as the origin, which is where OSTree will look for updated versions of the tree.
+ </p></dd><dt><span class="term"><code class="option">--retain</code></span></dt><dd><p>
+ Do not delete previous deployment.
+ </p></dd><dt><span class="term"><code class="option">--retain-pending</code></span></dt><dd><p>
+ Do not delete pending deployments.
+ </p></dd><dt><span class="term"><code class="option">--retain-rollback</code></span></dt><dd><p>
+ Do not delete rollback deployments.
+ </p></dd><dt><span class="term"><code class="option">--not-as-default</code></span></dt><dd><p>
+ Append rather than prepend new deployment.
+ </p></dd><dt><span class="term"><code class="option">--karg-proc-cmdline</code></span></dt><dd><p>
+ Import current /proc/cmdline.
+ </p></dd><dt><span class="term"><code class="option">--karg</code>="NAME=VALUE"</span></dt><dd><p>
+ Set kernel argument, like root=/dev/sda1; this overrides any earlier argument with the same name.
+ </p></dd><dt><span class="term"><code class="option">--karg-append</code>="NAME=VALUE"</span></dt><dd><p>
+ Append kernel argument; useful with e.g. console= that can be used multiple times.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45567582386864"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin status</strong></span></p><pre class="programlisting">
+ * gnome-ostree 67e382b11d213a402a5313e61cbc69dfd5ab93cb07.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+ gnome-ostree ce19c41036cc45e49b0cecf6b157523c2105c4de1ce3.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+</pre><p><span class="command"><strong>$ ostree admin deploy gnome-ostree/buildmain/x86_64-runtime</strong></span></p><pre class="programlisting">
+ ostadmin: Creating deployment /ostree/deploy/gnome-ostree/deploy/7e382b11d213a402a5313e61cbc69dfd5ab93cb07.1
+ ostadmin: Processing /etc: 3 modified, 0 removed, 29 added
+ Transaction complete: bootconfig swap: no deployment count change: 0)
+</pre><p><span class="command"><strong>$ ostree admin status</strong></span></p><pre class="programlisting">
+ gnome-ostree 67e382b11d213a402a5313e61cbc69dfd5ab93cb07.1
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+ * gnome-ostree 67e382b11d213a402a5313e61cbc69dfd5ab93cb07.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+</pre></div></div></body></html>
diff --git a/man/ostree-admin-init-fs.html b/man/ostree-admin-init-fs.html
new file mode 100644
index 00000000..426f3af0
--- /dev/null
+++ b/man/ostree-admin-init-fs.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin init-fs</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-init-fs &#8212; Initialize a new root filesystem</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin init-fs</code> [OPTIONS...] {PATH}</p></div></div><div class="refsect1"><a name="idm46273458102320"></a><h2>Description</h2><p>
+ Initialize an empty physical root filesystem in the designated PATH, with normal toplevels and correct permissions for each directory. Primarily useful for operating system installers.
+ </p></div><div class="refsect1"><a name="idm46273457756768"></a><h2>Example</h2><p><span class="command"><strong>$ mkdir /example</strong></span></p><p><span class="command"><strong>$ ostree admin init-fs /example</strong></span></p><p><span class="command"><strong>$ ls /example </strong></span></p><p>
+ <span class="emphasis"><em>boot</em></span> <span class="emphasis"><em>dev</em></span> <span class="emphasis"><em>home</em></span> <span class="emphasis"><em>ostree</em></span> <span class="emphasis"><em>proc</em></span> <span class="emphasis"><em>root</em></span> <span class="emphasis"><em>run</em></span> <span class="emphasis"><em>sys</em></span> <span class="emphasis"><em>tmp</em></span>
+ </p></div></div></body></html>
diff --git a/man/ostree-admin-instutil.html b/man/ostree-admin-instutil.html
new file mode 100644
index 00000000..2e0e4707
--- /dev/null
+++ b/man/ostree-admin-instutil.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin instutil</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-instutil &#8212; Utility functions intended primarily for operating system installation programs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin instutil</code> {SUBCOMMAND} [ARGS]</p></div></div><div class="refsect1"><a name="idm45816761278512"></a><h2>Description</h2><p>
+ Use the subcommands to toggle admin installation utilities for selinux policies and kernel arguments.
+ </p></div><div class="refsect1"><a name="idm45816760594832"></a><h2>Subcommands</h2><div class="variablelist"><div class="cmdsynopsis"><p><code class="command">selinux-ensure-labeled</code> [SUBPATH PREFIX]</p></div><dl class="variablelist"><dt></dt><dd><p>
+ Ensure all files and directories are labeled according to SELinux policy of the first deployment.
+ </p></dd></dl></div><div class="variablelist"><div class="cmdsynopsis"><p><code class="command">set-kargs</code> [--merge] [--import-proc-cmdline] [--append="NAME=VALUE"] [--replace="NAME=VALUE"] [MORE_APPEND_ARGS]</p></div><dl class="variablelist"><dt></dt><dd><p>
+ Replace the kernel arguments of the default deployment. The new arguments are based
+ on an empty list (the default), the current options (--merge), or the arguments
+ of the loaded kernel (--import-proc-cmdline), and new options either are added to the
+ end (--append="NAME=VALUE") or replace existing arguments of the same name (--replace="NAME=VALUE").
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-admin-os-init.html b/man/ostree-admin-os-init.html
new file mode 100644
index 00000000..f9f186ed
--- /dev/null
+++ b/man/ostree-admin-os-init.html
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin os-init</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-os-init &#8212; Initialize empty state for a given operating system</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin os-init</code> {STATEROOT}</p></div></div><div class="refsect1"><a name="idm46474829991664"></a><h2>Description</h2><p>
+ Initializes an new stateroot (AKA "osname") for an operating system.
+ Ensures that the core subdirectories of /var (/tmp, /lib, /run, and
+ /lock) exist and initialize the given STATEROOT as OSTree stateroot.
+ Each deployment location is comprised of a single shared
+ <code class="filename">var</code> and a set of deployments (chroots).
+ </p></div><div class="refsect1"><a name="idm46474829991920"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin os-init exampleos</strong></span></p><pre class="programlisting">
+ ostree/deploy/exampleos initialized as OSTree root
+ </pre></div></div></body></html>
diff --git a/man/ostree-admin-pin.html b/man/ostree-admin-pin.html
new file mode 100644
index 00000000..9ea155e1
--- /dev/null
+++ b/man/ostree-admin-pin.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin pin</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-pin &#8212; Explicitly retain deployment at a given index</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin pin</code> {INDEX}</p></div></div><div class="refsect1"><a name="idm45283442597584"></a><h2>Description</h2><p>
+ Ensures the deployment at <code class="literal">INDEX</code>, will not be garbage
+ collected by default. This is termed "pinning". If the
+ <code class="literal">-u</code> option is provided, undoes a pinning operation.
+ </p></div><div class="refsect1"><a name="idm45283442594960"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--unpin</code>,<code class="option">-u</code></span></dt><dd><p>
+ Undoes a pinning operation.
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-admin-set-origin.html b/man/ostree-admin-set-origin.html
new file mode 100644
index 00000000..2c734041
--- /dev/null
+++ b/man/ostree-admin-set-origin.html
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin set-origin</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-set-origin &#8212; Change the "origin" (location for upgrades)</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin set-origin </code> {REMOTENAME} {URL} [BRANCH]</p></div></div><div class="refsect1"><a name="idm45976610205088"></a><h2>Description</h2><p>
+ Add a new remote named
+ <em class="replaceable"><code>REMOTENAME</code></em> (if it does not
+ already exist). Then change the origin file for the
+ current deployment. This is the ref that will be
+ "tracked" and upgraded with <span class="command"><strong>ostree admin
+ upgrade</strong></span>.
+ </p></div><div class="refsect1"><a name="idm45976609546976"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--set</code>=KEY=VALUE</span></dt><dd><p>
+ Set an option for the remote.
+ </p></dd><dt><span class="term"><code class="option">--index</code>=INDEX</span></dt><dd><p> Change the origin of the deployment
+ numbered <em class="replaceable"><code>INDEX</code></em> (starting
+ from 0). </p></dd></dl></div></div><div class="refsect1"><a name="idm45976607355728"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin set-origin exampleos http://os.example.com/repo exampleos/10.0/main/router</strong></span></p></div></div></body></html>
diff --git a/man/ostree-admin-status.html b/man/ostree-admin-status.html
new file mode 100644
index 00000000..769715a9
--- /dev/null
+++ b/man/ostree-admin-status.html
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin status</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-status &#8212; List deployments</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin status</code> </p></div></div><div class="refsect1"><a name="idm45180906692256"></a><h2>Description</h2><p>
+ Lists the deployments available to be booted into. Includes osname, the checksum followed by the deploy serial, and the refspec. An asterisk indicates the current booted deployment.
+ </p></div><div class="refsect1"><a name="idm45180906466464"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin status</strong></span></p><pre class="programlisting">
+ * gnome-ostree 67e382b11d213a402a5313e61cbc69dfd5ab93cb07.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+ gnome-ostree ce19c41036cc45e49b0cecf6b157523c2105c4de1c.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+</pre></div></div></body></html>
diff --git a/man/ostree-admin-switch.html b/man/ostree-admin-switch.html
new file mode 100644
index 00000000..1c9314fe
--- /dev/null
+++ b/man/ostree-admin-switch.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin switch</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-switch &#8212; Construct new tree from current origin and deploy it, if it changed</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin switch</code> {REF}</p></div></div><div class="refsect1"><a name="idm45763904827120"></a><h2>Description</h2><p>
+ Choose a different REF from the current remote to track. This is the ref that will be "tracked" and upgraded with <span class="command"><strong>ostree admin upgrade</strong></span>. Like an upgrade, the operating system state will be preserved.
+ </p></div><div class="refsect1"><a name="idm45763904827376"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--os</code>="STATEROOT"</span></dt><dd><p>
+ Use a different operating system root than the current one.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45763904575952"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin switch fedostree/20/workstation/gnome/core</strong></span></p></div></div></body></html>
diff --git a/man/ostree-admin-undeploy.html b/man/ostree-admin-undeploy.html
new file mode 100644
index 00000000..61222cf1
--- /dev/null
+++ b/man/ostree-admin-undeploy.html
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin undeploy</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-undeploy &#8212; Delete deployment at a given index</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin undeploy</code> {INDEX}</p></div></div><div class="refsect1"><a name="idm46104336277232"></a><h2>Description</h2><p>
+ Deletes the deployment at INDEX. INDEX must be in range and not reference the currently booted deployment.
+ </p></div><div class="refsect1"><a name="idm46104335098352"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin status</strong></span></p><pre class="programlisting">
+ * gnome-ostree 67e382b11d213a402a5313e61cbc69dfd5ab93cb07.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+ gnome-ostree ce19c41036cc45e49b0cecf6b157523c2105c4de1c.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+</pre><p><span class="command"><strong>$ ostree admin undeploy 1</strong></span></p><pre class="programlisting">
+ Transaction complete; bootconfig swap: no deployment count change: -1)
+ Freed objects: 326.5 kB
+ Deleted deployment ce19c41036cc45e49b0cecf6b157523c2105c4de1c.0
+</pre><p><span class="command"><strong>$ ostree admin status</strong></span></p><pre class="programlisting">
+ * gnome-ostree 67e382b11d213a402a5313e61cbc69dfd5ab93cb07.0
+ origin refspec: gnome-ostree/buildmain/x86_64-runtime
+</pre></div></div></body></html>
diff --git a/man/ostree-admin-unlock.html b/man/ostree-admin-unlock.html
new file mode 100644
index 00000000..e554a7ee
--- /dev/null
+++ b/man/ostree-admin-unlock.html
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin unlock</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-unlock &#8212; Prepare the current deployment for hotfix or development</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin unlock</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm45558675001584"></a><h2>Description</h2><p>
+ Remove the read-only bind mount on <code class="literal">/usr</code>
+ and replace it with a writable overlay filesystem. This
+ default invocation of "unlock" is intended for
+ development/testing purposes. All changes in the overlay
+ are lost on reboot. However, this command also supports
+ "hotfixes", see below.
+ </p></div><div class="refsect1"><a name="idm45558674999664"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--hotfix</code></span></dt><dd><p>If this option is provided, the
+ current deployment will be cloned as a rollback
+ target. This option is intended for things like
+ emergency security updates to userspace components
+ such as <code class="literal">sshd</code>. The semantics here
+ differ from the default "development" unlock mode
+ in that reboots will retain any changes (which is what
+ you likely want for security hotfixes).
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-admin-upgrade.html b/man/ostree-admin-upgrade.html
new file mode 100644
index 00000000..6a806e8a
--- /dev/null
+++ b/man/ostree-admin-upgrade.html
@@ -0,0 +1,25 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin upgrade</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin-upgrade &#8212; Construct new tree from current origin and deploy it, if it changed</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin upgrade</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm45035698946288"></a><h2>Description</h2><p>
+ Downloads the latest version of the current ref from the build
+ server and deploys it, if it changed. Reboot the machine for the
+ changes to take effect. These phases can be split via
+ <code class="option">--pull-only</code> and <code class="option">--deploy-only</code>.
+ </p></div><div class="refsect1"><a name="idm45035698944208"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--os</code>="STATEROOT"</span></dt><dd><p>
+ Use a different operating system root than the current one.
+ </p></dd><dt><span class="term"><code class="option">--pull-only</code></span></dt><dd><p> Only perform a pull into the repository; do not
+ create a deployment. This option can hence safely be used in a
+ background scheduled job with the assurance of not changing
+ system state.</p></dd><dt><span class="term"><code class="option">--deploy-only</code></span></dt><dd><p>Create a new deployment from the latest commit
+ in the tracked origin refspec. This option is intended to be used
+ by a scheduled system that detected changes via <code class="option">--pull-only</code>,
+ and is ready to deploy them.</p></dd><dt><span class="term"><code class="option">--stage</code></span></dt><dd><p>
+ Perform deployment finalization at shutdown time. Recommended,
+ and will likely become the default in the future.
+ </p></dd><dt><span class="term"><code class="option">--reboot</code>,<code class="option">-r</code></span></dt><dd><p>
+ Reboot after a successful upgrade.
+ </p></dd><dt><span class="term"><code class="option">--allow-downgrade</code></span></dt><dd><p>
+ Permit deployment of chronologically older trees.
+ </p></dd><dt><span class="term"><code class="option">--override-commit</code>="CHECKSUM"</span></dt><dd><p>
+ Deploy CHECKSUM instead of the latest tree.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45035702906704"></a><h2>Example</h2><p><span class="command"><strong>$ ostree admin upgrade</strong></span></p><pre class="programlisting">
+ No update available.
+</pre></div></div></body></html>
diff --git a/man/ostree-admin.html b/man/ostree-admin.html
new file mode 100644
index 00000000..949958a7
--- /dev/null
+++ b/man/ostree-admin.html
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree admin</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-admin &#8212; Use one of the ostree admin commands</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree admin</code> {SUBCOMMAND}</p></div></div><div class="refsect1"><a name="idm45357830475968"></a><h2>Description</h2><p>
+ Use ostree admin subcommands.
+ </p></div><div class="refsect1"><a name="idm45357830474784"></a><h2>Subcommands</h2><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="command"><strong>cleanup</strong></span></p></li><li class="listitem"><p><span class="command"><strong>config-diff</strong></span></p></li><li class="listitem"><p><span class="command"><strong>deploy</strong></span></p></li><li class="listitem"><p><span class="command"><strong>init-fs</strong></span></p></li><li class="listitem"><p><span class="command"><strong>instutil</strong></span></p></li><li class="listitem"><p><span class="command"><strong>os-init</strong></span></p></li><li class="listitem"><p><span class="command"><strong>pin</strong></span></p></li><li class="listitem"><p><span class="command"><strong>set-origin</strong></span></p></li><li class="listitem"><p><span class="command"><strong>status</strong></span></p></li><li class="listitem"><p><span class="command"><strong>switch</strong></span></p></li><li class="listitem"><p><span class="command"><strong>undeploy</strong></span></p></li><li class="listitem"><p><span class="command"><strong>unlock</strong></span></p></li><li class="listitem"><p><span class="command"><strong>upgrade</strong></span></p></li></ul></div><p>
+ View manpages for each admin subcommand using, for example:
+ </p><p>
+ <span class="command"><strong>$ man ostree-admin cleanup</strong></span>
+ </p></div><div class="refsect1"><a name="idm45357834435712"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--help</code>, <code class="option">-h</code></span></dt><dd><p>Usage help</p></dd><dt><span class="term"><code class="option">--sysroot</code>="PATH"</span></dt><dd><p>Creates a new OSTree sysroot at PATH</p></dd><dt><span class="term"><code class="option">--print-current-dir</code></span></dt><dd><p>
+ Prints the full path to the deployment directory for the currently active deployment in the specified sysroot to standard out. This is incompatible with specifying a subcommand.
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-cat.html b/man/ostree-cat.html
new file mode 100644
index 00000000..6a742504
--- /dev/null
+++ b/man/ostree-cat.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree cat</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-cat &#8212; Display or concatenate contents of files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree cat</code> {COMMIT} {PATH...}</p></div></div><div class="refsect1"><a name="idm44899821165904"></a><h2>Description</h2><p>
+ This command functions much like the typical Unix "cat" command, in that it displays the contents of a file, or concatenates them given two or more files. However, this command requires the user to specify a commit - a checksum or refspec corresponding to a given build. If you use a refspec, OSTree will refer to the most recent commit, unless you specify a parent build using the carat (^) at the end of the refspec. It will then operate the command in that given commit.
+ </p></div><div class="refsect1"><a name="idm44899821164720"></a><h2>Example</h2><p><span class="command"><strong>$ ostree cat my-branch helloworld.txt</strong></span></p><pre class="programlisting">
+ Hello, world!
+</pre></div></div></body></html>
diff --git a/man/ostree-checkout.html b/man/ostree-checkout.html
new file mode 100644
index 00000000..f228a278
--- /dev/null
+++ b/man/ostree-checkout.html
@@ -0,0 +1,50 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree checkout</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-checkout &#8212; Check out a commit into a filesystem</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree checkout</code> [OPTIONS...] {COMMIT} [DESTINATION]</p></div></div><div class="refsect1"><a name="idm45581395429760"></a><h2>Description</h2><p>
+ Checks out the given commit into the filesystem under directory DESTINATION. If DESTINATION is not specified, the COMMIT will become the destination checkout target. If COMMIT destination already exists, command will error unless <code class="option">--union</code> option is selected.
+ </p></div><div class="refsect1"><a name="idm45581395427856"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--user-mode</code>, <code class="option">-U</code></span></dt><dd><p>
+ Do not change file ownership or initialize extended attributes.
+ </p></dd><dt><span class="term"><code class="option">--subpath</code>="PATH"</span></dt><dd><p>
+ Checkout sub-directory PATH.
+ </p></dd><dt><span class="term"><code class="option">--union</code></span></dt><dd><p>
+ Keep existing directories and unchanged files, overwrite existing files.
+ </p></dd><dt><span class="term"><code class="option">--union-add</code></span></dt><dd><p>
+ Keep existing directories and files.
+ </p></dd><dt><span class="term"><code class="option">--union-identical</code></span></dt><dd><p>Like <code class="literal">--union</code>, but error out
+ if a file would be replaced with a different file. Add new files
+ and directories, ignore identical files, and keep existing
+ directories. Requires <code class="literal">-H</code>.</p></dd><dt><span class="term"><code class="option">--whiteouts</code></span></dt><dd><p>
+ Process whiteout files (Docker style).
+ </p></dd><dt><span class="term"><code class="option">--process-passthrough-whiteouts</code></span></dt><dd><p>
+ Enable overlayfs whiteout extraction into 0:0 character devices.
+ Overlayfs whiteouts are encoded inside ostree as <code class="literal">.ostree-wh.filename</code>
+ and extracted as 0:0 character devices. This is useful to carry
+ container storage embedded into ostree.
+ </p></dd><dt><span class="term"><code class="option">--allow-noent</code></span></dt><dd><p>
+ Do nothing if specified path does not exist.
+ </p></dd><dt><span class="term"><code class="option">--from-stdin</code></span></dt><dd><p>
+ Process many checkouts from standard input.
+ </p></dd><dt><span class="term"><code class="option">--from-file</code>="FILE"</span></dt><dd><p>
+ Process many checkouts from input file.
+ </p></dd><dt><span class="term"><code class="option">--fsync</code>="POLICY"</span></dt><dd><p>
+ POLICY is a boolean which specifies whether fsync should be
+ used or not. Default to true.
+ </p></dd><dt><span class="term"><code class="option">--require-hardlinks</code>,
+ <code class="option">-H</code></span></dt><dd><p>
+ Do not fall back to full copies if hardlinking fails.
+ </p></dd><dt><span class="term"><code class="option">--force-copy-zerosized</code>,
+ <code class="option">-z</code></span></dt><dd><p>
+ This option does nothing; the functionality is now always on by default.
+ </p></dd><dt><span class="term"><code class="option">--force-copy</code>, <code class="option">-C</code></span></dt><dd><p>
+ Never hardlink (but may reflink if available).
+ </p></dd><dt><span class="term"><code class="option">--bareuseronly-dirs</code>,
+ <code class="option">-M</code></span></dt><dd><p>
+ Suppress mode bits outside of 0775 for directories (suid,
+ world writable, etc.).
+ </p></dd><dt><span class="term"><code class="option">--skip-list</code>="FILE"</span></dt><dd><p>
+ Skip checking out the absolute file paths listed in FILE,
+ one per line.
+ </p></dd><dt><span class="term"><code class="option">--selinux-policy</code></span></dt><dd><p>
+ Set SELinux labels based on policy in root filesystem PATH
+ (may be /). This implies <code class="literal">--force-copy</code>.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45581399353424"></a><h2>Example</h2><p><span class="command"><strong>$ ostree checkout my-branch</strong></span></p><p><span class="command"><strong>$ ls</strong></span></p><pre class="programlisting">
+ file1file2<span class="emphasis"><em>my-branch</em></span>
+</pre></div></div></body></html>
diff --git a/man/ostree-checksum.html b/man/ostree-checksum.html
new file mode 100644
index 00000000..c8153d25
--- /dev/null
+++ b/man/ostree-checksum.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree checksum</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-checksum &#8212; Checksum a file or directory</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree checksum</code> {PATH}</p></div></div><div class="refsect1"><a name="idm46743302992064"></a><h2>Description</h2><p>
+ Generates a checksum for a given file or directory.
+ </p></div><div class="refsect1"><a name="idm46743302990880"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--ignore-xattrs</code></span></dt><dd><p>
+ Ignore extended attributes when checksumming.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46743302988160"></a><h2>Example</h2><p><span class="command"><strong>$ ostree checksum file1</strong></span></p><pre class="programlisting">
+ 67e382b11d213a402a5313e61cbc69dfd5ab93cb07fbb8b71c2e84f79fa5d7dc
+</pre></div></div></body></html>
diff --git a/man/ostree-commit.html b/man/ostree-commit.html
new file mode 100644
index 00000000..1a45bdd2
--- /dev/null
+++ b/man/ostree-commit.html
@@ -0,0 +1,82 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree commit</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-commit &#8212; Commit a new revision</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree commit</code> [OPTIONS...] --branch= {BRANCH} [PATH]</p></div></div><div class="refsect1"><a name="idm45513820785008"></a><h2>Description</h2><p>
+ This allows you to commit changes to a branch. The specification of the branch is required. The command will print the checksum of a successful commit.
+ </p></div><div class="refsect1"><a name="idm45513820783824"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--subject</code>, <code class="option">-s</code>="SUBJECT"</span></dt><dd><p>
+ One line subject. (optional)
+ </p></dd><dt><span class="term"><code class="option">--body</code>, <code class="option">-m</code>="BODY"</span></dt><dd><p>
+ Full description. (optional)
+ </p></dd><dt><span class="term"><code class="option">--body-file</code>, <code class="option">-F</code>="FILE"</span></dt><dd><p>
+ Full commit description from a file. (optional)
+ </p></dd><dt><span class="term"><code class="option">--editor</code>, <code class="option">-e</code></span></dt><dd><p>
+ Open a text editor for the commit description. It will use OSTREE_EDITOR, VISUAL, EDITOR, or vi, in descending order of preference. The commit will be aborted if the message is left empty.
+ </p></dd><dt><span class="term"><code class="option">--branch</code>, <code class="option">-b</code>="BRANCH"</span></dt><dd><p>
+ Branch. Required, unless --orphan is given.
+ </p></dd><dt><span class="term"><code class="option">--parent</code>="COMMIT"</span></dt><dd><p>
+ Parent checksum or "none" to explicitly use no parent. If not specified, <code class="literal">BRANCH</code> is used as parent (no parent in case <code class="literal">BRANCH</code> does not exist).
+ </p></dd><dt><span class="term"><code class="option">--tree</code>="dir=PATH" or "tar=TARFILE" or "ref=COMMIT"</span></dt><dd><p>
+ Overlay the given argument as a tree. When committing an archive, the TARFILE can be specified as <code class="literal">-</code> to read the archive from standard input.
+ </p></dd><dt><span class="term"><code class="option">--base</code>="REV"</span></dt><dd><p>
+ Start from the content in a commit. This differs from <code class="literal">--tree=ref=REV</code> in that no commit modifiers are applied. This is usually what you want when
+ creating a derived commit. This is also used for <code class="literal">--selinux-policy-from-base</code>.
+ </p></dd><dt><span class="term"><code class="option">--add-metadata-string</code>="KEY=VALUE"</span></dt><dd><p>
+ Add a key/value pair to metadata. Can be specified multiple times.
+ </p></dd><dt><span class="term"><code class="option">--add-metadata</code>="KEY=VALUE"</span></dt><dd><p>
+ Add a key/value pair to metadata, where the KEY is a string, and VALUE is g_variant_parse() formatted. Can be specified multiple times.
+ </p></dd><dt><span class="term"><code class="option">--keep-metadata</code>="KEY"</span></dt><dd><p>
+ Keep metadata KEY and its associated VALUE from parent. Can be specified multiple times.
+ </p></dd><dt><span class="term"><code class="option">--add-detached-metadata-string</code>="KEY=VALUE"</span></dt><dd><p>
+ Add a key/value pair to detached metadata.
+ </p></dd><dt><span class="term"><code class="option">--owner-uid</code>="UID"</span></dt><dd><p>
+ Set file ownership user id.
+ </p></dd><dt><span class="term"><code class="option">--owner-gid</code>="GID"</span></dt><dd><p>
+ Set file ownership group id.
+ </p></dd><dt><span class="term"><code class="option">--no-xattrs</code></span></dt><dd><p>
+ Do not import extended attributes.
+ </p></dd><dt><span class="term"><code class="option">--bootable</code></span></dt><dd><p>
+ Inject standard metadata for a bootable Linux filesystem tree.
+ </p></dd><dt><span class="term"><code class="option">--link-checkout-speedup</code></span></dt><dd><p>
+ Optimize for commits of trees composed of hardlinks into the repository.
+ </p></dd><dt><span class="term"><code class="option">--tar-autocreate-parents</code></span></dt><dd><p>
+ When loading tar archives, automatically create parent directories as needed.
+ </p></dd><dt><span class="term"><code class="option">--skip-if-unchanged</code></span></dt><dd><p>
+ If the contents are unchanged from previous commit, do nothing.
+ </p></dd><dt><span class="term"><code class="option">--consume</code></span></dt><dd><p>
+ When committing from a local directory (i.e. not an archive or --tree=ref),
+ assume ownership of the content. This may simply involve deleting it,
+ but if possible, the content may simply be <code class="literal">rename()</code>ed
+ into the repository rather than creating a new copy.
+ </p></dd><dt><span class="term"><code class="option">--statoverride</code>="PATH"</span></dt><dd><p>
+ File containing list of modifications to make permissions (file mode in
+ decimal, followed by space, followed by file path). The specified mode
+ is ORed with the file's original mode unless preceded by "=".
+ </p></dd><dt><span class="term"><code class="option">--skip-list</code>="PATH"</span></dt><dd><p>
+ File containing list of file paths to skip (one path per line).
+ </p></dd><dt><span class="term"><code class="option">--table-output</code></span></dt><dd><p>
+ Output more information in a KEY: VALUE format.
+ </p></dd><dt><span class="term"><code class="option">--generate-sizes</code></span></dt><dd><p>
+ Generate size information along with commit metadata.
+ </p></dd><dt><span class="term"><code class="option">--gpg-sign</code>="KEY-ID"</span></dt><dd><p>
+ GPG Key ID with which to sign the commit (if have GPGME - GNU Privacy Guard Made Easy).
+ </p></dd><dt><span class="term"><code class="option">--gpg-homedir</code>="HOMEDIR"</span></dt><dd><p>
+ GPG home directory to use when looking for keyrings (if have GPGME - GNU Privacy Guard Made Easy).
+ </p></dd><dt><span class="term"><code class="option">--timestamp</code>="TIMESTAMP"</span></dt><dd><p>
+ Override the timestamp of the commit to TIMESTAMP.
+ </p></dd><dt><span class="term"><code class="option">--orphan</code></span></dt><dd><p>
+ Create a commit without writing to a ref (branch)
+ </p></dd><dt><span class="term"><code class="option">--fsync</code>="POLICY"</span></dt><dd><p>
+ POLICY is a boolean which specifies whether fsync should be used or not. Default to true.
+ </p></dd><dt><span class="term"><code class="option">-s, --sign-type</code></span></dt><dd><p>
+ Use particular signature engine. Currently
+ available ed25519 and dummy
+ signature types.
+
+ The default is ed25519 .
+ </p></dd><dt><span class="term"><code class="option">--sign</code>="KEY-ID"</span></dt><dd><p>
+ There <code class="literal">KEY-ID</code> is:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">for ed25519:</code></span></dt><dd><p>
+ <code class="literal">base64</code>-encoded secret key for commit signing.
+ </p></dd><dt><span class="term"><code class="option">for dummy:</code></span></dt><dd><p>
+ ASCII-string used as secret key.
+ </p></dd></dl></div><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45513819699424"></a><h2>Example</h2><p><span class="command"><strong>$ ostree commit --branch=my-branch --subject="Initial commit"</strong></span></p><pre class="programlisting">
+ 67e382b11d213a402a5313e61cbc69dfd5ab93cb07fbb8b71c2e84f79fa5d7dc
+</pre></div></div></body></html>
diff --git a/man/ostree-config.html b/man/ostree-config.html
new file mode 100644
index 00000000..5d0f88ce
--- /dev/null
+++ b/man/ostree-config.html
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree config</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-config &#8212; Change configuration settings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree config get</code> {GROUPNAME.KEYNAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree config get</code> { --group=GROUPNAME} { KEYNAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree config set</code> {GROUPNAME.KEYNAME} {VALUE}</p></div><div class="cmdsynopsis"><p><code class="command">ostree config set</code> { --group=GROUPNAME} { KEYNAME} {VALUE}</p></div><div class="cmdsynopsis"><p><code class="command">ostree config unset</code> {GROUPNAME.KEYNAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree config unset</code> { --group=GROUPNAME} { KEYNAME}</p></div></div><div class="refsect1"><a name="idm45691828347040"></a><h2>Description</h2><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="command"><strong>ostree config get</strong></span> displays the value of
+ KEYNAME in the group GROUPNAME
+ </p></li><li class="listitem"><p>
+ <span class="command"><strong>ostree config set</strong></span> sets the value of
+ KEYNAME in the group GROUPNAME
+ to VALUE .
+ </p></li><li class="listitem"><p>
+ <span class="command"><strong>ostree config unset</strong></span> removes the key
+ KEYNAME from the group GROUPNAME
+ so that OSTree uses the default value for it. It is not an
+ error for the specified GROUPNAME or
+ KEYNAME not to exist.
+ </p></li></ul></div></div><div class="refsect1"><a name="idm45691828317712"></a><h2>Example</h2><p><span class="command"><strong>$ ostree config get core.mode</strong></span></p><p>bare</p><p><span class="command"><strong>$ ostree config set --group='remote "myremote"' url http://example.com/repo</strong></span></p><p><span class="command"><strong>$ ostree config unset core.lock-timeout-secs</strong></span></p></div></div></body></html>
diff --git a/man/ostree-create-usb.html b/man/ostree-create-usb.html
new file mode 100644
index 00000000..4e7e8ef1
--- /dev/null
+++ b/man/ostree-create-usb.html
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree create-usb</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-create-usb &#8212; Put the given refs on an external drive for P2P distribution.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree create-usb</code> [OPTIONS...] {MOUNT-PATH} {COLLECTION-ID REF} [COLLECTION-ID REF...]</p></div></div><div class="refsect1"><a name="idm45811111683600"></a><h2>Description</h2><p>
+ This command creates a repository in MOUNT-PATH and pulls the given
+ REF(s) into it so they can be found and pulled from (perhaps by another computer that's offline).
+ See
+ <a href="ostree-find-remotes.html"><span class="citerefentry"><span class="refentrytitle">ostree-find-remotes</span>(1)</span></a>
+ for more information on P2P distribution.
+ </p><p>
+ In order for ostree to pull refs from a mounted filesystem (such as
+ a USB drive) the repo must be in a standard location. Specifically,
+ subdirectories of <code class="filename">.ostree/repos.d</code> are checked,
+ then <code class="filename">.ostree/repo</code>, <code class="filename">ostree/repo</code>,
+ and <code class="filename">var/lib/flatpak/repo</code> are checked. By default
+ <span class="command"><strong>ostree create-usb</strong></span> uses <code class="filename">.ostree/repo</code>,
+ but if you specify another location using <code class="option">--destination-repo</code>
+ a symbolic link will be created for you in <code class="filename">.ostree/repos.d</code>.
+ </p><p>
+ This command will regenerate the <code class="filename">summary</code> file
+ in the destination repo so that it stays accurate, so you shouldn't
+ try to use summary signatures in the destination repo. This
+ shouldn't be a concern because clients that support pulling from
+ USB mounts use signed per-repo and per-commit metadata instead of
+ summary signatures.
+ </p></div><div class="refsect1"><a name="idm45811111674688"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--disable-fsync</code></span></dt><dd><p>
+ Do not invoke fsync().
+ </p></dd><dt><span class="term"><code class="option">--destination-repo</code>=DEST</span></dt><dd><p>
+ Create the repository in DEST under MOUNT-PATH, rather than
+ the default location.
+ </p></dd><dt><span class="term"><code class="option">--commit</code>=COMMIT</span></dt><dd><p>
+ Pull COMMIT instead of whatever REF points to. This can only
+ be used if a single ref is specified.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45811115644432"></a><h2>Example</h2><p><span class="command"><strong>ostree --repo=/var/lib/flatpak/repo create-usb /run/media/mwleeds/f6d04c7a-60f6-4ba3-bb96-0f40498675be com.exampleos.Apps app/org.kde.Khangman/x86_64/stable com.exampleos.Apps ostree-metadata com.exampleos.Apps appstream/x86_64</strong></span></p><pre class="programlisting">
+
+5 metadata, 213 content objects imported; 1 KiB transferred in 1 seconds Copied 3/3 refs successfully from &#8216;/var/lib/flatpak/repo&#8217; to &#8216;.ostree/repo&#8217; repository in &#8216;/run/media/mwleeds/f6d04c7a-60f6-4ba3-bb96-0f40498675be&#8217;.
+
+</pre></div></div></body></html>
diff --git a/man/ostree-diff.html b/man/ostree-diff.html
new file mode 100644
index 00000000..9739a11f
--- /dev/null
+++ b/man/ostree-diff.html
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree diff</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-diff &#8212; Compare a directory against a revision</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree diff</code> [OPTIONS...] {REV_OR_DIR} {REV_OR_DIR}</p></div></div><div class="refsect1"><a name="idm46055439538512"></a><h2>Description</h2><p>
+ Compare a directory or revision against another directory or revision. If REV_OR_DIR starts with `/` or `./`, it is interpreted as a directory, otherwise a revision. Shows files and directories modified, added, and deleted. If there is a file in the second REV_OR_DIR not in the first, it will show with an "A" for "added". If a file in the first REV_OR_DIR is not in the second, it shows "D" for "deleted". "M" for "modified" will also show.
+ </p></div><div class="refsect1"><a name="idm46055439537328"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--stats</code></span></dt><dd><p>
+ Print various statistics.
+ </p></dd><dt><span class="term"><code class="option">--fs-diff</code></span></dt><dd><p>
+ Print filesystem diff.
+ </p></dd><dt><span class="term"><code class="option">--owner-uid</code></span></dt><dd><p>
+ Use file ownership user id for local files.
+ </p></dd><dt><span class="term"><code class="option">--owner-gid</code></span></dt><dd><p>
+ Use file ownership group id for local files.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46055439431520"></a><h2>Example</h2><p><span class="command"><strong>$ ostree diff my-branch^ my-branch</strong></span></p><pre class="programlisting">
+ A /testdirectory
+ M /helloworld.txt
+</pre><p><span class="command"><strong>$ ostree diff my-branch my-branch^</strong></span></p><pre class="programlisting">
+ D /testdirectory
+ M /helloworld.txt
+</pre></div></div></body></html>
diff --git a/man/ostree-export.html b/man/ostree-export.html
new file mode 100644
index 00000000..f1c4308f
--- /dev/null
+++ b/man/ostree-export.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree export</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-export &#8212; Generate a tar archive from an OSTree commit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree export</code> [OPTIONS...] {BRANCH}</p></div></div><div class="refsect1"><a name="idm45644204072272"></a><h2>Description</h2><p>
+ This command generates a GNU tar formatted archive from an
+ OSTree commit. This is useful for cases like backups,
+ converting OSTree commits into Docker images, and the like.
+ </p></div><div class="refsect1"><a name="idm45644204071088"></a><h2>Example</h2><p><span class="command"><strong>$ ostree export exampleos/x86_64/standard | gzip &gt; exampleos-standard.tar.gz</strong></span></p></div></div></body></html>
diff --git a/man/ostree-find-remotes.html b/man/ostree-find-remotes.html
new file mode 100644
index 00000000..9bb854b2
--- /dev/null
+++ b/man/ostree-find-remotes.html
@@ -0,0 +1,47 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree find-remotes</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-find-remotes &#8212; Find remotes to serve the given refs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree find-remotes</code> [OPTIONS...] {COLLECTION-ID} {REF} [COLLECTION-ID REF...]</p></div></div><div class="refsect1"><a name="idm46452571997616"></a><h2>Description</h2><p>
+ OSTree has the ability to pull not just from the configured remote
+ servers but also from peer computers on the LAN and from mounted
+ filesystems such as USB drives. This functionality requires the use
+ of collection IDs and GPG verification.
+ </p><p>
+ The <span class="command"><strong>find-remotes</strong></span> command searches for remotes
+ which claim to provide one or more of the given COLLECTION-ID REF
+ pairs and prints information about them, with remotes sorted by
+ latency (Mounts &gt; LAN &gt; Internet). By default, OSTree searches for
+ remotes in configuration files, on mounted filesystems (in a
+ well-known location), and on the LAN using Avahi. Searching for LAN
+ remotes requires OSTree to have been compiled with Avahi support,
+ and it requires an Avahi daemon to be running. You can override the
+ default set of finders (sources for remotes) using the
+ <code class="option">--finders</code> option documented below.
+ </p><p>
+ The <span class="command"><strong>create-usb</strong></span> command is the recommended way to
+ put refs on a USB such that <span class="command"><strong>find-remotes</strong></span> will
+ discover them. See
+ <a href="ostree-create-usb.html"><span class="citerefentry"><span class="refentrytitle">ostree-create-usb</span>(1)</span></a>.
+ </p></div><div class="refsect1"><a name="idm46452571893408"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--cache-dir</code>=DIR</span></dt><dd><p>
+ Use an alternate cache directory in <code class="literal">DIR</code>.
+ </p></dd><dt><span class="term"><code class="option">--disable-fsync</code></span></dt><dd><p>
+ Do not invoke fsync().
+ </p></dd><dt><span class="term"><code class="option">--finders</code>=FINDERS</span></dt><dd><p>
+ Use the specified comma separated list of finders rather than
+ the default set. Possible values: <code class="literal">config</code>,
+ <code class="literal">lan</code>, and <code class="literal">mount</code> (or any
+ combination thereof).
+ </p></dd><dt><span class="term"><code class="option">--pull</code></span></dt><dd><p>
+ Pull the most recent commit found for each ref.
+ </p></dd><dt><span class="term"><code class="option">--mirror</code></span></dt><dd><p>
+ Do a mirror pull (see the documentation for
+ <span class="command"><strong>ostree pull --mirror</strong></span>). This option can
+ only be used in combination with <code class="option">--pull</code>.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46452572142608"></a><h2>Example</h2><p><span class="command"><strong>$ ostree find-remotes --finders=mount,lan com.exampleos.Os exampleos/x86_64/standard</strong></span></p><pre class="programlisting">
+Result 0: http://10.0.64.202:43381/0
+ - Finder: OstreeRepoFinderAvahi
+ - Keyring: exampleos.trustedkeys.gpg
+ - Priority: 60
+ - Summary last modified: 2018-01-12T19:00:28Z
+ - Refs:
+ - (com.exampleos.Os, exampleos/x86_64/standard) = c91acd964b3fda561b87bfb7f7c80e36220d76b567f0ce90c0e60742ef33c360
+
+1/1 refs were found.
+</pre></div></div></body></html>
diff --git a/man/ostree-fsck.html b/man/ostree-fsck.html
new file mode 100644
index 00000000..b02d3b88
--- /dev/null
+++ b/man/ostree-fsck.html
@@ -0,0 +1,25 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree fsck</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-fsck &#8212; Check the repository for consistency</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree fsck</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm46019027386688"></a><h2>Description</h2><p>
+ Checks the repository to verify the content integrity of commit objects. Looks for missing and corrupted objects and metadata, and validates directory structure and metadata.
+ </p></div><div class="refsect1"><a name="idm46019027385504"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--quiet</code>,<code class="option">-q</code></span></dt><dd><p>
+ Only print error messages.
+ </p></dd><dt><span class="term"><code class="option">--delete</code></span></dt><dd><p>
+ Remove corrupted objects.
+ </p></dd><dt><span class="term"><code class="option">--add-tombstones</code></span></dt><dd><p>
+ Add tombstone commit for referenced but missing commits.
+ </p></dd><dt><span class="term"><code class="option">--verify-bindings</code></span></dt><dd><p>
+ Verify that the commits pointed to by each ref have that
+ ref in the binding set. You should usually add this
+ option; it only defaults to off for backwards compatibility.
+ </p></dd><dt><span class="term"><code class="option">--verify-back-refs</code></span></dt><dd><p>
+ Verify that all the refs listed in a commit&#8217;s ref-bindings
+ point to that commit. This cannot be used in repositories
+ where the target of refs is changed over time as new commits
+ are added, but can be used in repositories which are
+ regenerated from scratch for each commit.
+ Implies <code class="literal">--verify-bindings</code> as well.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46019027276048"></a><h2>Example</h2><p><span class="command"><strong>$ ostree fsck</strong></span></p><pre class="programlisting">
+ Enumerating objects...
+ Verifying content integrity of of 2 commit objects
+ 0/2572 objects
+ 2571/2572 objects
+</pre></div></div></body></html>
diff --git a/man/ostree-gpg-sign.html b/man/ostree-gpg-sign.html
new file mode 100644
index 00000000..008c23b4
--- /dev/null
+++ b/man/ostree-gpg-sign.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree gpg-sign</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-gpg-sign &#8212; Sign a commit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree gpg-sign</code> [OPTIONS...] {COMMIT} {KEY-ID...}</p></div></div><div class="refsect1"><a name="idm45193352540912"></a><h2>Description</h2><p>
+ Add a new signature to a commit for each specified GPG key.
+
+ Note that currently, this will append a new signature even if
+ the commit is already signed with a given key.
+ </p></div><div class="refsect1"><a name="idm45193352809152"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--delete</code></span></dt><dd><p>
+ Delete signatures having any of the GPG KEY-IDs.
+ </p></dd><dt><span class="term"><code class="option">--gpg-homedir</code>="HOMEDIR"</span></dt><dd><p>
+ GPG Homedir to use when looking for keyrings.
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-init.html b/man/ostree-init.html
new file mode 100644
index 00000000..b29b1fce
--- /dev/null
+++ b/man/ostree-init.html
@@ -0,0 +1,33 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree init</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-init &#8212; Initialize a new empty repository</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree init</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm45095207305408"></a><h2>Description</h2><p>
+ Creates a new empty repository.
+ </p></div><div class="refsect1"><a name="idm45095207304224"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--mode</code>="MODE"</span></dt><dd><p>
+ Initialize repository in given mode
+ (<code class="literal">bare</code>, <code class="literal">bare-user</code>,
+ <code class="literal">bare-user-only</code>, <code class="literal">archive</code>).
+ The default is <code class="literal">bare</code>. Note that for
+ <code class="literal">archive</code> the repository configuration file
+ will actually have <code class="literal">archive-z2</code>, as that's
+ the historical name.</p><p>See the manual for differences between these modes.
+ Briefly, <code class="literal">bare</code> mode stores files as they
+ are, so they can be directly hardlinked,
+ <code class="literal">bare-user</code> uses extended attributes to
+ store ownership and xattr information, allowing non-root
+ operations, <code class="literal">bare-user-only</code> does not store
+ ownership information, and <code class="literal">archive</code> stores
+ files compressed, to be served over the network.
+ </p></dd><dt><span class="term"><code class="option">--collection-id</code>=COLLECTION-ID</span></dt><dd><p>
+ Set the collection ID of the repository. Remotes in clones
+ of this repository must configure the same value in order to
+ pull refs which originated in this repository over peer to
+ peer.</p><p>This collection ID must be persistent and globally
+ unique. It is formatted as a reverse DNS name (like a D-Bus
+ interface). It must be set to a reverse DNS domain under your
+ control.</p><p>This option may be omitted (the default) to leave
+ peer to peer distribution unsupported for the repository. A
+ collection ID may be added to an existing repository in
+ future to enable peer to peer distribution from that point
+ onwards.</p><p>If the collection ID is changed for the repository
+ in future, peer to peer distribution of refs from the
+ repository will break for all peers who do not update their
+ remote configuration to the new collection ID.
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-log.html b/man/ostree-log.html
new file mode 100644
index 00000000..208a1044
--- /dev/null
+++ b/man/ostree-log.html
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree log</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-log &#8212; Show log starting at a commit or ref</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree log</code> [OPTIONS...] {REF}</p></div></div><div class="refsect1"><a name="idm45969402559808"></a><h2>Description</h2><p>
+ Shows a log of commits to a given ref or branch. Includes commit checksum, timestamp, and commit message.
+ </p></div><div class="refsect1"><a name="idm45969402558480"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--raw</code></span></dt><dd><p>
+ Show raw variant data.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45969402457056"></a><h2>Example</h2><p><span class="command"><strong>$ ostree log my-branch</strong></span></p><pre class="programlisting">
+ commit 67e382b11d213a402a5313e61cbc69dfd5ab93cb07fbb8b71c2e84f79fa5d7dc
+ Date: 2014-06-12 13:42:54 +0000
+ This is the second commit
+
+ commit ce19c41036cc45e49b0cecf6b157523c2105c4de1ce30101def1f759daafcc3e
+ Date: 2014-06-12 11:20:08 +0000
+ Initial commit
+</pre></div></div></body></html>
diff --git a/man/ostree-ls.html b/man/ostree-ls.html
new file mode 100644
index 00000000..bb334118
--- /dev/null
+++ b/man/ostree-ls.html
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree ls</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-ls &#8212; List file paths</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree ls</code> [OPTIONS...] {COMMIT} [PATHS...]</p></div></div><div class="refsect1"><a name="idm45634508348672"></a><h2>Description</h2><p>
+ Prints a list of file paths within the given commit, and within the given path(s) if specified. The first letter of the file line output specifies the type: "-" for regular file, "d" for directory, "l" for symbolic link. See EXAMPLE section for more detail on the specific output.
+ </p></div><div class="refsect1"><a name="idm45634508347488"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--dironly</code>,<code class="option">-d</code></span></dt><dd><p>
+ Do not recurse into directory arguments.
+ </p></dd><dt><span class="term"><code class="option">--recursive</code>,<code class="option">-R</code></span></dt><dd><p>
+ Print directories recursively.
+ </p></dd><dt><span class="term"><code class="option">--checksum</code>,<code class="option">-C</code></span></dt><dd><p>
+ Print checksum.
+ </p></dd><dt><span class="term"><code class="option">--xattrs</code>,<code class="option">-X</code></span></dt><dd><p>
+ Print extended attributes.
+ </p></dd><dt><span class="term"><code class="option">--nul-filenames-only</code></span></dt><dd><p>
+ Print only filenames, NUL separated.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45634508500544"></a><h2>Example</h2><p><span class="command"><strong>$ ostree ls my-branch</strong></span></p><pre class="programlisting">
+ d00644 0 0 0 /
+ -00644 0 0 2 /helloworld.txt
+ d00755 0 0 0 /testdirectory
+</pre><p>Here, the first column is the file-type symbol (as explained in the DESCRIPTION section) followed by the S_IFMT file type. The next two columns (here: 0 0) are respectively the user ID and group ID for the file. After the break, the next number represents that file's standard size. The final column is the file path.</p></div></div></body></html>
diff --git a/man/ostree-prune.html b/man/ostree-prune.html
new file mode 100644
index 00000000..726223b3
--- /dev/null
+++ b/man/ostree-prune.html
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree prune</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-prune &#8212; Search for unreachable objects</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree prune</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm45578271168272"></a><h2>Description</h2><p>
+ This searches for unreachable objects in the current repository. If unreachable objects are found, the command delete them to free space. If the <code class="option">--no-prune</code> option is invoked, the command will just print unreachable objects and recommend deleting them.
+ </p></div><div class="refsect1"><a name="idm45578271166544"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--no-prune</code></span></dt><dd><p>
+ Only display unreachable objects; don't delete.
+ </p></dd><dt><span class="term"><code class="option">--refs-only</code></span></dt><dd><p>
+ Only compute reachability via refs.
+ </p></dd><dt><span class="term"><code class="option">--delete-commit</code>=COMMIT</span></dt><dd><p>
+ Specify a COMMIT to delete.
+ </p></dd><dt><span class="term"><code class="option">--keep-younger-than</code>=DATE</span></dt><dd><p>
+ All commits older than DATE will be
+ pruned. The format of DATE is the same as that
+ accepted by GNU <code class="literal">date</code> utility - for more information
+ see <code class="literal">info date</code>.
+ </p></dd><dt><span class="term"><code class="option">--depth</code>=DEPTH</span></dt><dd><p>
+ Only traverse DEPTH (integer) parents for each commit (default: -1=infinite).
+ </p></dd><dt><span class="term"><code class="option">--static-deltas-only</code>=DEPTH</span></dt><dd><p>
+ This option may currently <span class="emphasis"><em>only</em></span> be used in combination with
+ <code class="option">--delete-commit</code>. Previous versions of ostree silently accepted
+ the option without that, and ignored it. However, there are desired use
+ cases for pruning just static deltas (while retaining the commits), and it's
+ likely at some point this option will be supported for use cases outside of just
+ <code class="option">--delete-commit</code>.
+ </p></dd><dt><span class="term"><code class="option">--commit-only</code></span></dt><dd><p>
+ Only traverse and delete commit objects. This leaves orphaned meta and
+ content objects, which can be cleaned up with another prune invocation.
+ One may want to use this option to cheaply delete multiple commits,
+ and then clean up with a more expensive prune at the end.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45578275073520"></a><h2>Example</h2><p><span class="command"><strong>$ ostree prune</strong></span></p><pre class="programlisting">
+ Total objects: 25627
+ No unreachable objects
+</pre></div></div></body></html>
diff --git a/man/ostree-pull-local.html b/man/ostree-pull-local.html
new file mode 100644
index 00000000..ab4223ca
--- /dev/null
+++ b/man/ostree-pull-local.html
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree pull-local</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-pull-local &#8212; Copy data from a source repository</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree pull-local</code> [OPTIONS...] {SOURCE_REPO} [REFS...]</p></div></div><div class="refsect1"><a name="idm45986577280928"></a><h2>Description</h2><p>
+ Copies data from a given repository; optimized for copies only between repositories on the same system.
+ </p></div><div class="refsect1"><a name="idm45986577279600"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--remote</code>="REMOTE"</span></dt><dd><p>
+ Add REMOTE to refspec.
+ </p></dd><dt><span class="term"><code class="option">--disable-fsync</code></span></dt><dd><p>
+ Do no invoke fsync().
+ </p></dd><dt><span class="term"><code class="option">--untrusted</code></span></dt><dd><p>
+ Do not trust source, verify checksums and don't hardlink into source.
+ </p></dd><dt><span class="term"><code class="option">--disable-verify-bindings</code></span></dt><dd><p>
+ Disable verification of commit metadata bindings.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45986577272064"></a><h2>Example</h2><p><span class="command"><strong>$ ostree pull-local /ostree/repo</strong></span></p><pre class="programlisting">
+ Enumerating objects...
+ pull: 25709/25709 scanned, 0 objects copied
+ Writing 5 refs
+</pre></div></div></body></html>
diff --git a/man/ostree-pull.html b/man/ostree-pull.html
new file mode 100644
index 00000000..6a0fbf4d
--- /dev/null
+++ b/man/ostree-pull.html
@@ -0,0 +1,51 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree pull</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-pull &#8212; Download data from a remote repository</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree pull {REMOTE} [BRANCH]</code> </p></div></div><div class="refsect1"><a name="idm45205198201840"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--commit-metadata-only</code></span></dt><dd><p>
+ Fetch only the commit metadata.
+ </p></dd><dt><span class="term"><code class="option">--cache-dir</code>=DIR</span></dt><dd><p>
+ Use an alternate cache directory in <code class="literal">DIR</code>.
+ </p></dd><dt><span class="term"><code class="option">--disable-fsync</code></span></dt><dd><p>
+ Do no invoke fsync().
+ </p></dd><dt><span class="term"><code class="option">--localcache-repo</code></span></dt><dd><p>
+ Like git's <code class="literal">clone --reference</code>. Reuse the provided
+ OSTree repo as a local object cache when doing HTTP fetches.
+ May be specified multiple times.
+ </p></dd><dt><span class="term"><code class="option">--untrusted</code></span></dt><dd><p>
+ Do not trust local sources, verify checksums and don't hardlink into source.
+ </p></dd><dt><span class="term"><code class="option">--disable-static-deltas</code></span></dt><dd><p>
+ Do not use static deltas.
+ </p></dd><dt><span class="term"><code class="option">--mirror</code></span></dt><dd><p>
+ Write refs suitable for a mirror, i.e. refs are stored in the
+ <code class="literal">heads/</code> directory rather than the
+ <code class="literal">remotes/</code> directory. This makes the target repo
+ suitable to be exported for other clients to pull from as an ostree
+ remote. If no specific refs are specified, all refs will be fetched (the
+ remote must have a summary file present).
+ </p></dd><dt><span class="term"><code class="option">--subpath</code>=SUBPATH</span></dt><dd><p>
+ Only pull the provided subpath.
+ </p></dd><dt><span class="term"><code class="option">--depth</code>=DEPTH</span></dt><dd><p>
+ Traverse DEPTH parents (-1=infinite) (default: 0).
+ </p></dd><dt><span class="term"><code class="option">--network-retries</code>=N</span></dt><dd><p>
+ Specifies how many times each download should be retried upon error (default: 5)
+ </p></dd><dt><span class="term"><code class="option">--disable-verify-bindings</code></span></dt><dd><p>
+ Disable verification of commit metadata bindings.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45205202102640"></a><h2>Description</h2><p>
+ Without --mirror, this command will create new refs
+ under <code class="literal">remotes/REMOTE/</code> directory
+ for each pulled branch unless they are already created. Such
+ refs can be then referenced by <code class="literal">REMOTE:BRANCH</code> in
+ <code class="literal">ostree</code> subcommands (e.g. <code class="literal">ostree log origin:exampleos/x86_64/standard</code>).
+ </p><p>
+ This command can retrieve just a specific commit, or go all
+ the way to performing a full mirror of the remote
+ repository. If no <code class="literal">BRANCH</code> is specified,
+ all configured branches are retrieved.
+ </p><p>
+ A special syntax in the <code class="literal">@</code> character allows
+ specifying a specific commit to retrieve from a branch. The
+ use cases for this are somewhat similar to pulling a specific
+ git tag; one could e.g. script a system upgrade to a known-good
+ version, rather than the latest from the content provider.
+ </p></div><div class="refsect1"><a name="idm45205202096096"></a><h2>Example</h2><p><span class="command"><strong>$ ostree --repo=repo pull --depth=-1 --mirror remote_name</strong></span></p><p>Perform a complete mirror of the remote. (This is
+ likely most useful if your repository is also
+ <code class="literal">archive</code> mode)</p><p><span class="command"><strong>$ ostree --repo=repo pull remote_name exampleos/x86_64/standard</strong></span></p><p>Fetch the most recent commit to <code class="literal">exampleos/x86_64/standard</code>.</p><p><span class="command"><strong>$ ostree --repo=repo pull remote_name exampleos/x86_64/standard@98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4</strong></span></p><p>Download the specific commit starting with
+ <code class="literal">98ea6e</code> as if it was the latest commit for
+ <code class="literal">exampleos/x86_64/standard</code>.</p></div></div></body></html>
diff --git a/man/ostree-refs.html b/man/ostree-refs.html
new file mode 100644
index 00000000..e936ed5e
--- /dev/null
+++ b/man/ostree-refs.html
@@ -0,0 +1,36 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree refs</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-refs &#8212; List refs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree refs</code> [OPTIONS...] [PREFIX]</p></div><div class="cmdsynopsis"><p><code class="command">ostree refs</code> {EXISTING} {--create=NEWREF}</p></div></div><div class="refsect1"><a name="idm46051743823328"></a><h2>Description</h2><p>
+ Lists all refs available on the host. If specified, PREFIX assigns the refspec prefix; default
+ prefix is null, which lists all refs. This command can also be used to create or delete refs.
+ </p></div><div class="refsect1"><a name="idm46051743822144"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--list</code></span></dt><dd><p> For historical reasons, <code class="literal">refs</code>
+ without this option will strip the specified prefix
+ from the output. Normally, one wants to see the full
+ ref, so providing this option ensures the refs are
+ printed in full, rather than
+ truncated. </p></dd><dt><span class="term"><code class="option">--create</code>=NEWREF</span></dt><dd><p>
+ Create a ref pointing to the commit EXISTING. NEWREF must not already exist, and EXISTING
+ must be an existing commit. More than one ref can point to the same commit.
+ </p></dd><dt><span class="term"><code class="option">--delete</code></span></dt><dd><p>
+ Delete refs which match PREFIX, rather than listing them. If you are trying to reclaim space,
+ you will then need to <span class="command"><strong>ostree prune</strong></span> or <span class="command"><strong>ostree admin cleanup</strong></span>.
+ </p></dd><dt><span class="term"><code class="option">--revision</code>, <code class="option">-r</code></span></dt><dd><p>
+ When listing refs, also print their revisions. The revisions
+ will be separated by a tab character.
+ </p></dd><dt><span class="term"><code class="option">--alias</code>, <code class="option">-A</code></span></dt><dd><p>
+ If used with <code class="option">--create</code>, create an alias. Otherwise just list aliases.
+ </p></dd><dt><span class="term"><code class="option">--collections</code>, <code class="option">-c</code></span></dt><dd><p>
+ Enable interactions with refs using the combination of their
+ collection IDs and ref names. When listing refs, this changes
+ the output format to include collection IDs, and enables
+ listing remote mirrored refs.</p><p>When creating refs, the refspec value passed to the
+ <code class="option">--create</code> option is treated as
+ <code class="literal">COLLECTION-ID:REF-NAME</code> and a mirrored ref
+ is created. (This is an abuse of the refspec syntax.)</p><p>When deleting refs, all refs whose collection ID equals
+ PREFIX are deleted.
+ </p></dd><dt><span class="term"><code class="option">--force</code></span></dt><dd><p>
+ When creating <code class="literal">NEWREF</code> with
+ <code class="option">--create</code>, allow an existing ref to be
+ updated instead of erroring.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46051747725184"></a><h2>Example</h2><p><span class="command"><strong>$ ostree refs</strong></span></p><pre class="programlisting">
+ my-branch
+ gnome-ostree/buildmain/x86_64-runtime
+</pre></div></div></body></html>
diff --git a/man/ostree-remote.html b/man/ostree-remote.html
new file mode 100644
index 00000000..c06879a9
--- /dev/null
+++ b/man/ostree-remote.html
@@ -0,0 +1,60 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree remote</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-remote &#8212; Control remote repository configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree remote add</code> [OPTIONS...] {NAME} {URL} [BRANCH...]</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote delete</code> {NAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote show-url</code> {NAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote list</code> [OPTIONS...] {NAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote gpg-import</code> [OPTIONS...] {NAME} [KEY-ID...]</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote gpg-list-keys</code> {NAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote refs</code> {NAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote summary</code> [OPTIONS...] {NAME}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote add-cookie</code> {NAME} {DOMAIN} {PATH} {COOKIE_NAME} {VALUE}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote delete-cookie</code> {NAME} {DOMAIN} {PATH} {COOKIE_NAME} {VALUE}</p></div><div class="cmdsynopsis"><p><code class="command">ostree remote list-cookies</code> {NAME}</p></div></div><div class="refsect1"><a name="idm46604827160784"></a><h2>Description</h2><p>
+ Changes remote repository configurations. The NAME refers to the name of the remote.
+ </p><p>
+ The <code class="literal">BRANCH</code> arguments to the
+ <span class="command"><strong>add</strong></span> subcommand specifies the configured branches
+ for the remote. See the <code class="literal">branches</code> section in
+ <a href="ostree.repo-config.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo-config</span>(5)</span></a>
+ for more information.
+ </p><p>
+ The <span class="command"><strong>gpg-import</strong></span> subcommand can associate GPG
+ keys to a specific remote repository for use when pulling signed
+ commits from that repository (if GPG verification is enabled). The
+ <span class="command"><strong>gpg-list-keys</strong></span> subcommand can be used to see the
+ GPG keys currently associated with a remote repository.
+ </p><p>
+ The GPG keys to import may be in binary OpenPGP format or ASCII armored. The optional [KEY-ID] list can restrict which keys are imported from a keyring file or input stream. All keys are imported if this list is omitted. If neither <code class="option">--keyring</code> nor <code class="option">--stdin</code> options are given, then keys are imported from the user's personal GPG keyring.
+ </p><p>
+ The various cookie related command allow management of a remote specific cookie jar.
+ </p></div><div class="refsect1"><a name="idm46604827151216"></a><h2>'Add' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--set</code>="KEY=VALUE"</span></dt><dd><p>
+ Set config option KEY=VALUE for remote.
+ </p></dd><dt><span class="term"><code class="option">--if-not-exists</code></span></dt><dd><p>
+ Do nothing if the provided remote exists.
+ </p></dd><dt><span class="term"><code class="option">--force</code></span></dt><dd><p>
+ Replace the provided remote if it exists.
+ </p></dd><dt><span class="term"><code class="option">--no-gpg-verify</code></span></dt><dd><p>
+ Disable GPG verification.
+ </p></dd><dt><span class="term"><code class="option">--gpg-import</code>=FILE</span></dt><dd><p>
+ Import one or more GPG keys from a file.
+ </p><p>
+ Equivalent to
+ <span class="command"><strong>ostree remote gpg-import --keyring=FILE</strong></span>.
+ </p></dd><dt><span class="term"><code class="option">--collection-id</code>=COLLECTION-ID</span></dt><dd><p>
+ Set the collection ID for the remote to a value provided by
+ the repository owner, which allows refs from this remote to be
+ shared peer to peer.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46604822222160"></a><h2>'List' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">-u, --show-urls</code></span></dt><dd><p>
+ Show remote URLs in list
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46604822219600"></a><h2>'Refs' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--revision</code>, <code class="option">-r</code></span></dt><dd><p>
+ Also print the revisions for each ref. The revisions will
+ be separated by a tab character.
+ </p></dd></dl></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--cache-dir</code>=DIR</span></dt><dd><p>
+ Use an alternate cache directory in <code class="literal">DIR</code>.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46604822213952"></a><h2>'GPG-Import' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">-k, --keyring</code>=FILE</span></dt><dd><p>
+ Import one or more keys from a file.
+ </p><p>
+ This option may be repeated to import from multiple files,
+ but may not be used in combination with
+ <code class="option">--stdin</code>.
+ </p></dd><dt><span class="term"><code class="option">--stdin</code></span></dt><dd><p>
+ Import one or more keys from standard input.
+ </p><p>
+ This option may not be used in combination with
+ <code class="option">--keyring</code>.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46604822208272"></a><h2>'Summary' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--cache-dir</code>=DIR</span></dt><dd><p>
+ Use an alternate cache directory in <code class="literal">DIR</code>.
+ </p></dd><dt><span class="term"><code class="option">--raw</code></span></dt><dd><p>
+ Show raw variant data
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46604822203472"></a><h2>Example</h2><p><span class="command"><strong>$ ostree remote show-url local</strong></span></p><pre class="programlisting">
+ http://192.168.122.1/repo
+</pre></div></div></body></html>
diff --git a/man/ostree-reset.html b/man/ostree-reset.html
new file mode 100644
index 00000000..362a8864
--- /dev/null
+++ b/man/ostree-reset.html
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree reset</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-reset &#8212; Reset a ref to a previous commit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree reset </code> {REF} {REF_TO_RESET_TO}</p></div></div><div class="refsect1"><a name="idm45645589197664"></a><h2>Description</h2><p>
+ Given a commit, this command will reset the ref to a previous specified commit.
+ </p></div><div class="refsect1"><a name="idm45645589196368"></a><h2>Example</h2><p><span class="command"><strong>$ ostree log my-branch</strong></span></p><pre class="programlisting">
+ commit 67e382b11d213a402a5313e61cbc69dfd5ab93cb07
+ Date: 2014-06-12 13:42:54 +0000
+ This is the second commit
+
+ commit ce19c41036cc45e49b0cecf6b157523c2105c4de1c
+ Date: 2014-06-12 11:20:08 +0000
+ Initial commit
+</pre><p><span class="command"><strong>$ ostree reset my-branch my-branch^</strong></span></p><p><span class="command"><strong>$ ostree log my-branch</strong></span></p><pre class="programlisting">
+ commit ce19c41036cc45e49b0cecf6b157523c2105c4de1c
+ Date: 2014-06-12 11:20:08 +0000
+ Initial commit
+</pre></div></div></body></html>
diff --git a/man/ostree-rev-parse.html b/man/ostree-rev-parse.html
new file mode 100644
index 00000000..c6d5e5de
--- /dev/null
+++ b/man/ostree-rev-parse.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree rev-parse</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-rev-parse &#8212; Output the target of a rev</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree rev-parse </code> {REV} {PATH}</p></div></div><div class="refsect1"><a name="idm46390975738672"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--single</code>, <code class="option">-S</code></span></dt><dd><p>
+ If the repository has exactly one commit, then print it; any other case will result in an error.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46390975735184"></a><h2>Description</h2><p>
+ Given a REV, outputs the checksum of the latest commit of that revision.
+ </p></div><div class="refsect1"><a name="idm46390975733888"></a><h2>Example</h2><p><span class="command"><strong>$ ostree rev-parse my-branch</strong></span></p><pre class="programlisting">
+ ce19c41036cc45e49b0cecf6b157523c2105c4de1ce30101def1f759daafcc3e
+</pre></div></div></body></html>
diff --git a/man/ostree-show.html b/man/ostree-show.html
new file mode 100644
index 00000000..280c8135
--- /dev/null
+++ b/man/ostree-show.html
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree show</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-show &#8212; Output a metadata object</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree show</code> [OPTIONS...] {OBJECT}</p></div></div><div class="refsect1"><a name="idm45934208045936"></a><h2>Description</h2><p>
+ Given an object, shows the metadata for that object. For a particular revision, it will show the data for the most recent commit to that revision.
+ </p></div><div class="refsect1"><a name="idm45934208044752"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--print-related</code></span></dt><dd><p>
+ Show the "related" commits.
+ </p></dd><dt><span class="term"><code class="option">--print-variant-type</code>="TYPE"</span></dt><dd><p>
+ Memory map <em class="replaceable"><code>OBJECT</code></em> (in this case a filename) to the GVariant type string.
+ </p></dd><dt><span class="term"><code class="option">--list-metadata-keys</code></span></dt><dd><p>
+ List the available metadata keys.
+ </p></dd><dt><span class="term"><code class="option">--print-metadata-key</code>="KEY"</span></dt><dd><p>
+ Print string value of metadata key.
+ </p></dd><dt><span class="term"><code class="option">--list-detached-metadata-keys</code></span></dt><dd><p>
+ List the available detached metadata keys.
+ </p></dd><dt><span class="term"><code class="option">--print-detached-metadata-key</code>="KEY"</span></dt><dd><p>
+ Print string value of detached metadata key.
+ </p></dd><dt><span class="term"><code class="option">--print-sizes</code></span></dt><dd><p>
+ Show the commit size metadata. This in only supported for
+ commits that contain <code class="varname">ostree.sizes</code>
+ metadata. This can be included when creating commits with
+ <span class="command"><strong>ostree commit --generate-sizes</strong></span>.
+ </p></dd><dt><span class="term"><code class="option">--raw</code></span></dt><dd><p>
+ Show raw variant data.
+ </p></dd><dt><span class="term"><code class="option">--gpg-homedir</code>="HOMEDIR"</span></dt><dd><p>
+ GPG home directory to use when looking for keyrings (if have GPGME - GNU Privacy Guard Made Easy).
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45934211949968"></a><h2>Example</h2><p><span class="command"><strong>$ ostree show my-branch</strong></span></p><pre class="programlisting">
+ commit 67e382b11d213a402a5313e61cbc69dfd5ab93cb07
+ Date: 2014-06-12 13:42:54 +0000
+</pre></div></div></body></html>
diff --git a/man/ostree-sign.html b/man/ostree-sign.html
new file mode 100644
index 00000000..c96d6626
--- /dev/null
+++ b/man/ostree-sign.html
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree sign</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-sign &#8212; Sign a commit</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree sign</code> [OPTIONS...] {COMMIT} {KEY-ID...}</p></div></div><div class="refsect1"><a name="idm45431019680496"></a><h2>Description</h2><p>
+ Add a new signature to a commit.
+
+ Note that currently, this will append a new signature even if
+ the commit is already signed with a given key.
+ </p><p>
+ There are several "well-known" system places for `ed25519` trusted and revoked public keys -- expected single <code class="literal">base64</code>-encoded key per line.
+ </p><p>Files:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="filename">/etc/ostree/trusted.ed25519</code></p></li><li class="listitem"><p><code class="filename">/etc/ostree/revoked.ed25519</code></p></li><li class="listitem"><p><code class="filename">/usr/share/ostree/trusted.ed25519</code></p></li><li class="listitem"><p><code class="filename">/usr/share/ostree/revoked.ed25519</code></p></li></ul></div><p>
+ </p><p>Directories containing files with keys:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="filename">/etc/ostree/trusted.ed25519.d</code></p></li><li class="listitem"><p><code class="filename">/etc/ostree/revoked.ed25519.d</code></p></li><li class="listitem"><p><code class="filename">/usr/share/ostree/trusted.ed25519.d</code></p></li><li class="listitem"><p><code class="filename">/usr/share/ostree/rvokeded.ed25519.d</code></p></li></ul></div><p>
+ </p></div><div class="refsect1"><a name="idm45431020170112"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">KEY-ID</code></span></dt><dd><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">for ed25519:</code></span></dt><dd><p>
+ <code class="literal">base64</code>-encoded secret (for signing) or public key (for verifying).
+ </p></dd><dt><span class="term"><code class="option">for dummy:</code></span></dt><dd><p>
+ ASCII-string used as secret key and public key.
+ </p></dd></dl></div><p>
+ </p></dd><dt><span class="term"><code class="option">--verify</code></span></dt><dd><p>
+ Verify signatures
+ </p></dd><dt><span class="term"><code class="option">-s, --sign-type</code></span></dt><dd><p>
+ Use particular signature mechanism. Currently
+ available ed25519 and dummy
+ signature types.
+
+ The default is ed25519 .
+ </p></dd><dt><span class="term"><code class="option">--keys-file</code></span></dt><dd><p>
+ Read key(s) from file <code class="filename">filename</code>.
+ </p><p>
+ Valid for <code class="literal">ed25519</code> signature type.
+ For <code class="literal">ed25519</code> this file must contain <code class="literal">base64</code>-encoded
+ secret key(s) (for signing) or public key(s) (for verifying) per line.
+ </p></dd><dt><span class="term"><code class="option">--keys-dir</code></span></dt><dd><p>
+ Redefine the system path, where to search files and subdirectories with
+ well-known and revoked keys.
+ </p></dd></dl></div></div></div></body></html>
diff --git a/man/ostree-static-delta.html b/man/ostree-static-delta.html
new file mode 100644
index 00000000..77ad95c2
--- /dev/null
+++ b/man/ostree-static-delta.html
@@ -0,0 +1,68 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree static-delta</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-static-delta &#8212; Manage static delta files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree static-delta list</code> </p></div><div class="cmdsynopsis"><p><code class="command">ostree static-delta show</code> </p></div><div class="cmdsynopsis"><p><code class="command">ostree static-delta delete</code> </p></div><div class="cmdsynopsis"><p><code class="command">ostree static-delta generate</code> {--to=REV} [OPTIONS...]</p></div><div class="cmdsynopsis"><p><code class="command">ostree static-delta apply-offline</code> [OPTIONS...] {PATH} [KEY-ID...]</p></div><div class="cmdsynopsis"><p><code class="command">ostree static-delta verify</code> [OPTIONS...] {STATIC-DELTA} [KEY-ID...]</p></div></div><div class="refsect1"><a name="idm46452566038224"></a><h2>Description</h2><p>
+ List and manipulate static delta files.
+ </p></div><div class="refsect1"><a name="idm46452567640992"></a><h2>'Generate' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--from</code>="REV"</span></dt><dd><p>
+ Create delta from revision REV.
+ </p></dd><dt><span class="term"><code class="option">--to</code>="REV"</span></dt><dd><p>
+ Create delta to revision REV. (This option is required.)
+ The delta is from the parent of REV, unless specified otherwise by <code class="option">--from</code>
+ or <code class="option">--empty</code>.
+ </p></dd><dt><span class="term"><code class="option">--empty</code></span></dt><dd><p>
+ Create delta from scratch.
+ </p></dd><dt><span class="term"><code class="option">--max-usize</code>=SIZE</span></dt><dd><p>
+ Maximum uncompressed size in megabytes.
+ </p></dd><dt><span class="term"><code class="option">--sign-type</code>=ENGINE</span></dt><dd><p>
+ Use particular signature engine. Currently
+ available ed25519 and dummy
+ signature types.
+
+ The default is ed25519 .
+ </p></dd><dt><span class="term"><code class="option">--sign</code>="KEY-ID"</span></dt><dd><p>
+ There <code class="literal">KEY-ID</code> is:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">for ed25519:</code></span></dt><dd><p>
+ <code class="literal">base64</code>-encoded secret key for signing.
+ </p></dd><dt><span class="term"><code class="option">for dummy:</code></span></dt><dd><p>
+ ASCII-string used as secret key.
+ </p></dd></dl></div><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46452565738896"></a><h2>'Apply-offline' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">KEY-ID</code></span></dt><dd><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">for ed25519:</code></span></dt><dd><p>
+ <code class="literal">base64</code>-encoded public key for verifying.
+ </p></dd><dt><span class="term"><code class="option">for dummy:</code></span></dt><dd><p>
+ ASCII-string used as public key.
+ </p></dd></dl></div><p>
+ </p></dd><dt><span class="term"><code class="option">--sign-type</code>=ENGINE</span></dt><dd><p>
+ Use particular signature engine. Currently
+ available ed25519 and dummy
+ signature types.
+ </p></dd><dt><span class="term"><code class="option">--keys-file</code></span></dt><dd><p>
+ Read key(s) from file <code class="filename">filename</code>.
+ </p><p>
+ Valid for <code class="literal">ed25519</code> signature type.
+ For <code class="literal">ed25519</code> this file must contain <code class="literal">base64</code>-encoded
+ public key(s) per line for verifying.
+ </p></dd><dt><span class="term"><code class="option">--keys-dir</code></span></dt><dd><p>
+ Redefine the system path, where to search files and subdirectories with
+ well-known and revoked keys.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46452567641248"></a><h2>'Verify' Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">KEY-ID</code></span></dt><dd><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">for ed25519:</code></span></dt><dd><p>
+ <code class="literal">base64</code>-encoded public key for verifying.
+ </p></dd><dt><span class="term"><code class="option">for dummy:</code></span></dt><dd><p>
+ ASCII-string used as public key.
+ </p></dd></dl></div><p>
+ </p></dd><dt><span class="term"><code class="option">--sign-type</code>=ENGINE</span></dt><dd><p>
+ Use particular signature engine. Currently
+ available ed25519 and dummy
+ signature types.
+
+ The default is ed25519 .
+ </p></dd><dt><span class="term"><code class="option">--keys-file</code></span></dt><dd><p>
+ Read key(s) from file <code class="filename">filename</code>.
+ </p><p>
+ Valid for <code class="literal">ed25519</code> signature type.
+ For <code class="literal">ed25519</code> this file must contain <code class="literal">base64</code>-encoded
+ public key(s) per line for verifying.
+ </p></dd><dt><span class="term"><code class="option">--keys-dir</code></span></dt><dd><p>
+ Redefine the system path, where to search files and subdirectories with
+ well-known and revoked keys.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46452565879824"></a><h2>Example</h2><p><span class="command"><strong>$ ostree static-delta</strong></span></p><pre class="programlisting">
+ (No static deltas)
+</pre></div></div></body></html>
diff --git a/man/ostree-summary.html b/man/ostree-summary.html
new file mode 100644
index 00000000..9fa345f0
--- /dev/null
+++ b/man/ostree-summary.html
@@ -0,0 +1,52 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree summary</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-summary &#8212; Regenerate or view the summary metadata file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree summary</code> [--gpg-sign=KEYID] [--gpg-homedir=HOMEDIR] [--sign=KEYID] [--sign-type=ENGINE] {--update} [--add-metadata=<em class="replaceable"><code>KEY</code></em>=<em class="replaceable"><code>VALUE</code></em>...]</p></div><div class="cmdsynopsis"><p><code class="command">ostree summary</code> { --view | --raw }</p></div></div><div class="refsect1"><a name="idm45444963554112"></a><h2>Description</h2><p>
+ The <code class="filename">summary</code> file is an optional higher
+ level form of repository metadata that describes the
+ available branches. It needs to be manually regenerated after
+ a series of commits. Among other things, this allows atomically
+ updating multiple commits.
+ </p></div><div class="refsect1"><a name="idm45444962044176"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--update</code>,<code class="option">-u</code></span></dt><dd><p>
+ Update the summary file. This option can be combined
+ with <code class="option">--add-metadata</code> to add metadata
+ fields to the summary.
+ </p><p>If the repository has a collection ID configured, the
+ <code class="filename">ostree-metadata</code> branch for that collection ID
+ will also be updated with a new commit containing the given metadata,
+ which will be signed if the summary file is signed.</p></dd><dt><span class="term"><code class="option">--add-metadata</code>,<code class="option">-m</code>=KEY=VALUE</span></dt><dd><p>
+ Specify an additional metadata field to add to the summary.
+ It must be in the format
+ <span class="command"><strong><em class="replaceable"><code>KEY</code></em>=<em class="replaceable"><code>VALUE</code></em></strong></span>
+ or as two separate arguments. The keys must be namespaced
+ for your organisation or repository using a dot prefix. The
+ values must be in GVariant text format. For example,
+ <span class="command"><strong>exampleos.end-of-life "@t 1445385600"</strong></span>.
+ This option can be used multiple times.
+ </p></dd><dt><span class="term"><code class="option">--view</code>,<code class="option">-v</code></span></dt><dd><p>
+ View the contents of the summary file in a human readable format.
+ </p></dd><dt><span class="term"><code class="option">--raw</code></span></dt><dd><p>
+ View the raw bytes of the summary file.
+ </p></dd><dt><span class="term"><code class="option">--gpg-sign</code>=KEYID</span></dt><dd><p>
+ GPG Key ID to sign the summary with.
+ </p></dd><dt><span class="term"><code class="option">--gpg-homedir</code>=HOMEDIR</span></dt><dd><p>
+ GPG Homedir to use when looking for keyrings.
+ </p></dd><dt><span class="term"><code class="option">--sign-type</code>=ENGINE</span></dt><dd><p>
+ Use particular signature engine. Currently
+ available ed25519 and dummy
+ signature types.
+
+ The default is ed25519 .
+ </p></dd><dt><span class="term"><code class="option">--sign</code>="KEY-ID"</span></dt><dd><p>
+ There <code class="literal">KEY-ID</code> is:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">for ed25519:</code></span></dt><dd><p>
+ <code class="literal">base64</code>-encoded secret key for commit signing.
+ </p></dd><dt><span class="term"><code class="option">for dummy:</code></span></dt><dd><p>
+ ASCII-string used as secret key.
+ </p></dd></dl></div><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45444961714704"></a><h2>Examples</h2><p><span class="command"><strong>$ ostree summary -u</strong></span></p><p><span class="command"><strong>$ ostree summary -u -m key="'value'"</strong></span></p><p><span class="command"><strong>$ ostree summary -v</strong></span></p><pre class="programlisting">
+* ostree/1/1/0
+ Latest Commit (4.2 MB):
+ 9828ab80f357459b4ab50f0629beab2ae3b67318fc3d161d10a89fae353afa90
+ Timestamp (ostree.commit.timestamp): 2017-11-21T01:41:10-08
+ Version (ostree.commit.version): 1.2.3
+
+Last-Modified (ostree.summary.last-modified): 2018-01-12T22:06:38-08
+</pre></div></div></body></html>
diff --git a/man/ostree-trivial-httpd.html b/man/ostree-trivial-httpd.html
new file mode 100644
index 00000000..69d4613e
--- /dev/null
+++ b/man/ostree-trivial-httpd.html
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree trivial-httpd</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree-trivial-httpd &#8212; Simple webserver</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree trivial-httpd</code> [OPTIONS...] [DIR]</p></div></div><div class="refsect1"><a name="idm45094048462800"></a><h2>Description</h2><p>
+ This runs a simple webserver and keeps it running until killed. If DIR is not specified, it defaults to the current directory.
+ </p></div><div class="refsect1"><a name="idm45094048713088"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--daemonize</code>,<code class="option">-d</code></span></dt><dd><p>
+ Fork into background when ready.
+ </p></dd><dt><span class="term"><code class="option">--autoexit</code></span></dt><dd><p>
+ Automatically exit when directory is deleted.
+ </p></dd><dt><span class="term"><code class="option">--port-file</code>,<code class="option">-p</code>="PATH"</span></dt><dd><p>
+ Write port number to PATH (- for standard output).
+ </p></dd><dt><span class="term"><code class="option">--port</code>,<code class="option">-P</code></span></dt><dd><p>
+ Use the specified TCP port to listen on.
+ </p></dd><dt><span class="term"><code class="option">--force-range-requests</code></span></dt><dd><p>
+ Force range requests by only serving half of files.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45094047779488"></a><h2>Example</h2><p><span class="command"><strong>$ ostree trivial-httpd</strong></span></p></div></div></body></html>
diff --git a/man/ostree.html b/man/ostree.html
new file mode 100644
index 00000000..cb05f34a
--- /dev/null
+++ b/man/ostree.html
@@ -0,0 +1,196 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree &#8212; Manage multiple bootable versioned filesystem trees</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ostree</code> {COMMAND} [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm45645651604992"></a><h2>Description</h2><p>
+ OSTree is a tool for managing multiple bootable
+ versioned filesystem trees, or just "tree" for
+ short. In the OSTree model, operating systems no
+ longer live in the physical "/" root directory.
+ Instead, they parallel install to the new toplevel
+ <code class="filename">/ostree</code> directory. Each
+ installed system gets its own
+ <code class="filename">/ostree/deploy/<em class="replaceable"><code>stateroot</code></em></code>
+ directory. (<code class="literal">stateroot</code> is the
+ newer term for <code class="literal">osname</code>).
+ </p><p>
+ Unlike <code class="literal">rpm</code> or
+ <code class="literal">dpkg</code>, OSTree is only aware of
+ complete filesystem trees. It has no built-in
+ knowledge of what components went into creating the
+ filesystem tree.
+ </p><p>
+ It is possible to use OSTree in several modes; the
+ most basic form is to replicate pre-built trees from
+ a build server. Usually, these pre-built trees are
+ derived from packages. You might also be using
+ OSTree underneath a higher level tool which computes
+ filesystem trees locally.
+ </p><p>
+ It must be emphasized that OSTree only supports
+ <span class="emphasis"><em>read-only</em></span> trees. To change to
+ a different tree (upgrade, downgrade, install
+ software), a new tree is checked out, and a 3-way
+ merge of configuration is performed. The currently
+ running tree is not ever modified; the new tree will
+ become active on a system reboot.
+ </p><p>
+ To see the man page for a command run <span class="command"><strong>man ostree <em class="replaceable"><code>COMMAND</code></em></strong></span> or <span class="command"><strong>man ostree-admin <em class="replaceable"><code>COMMAND</code></em></strong></span>
+ </p></div><div class="refsect1"><a name="idm45645651507056"></a><h2>Options</h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--repo</code></span></dt><dd><p>
+ For most commands, a repository is
+ required. If unspecified, the current
+ directory is used if it appears to be an
+ OSTree repository. If it isn't, either
+ the <code class="envar">OSTREE_REPO</code>
+ environment variable is used, or the
+ system repository located at
+ <code class="filename">/sysroot/ostree/repo</code>.
+ </p></dd><dt><span class="term"><code class="option">-v, --verbose</code></span></dt><dd><p>
+ Produce debug level output.
+ </p></dd><dt><span class="term"><code class="option">--version</code></span></dt><dd><p>
+ Print version information, including the features enabled
+ at compile time, and exit.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45645651644512"></a><h2>Commands</h2><p>System administrators will primarily interact
+ with OSTree via the subcommand <span class="command"><strong>ostree
+ admin</strong></span>.</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><a href="ostree-admin-cleanup.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-cleanup</span>(1)</span></a></span></dt><dd><p>
+ Delete untagged
+ deployments and repository objects.
+ </p></dd><dt><span class="term"><a href="ostree-admin-config-diff.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-config-diff</span>(1)</span></a></span></dt><dd><p>
+ See changes to
+ <code class="filename">/etc</code> as compared
+ to the current default (from
+ <code class="filename">/usr/etc</code>).
+ </p></dd><dt><span class="term"><a href="ostree-admin-deploy.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-deploy</span>(1)</span></a></span></dt><dd><p>
+ Takes a particular
+ commit or revision, and sets it up for
+ the next boot.
+ </p></dd><dt><span class="term"><a href="ostree-admin-init-fs.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-init-fs</span>(1)</span></a></span></dt><dd><p>
+ Initialize a root filesystem
+ in a specified path.
+ </p></dd><dt><span class="term"><a href="ostree-admin-instutil.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-instutil</span>(1)</span></a></span></dt><dd><p>
+ Utility functions intended primarily for operating system installation programs
+ </p></dd><dt><span class="term"><a href="ostree-admin-os-init.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-os-init</span>(1)</span></a></span></dt><dd><p>
+ Initialize the
+ deployment location for an operating
+ system with a specified name.
+ </p></dd><dt><span class="term"><a href="ostree-admin-status.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-status</span>(1)</span></a></span></dt><dd><p>
+ Show and list the deployments.
+ </p></dd><dt><span class="term"><a href="ostree-admin-switch.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-switch</span>(1)</span></a></span></dt><dd><p>
+ Choose a different ref
+ to track from the same remote as the
+ current tree.
+ </p></dd><dt><span class="term"><a href="ostree-admin-undeploy.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-undeploy</span>(1)</span></a></span></dt><dd><p>
+ Remove the previously
+ <em class="replaceable"><code>INDEX</code></em>
+ deployed tree from the bootloader
+ configuration.
+ </p></dd><dt><span class="term"><a href="ostree-admin-upgrade.html"><span class="citerefentry"><span class="refentrytitle">ostree-admin-upgrade</span>(1)</span></a></span></dt><dd><p>
+ Download the latest version for the
+ current ref, and deploy it.
+ </p></dd></dl></div><p>Both administrators and operating system
+ builders may interact with OSTree via the regular
+ filesystem manipulation commands.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><a href="ostree-cat.html"><span class="citerefentry"><span class="refentrytitle">ostree-cat</span>(1)</span></a></span></dt><dd><p>
+ Concatenate contents of files
+ </p></dd><dt><span class="term"><a href="ostree-checkout.html"><span class="citerefentry"><span class="refentrytitle">ostree-checkout</span>(1)</span></a></span></dt><dd><p>
+ Check out a commit into a filesystem tree.
+ </p></dd><dt><span class="term"><a href="ostree-checksum.html"><span class="citerefentry"><span class="refentrytitle">ostree-checksum</span>(1)</span></a></span></dt><dd><p>
+ Gives checksum of any file.
+ </p></dd><dt><span class="term"><a href="ostree-commit.html"><span class="citerefentry"><span class="refentrytitle">ostree-commit</span>(1)</span></a></span></dt><dd><p>
+ Given one or more
+ trees, create a new commit using those contents.
+ </p></dd><dt><span class="term"><a href="ostree-config.html"><span class="citerefentry"><span class="refentrytitle">ostree-config</span>(1)</span></a></span></dt><dd><p>
+ Change settings.
+ </p></dd><dt><span class="term"><a href="ostree-create-usb.html"><span class="citerefentry"><span class="refentrytitle">ostree-create-usb</span>(1)</span></a></span></dt><dd><p>
+ Put the given refs on an external drive for P2P distribution.
+ </p></dd><dt><span class="term"><a href="ostree-diff.html"><span class="citerefentry"><span class="refentrytitle">ostree-diff</span>(1)</span></a></span></dt><dd><p>
+ Concisely list
+ differences between the given refs.
+ </p></dd><dt><span class="term"><a href="ostree-find-remotes.html"><span class="citerefentry"><span class="refentrytitle">ostree-find-remotes</span>(1)</span></a></span></dt><dd><p>
+ Find remotes to serve the given refs.
+ </p></dd><dt><span class="term"><a href="ostree-fsck.html"><span class="citerefentry"><span class="refentrytitle">ostree-fsck</span>(1)</span></a></span></dt><dd><p>
+ Check a repository for consistency.
+ </p></dd><dt><span class="term"><a href="ostree-init.html"><span class="citerefentry"><span class="refentrytitle">ostree-init</span>(1)</span></a></span></dt><dd><p>
+ Initialize a new repository.
+ </p></dd><dt><span class="term"><a href="ostree-log.html"><span class="citerefentry"><span class="refentrytitle">ostree-log</span>(1)</span></a></span></dt><dd><p>
+ Show revision log.
+ </p></dd><dt><span class="term"><a href="ostree-ls.html"><span class="citerefentry"><span class="refentrytitle">ostree-ls</span>(1)</span></a></span></dt><dd><p>
+ List the contents of a given commit.
+ </p></dd><dt><span class="term"><a href="ostree-prune.html"><span class="citerefentry"><span class="refentrytitle">ostree-prune</span>(1)</span></a></span></dt><dd><p>
+ Search for unreachable objects.
+ </p></dd><dt><span class="term"><a href="ostree-pull-local.html"><span class="citerefentry"><span class="refentrytitle">ostree-pull-local</span>(1)</span></a></span></dt><dd><p>
+ Copy data from source-repo.
+ </p></dd><dt><span class="term"><a href="ostree-pull.html"><span class="citerefentry"><span class="refentrytitle">ostree-pull</span>(1)</span></a></span></dt><dd><p>
+ Download data from remote repo. If you have libsoup.
+ </p></dd><dt><span class="term"><a href="ostree-refs.html"><span class="citerefentry"><span class="refentrytitle">ostree-refs</span>(1)</span></a></span></dt><dd><p>
+ List refs.
+ </p></dd><dt><span class="term"><a href="ostree-remote.html"><span class="citerefentry"><span class="refentrytitle">ostree-remote</span>(1)</span></a></span></dt><dd><p>
+ Manipulate remote archive configuration.
+ </p></dd><dt><span class="term"><a href="ostree-reset.html"><span class="citerefentry"><span class="refentrytitle">ostree-reset</span>(1)</span></a></span></dt><dd><p>
+ Reset a ref to a previous commit.
+ </p></dd><dt><span class="term"><a href="ostree-rev-parse.html"><span class="citerefentry"><span class="refentrytitle">ostree-rev-parse</span>(1)</span></a></span></dt><dd><p>
+ Show the SHA256 corresponding to a given rev.
+ </p></dd><dt><span class="term"><a href="ostree-show.html"><span class="citerefentry"><span class="refentrytitle">ostree-show</span>(1)</span></a></span></dt><dd><p>
+ Given an OSTree SHA256 checksum, display its contents.
+ </p></dd><dt><span class="term"><a href="ostree-static-delta.html"><span class="citerefentry"><span class="refentrytitle">ostree-static-delta</span>(1)</span></a></span></dt><dd><p>
+ Manage static delta files.
+ </p></dd><dt><span class="term"><a href="ostree-summary.html"><span class="citerefentry"><span class="refentrytitle">ostree-summary</span>(1)</span></a></span></dt><dd><p>
+ Regenerate the repository summary metadata.
+ </p></dd><dt><span class="term"><a href="ostree-trivial-httpd.html"><span class="citerefentry"><span class="refentrytitle">ostree-trivial-httpd</span>(1)</span></a></span></dt><dd><p>
+ Simple webserver.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45645646752480"></a><h2>Examples</h2><p>
+ For specific examples, please see the man page regarding the specific ostree command. For example:
+ </p><p>
+ <span class="command"><strong>man ostree init</strong></span> or <span class="command"><strong>man ostree-admin status</strong></span>
+ </p></div><div class="refsect1"><a name="idm45645646749552"></a><h2>GPG verification</h2><p>
+ OSTree supports signing commits with GPG. Operations on the system
+ repository by default use keyring files in
+ <code class="filename">/usr/share/ostree/trusted.gpg.d</code>. Any
+ public key in a keyring file in that directory will be
+ trusted by the client. No private keys should be present
+ in this directory.
+ </p><p>
+ In addition to the system repository, OSTree supports two
+ other paths. First, there is a
+ <code class="literal">gpgkeypath</code> option for remotes, which must point
+ to the filename of an ASCII-armored GPG key, or a directory containing
+ ASCII-armored GPG keys to import. Multiple file and directory paths
+ to import from can be specified, as a comma-separated list of paths. This option
+ may be specified by using <span class="command"><strong>--set</strong></span> in <span class="command"><strong>ostree remote add</strong></span>.
+ </p><p>
+ Second, there is support for a per-remote
+ <code class="filename"><em class="replaceable"><code>remotename</code></em>.trustedkeys.gpg</code>
+ file stored in the toplevel of the repository (alongside
+ <code class="filename">objects/</code> and such). This is
+ particularly useful when downloading content that may not
+ be fully trusted (e.g. you want to inspect it but not
+ deploy it as an OS), or use it for containers. This file
+ is written via <span class="command"><strong>ostree remote add
+ --gpg-import</strong></span>.
+ </p></div><div class="refsect1"><a name="idm45645646741936"></a><h2>Terminology</h2><p>
+ The following terms are commonly used throughout the man pages. Terms in upper case letters
+ are literals used in command line arguments.
+ </p><div class="glosslist"><dl><dt><span class="glossterm"><code class="literal">BRANCH</code></span></dt><dd class="glossdef"><p>
+ Branch name. Part of a <em class="glossterm"><code class="literal">REF</code></em>.
+ </p></dd><dt><span class="glossterm"><code class="literal">CHECKSUM</code></span></dt><dd class="glossdef"><p>
+ A SHA256 hash of a object stored in the OSTree repository. This can be a content,
+ a dirtree, a dirmeta or a commit object. If the SHA256 hash of a commit object is
+ meant, the term <em class="glossterm"><code class="literal">COMMIT</code></em> is used.
+ </p></dd><dt><span class="glossterm"><code class="literal">COMMIT</code></span></dt><dd class="glossdef"><p>
+ A SHA256 hash of a commit object.
+ </p></dd><dt><span class="glossterm"><code class="literal">REF</code></span></dt><dd class="glossdef"><p>
+ A reference to a particular commit. References are text files stored in
+ <code class="filename">refs/</code> that name (refer to) a particular commit. A
+ reference can only be the branch name part, in which case a local reference
+ is used (e.g. <code class="literal">mybranch/stable</code>). If a remote branch
+ is referred to, the remote name followed by a colon and the branch name
+ needs to be used (e.g. <code class="literal">myremote:mybranch/stable</code>).
+ </p></dd><dt><span class="glossterm"><code class="literal">REV</code></span>, <span class="glossterm"><code class="literal">REFSPEC</code></span></dt><dd class="glossdef"><p>
+ A specific revision, a commit. This can be anything which can be resolved to a
+ commit, e.g. a <em class="glossterm"><code class="literal">REF</code></em> or a
+ <em class="glossterm"><code class="literal">COMMIT</code></em>.
+ </p></dd><dt><span class="glossterm">SHA256</span></dt><dd class="glossdef"><p>
+ A cryptographic hash function used to store objects in the OSTree
+ repository. The hashes have a length of 256 bites and are typically
+ shown and passed to ostree in its 64 ASCII character long hexadecimal
+ representation
+ (e.g. 0fc70ed33cfd7d26fe99ae29afb7682ddd0e2157a4898bd8cfcdc8a03565b870).
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm45645646723248"></a><h2>See Also</h2><p>
+ <a href="ostree.repo.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo</span>(5)</span></a>
+ </p></div></div></body></html>
diff --git a/man/ostree.repo-config.html b/man/ostree.repo-config.html
new file mode 100644
index 00000000..06580df7
--- /dev/null
+++ b/man/ostree.repo-config.html
@@ -0,0 +1,208 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree.repo-config</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree.repo-config"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree.repo-config &#8212; OSTree repository configuration</p></div><div class="refsect1"><a name="idm46471894798768"></a><h2>Description</h2><p>
+ The <code class="filename">config</code> file in an OSTree
+ repository is a "keyfile" in the <a class="ulink" href="http://standards.freedesktop.org/desktop-entry-spec/latest/" target="_top">XDG
+ Desktop Entry Specification</a> format. It has
+ several global flags, as well as zero or more remote
+ entries which describe how to access remote
+ repositories.
+ </p><p>
+ See <a href="ostree.repo.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo</span>(5)</span></a> for more information
+ about OSTree repositories.
+ </p></div><div class="refsect1"><a name="idm46471893547152"></a><h2>[core] Section Options</h2><p>
+ Repository-global options. The following entries are defined:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="varname">mode</code></span></dt><dd><p>One of <code class="literal">bare</code>, <code class="literal">bare-user</code>, <code class="literal">bare-user-only</code>, or <code class="literal">archive-z2</code> (note that <code class="literal">archive</code> is used everywhere else.)</p></dd><dt><span class="term"><code class="varname">repo_version</code></span></dt><dd><p>Currently, this must be set to <code class="literal">1</code>.</p></dd><dt><span class="term"><code class="varname">auto-update-summary</code></span></dt><dd><p>Boolean value controlling whether or not to
+ automatically update the summary file after any ref is added,
+ removed, or updated. Other modifications which may render a
+ summary file stale (like static deltas, or collection IDs) do
+ not currently trigger an auto-update.
+ </p></dd><dt><span class="term"><code class="varname">commit-update-summary</code></span></dt><dd><p>This option is deprecated. Use
+ <code class="literal">auto-update-summary</code> instead, for which this
+ option is now an alias.</p></dd><dt><span class="term"><code class="varname">fsync</code></span></dt><dd><p>Boolean value controlling whether or not to
+ ensure files are on stable storage when performing operations
+ such as commits, pulls, and checkouts. Defaults to
+ <code class="literal">true</code>.</p><p>
+ If you disable fsync, OSTree will no longer be robust
+ against kernel crashes or power loss.
+ </p><p>
+ You might choose to disable this for local development
+ repositories, under the assumption they can be recreated from
+ source. Similarly, you could disable for a mirror where you could
+ re-pull.
+ </p><p>
+ For the system repository, you might choose to disable fsync
+ if you have uninterruptable power supplies and a well tested
+ kernel.
+ </p></dd><dt><span class="term"><code class="varname">per-object-fsync</code></span></dt><dd><p>By default, OSTree will batch fsync() after
+ writing everything; however, this can cause latency spikes
+ for other processes which are also invoking fsync().
+ Turn on this boolean to reduce potential latency spikes,
+ at the cost of slowing down OSTree updates. You most
+ likely want this on by default for "background" OS updates.
+ </p></dd><dt><span class="term"><code class="varname">min-free-space-percent</code></span></dt><dd><p>
+ Integer percentage value (0-99) that specifies a minimum percentage
+ of total space (in blocks) in the underlying filesystem to keep
+ free. The default value is 3, which is enforced when neither this
+ option nor <code class="varname">min-free-space-size</code> are set.
+ </p><p>
+ If <code class="varname">min-free-space-size</code> is set to a non-zero
+ value, <code class="varname">min-free-space-percent</code> is ignored. Note
+ that, <code class="varname">min-free-space-percent</code> is not enforced on
+ metadata objects. It is assumed that metadata objects are relatively
+ small in size compared to content objects and thus kept outside the
+ scope of this option.
+ </p></dd><dt><span class="term"><code class="varname">min-free-space-size</code></span></dt><dd><p>
+ Value (in power-of-2 MB, GB or TB) that specifies a minimum space
+ in the underlying filesystem to keep free. Examples of acceptable
+ values: <code class="literal">500MB</code> (524288000 bytes),
+ <code class="literal">1GB</code> (1073741824 bytes),
+ <code class="literal">1TB</code> (1099511627776 bytes).
+ </p><p>
+ If this option is set to a non-zero value, and
+ <code class="varname">min-free-space-percent</code> is also set, this option
+ takes priority. Note that, <code class="varname">min-free-space-size</code> is
+ not enforced on metadata objects. It is assumed that metadata objects
+ are relatively small in size compared to content objects and thus kept
+ outside the scope of this option.
+ </p></dd><dt><span class="term"><code class="varname">add-remotes-config-dir</code></span></dt><dd><p>
+ Boolean value controlling whether new remotes will be added
+ in the remotes configuration directory. Defaults to
+ <code class="literal">true</code> for system ostree repositories. When
+ this is <code class="literal">false</code>, remotes will be added in
+ the repository's <code class="filename">config</code> file.
+ </p><p>
+ This only applies to repositories that use a remotes
+ configuration directory such as system ostree repositories,
+ which use <code class="filename">/etc/ostree/remotes.d</code>.
+ Non-system repositories do not use a remotes configuration
+ directory unless one is specified when the repository is
+ opened.
+ </p></dd><dt><span class="term"><code class="varname">payload-link-threshold</code></span></dt><dd><p>An integer value that specifies a minimum file size for creating
+ a payload link. By default it is disabled.
+ </p></dd><dt><span class="term"><code class="varname">collection-id</code></span></dt><dd><p>A reverse DNS domain name under your control, which enables peer
+ to peer distribution of refs in this repository. See the
+ <code class="literal">--collection-id</code> section in
+ <a href="ostree-init.html"><span class="citerefentry"><span class="refentrytitle">ostree-init</span>(1)</span></a>
+ </p></dd><dt><span class="term"><code class="varname">locking</code></span></dt><dd><p>Boolean value controlling whether or not OSTree does
+ repository locking internally. This uses file locks and is
+ hence for multiple process exclusion (e.g. Flatpak and OSTree
+ writing to the same repository separately). This is enabled by
+ default since 2018.5.
+ </p></dd><dt><span class="term"><code class="varname">lock-timeout-secs</code></span></dt><dd><p>Integer value controlling the number of seconds to
+ block while attempting to acquire a lock (see above). A value
+ of -1 means block indefinitely. The default value is 30.
+ </p></dd><dt><span class="term"><code class="varname">default-repo-finders</code></span></dt><dd><p>Semicolon separated default list of finders (sources
+ for refs) to use when pulling. This can be used to disable
+ pulling from mounted filesystems, peers on the local network,
+ or the Internet. However note that it only applies when a set
+ of finders isn't explicitly specified, either by a consumer of
+ libostree API or on the command line. Possible values:
+ <code class="literal">config</code>, <code class="literal">lan</code>, and
+ <code class="literal">mount</code> (or any combination thereof). If unset, this
+ defaults to <code class="literal">config;mount;</code> (since the LAN finder is
+ costly).
+ </p></dd><dt><span class="term"><code class="varname">no-deltas-in-summary</code></span></dt><dd><p>Boolean value controlling whether OSTree should skip
+ putting an index of available deltas in the summary file. Defaults to false.
+ </p><p>
+ Since 2020.7 OSTree can use delta indexes outside the summary file,
+ making the summary file smaller (especially for larger repositories). However
+ by default we still create the index in the summary file to make older clients
+ work. If you know all clients will be 2020.7 later you can enable this to
+ save network bandwidth.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46471892902096"></a><h2>[remote "name"] Section Options</h2><p>
+ Describes a remote repository location.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="varname">url</code></span></dt><dd><p>Must be present; declares URL for accessing metadata and
+ content for remote. See also <code class="literal">contenturl</code>. The
+ supported schemes are documented below.</p></dd><dt><span class="term"><code class="varname">contenturl</code></span></dt><dd><p>Declares URL for accessing content (filez, static delta
+ parts). When specified, <code class="literal">url</code> is used just for
+ metadata: summary, static delta "superblocks".</p></dd><dt><span class="term"><code class="varname">branches</code></span></dt><dd><p>A list of strings. Represents the default configured
+ branches to fetch from the remote when no specific branches are
+ requested during a pull operation.</p></dd><dt><span class="term"><code class="varname">proxy</code></span></dt><dd><p>A string value, if given should be a URL for a
+ HTTP proxy to use for access to this repository.</p></dd><dt><span class="term"><code class="varname">gpg-verify</code></span></dt><dd><p>A boolean value, defaults to true.
+ Controls whether or not OSTree will require commits to be
+ signed by a known GPG key. For more information, see the
+ <a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a>
+ manual under GPG.</p></dd><dt><span class="term"><code class="varname">gpg-verify-summary</code></span></dt><dd><p>A boolean value, defaults to false.
+ Controls whether or not OSTree will check if the summary
+ is signed by a known GPG key.
+ For more information, see the <a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a>
+ manual under GPG.</p></dd><dt><span class="term"><code class="varname">tls-permissive</code></span></dt><dd><p>A boolean value, defaults to false. By
+ default, server TLS certificates will be checked against the
+ system certificate store. If this variable is set, any
+ certificate will be accepted.</p></dd><dt><span class="term"><code class="varname">tls-client-cert-path</code></span></dt><dd><p>Path to file for client-side certificate, to present when making requests to this repository.</p></dd><dt><span class="term"><code class="varname">tls-client-key-path</code></span></dt><dd><p>Path to file containing client-side certificate key, to present when making requests to this repository.</p></dd><dt><span class="term"><code class="varname">tls-ca-path</code></span></dt><dd><p>Path to file containing trusted anchors instead of the system CA database.</p></dd><dt><span class="term"><code class="varname">http2</code></span></dt><dd><p>A boolean value, defaults to true. By
+ default, libostree will use HTTP2; setting this to <code class="literal">false</code>
+ will disable it. May be useful to work around broken servers.
+ </p></dd><dt><span class="term"><code class="varname">unconfigured-state</code></span></dt><dd><p>If set, pulls from this remote will fail with the configured text. This is intended for OS vendors which have a subscription process to access content.</p></dd><dt><span class="term"><code class="varname">custom-backend</code></span></dt><dd><p>If set, pulls from this remote via libostree will fail with an error that mentions the value.
+ It is recommended to make this a software identifier token (e.g. "examplecorp-fetcher"), not freeform text ("ExampleCorp Fetcher").
+ This is intended to be used by higher level software that wants to fetch ostree commits via some other mechanism, while still reusing the core libostree infrastructure around e.g. signatures.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46471892966656"></a><h2>[sysroot] Section Options</h2><p>
+ Options for the sysroot, which contains the OSTree repository,
+ deployments, and stateroots. The following entries are defined:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="varname">bootloader</code></span></dt><dd><p>Configure the bootloader that OSTree uses when
+ deploying the sysroot. This may take the values
+ <code class="literal">bootloader=none</code>, <code class="literal">bootloader=auto</code>,
+ <code class="literal">bootloader=grub2</code>, <code class="literal">bootloader=syslinux</code>,
+ <code class="literal">bootloader=uboot</code> or <code class="literal">bootloader=zipl</code>.
+ Default is <code class="literal">auto</code>.
+ </p><p>
+ If <code class="literal">none</code>, then OSTree will generate only BLS (Boot
+ Loader Specification) fragments in <code class="literal">sysroot/boot/loader/entries/</code>
+ for the deployment.
+ </p><p>
+ If <code class="literal">auto</code>, then in addition to generating BLS
+ fragments, OSTree will dynamically check for the existence of grub2,
+ uboot, and syslinux bootloaders. If one of the bootloaders is found,
+ then OSTree will generate a config for the bootloader found. For
+ example, <code class="literal">grub2-mkconfig</code> is run for the grub2 case.
+ </p><p>
+ A specific bootloader type may also be explicitly requested by choosing
+ <code class="literal">grub2</code>, <code class="literal">syslinux</code>, <code class="literal">uboot</code> or
+ <code class="literal">zipl</code>.
+ </p></dd><dt><span class="term"><code class="varname">bls-append-except-default</code></span></dt><dd><p>A semicolon seperated string list of key-value pairs. For example:
+ <code class="literal">bls-append-except-default=key1=value1;key2=value2</code>. These key-value
+ pairs will be injected into the generated BLS fragments of the non-default deployments.
+ In other words, the BLS fragment of the default deployment will be unaffected by
+ <code class="literal">bls-append-except-default</code>.
+ </p></dd><dt><span class="term"><code class="varname">bootprefix</code></span></dt><dd><p>A boolean value; defaults to false. If set to true, the bootloader entries
+ generated will include <code class="literal">/boot</code> as a prefix. This will likely be turned
+ on by default in the future.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm46471893441200"></a><h2>/etc/ostree/remotes.d</h2><p>
+ In addition to the <code class="filename">/ostree/repo/config</code>
+ file, remotes may also be specified in
+ <code class="filename">/etc/ostree/remotes.d</code>. The remote
+ configuration file must end in <code class="literal">.conf</code>; files
+ whose name does not end in <code class="literal">.conf</code> will be
+ ignored.
+ </p></div><div class="refsect1"><a name="idm46471894575696"></a><h2>Repository url/contenturl</h2><p>
+ Originally, OSTree had just a <code class="literal">url</code> option
+ for remotes. Since then, the <code class="literal">contenturl</code>
+ option was introduced. Both of these support
+ <code class="literal">file</code>, <code class="literal">http</code>, and
+ <code class="literal">https</code> schemes.
+ </p><p>
+ Additionally, both of these can be prefixed with the string
+ <code class="literal">mirrorlist=</code>, which instructs the client
+ that the target url is a "mirrorlist" format, which is
+ a plain text file of newline-separated URLs. Earlier
+ URLs will be given precedence.
+ </p><p>
+ Note that currently, the <code class="literal">tls-ca-path</code> and
+ <code class="literal">tls-client-cert-path</code> options apply to every HTTP
+ request, even when <code class="literal">contenturl</code> and/or
+ <code class="literal">mirrorlist</code> are in use. This may change in the future to
+ only apply to metadata (i.e. <code class="literal">url</code>, not
+ <code class="literal">contenturl</code>) fetches.
+ </p></div><div class="refsect1"><a name="idm46471894344496"></a><h2>Per-remote GPG keyrings and verification</h2><p>
+ OSTree supports a per-remote GPG keyring, as well as a
+ <code class="literal">gpgkeypath</code> option. For more information see
+ <a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a>.
+ in the section <code class="literal">GPG verification</code>.
+ </p></div><div class="refsect1"><a name="idm46471894394336"></a><h2>Per-remote HTTP cookies</h2><p>
+ Some content providers may want to control access to remote
+ repositories via HTTP cookies. The <span class="command"><strong>ostree remote
+ add-cookie</strong></span> and <span class="command"><strong>ostree remote
+ delete-cookie</strong></span> commands will update a per-remote
+ lookaside cookie jar, named
+ <code class="filename">$remotename.cookies.txt</code>.
+ </p></div><div class="refsect1"><a name="idm46471893566112"></a><h2>See Also</h2><p>
+ <a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a>, <a href="ostree.repo.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo</span>(5)</span></a>
+ </p></div></div></body></html>
diff --git a/man/ostree.repo.html b/man/ostree.repo.html
new file mode 100644
index 00000000..bc1885ca
--- /dev/null
+++ b/man/ostree.repo.html
@@ -0,0 +1,30 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ostree.repo</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree.repo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ostree.repo &#8212; OSTree repository configuration and layout</p></div><div class="refsect1"><a name="idm46008891818320"></a><h2>Description</h2><p>
+ An OSTree repository is structurally similar to a
+ git repository; it is a content-addressed object
+ store containing filesystem trees. However, unlike
+ git, ostree is designed to store operating system
+ binaries. It records the Unix uid and gid,
+ permissions, as well as extended attributes.
+ </p><p>
+ A repository can be in one of three modes;
+ <code class="literal">bare</code>, which is designed as a hard
+ link source for operating system checkouts,
+ <code class="literal">bare-user</code>, which is like
+ <code class="literal">bare</code> but works on systems that
+ run as non-root as well as non-root containers, and
+ <code class="literal">archive-z2</code>, which is designed for
+ static HTTP servers.
+ </p><p>
+ There is a system repository located at
+ <code class="filename">/ostree/repo</code>. If no repository
+ is specified -- either by a command-line option or the
+ <code class="envar">OSTREE_REPO</code> environment variable --
+ the <span class="command"><strong>ostree</strong></span> as well as many API
+ calls will use it by default.
+ </p></div><div class="refsect1"><a name="idm46008892679600"></a><h2>Components of a repository</h2><p>
+ The only user-editable component is the
+ <code class="filename">config</code> file. For more
+ information, see <a href="ostree.repo-config.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo-config</span>(5)</span></a>.
+ </p></div><div class="refsect1"><a name="idm46008893489664"></a><h2>See Also</h2><p>
+ <a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a>, <a href="ostree.repo-config.html"><span class="citerefentry"><span class="refentrytitle">ostree.repo-config</span>(1)</span></a>
+ </p></div></div></body></html>
diff --git a/man/rofiles-fuse.html b/man/rofiles-fuse.html
new file mode 100644
index 00000000..50ce4ef1
--- /dev/null
+++ b/man/rofiles-fuse.html
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>rofiles-fuse</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="ostree"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>rofiles-fuse &#8212; Use FUSE to create a view where directories are writable, files are immutable</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">rofiles-fuse SRCDIR MNTPOINT</code> </p></div></div><div class="refsect1"><a name="idm45349829375056"></a><h2>Description</h2><p>
+ Creating a checkout from an OSTree repository by default
+ uses hard links, which means an in-place mutation to any
+ file corrupts the repository and all checkouts. This can be
+ problematic if one wishes to run arbitrary programs against
+ such a checkout. For example, RPM <code class="literal">%post</code>
+ scripts or equivalent.
+ </p><p>
+ In the case where one wants to create a tree commit derived
+ from other content, using <span class="command"><strong>rofiles-fuse</strong></span> in
+ concert with <span class="command"><strong>ostree commit
+ --link-checkout-speedup</strong></span> (or the underlying API)
+ can ensure that only new files are checksummed.
+ </p></div><div class="refsect1"><a name="idm45349828561344"></a><h2>Example: Update an OSTree commit</h2><pre class="programlisting">
+# Initialize a checkout and mount
+$ ostree --repo=repo checkout somebranch branch-checkout
+$ mkdir mnt
+$ rofiles-fuse branch-checkout mnt
+
+# Now, arbitrary changes to mnt/ are reflected in branch-checkout
+$ echo somenewcontent &gt; mnt/anewfile
+$ mkdir mnt/anewdir
+$ rm mnt/someoriginalcontent -rf
+
+# Commit and cleanup
+$ fusermount -u mnt
+$ ostree --repo=repo commit --link-checkout-speedup -b somebranch -s 'Commit new content' --tree=dir=branch-checkout
+$ rm mnt branch-checkout -rf
+ </pre></div><div class="refsect1"><a name="idm45349829458736"></a><h2>See Also</h2><p>
+ <a href="ostree.html"><span class="citerefentry"><span class="refentrytitle">ostree</span>(1)</span></a>
+ </p></div></div></body></html>
diff --git a/reference/home.png b/reference/home.png
new file mode 100644
index 00000000..9346b336
--- /dev/null
+++ b/reference/home.png
Binary files differ
diff --git a/reference/index.html b/reference/index.html
new file mode 100644
index 00000000..5b6b1092
--- /dev/null
+++ b/reference/index.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>OSTree API references: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="next" href="reference.html" title="API Reference">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">OSTree API references</p></th></tr></table></div>
+<div><p class="releaseinfo">for OSTree 2023.3</p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl class="toc">
+<dt><span class="chapter"><a href="reference.html">API Reference</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="ostree-Core-repository-independent-functions.html">Core repository-independent functions</a></span><span class="refpurpose"> — Create, validate, and convert core data types</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-OstreeRepo.html">OstreeRepo: Content-addressed object store</a></span><span class="refpurpose"> — A git-like storage system for operating system binaries</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-In-memory-modifiable-filesystem-tree.html">In-memory modifiable filesystem tree</a></span><span class="refpurpose"> — Modifiable filesystem tree</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Root-partition-mount-point.html">Root partition mount point</a></span><span class="refpurpose"> — Manage physical root filesystem</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Progress-notification-system-for-asynchronous-operations.html">Progress notification system for asynchronous operations</a></span><span class="refpurpose"> — Values representing progress</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-SELinux-policy-management.html">SELinux policy management</a></span><span class="refpurpose"> — Read SELinux policy and manage filesystem labels</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Simple-upgrade-class.html">Simple upgrade class</a></span><span class="refpurpose"> — Upgrade OSTree systems</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-GPG-signature-verification-results.html">GPG signature verification results</a></span><span class="refpurpose"> — Inspect detached GPG signatures</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Signature-management.html">Signature management</a></span><span class="refpurpose"> — Sign and verify commits</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-bootconfig-parser.html">ostree-bootconfig-parser</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-chain-input-stream.html">ostree-chain-input-stream</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-checksum-input-stream.html">ostree-checksum-input-stream</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-content-writer.html">ostree-content-writer</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-deployment.html">ostree-deployment</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-diff.html">ostree-diff</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-kernel-args.html">ostree-kernel-args</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-ref.html">ostree-ref</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-remote.html">ostree-remote</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-repo-file.html">ostree-repo-file</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-repo-finder.html">ostree-repo-finder</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-repo-remote-finder.html">ostree-repo-remote-finder</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-version.html">ostree-version</a></span><span class="refpurpose"> — ostree version checking</span>
+</dt>
+<dt><span class="index"><a href="reference.html#api-index-full">API Index</a></span></dt>
+</dl></dd>
+</dl></div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/left-insensitive.png b/reference/left-insensitive.png
new file mode 100644
index 00000000..3269393a
--- /dev/null
+++ b/reference/left-insensitive.png
Binary files differ
diff --git a/reference/left.png b/reference/left.png
new file mode 100644
index 00000000..2abde032
--- /dev/null
+++ b/reference/left.png
Binary files differ
diff --git a/reference/ostree-Core-repository-independent-functions.html b/reference/ostree-Core-repository-independent-functions.html
new file mode 100644
index 00000000..b4bb3aad
--- /dev/null
+++ b/reference/ostree-Core-repository-independent-functions.html
@@ -0,0 +1,3058 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Core repository-independent functions: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="reference.html" title="API Reference">
+<link rel="next" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-Core-repository-independent-functions.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="reference.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-OstreeRepo.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-Core-repository-independent-functions"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-Core-repository-independent-functions.top_of_page"></a>Core repository-independent functions</span></h2>
+<p>Core repository-independent functions — Create, validate, and convert core data types</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-Core-repository-independent-functions.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-IS-META:CAPS" title="OSTREE_OBJECT_TYPE_IS_META()">OSTREE_OBJECT_TYPE_IS_META</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">GVariantType</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-metadata-variant-type" title="ostree_metadata_variant_type ()">ostree_metadata_variant_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-checksum-string" title="ostree_validate_checksum_string ()">ostree_validate_checksum_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-collection-id" title="ostree_validate_collection_id ()">ostree_validate_collection_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-to-bytes" title="ostree_checksum_to_bytes ()">ostree_checksum_to_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-to-bytes-v" title="ostree_checksum_to_bytes_v ()">ostree_checksum_to_bytes_v</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-from-bytes" title="ostree_checksum_from_bytes ()">ostree_checksum_from_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-from-bytes-v" title="ostree_checksum_from_bytes_v ()">ostree_checksum_from_bytes_v</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-inplace-from-bytes" title="ostree_checksum_inplace_from_bytes ()">ostree_checksum_inplace_from_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-inplace-to-bytes" title="ostree_checksum_inplace_to_bytes ()">ostree_checksum_inplace_to_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">guchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek" title="ostree_checksum_bytes_peek ()">ostree_checksum_bytes_peek</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">guchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek-validate" title="ostree_checksum_bytes_peek_validate ()">ostree_checksum_bytes_peek_validate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-from-bytes" title="ostree_checksum_b64_from_bytes ()">ostree_checksum_b64_from_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-to-bytes" title="ostree_checksum_b64_to_bytes ()">ostree_checksum_b64_to_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-inplace-from-bytes" title="ostree_checksum_b64_inplace_from_bytes ()">ostree_checksum_b64_inplace_from_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-inplace-to-bytes" title="ostree_checksum_b64_inplace_to_bytes ()">ostree_checksum_b64_inplace_to_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-cmp-checksum-bytes" title="ostree_cmp_checksum_bytes ()">ostree_cmp_checksum_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-rev" title="ostree_validate_rev ()">ostree_validate_rev</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-remote-name" title="ostree_validate_remote_name ()">ostree_validate_remote_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-parse-refspec" title="ostree_parse_refspec ()">ostree_parse_refspec</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-type-to-string" title="ostree_object_type_to_string ()">ostree_object_type_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="returnvalue">OstreeObjectType</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-type-from-string" title="ostree_object_type_from_string ()">ostree_object_type_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-hash-object-name" title="ostree_hash_object_name ()">ostree_hash_object_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-serialize" title="ostree_object_name_serialize ()">ostree_object_name_serialize</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-deserialize" title="ostree_object_name_deserialize ()">ostree_object_name_deserialize</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-to-string" title="ostree_object_to_string ()">ostree_object_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-from-string" title="ostree_object_from_string ()">ostree_object_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-stream-parse" title="ostree_content_stream_parse ()">ostree_content_stream_parse</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-file-parse" title="ostree_content_file_parse ()">ostree_content_file_parse</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-file-parse-at" title="ostree_content_file_parse_at ()">ostree_content_file_parse_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream" title="ostree_raw_file_to_archive_z2_stream ()">ostree_raw_file_to_archive_z2_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream-with-options" title="ostree_raw_file_to_archive_z2_stream_with_options ()">ostree_raw_file_to_archive_z2_stream_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-content-stream" title="ostree_raw_file_to_content_stream ()">ostree_raw_file_to_content_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-break-hardlink" title="ostree_break_hardlink ()">ostree_break_hardlink</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-from-input" title="ostree_checksum_file_from_input ()">ostree_checksum_file_from_input</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file" title="ostree_checksum_file ()">ostree_checksum_file</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-at" title="ostree_checksum_file_at ()">ostree_checksum_file_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async" title="ostree_checksum_file_async ()">ostree_checksum_file_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async-finish" title="ostree_checksum_file_async_finish ()">ostree_checksum_file_async_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-fs-get-all-xattrs" title="ostree_fs_get_all_xattrs ()">ostree_fs_get_all_xattrs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-fs-get-all-xattrs-at" title="ostree_fs_get_all_xattrs_at ()">ostree_fs_get_all_xattrs_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-create-directory-metadata" title="ostree_create_directory_metadata ()">ostree_create_directory_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-objtype" title="ostree_validate_structureof_objtype ()">ostree_validate_structureof_objtype</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-csum-v" title="ostree_validate_structureof_csum_v ()">ostree_validate_structureof_csum_v</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-checksum-string" title="ostree_validate_structureof_checksum_string ()">ostree_validate_structureof_checksum_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-file-mode" title="ostree_validate_structureof_file_mode ()">ostree_validate_structureof_file_mode</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-commit" title="ostree_validate_structureof_commit ()">ostree_validate_structureof_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-dirtree" title="ostree_validate_structureof_dirtree ()">ostree_validate_structureof_dirtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-dirmeta" title="ostree_validate_structureof_dirmeta ()">ostree_validate_structureof_dirmeta</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-parent" title="ostree_commit_get_parent ()">ostree_commit_get_parent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint64</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-timestamp" title="ostree_commit_get_timestamp ()">ostree_commit_get_timestamp</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-metadata-for-bootable" title="ostree_commit_metadata_for_bootable ()">ostree_commit_metadata_for_bootable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-content-checksum" title="ostree_commit_get_content_checksum ()">ostree_commit_get_content_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-object-sizes" title="ostree_commit_get_object_sizes ()">ostree_commit_get_object_sizes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeCommitSizesEntry</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-new" title="ostree_commit_sizes_entry_new ()">ostree_commit_sizes_entry_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeCommitSizesEntry</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-copy" title="ostree_commit_sizes_entry_copy ()">ostree_commit_sizes_entry_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-free" title="ostree_commit_sizes_entry_free ()">ostree_commit_sizes_entry_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-check-version" title="ostree_check_version ()">ostree_check_version</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Core-repository-independent-functions.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-MAX-METADATA-SIZE:CAPS" title="OSTREE_MAX_METADATA_SIZE">OSTREE_MAX_METADATA_SIZE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-MAX-METADATA-WARN-SIZE:CAPS" title="OSTREE_MAX_METADATA_WARN_SIZE">OSTREE_MAX_METADATA_WARN_SIZE</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType">OstreeObjectType</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-LAST:CAPS" title="OSTREE_OBJECT_TYPE_LAST">OSTREE_OBJECT_TYPE_LAST</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-DIRMETA-GVARIANT-STRING:CAPS" title="OSTREE_DIRMETA_GVARIANT_STRING">OSTREE_DIRMETA_GVARIANT_STRING</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-DIRMETA-GVARIANT-FORMAT:CAPS" title="OSTREE_DIRMETA_GVARIANT_FORMAT">OSTREE_DIRMETA_GVARIANT_FORMAT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-FILEMETA-GVARIANT-STRING:CAPS" title="OSTREE_FILEMETA_GVARIANT_STRING">OSTREE_FILEMETA_GVARIANT_STRING</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-FILEMETA-GVARIANT-FORMAT:CAPS" title="OSTREE_FILEMETA_GVARIANT_FORMAT">OSTREE_FILEMETA_GVARIANT_FORMAT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-TREE-GVARIANT-STRING:CAPS" title="OSTREE_TREE_GVARIANT_STRING">OSTREE_TREE_GVARIANT_STRING</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-TREE-GVARIANT-FORMAT:CAPS" title="OSTREE_TREE_GVARIANT_FORMAT">OSTREE_TREE_GVARIANT_FORMAT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-COMMIT-GVARIANT-STRING:CAPS" title="OSTREE_COMMIT_GVARIANT_STRING">OSTREE_COMMIT_GVARIANT_STRING</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-COMMIT-GVARIANT-FORMAT:CAPS" title="OSTREE_COMMIT_GVARIANT_FORMAT">OSTREE_COMMIT_GVARIANT_FORMAT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-STRING:CAPS" title="OSTREE_SUMMARY_GVARIANT_STRING">OSTREE_SUMMARY_GVARIANT_STRING</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-FORMAT:CAPS" title="OSTREE_SUMMARY_GVARIANT_FORMAT">OSTREE_SUMMARY_GVARIANT_FORMAT</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Core-repository-independent-functions.description"></a><h2>Description</h2>
+<p>These functions implement repository-independent algorithms for
+operating on the core OSTree data formats, such as converting
+<span class="type">GFileInfo</span> into a <span class="type">GVariant</span>.</p>
+<p>There are 4 types of objects; file, dirmeta, tree, and commit. The
+last 3 are metadata, and the file object is the only content object
+type.</p>
+<p>All metadata objects are stored as <span class="type">GVariant</span> (big endian). The
+rationale for this is the same as that of the ext{2,3,4} family of
+filesystems; most developers will be using LE, and so it's better
+to continually test the BE-&gt;LE swap.</p>
+<p>The file object is a custom format in order to support streaming.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-Core-repository-independent-functions.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="OSTREE-OBJECT-TYPE-IS-META:CAPS"></a><h3>OSTREE_OBJECT_TYPE_IS_META()</h3>
+<pre class="programlisting">#define OSTREE_OBJECT_TYPE_IS_META(t) (t &gt;= 2 &amp;&amp; t &lt;= 6)
+</pre>
+<div class="refsect3">
+<a name="OSTREE-OBJECT-TYPE-IS-META.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>t</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="OSTREE-OBJECT-TYPE-IS-META.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if object type is metadata</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-metadata-variant-type"></a><h3>ostree_metadata_variant_type ()</h3>
+<pre class="programlisting">const <span class="returnvalue">GVariantType</span> *
+ostree_metadata_variant_type (<em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-checksum-string"></a><h3>ostree_validate_checksum_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_checksum_string (<em class="parameter"><code>const <span class="type">char</span> *sha256</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Use this function to see if input strings are checksums.</p>
+<div class="refsect3">
+<a name="ostree-validate-checksum-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sha256</p></td>
+<td class="parameter_description"><p>SHA256 hex string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-checksum-string.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>sha256</code></em>
+is a valid checksum string, <code class="literal">FALSE</code> otherwise</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-collection-id"></a><h3>ostree_validate_collection_id ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_collection_id (<em class="parameter"><code>const <span class="type">char</span> *collection_id</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Check whether the given <em class="parameter"><code>collection_id</code></em>
+ is valid. Return an error if it is
+invalid or <code class="literal">NULL</code>.</p>
+<p>Valid collection IDs are reverse DNS names:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>They are composed of 1 or more elements separated by a period (<code class="literal">.</code>) character.
+All elements must contain at least one character.</p></li>
+<li class="listitem"><p>Each element must only contain the ASCII characters <code class="literal">[A-Z][a-z][0-9]_</code> and must not
+begin with a digit.</p></li>
+<li class="listitem"><p>They must contain at least one <code class="literal">.</code> (period) character (and thus at least two elements).</p></li>
+<li class="listitem"><p>They must not begin with a <code class="literal">.</code> (period) character.</p></li>
+<li class="listitem"><p>They must not exceed 255 characters in length.</p></li>
+</ul></div>
+<p>(This makes their format identical to D-Bus interface names, for consistency.)</p>
+<div class="refsect3">
+<a name="ostree-validate-collection-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>collection_id</p></td>
+<td class="parameter_description"><p>A collection ID. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-collection-id.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>collection_id</code></em>
+is a valid collection ID, <code class="literal">FALSE</code> if it is invalid
+or <code class="literal">NULL</code></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-to-bytes"></a><h3>ostree_checksum_to_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">guchar</span> *
+ostree_checksum_to_bytes (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-to-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>An ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-to-bytes.returns"></a><h4>Returns</h4>
+<p>Binary checksum from <em class="parameter"><code>checksum</code></em>
+of length 32;
+free with <code class="function">g_free()</code>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-to-bytes-v"></a><h3>ostree_checksum_to_bytes_v ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_checksum_to_bytes_v (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-to-bytes-v.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>An ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-to-bytes-v.returns"></a><h4>Returns</h4>
+<p>New <span class="type">GVariant</span> of type ay with length 32. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-from-bytes"></a><h3>ostree_checksum_from_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_checksum_from_bytes (<em class="parameter"><code>const <span class="type">guchar</span> *csum</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-from-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>csum</p></td>
+<td class="parameter_description"><p>An binary checksum of length 32. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-from-bytes.returns"></a><h4>Returns</h4>
+<p>String form of <em class="parameter"><code>csum</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-from-bytes-v"></a><h3>ostree_checksum_from_bytes_v ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_checksum_from_bytes_v (<em class="parameter"><code><span class="type">GVariant</span> *csum_v</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-from-bytes-v.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>csum_v</p></td>
+<td class="parameter_description"><p><span class="type">GVariant</span> of type ay</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-from-bytes-v.returns"></a><h4>Returns</h4>
+<p>String form of <em class="parameter"><code>csum_bytes</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-inplace-from-bytes"></a><h3>ostree_checksum_inplace_from_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_checksum_inplace_from_bytes (<em class="parameter"><code>const <span class="type">guchar</span> *csum</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *buf</code></em>);</pre>
+<p>Overwrite the contents of <em class="parameter"><code>buf</code></em>
+ with stringified version of <em class="parameter"><code>csum</code></em>
+.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-checksum-inplace-from-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>csum</p></td>
+<td class="parameter_description"><p>An binary checksum of length 32. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>Output location, must be at least OSTREE_SHA256_STRING_LEN+1 bytes in length</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-inplace-to-bytes"></a><h3>ostree_checksum_inplace_to_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_checksum_inplace_to_bytes (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> *buf</code></em>);</pre>
+<p>Convert <em class="parameter"><code>checksum</code></em>
+ from a string to binary in-place, without
+allocating memory. Use this function in hot code paths.</p>
+<div class="refsect3">
+<a name="ostree-checksum-inplace-to-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>a SHA256 string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>Output buffer with at least 32 bytes of space</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-bytes-peek"></a><h3>ostree_checksum_bytes_peek ()</h3>
+<pre class="programlisting">const <span class="returnvalue">guchar</span> *
+ostree_checksum_bytes_peek (<em class="parameter"><code><span class="type">GVariant</span> *bytes</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-bytes-peek.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>bytes</p></td>
+<td class="parameter_description"><p><span class="type">GVariant</span> of type ay</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-bytes-peek.returns"></a><h4>Returns</h4>
+<p>Binary checksum data in
+<em class="parameter"><code>bytes</code></em>
+; do not free. If <em class="parameter"><code>bytes</code></em>
+does not have the correct length, return <code class="literal">NULL</code>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> guint8]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-bytes-peek-validate"></a><h3>ostree_checksum_bytes_peek_validate ()</h3>
+<pre class="programlisting">const <span class="returnvalue">guchar</span> *
+ostree_checksum_bytes_peek_validate (<em class="parameter"><code><span class="type">GVariant</span> *bytes</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek" title="ostree_checksum_bytes_peek ()"><code class="function">ostree_checksum_bytes_peek()</code></a>, but also throws <em class="parameter"><code>error</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-checksum-bytes-peek-validate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>bytes</p></td>
+<td class="parameter_description"><p><span class="type">GVariant</span> of type ay</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Errror</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-bytes-peek-validate.returns"></a><h4>Returns</h4>
+<p>Binary checksum data. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> guint8]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-b64-from-bytes"></a><h3>ostree_checksum_b64_from_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_checksum_b64_from_bytes (<em class="parameter"><code>const <span class="type">guchar</span> *csum</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-b64-from-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>csum</p></td>
+<td class="parameter_description"><p>An binary checksum of length 32. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-b64-from-bytes.returns"></a><h4>Returns</h4>
+<p>Modified base64 encoding of <em class="parameter"><code>csum</code></em>
+</p>
+<p>The "modified" term refers to the fact that instead of '/', the '_'
+character is used. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2016.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-b64-to-bytes"></a><h3>ostree_checksum_b64_to_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">guchar</span> *
+ostree_checksum_b64_to_bytes (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-checksum-b64-to-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>An ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-checksum-b64-to-bytes.returns"></a><h4>Returns</h4>
+<p>Binary version of <em class="parameter"><code>checksum</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></p>
+</div>
+<p class="since">Since: 2016.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-b64-inplace-from-bytes"></a><h3>ostree_checksum_b64_inplace_from_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_checksum_b64_inplace_from_bytes
+ (<em class="parameter"><code>const <span class="type">guchar</span> *csum</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *buf</code></em>);</pre>
+<p>Overwrite the contents of <em class="parameter"><code>buf</code></em>
+ with modified base64 encoding of <em class="parameter"><code>csum</code></em>
+.
+The "modified" term refers to the fact that instead of '/', the '_'
+character is used.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-checksum-b64-inplace-from-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>csum</p></td>
+<td class="parameter_description"><p>An binary checksum of length 32. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>Output location, must be at least 44 bytes in length</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-b64-inplace-to-bytes"></a><h3>ostree_checksum_b64_inplace_to_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_checksum_b64_inplace_to_bytes (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">guint8</span> *buf</code></em>);</pre>
+<p>Overwrite the contents of <em class="parameter"><code>buf</code></em>
+ with stringified version of <em class="parameter"><code>csum</code></em>
+.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-checksum-b64-inplace-to-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>An binary checksum of length 32. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>Output location, must be at least 45 bytes in length</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-cmp-checksum-bytes"></a><h3>ostree_cmp_checksum_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_cmp_checksum_bytes (<em class="parameter"><code>const <span class="type">guchar</span> *a</code></em>,
+ <em class="parameter"><code>const <span class="type">guchar</span> *b</code></em>);</pre>
+<p>Compare two binary checksums, using <code class="function">memcmp()</code>.</p>
+<div class="refsect3">
+<a name="ostree-cmp-checksum-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>A binary checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>A binary checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-rev"></a><h3>ostree_validate_rev ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_rev (<em class="parameter"><code>const <span class="type">char</span> *rev</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-validate-rev.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>rev</p></td>
+<td class="parameter_description"><p>A revision string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-rev.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>rev</code></em>
+is a valid ref string</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-remote-name"></a><h3>ostree_validate_remote_name ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_remote_name (<em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-validate-remote-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>A remote name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-remote-name.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>remote_name</code></em>
+is a valid remote name</p>
+</div>
+<p class="since">Since: 2017.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-parse-refspec"></a><h3>ostree_parse_refspec ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_parse_refspec (<em class="parameter"><code>const <span class="type">char</span> *refspec</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_remote</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_ref</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Split a refspec like <code class="literal">gnome-ostree:gnome-ostree/buildmain</code> or just
+<code class="literal">gnome-ostree/buildmain</code> into two parts. In the first case, <em class="parameter"><code>out_remote</code></em>
+
+will be set to <code class="literal">gnome-ostree</code>, and <em class="parameter"><code>out_ref</code></em>
+ to <code class="literal">gnome-ostree/buildmain</code>.
+In the second case (a local ref), <em class="parameter"><code>out_remote</code></em>
+ will be <code class="literal">NULL</code>, and <em class="parameter"><code>out_ref</code></em>
+
+will be <code class="literal">gnome-ostree/buildmain</code>. In both cases, <code class="literal">TRUE</code> will be returned.</p>
+<div class="refsect3">
+<a name="ostree-parse-refspec.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>refspec</p></td>
+<td class="parameter_description"><p>A "refspec" string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_remote</p></td>
+<td class="parameter_description"><p>Return location for the remote name,
+or <code class="literal">NULL</code> if the refspec refs to a local ref. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_ref</p></td>
+<td class="parameter_description"><p>Return location for the ref name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-parse-refspec.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on successful parsing, <code class="literal">FALSE</code> otherwise</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-object-type-to-string"></a><h3>ostree_object_type_to_string ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_object_type_to_string (<em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>);</pre>
+<p>Serialize <em class="parameter"><code>objtype</code></em>
+ to a string; this is used for file extensions.</p>
+<div class="refsect3">
+<a name="ostree-object-type-to-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-object-type-from-string"></a><h3>ostree_object_type_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="returnvalue">OstreeObjectType</span></a>
+ostree_object_type_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre>
+<p>The reverse of <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-type-to-string" title="ostree_object_type_to_string ()"><code class="function">ostree_object_type_to_string()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-object-type-from-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>A stringified version of <a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-hash-object-name"></a><h3>ostree_hash_object_name ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_hash_object_name (<em class="parameter"><code><span class="type">gconstpointer</span> a</code></em>);</pre>
+<p>Use this function with <span class="type">GHashTable</span> and <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-serialize" title="ostree_object_name_serialize ()"><code class="function">ostree_object_name_serialize()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-hash-object-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>A <span class="type">GVariant</span> containing a serialized object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-object-name-serialize"></a><h3>ostree_object_name_serialize ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_object_name_serialize (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-object-name-serialize.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>An ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>An object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-object-name-serialize.returns"></a><h4>Returns</h4>
+<p>A new floating <span class="type">GVariant</span> containing checksum string and objtype. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20floating"><span class="acronym">transfer floating</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-object-name-deserialize"></a><h3>ostree_object_name_deserialize ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_object_name_deserialize (<em class="parameter"><code><span class="type">GVariant</span> *variant</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> **out_checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> *out_objtype</code></em>);</pre>
+<p>Reverse <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-serialize" title="ostree_object_name_serialize ()"><code class="function">ostree_object_name_serialize()</code></a>. Note that <em class="parameter"><code>out_checksum</code></em>
+ is
+only valid for the lifetime of <em class="parameter"><code>variant</code></em>
+, and must not be freed.</p>
+<div class="refsect3">
+<a name="ostree-object-name-deserialize.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>variant</p></td>
+<td class="parameter_description"><p>A <span class="type">GVariant</span> of type (su)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_checksum</p></td>
+<td class="parameter_description"><p>Pointer into string memory of <em class="parameter"><code>variant</code></em>
+with checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objtype</p></td>
+<td class="parameter_description"><p>Return object type. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-object-to-string"></a><h3>ostree_object_to_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_object_to_string (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-object-to-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>An ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-object-to-string.returns"></a><h4>Returns</h4>
+<p> A string containing both <em class="parameter"><code>checksum</code></em>
+and a stringifed version of <em class="parameter"><code>objtype</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-object-from-string"></a><h3>ostree_object_from_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_object_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
+ <em class="parameter"><code><span class="type">gchar</span> **out_checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> *out_objtype</code></em>);</pre>
+<p>Reverse <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-to-string" title="ostree_object_to_string ()"><code class="function">ostree_object_to_string()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-object-from-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>An ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_checksum</p></td>
+<td class="parameter_description"><p>Parsed checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objtype</p></td>
+<td class="parameter_description"><p>Parsed object type. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-content-stream-parse"></a><h3>ostree_content_stream_parse ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_content_stream_parse (<em class="parameter"><code><span class="type">gboolean</span> compressed</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> input_length</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> trusted</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> **out_file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>The reverse of <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-content-stream" title="ostree_raw_file_to_content_stream ()"><code class="function">ostree_raw_file_to_content_stream()</code></a>; this function
+converts an object content stream back into components.</p>
+<div class="refsect3">
+<a name="ostree-content-stream-parse.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>compressed</p></td>
+<td class="parameter_description"><p>Whether or not the stream is zlib-compressed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>input</p></td>
+<td class="parameter_description"><p>Object content stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>input_length</p></td>
+<td class="parameter_description"><p>Length of stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>trusted</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, assume the content has been validated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>The raw file content stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_file_info</p></td>
+<td class="parameter_description"><p>Normal metadata. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-content-file-parse"></a><h3>ostree_content_file_parse ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_content_file_parse (<em class="parameter"><code><span class="type">gboolean</span> compressed</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *content_path</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> trusted</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> **out_file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>A thin wrapper for <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-stream-parse" title="ostree_content_stream_parse ()"><code class="function">ostree_content_stream_parse()</code></a>; this function
+converts an object content stream back into components.</p>
+<div class="refsect3">
+<a name="ostree-content-file-parse.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>compressed</p></td>
+<td class="parameter_description"><p>Whether or not the stream is zlib-compressed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>content_path</p></td>
+<td class="parameter_description"><p>Path to file containing content</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>trusted</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, assume the content has been validated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>The raw file content stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_file_info</p></td>
+<td class="parameter_description"><p>Normal metadata. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-content-file-parse-at"></a><h3>ostree_content_file_parse_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_content_file_parse_at (<em class="parameter"><code><span class="type">gboolean</span> compressed</code></em>,
+ <em class="parameter"><code><span class="type">int</span> parent_dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> trusted</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> **out_file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>A thin wrapper for <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-stream-parse" title="ostree_content_stream_parse ()"><code class="function">ostree_content_stream_parse()</code></a>; this function
+converts an object content stream back into components.</p>
+<div class="refsect3">
+<a name="ostree-content-file-parse-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>compressed</p></td>
+<td class="parameter_description"><p>Whether or not the stream is zlib-compressed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent_dfd</p></td>
+<td class="parameter_description"><p>Directory file descriptor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Subpath</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>trusted</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, assume the content has been validated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>The raw file content stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_file_info</p></td>
+<td class="parameter_description"><p>Normal metadata. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-raw-file-to-archive-z2-stream"></a><h3>ostree_raw_file_to_archive_z2_stream ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_raw_file_to_archive_z2_stream (<em class="parameter"><code><span class="type">GInputStream</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Convert from a "bare" file representation into an
+OSTREE_OBJECT_TYPE_FILE stream suitable for ostree pull.</p>
+<div class="refsect3">
+<a name="ostree-raw-file-to-archive-z2-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>input</p></td>
+<td class="parameter_description"><p>File raw content stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file_info</p></td>
+<td class="parameter_description"><p>A file info</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Optional extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>Serialized object stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-raw-file-to-archive-z2-stream-with-options"></a><h3>ostree_raw_file_to_archive_z2_stream_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_raw_file_to_archive_z2_stream_with_options
+ (<em class="parameter"><code><span class="type">GInputStream</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream" title="ostree_raw_file_to_archive_z2_stream ()"><code class="function">ostree_raw_file_to_archive_z2_stream()</code></a>, but supports an extensible set
+of flags. The following flags are currently defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">compression-level</code> (<code class="literal">i</code>): Level of compression to use, 0–9, with 0 being
+the least compression, and &lt;0 giving the default level (currently 6).</p></li></ul></div>
+<div class="refsect3">
+<a name="ostree-raw-file-to-archive-z2-stream-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>input</p></td>
+<td class="parameter_description"><p>File raw content stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file_info</p></td>
+<td class="parameter_description"><p>A file info</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Optional extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>A GVariant <code class="literal">a{sv}</code> with an extensible set of flags. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>Serialized object stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-raw-file-to-content-stream"></a><h3>ostree_raw_file_to_content_stream ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_raw_file_to_content_stream (<em class="parameter"><code><span class="type">GInputStream</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_length</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Convert from a "bare" file representation into an
+OSTREE_OBJECT_TYPE_FILE stream. This is a fundamental operation
+for writing data to an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>.</p>
+<div class="refsect3">
+<a name="ostree-raw-file-to-content-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>input</p></td>
+<td class="parameter_description"><p>File raw content stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file_info</p></td>
+<td class="parameter_description"><p>A file info</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Optional extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>Serialized object stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_length</p></td>
+<td class="parameter_description"><p>Length of stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-break-hardlink"></a><h3>ostree_break_hardlink ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_break_hardlink (<em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> skip_xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>In many cases using libostree, a program may need to "break"
+hardlinks by performing a copy. For example, in order to
+logically append to a file.</p>
+<p>This function performs full copying, including e.g. extended
+attributes and permissions of both regular files and symbolic links.</p>
+<p>If the file is not hardlinked, this function does nothing and
+returns successfully.</p>
+<p>This function does not perform synchronization via <code class="literal"><code class="function">fsync()</code></code> or
+<code class="literal"><code class="function">fdatasync()</code></code>; the idea is this will commonly be done as part
+of an <code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a></code>, which itself takes
+care of synchronization.</p>
+<div class="refsect3">
+<a name="ostree-break-hardlink.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory fd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path relative to <em class="parameter"><code>dfd</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>skip_xattrs</p></td>
+<td class="parameter_description"><p>Do not copy extended attributes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-file-from-input"></a><h3>ostree_checksum_file_from_input ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_checksum_file_from_input (<em class="parameter"><code><span class="type">GFileInfo</span> *file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *in</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Compute the OSTree checksum for a given input.</p>
+<div class="refsect3">
+<a name="ostree-checksum-file-from-input.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>file_info</p></td>
+<td class="parameter_description"><p>File information</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Optional extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in</p></td>
+<td class="parameter_description"><p>File content, should be <code class="literal">NULL</code> for symbolic links. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>Return location for binary checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-file"></a><h3>ostree_checksum_file ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_checksum_file (<em class="parameter"><code><span class="type">GFile</span> *f</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Compute the OSTree checksum for a given file.</p>
+<div class="refsect3">
+<a name="ostree-checksum-file.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>f</p></td>
+<td class="parameter_description"><p>File path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>Return location for binary checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-file-at"></a><h3>ostree_checksum_file_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_checksum_file_at (<em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">struct stat</span> *stbuf</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code><span class="type">OstreeChecksumFlags</span> flags</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Compute the OSTree checksum for a given file. This is an fd-relative version
+of <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file" title="ostree_checksum_file ()"><code class="function">ostree_checksum_file()</code></a> which also takes flags and fills in a caller
+allocated buffer.</p>
+<div class="refsect3">
+<a name="ostree-checksum-file-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory file descriptor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Subpath</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stbuf (allow-none)</p></td>
+<td class="parameter_description"><p>Optional stat buffer</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_checksum (out) (transfer full)</p></td>
+<td class="parameter_description"><p>Return location for hex checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-file-async"></a><h3>ostree_checksum_file_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_checksum_file_async (<em class="parameter"><code><span class="type">GFile</span> *f</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code><span class="type">int</span> io_priority</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Asynchronously compute the OSTree checksum for a given file;
+complete with <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async-finish" title="ostree_checksum_file_async_finish ()"><code class="function">ostree_checksum_file_async_finish()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-checksum-file-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>f</p></td>
+<td class="parameter_description"><p>File path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>io_priority</p></td>
+<td class="parameter_description"><p>Priority for operation, see <code class="literal">G_IO_PRIORITY_DEFAULT</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>Invoked when operation is complete</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>Data for <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-checksum-file-async-finish"></a><h3>ostree_checksum_file_async_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_checksum_file_async_finish (<em class="parameter"><code><span class="type">GFile</span> *f</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Finish computing the OSTree checksum for a given file; see
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async" title="ostree_checksum_file_async ()"><code class="function">ostree_checksum_file_async()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-checksum-file-async-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>f</p></td>
+<td class="parameter_description"><p>File path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>Async result</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>Return location for binary checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-fs-get-all-xattrs"></a><h3>ostree_fs_get_all_xattrs ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_fs_get_all_xattrs (<em class="parameter"><code><span class="type">int</span> fd</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Retrieve all extended attributes in a canonical (sorted) order from
+the given file descriptor.</p>
+<div class="refsect3">
+<a name="ostree-fs-get-all-xattrs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>fd</p></td>
+<td class="parameter_description"><p>File descriptor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-fs-get-all-xattrs.returns"></a><h4>Returns</h4>
+<p>A GVariant of type <code class="literal">a(ayay)</code>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-fs-get-all-xattrs-at"></a><h3>ostree_fs_get_all_xattrs_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_fs_get_all_xattrs_at (<em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Retrieve all extended attributes in a canonical (sorted) order from
+the given path, relative to the provided directory file descriptor.
+The target path will not be dereferenced. Currently on Linux, this
+API must be used currently to retrieve extended attributes
+for symbolic links because while <code class="literal">O_PATH</code> exists, it cannot be used
+with <code class="literal"><code class="function">fgetxattr()</code></code>.</p>
+<div class="refsect3">
+<a name="ostree-fs-get-all-xattrs-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory file descriptor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Filesystem path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-fs-get-all-xattrs-at.returns"></a><h4>Returns</h4>
+<p>A GVariant of type <code class="literal">a(ayay)</code>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-create-directory-metadata"></a><h3>ostree_create_directory_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_create_directory_metadata (<em class="parameter"><code><span class="type">GFileInfo</span> *dir_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-create-directory-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dir_info</p></td>
+<td class="parameter_description"><p>a <span class="type">GFileInfo</span> containing directory information</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Optional extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-create-directory-metadata.returns"></a><h4>Returns</h4>
+<p>A new <span class="type">GVariant</span> containing <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-META:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_DIR_META</code></a>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-objtype"></a><h3>ostree_validate_structureof_objtype ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_objtype (<em class="parameter"><code><span class="type">guchar</span> objtype</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-validate-structureof-objtype.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-objtype.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>objtype</code></em>
+represents a valid object type</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-csum-v"></a><h3>ostree_validate_structureof_csum_v ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_csum_v (<em class="parameter"><code><span class="type">GVariant</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-validate-structureof-csum-v.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>a <span class="type">GVariant</span> of type "ay"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-csum-v.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>checksum</code></em>
+is a valid binary SHA256 checksum</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-checksum-string"></a><h3>ostree_validate_structureof_checksum_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_checksum_string
+ (<em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-validate-structureof-checksum-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>an ASCII string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-checksum-string.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>checksum</code></em>
+is a valid ASCII SHA256 checksum</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-file-mode"></a><h3>ostree_validate_structureof_file_mode ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_file_mode (<em class="parameter"><code><span class="type">guint32</span> mode</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-validate-structureof-file-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>A Unix filesystem mode</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-file-mode.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>mode</code></em>
+represents a valid file type and permissions</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-commit"></a><h3>ostree_validate_structureof_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_commit (<em class="parameter"><code><span class="type">GVariant</span> *commit</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Use this to validate the basic structure of <em class="parameter"><code>commit</code></em>
+, independent of
+any other objects it references.</p>
+<div class="refsect3">
+<a name="ostree-validate-structureof-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>commit</p></td>
+<td class="parameter_description"><p>A commit object, <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-COMMIT:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_COMMIT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-commit.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>commit</code></em>
+is structurally valid</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-dirtree"></a><h3>ostree_validate_structureof_dirtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_dirtree (<em class="parameter"><code><span class="type">GVariant</span> *dirtree</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Use this to validate the basic structure of <em class="parameter"><code>dirtree</code></em>
+, independent of
+any other objects it references.</p>
+<div class="refsect3">
+<a name="ostree-validate-structureof-dirtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dirtree</p></td>
+<td class="parameter_description"><p>A dirtree object, <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-TREE:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_DIR_TREE</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-dirtree.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>dirtree</code></em>
+is structurally valid</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-validate-structureof-dirmeta"></a><h3>ostree_validate_structureof_dirmeta ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_validate_structureof_dirmeta (<em class="parameter"><code><span class="type">GVariant</span> *dirmeta</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Use this to validate the basic structure of <em class="parameter"><code>dirmeta</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-validate-structureof-dirmeta.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dirmeta</p></td>
+<td class="parameter_description"><p>A dirmeta object, <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-META:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_DIR_META</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-validate-structureof-dirmeta.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>dirmeta</code></em>
+is structurally valid</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-get-parent"></a><h3>ostree_commit_get_parent ()</h3>
+<pre class="programlisting"><span class="returnvalue">gchar</span> *
+ostree_commit_get_parent (<em class="parameter"><code><span class="type">GVariant</span> *commit_variant</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-commit-get-parent.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>commit_variant</p></td>
+<td class="parameter_description"><p>Variant of type <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-COMMIT:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_COMMIT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-commit-get-parent.returns"></a><h4>Returns</h4>
+<p>Checksum of the parent commit of <em class="parameter"><code>commit_variant</code></em>
+, or <code class="literal">NULL</code>
+if none. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-get-timestamp"></a><h3>ostree_commit_get_timestamp ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint64</span>
+ostree_commit_get_timestamp (<em class="parameter"><code><span class="type">GVariant</span> *commit_variant</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-commit-get-timestamp.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>commit_variant</p></td>
+<td class="parameter_description"><p>Commit object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-commit-get-timestamp.returns"></a><h4>Returns</h4>
+<p> timestamp in seconds since the Unix epoch, UTC</p>
+</div>
+<p class="since">Since: 2016.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-metadata-for-bootable"></a><h3>ostree_commit_metadata_for_bootable ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_commit_metadata_for_bootable (<em class="parameter"><code><span class="type">GFile</span> *root</code></em>,
+ <em class="parameter"><code><span class="type">GVariantDict</span> *dict</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Update provided <em class="parameter"><code>dict</code></em>
+ with standard metadata for bootable OSTree commits.</p>
+<div class="refsect3">
+<a name="ostree-commit-metadata-for-bootable.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>root</p></td>
+<td class="parameter_description"><p>Root filesystem to be committed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dict</p></td>
+<td class="parameter_description"><p>Dictionary to update</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2021.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-get-content-checksum"></a><h3>ostree_commit_get_content_checksum ()</h3>
+<pre class="programlisting"><span class="returnvalue">gchar</span> *
+ostree_commit_get_content_checksum (<em class="parameter"><code><span class="type">GVariant</span> *commit_variant</code></em>);</pre>
+<p>There are use cases where one wants a checksum just of the content of a
+commit. OSTree commits by default capture the current timestamp, and may have
+additional metadata, which means that re-committing identical content
+often results in a new checksum.</p>
+<p>By comparing checksums of content, it's possible to easily distinguish
+cases where nothing actually changed.</p>
+<p>The content checksums is simply defined as <code class="literal">SHA256(root dirtree_checksum ||
+root_dirmeta_checksum)</code>, i.e. the SHA-256 of the root "dirtree" object's checksum concatenated
+with the root "dirmeta" checksum (both in binary form, not hexadecimal).</p>
+<div class="refsect3">
+<a name="ostree-commit-get-content-checksum.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>commit_variant</p></td>
+<td class="parameter_description"><p>A commit object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-commit-get-content-checksum.returns"></a><h4>Returns</h4>
+<p>A SHA-256 hex string, or <code class="literal">NULL</code> if <em class="parameter"><code>commit_variant</code></em>
+is not well-formed. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-get-object-sizes"></a><h3>ostree_commit_get_object_sizes ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_commit_get_object_sizes (<em class="parameter"><code><span class="type">GVariant</span> *commit_variant</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> **out_sizes_entries</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Reads a commit's "ostree.sizes" metadata and returns an array of
+<span class="type">OstreeCommitSizesEntry</span> in <em class="parameter"><code>out_sizes_entries</code></em>
+. Each element
+represents an object in the commit. If the commit does not contain
+the "ostree.sizes" metadata, a <code class="literal">G_IO_ERROR_NOT_FOUND</code> error will be
+returned.</p>
+<div class="refsect3">
+<a name="ostree-commit-get-object-sizes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>commit_variant</p></td>
+<td class="parameter_description"><p>variant of type <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-COMMIT:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_COMMIT</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_sizes_entries</p></td>
+<td class="parameter_description"><p>return location for an array of object size entries. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeCommitSizesEntry][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-sizes-entry-new"></a><h3>ostree_commit_sizes_entry_new ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeCommitSizesEntry</span> *
+ostree_commit_sizes_entry_new (<em class="parameter"><code>const <span class="type">gchar</span> *checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> unpacked</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> archived</code></em>);</pre>
+<p>Create a new <span class="type">OstreeCommitSizesEntry</span> for representing an object in a
+commit's "ostree.sizes" metadata.</p>
+<div class="refsect3">
+<a name="ostree-commit-sizes-entry-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>object checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>unpacked</p></td>
+<td class="parameter_description"><p>unpacked object size</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>archived</p></td>
+<td class="parameter_description"><p>compressed object size</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-commit-sizes-entry-new.returns"></a><h4>Returns</h4>
+<p>a new <span class="type">OstreeCommitSizesEntry</span>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-sizes-entry-copy"></a><h3>ostree_commit_sizes_entry_copy ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeCommitSizesEntry</span> *
+ostree_commit_sizes_entry_copy (<em class="parameter"><code>const <span class="type">OstreeCommitSizesEntry</span> *entry</code></em>);</pre>
+<p>Create a copy of the given <em class="parameter"><code>entry</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-commit-sizes-entry-copy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>entry</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeCommitSizesEntry</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-commit-sizes-entry-copy.returns"></a><h4>Returns</h4>
+<p>a new copy of <em class="parameter"><code>entry</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-commit-sizes-entry-free"></a><h3>ostree_commit_sizes_entry_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_commit_sizes_entry_free (<em class="parameter"><code><span class="type">OstreeCommitSizesEntry</span> *entry</code></em>);</pre>
+<p>Free given <em class="parameter"><code>entry</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-commit-sizes-entry-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>entry</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeCommitSizesEntry</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-check-version"></a><h3>ostree_check_version ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_check_version (<em class="parameter"><code><span class="type">guint</span> required_year</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> required_release</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-check-version.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>required_year</p></td>
+<td class="parameter_description"><p>Major/year required</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>required_release</p></td>
+<td class="parameter_description"><p>Release version required</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-check-version.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if current libostree has at least the requested version, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2017.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-Core-repository-independent-functions.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OSTREE-MAX-METADATA-SIZE:CAPS"></a><h3>OSTREE_MAX_METADATA_SIZE</h3>
+<pre class="programlisting">#define OSTREE_MAX_METADATA_SIZE (10 * 1024 * 1024)
+</pre>
+<p>Default limit for maximum permitted size in bytes of metadata objects fetched
+over HTTP (including repo/config files, refs, and commit/dirtree/dirmeta
+objects). This is an arbitrary number intended to mitigate disk space
+exhaustion attacks.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-MAX-METADATA-WARN-SIZE:CAPS"></a><h3>OSTREE_MAX_METADATA_WARN_SIZE</h3>
+<pre class="programlisting">#define OSTREE_MAX_METADATA_WARN_SIZE (7 * 1024 * 1024)
+</pre>
+<p>This variable is no longer meaningful, it is kept only for compatibility.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeObjectType"></a><h3>enum OstreeObjectType</h3>
+<p>Enumeration for core object types; <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-FILE:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_FILE</code></a> is for
+content, the other types are metadata.</p>
+<div class="refsect3">
+<a name="OstreeObjectType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-FILE:CAPS"></a>OSTREE_OBJECT_TYPE_FILE</p></td>
+<td class="enum_member_description">
+<p>Content; regular file, symbolic link</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-DIR-TREE:CAPS"></a>OSTREE_OBJECT_TYPE_DIR_TREE</p></td>
+<td class="enum_member_description">
+<p>List of children (trees or files), and metadata</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-DIR-META:CAPS"></a>OSTREE_OBJECT_TYPE_DIR_META</p></td>
+<td class="enum_member_description">
+<p>Directory metadata</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-COMMIT:CAPS"></a>OSTREE_OBJECT_TYPE_COMMIT</p></td>
+<td class="enum_member_description">
+<p>Toplevel object, refers to tree and dirmeta for root</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-TOMBSTONE-COMMIT:CAPS"></a>OSTREE_OBJECT_TYPE_TOMBSTONE_COMMIT</p></td>
+<td class="enum_member_description">
+<p>Toplevel object, refers to a deleted commit</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-COMMIT-META:CAPS"></a>OSTREE_OBJECT_TYPE_COMMIT_META</p></td>
+<td class="enum_member_description">
+<p>Detached metadata for a commit</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-PAYLOAD-LINK:CAPS"></a>OSTREE_OBJECT_TYPE_PAYLOAD_LINK</p></td>
+<td class="enum_member_description">
+<p>Symlink to a .file given its checksum on the payload only.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-FILE-XATTRS:CAPS"></a>OSTREE_OBJECT_TYPE_FILE_XATTRS</p></td>
+<td class="enum_member_description">
+<p>Detached xattrs content, for 'bare-split-xattrs' mode.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-OBJECT-TYPE-FILE-XATTRS-LINK:CAPS"></a>OSTREE_OBJECT_TYPE_FILE_XATTRS_LINK</p></td>
+<td class="enum_member_description">
+<p>Hardlink to a .file-xattrs given the checksum of its .file
+object.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-OBJECT-TYPE-LAST:CAPS"></a><h3>OSTREE_OBJECT_TYPE_LAST</h3>
+<pre class="programlisting">#define OSTREE_OBJECT_TYPE_LAST OSTREE_OBJECT_TYPE_FILE_XATTRS_LINK
+</pre>
+<p>Last valid object type; use this to validate ranges.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-DIRMETA-GVARIANT-STRING:CAPS"></a><h3>OSTREE_DIRMETA_GVARIANT_STRING</h3>
+<pre class="programlisting">#define OSTREE_DIRMETA_GVARIANT_STRING "(uuua(ayay))"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-DIRMETA-GVARIANT-FORMAT:CAPS"></a><h3>OSTREE_DIRMETA_GVARIANT_FORMAT</h3>
+<pre class="programlisting">#define OSTREE_DIRMETA_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_DIRMETA_GVARIANT_STRING)
+</pre>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>u - uid (big-endian)</p></li>
+<li class="listitem"><p>u - gid (big-endian)</p></li>
+<li class="listitem"><p>u - mode (big-endian)</p></li>
+<li class="listitem"><p>a(ayay) - xattrs</p></li>
+</ul></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-FILEMETA-GVARIANT-STRING:CAPS"></a><h3>OSTREE_FILEMETA_GVARIANT_STRING</h3>
+<pre class="programlisting">#define OSTREE_FILEMETA_GVARIANT_STRING "(uuua(ayay))"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-FILEMETA-GVARIANT-FORMAT:CAPS"></a><h3>OSTREE_FILEMETA_GVARIANT_FORMAT</h3>
+<pre class="programlisting">#define OSTREE_FILEMETA_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_FILEMETA_GVARIANT_STRING)
+</pre>
+<p>This is not a regular object type, but used as an xattr on a .file object
+in bare-user repositories. This allows us to store metadata information that we
+can't store in the real filesystem but we can still use a regular .file object
+that we can hardlink to in the case of a user-mode checkout.</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>u - uid (big-endian)</p></li>
+<li class="listitem"><p>u - gid (big-endian)</p></li>
+<li class="listitem"><p>u - mode (big-endian)</p></li>
+<li class="listitem"><p>a(ayay) - xattrs</p></li>
+</ul></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-TREE-GVARIANT-STRING:CAPS"></a><h3>OSTREE_TREE_GVARIANT_STRING</h3>
+<pre class="programlisting">#define OSTREE_TREE_GVARIANT_STRING "(a(say)a(sayay))"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-TREE-GVARIANT-FORMAT:CAPS"></a><h3>OSTREE_TREE_GVARIANT_FORMAT</h3>
+<pre class="programlisting">#define OSTREE_TREE_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_TREE_GVARIANT_STRING)
+</pre>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>a(say) - array of (filename, checksum) for files</p></li>
+<li class="listitem"><p>a(sayay) - array of (dirname, tree_checksum, meta_checksum) for directories</p></li>
+</ul></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-COMMIT-GVARIANT-STRING:CAPS"></a><h3>OSTREE_COMMIT_GVARIANT_STRING</h3>
+<pre class="programlisting">#define OSTREE_COMMIT_GVARIANT_STRING "(a{sv}aya(say)sstayay)"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-COMMIT-GVARIANT-FORMAT:CAPS"></a><h3>OSTREE_COMMIT_GVARIANT_FORMAT</h3>
+<pre class="programlisting">#define OSTREE_COMMIT_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_COMMIT_GVARIANT_STRING)
+</pre>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>a{sv} - Metadata</p></li>
+<li class="listitem"><p>ay - parent checksum (empty string for initial)</p></li>
+<li class="listitem"><p>a(say) - Related objects</p></li>
+<li class="listitem"><p>s - subject</p></li>
+<li class="listitem"><p>s - body</p></li>
+<li class="listitem"><p>t - Timestamp in seconds since the epoch (UTC, big-endian)</p></li>
+<li class="listitem"><p>ay - Root tree contents</p></li>
+<li class="listitem"><p>ay - Root tree metadata</p></li>
+</ul></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-SUMMARY-GVARIANT-STRING:CAPS"></a><h3>OSTREE_SUMMARY_GVARIANT_STRING</h3>
+<pre class="programlisting">#define OSTREE_SUMMARY_GVARIANT_STRING "(a(s(taya{sv}))a{sv})"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-SUMMARY-GVARIANT-FORMAT:CAPS"></a><h3>OSTREE_SUMMARY_GVARIANT_FORMAT</h3>
+<pre class="programlisting">#define OSTREE_SUMMARY_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_SUMMARY_GVARIANT_STRING)
+</pre>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>a(s(taya{sv})) - Map of ref name -&gt; (latest commit size, latest commit checksum, additional
+metadata), sorted by ref name</p></li>
+<li class="listitem">
+<p>a{sv} - Additional metadata, at the current time the following are defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem"><p>key: "ostree.static-deltas", value: a{sv}, static delta name -&gt; 32 bytes of checksum</p></li>
+<li class="listitem"><p>key: "ostree.summary.last-modified", value: t, timestamp (seconds since
+the Unix epoch in UTC, big-endian) when the summary was last regenerated
+(similar to the HTTP <code class="literal">Last-Modified</code> header)</p></li>
+<li class="listitem"><p>key: "ostree.summary.expires", value: t, timestamp (seconds since the
+Unix epoch in UTC, big-endian) after which the summary is considered
+stale and should be re-downloaded if possible (similar to the HTTP
+<code class="literal">Expires</code> header)</p></li>
+</ul></div>
+</li>
+</ul></div>
+<p>The currently defined keys for the <code class="literal">a{sv}</code> of additional metadata for each commit are:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>key: <code class="literal">ostree.commit.timestamp</code>, value: <code class="literal">t</code>, timestamp (seconds since the
+Unix epoch in UTC, big-endian) when the commit was committed</p></li>
+<li class="listitem"><p>key: <code class="literal">ostree.commit.version</code>, value: <code class="literal">s</code>, the <code class="literal">version</code> value from the
+commit's metadata if it was defined. Since: 2022.2</p></li>
+</ul></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-GPG-signature-verification-results.html b/reference/ostree-GPG-signature-verification-results.html
new file mode 100644
index 00000000..fae0c552
--- /dev/null
+++ b/reference/ostree-GPG-signature-verification-results.html
@@ -0,0 +1,757 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GPG signature verification results: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">
+<link rel="next" href="ostree-Signature-management.html" title="Signature management">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-GPG-signature-verification-results.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-Simple-upgrade-class.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-Signature-management.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-GPG-signature-verification-results"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-GPG-signature-verification-results.top_of_page"></a>GPG signature verification results</span></h2>
+<p>GPG signature verification results — Inspect detached GPG signatures</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-GPG-signature-verification-results.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all" title="ostree_gpg_verify_result_count_all ()">ostree_gpg_verify_result_count_all</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-valid" title="ostree_gpg_verify_result_count_valid ()">ostree_gpg_verify_result_count_valid</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-lookup" title="ostree_gpg_verify_result_lookup ()">ostree_gpg_verify_result_lookup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get" title="ostree_gpg_verify_result_get ()">ostree_gpg_verify_result_get</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get-all" title="ostree_gpg_verify_result_get_all ()">ostree_gpg_verify_result_get_all</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe" title="ostree_gpg_verify_result_describe ()">ostree_gpg_verify_result_describe</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe-variant" title="ostree_gpg_verify_result_describe_variant ()">ostree_gpg_verify_result_describe_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-require-valid-signature" title="ostree_gpg_verify_result_require_valid_signature ()">ostree_gpg_verify_result_require_valid_signature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-GPG-signature-verification-results.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgError" title="enum OstreeGpgError">OstreeGpgError</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult">OstreeGpgVerifyResult</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr">OstreeGpgSignatureAttr</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureFormatFlags" title="enum OstreeGpgSignatureFormatFlags">OstreeGpgSignatureFormatFlags</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-GPG-signature-verification-results.description"></a><h2>Description</h2>
+<p><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> contains verification details for GPG signatures
+read from a detached <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> metadata object.</p>
+<p>Use <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all" title="ostree_gpg_verify_result_count_all ()"><code class="function">ostree_gpg_verify_result_count_all()</code></a> and
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-valid" title="ostree_gpg_verify_result_count_valid ()"><code class="function">ostree_gpg_verify_result_count_valid()</code></a> to quickly check overall signature
+validity.</p>
+<p>Use <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-lookup" title="ostree_gpg_verify_result_lookup ()"><code class="function">ostree_gpg_verify_result_lookup()</code></a> to find a signature by the key ID
+or fingerprint of the signing key.</p>
+<p>For more in-depth inspection, such as presenting signature details to the
+user, pass an array of attribute values to <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get" title="ostree_gpg_verify_result_get ()"><code class="function">ostree_gpg_verify_result_get()</code></a>
+or get all signature details with <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get-all" title="ostree_gpg_verify_result_get_all ()"><code class="function">ostree_gpg_verify_result_get_all()</code></a>.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-GPG-signature-verification-results.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-count-all"></a><h3>ostree_gpg_verify_result_count_all ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_gpg_verify_result_count_all (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>);</pre>
+<p>Counts all the signatures in <em class="parameter"><code>result</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-count-all.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-count-all.returns"></a><h4>Returns</h4>
+<p> signature count</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-count-valid"></a><h3>ostree_gpg_verify_result_count_valid ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_gpg_verify_result_count_valid (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>);</pre>
+<p>Counts only the valid signatures in <em class="parameter"><code>result</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-count-valid.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-count-valid.returns"></a><h4>Returns</h4>
+<p> valid signature count</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-lookup"></a><h3>ostree_gpg_verify_result_lookup ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_gpg_verify_result_lookup (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *key_id</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> *out_signature_index</code></em>);</pre>
+<p>Searches <em class="parameter"><code>result</code></em>
+ for a signature signed by <em class="parameter"><code>key_id</code></em>
+. If a match is found,
+the function returns <code class="literal">TRUE</code> and sets <em class="parameter"><code>out_signature_index</code></em>
+ so that further
+signature details can be obtained through <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get" title="ostree_gpg_verify_result_get ()"><code class="function">ostree_gpg_verify_result_get()</code></a>.
+If no match is found, the function returns <code class="literal">FALSE</code> and leaves
+<em class="parameter"><code>out_signature_index</code></em>
+ unchanged.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-lookup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_id</p></td>
+<td class="parameter_description"><p>a GPG key ID or fingerprint</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_signature_index</p></td>
+<td class="parameter_description"><p>return location for the index of the signature
+signed by <em class="parameter"><code>key_id</code></em>
+, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-lookup.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-get"></a><h3>ostree_gpg_verify_result_get ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_gpg_verify_result_get (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> signature_index</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr"><span class="type">OstreeGpgSignatureAttr</span></a> *attrs</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> n_attrs</code></em>);</pre>
+<p>Builds a <span class="type">GVariant</span> tuple of requested attributes for the GPG signature at
+<em class="parameter"><code>signature_index</code></em>
+ in <em class="parameter"><code>result</code></em>
+. See the <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr"><span class="type">OstreeGpgSignatureAttr</span></a> description
+for the <span class="type">GVariantType</span> of each available attribute.</p>
+<p>It is a programmer error to request an invalid <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr"><span class="type">OstreeGpgSignatureAttr</span></a> or
+an invalid <em class="parameter"><code>signature_index</code></em>
+. Use <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all" title="ostree_gpg_verify_result_count_all ()"><code class="function">ostree_gpg_verify_result_count_all()</code></a> to
+find the number of signatures in <em class="parameter"><code>result</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-get.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signature_index</p></td>
+<td class="parameter_description"><p>which signature to get attributes from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>attrs</p></td>
+<td class="parameter_description"><p>Array of requested attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> length=n_attrs]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n_attrs</p></td>
+<td class="parameter_description"><p>Length of the <em class="parameter"><code>attrs</code></em>
+array</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-get.returns"></a><h4>Returns</h4>
+<p>a new, floating, <span class="type">GVariant</span> tuple. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20floating"><span class="acronym">transfer floating</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-get-all"></a><h3>ostree_gpg_verify_result_get_all ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_gpg_verify_result_get_all (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> signature_index</code></em>);</pre>
+<p>Builds a <span class="type">GVariant</span> tuple of all available attributes for the GPG signature
+at <em class="parameter"><code>signature_index</code></em>
+ in <em class="parameter"><code>result</code></em>
+.</p>
+<p>The child values in the returned <span class="type">GVariant</span> tuple are ordered to match the
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr"><span class="type">OstreeGpgSignatureAttr</span></a> enumeration, which means the enum values can be
+used as index values in functions like <code class="function">g_variant_get_child()</code>. See the
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr"><span class="type">OstreeGpgSignatureAttr</span></a> description for the <span class="type">GVariantType</span> of each
+available attribute.</p>
+<div class="note"><p>
+ The <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr"><span class="type">OstreeGpgSignatureAttr</span></a> enumeration may be extended in the future
+ with new attributes, which would affect the <span class="type">GVariant</span> tuple returned by
+ this function. While the position and type of current child values in
+ the <span class="type">GVariant</span> tuple will not change, to avoid backward-compatibility
+ issues <span class="emphasis"><em>please do not depend on the tuple's overall size or
+ type signature</em></span>.
+ </p></div>
+<p>It is a programmer error to request an invalid <em class="parameter"><code>signature_index</code></em>
+. Use
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all" title="ostree_gpg_verify_result_count_all ()"><code class="function">ostree_gpg_verify_result_count_all()</code></a> to find the number of signatures in
+<em class="parameter"><code>result</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-get-all.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signature_index</p></td>
+<td class="parameter_description"><p>which signature to get attributes from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-get-all.returns"></a><h4>Returns</h4>
+<p>a new, floating, <span class="type">GVariant</span> tuple. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20floating"><span class="acronym">transfer floating</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-describe"></a><h3>ostree_gpg_verify_result_describe ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_gpg_verify_result_describe (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> signature_index</code></em>,
+ <em class="parameter"><code><span class="type">GString</span> *output_buffer</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *line_prefix</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureFormatFlags" title="enum OstreeGpgSignatureFormatFlags"><span class="type">OstreeGpgSignatureFormatFlags</span></a> flags</code></em>);</pre>
+<p>Appends a brief, human-readable description of the GPG signature at
+<em class="parameter"><code>signature_index</code></em>
+ in <em class="parameter"><code>result</code></em>
+ to the <em class="parameter"><code>output_buffer</code></em>
+. The description
+spans multiple lines. A <em class="parameter"><code>line_prefix</code></em>
+ string, if given, will precede
+each line of the description.</p>
+<p>The <em class="parameter"><code>flags</code></em>
+ argument is reserved for future variations to the description
+format. Currently must be 0.</p>
+<p>It is a programmer error to request an invalid <em class="parameter"><code>signature_index</code></em>
+. Use
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all" title="ostree_gpg_verify_result_count_all ()"><code class="function">ostree_gpg_verify_result_count_all()</code></a> to find the number of signatures in
+<em class="parameter"><code>result</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-describe.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signature_index</p></td>
+<td class="parameter_description"><p>which signature to describe</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output_buffer</p></td>
+<td class="parameter_description"><p>a <span class="type">GString</span> to hold the description</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line_prefix</p></td>
+<td class="parameter_description"><p>optional line prefix string. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>flags to adjust the description format</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-describe-variant"></a><h3>ostree_gpg_verify_result_describe_variant ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_gpg_verify_result_describe_variant
+ (<em class="parameter"><code><span class="type">GVariant</span> *variant</code></em>,
+ <em class="parameter"><code><span class="type">GString</span> *output_buffer</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *line_prefix</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureFormatFlags" title="enum OstreeGpgSignatureFormatFlags"><span class="type">OstreeGpgSignatureFormatFlags</span></a> flags</code></em>);</pre>
+<p>Similar to <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe" title="ostree_gpg_verify_result_describe ()"><code class="function">ostree_gpg_verify_result_describe()</code></a> but takes a <span class="type">GVariant</span> of
+all attributes for a GPG signature instead of an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>
+and signature index.</p>
+<p>The <em class="parameter"><code>variant</code></em>
+ <span class="emphasis"><em>MUST</em></span> have been created by
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get-all" title="ostree_gpg_verify_result_get_all ()"><code class="function">ostree_gpg_verify_result_get_all()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-describe-variant.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>variant</p></td>
+<td class="parameter_description"><p>a <span class="type">GVariant</span> from <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get-all" title="ostree_gpg_verify_result_get_all ()"><code class="function">ostree_gpg_verify_result_get_all()</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output_buffer</p></td>
+<td class="parameter_description"><p>a <span class="type">GString</span> to hold the description</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line_prefix</p></td>
+<td class="parameter_description"><p>optional line prefix string. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>flags to adjust the description format</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-gpg-verify-result-require-valid-signature"></a><h3>ostree_gpg_verify_result_require_valid_signature ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_gpg_verify_result_require_valid_signature
+ (<em class="parameter"><code><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a> *result</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Checks if the result contains at least one signature from the
+trusted keyring. You can call this function immediately after
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-summary" title="ostree_repo_verify_summary ()"><code class="function">ostree_repo_verify_summary()</code></a> or <a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit-ext" title="ostree_repo_verify_commit_ext ()"><code class="function">ostree_repo_verify_commit_ext()</code></a> -
+it will handle the <code class="literal">NULL</code> <em class="parameter"><code>result</code></em>
+ and filled <em class="parameter"><code>error</code></em>
+ too.</p>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-require-valid-signature.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>A <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-gpg-verify-result-require-valid-signature.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>result</code></em>
+was not <code class="literal">NULL</code> and had at least one
+signature from trusted keyring, otherwise <code class="literal">FALSE</code></p>
+</div>
+<p class="since">Since: 2016.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-GPG-signature-verification-results.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeGpgError"></a><h3>enum OstreeGpgError</h3>
+<p>Errors returned by signature creation and verification operations in OSTree.
+These may be returned by any API which creates or verifies signatures.</p>
+<div class="refsect3">
+<a name="OstreeGpgError.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-ERROR-NO-SIGNATURE:CAPS"></a>OSTREE_GPG_ERROR_NO_SIGNATURE</p></td>
+<td class="enum_member_description">
+<p>A signature was expected, but not found.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-ERROR-INVALID-SIGNATURE:CAPS"></a>OSTREE_GPG_ERROR_INVALID_SIGNATURE</p></td>
+<td class="enum_member_description">
+<p>A signature was malformed.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-ERROR-MISSING-KEY:CAPS"></a>OSTREE_GPG_ERROR_MISSING_KEY</p></td>
+<td class="enum_member_description">
+<p>A signature was found, but was created with a key not in the
+configured keyrings.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-ERROR-EXPIRED-SIGNATURE:CAPS"></a>OSTREE_GPG_ERROR_EXPIRED_SIGNATURE</p></td>
+<td class="enum_member_description">
+<p>A signature was expired. Since: 2020.1.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-ERROR-EXPIRED-KEY:CAPS"></a>OSTREE_GPG_ERROR_EXPIRED_KEY</p></td>
+<td class="enum_member_description">
+<p>A signature was found, but the key used to
+sign it has expired. Since: 2020.1.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-ERROR-REVOKED-KEY:CAPS"></a>OSTREE_GPG_ERROR_REVOKED_KEY</p></td>
+<td class="enum_member_description">
+<p>A signature was found, but the key used to
+sign it has been revoked. Since: 2020.1.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeGpgVerifyResult"></a><h3>OstreeGpgVerifyResult</h3>
+<pre class="programlisting">typedef struct OstreeGpgVerifyResult OstreeGpgVerifyResult;
+</pre>
+<p>Private instance structure.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeGpgSignatureAttr"></a><h3>enum OstreeGpgSignatureAttr</h3>
+<p>Signature attributes available from an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>.
+The attribute's <span class="type">GVariantType</span> is shown in brackets.</p>
+<div class="refsect3">
+<a name="OstreeGpgSignatureAttr.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-VALID:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_VALID</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_BOOLEAN</span>] Is the signature valid?</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-SIG-EXPIRED:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_SIG_EXPIRED</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_BOOLEAN</span>] Has the signature expired?</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-KEY-EXPIRED:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_KEY_EXPIRED</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_BOOLEAN</span>] Has the signing key expired?</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-KEY-REVOKED:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_KEY_REVOKED</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_BOOLEAN</span>] Has the signing key been revoked?</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-KEY-MISSING:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_KEY_MISSING</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_BOOLEAN</span>] Is the signing key missing?</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-FINGERPRINT:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_FINGERPRINT</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_STRING</span>] Fingerprint of the signing key</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-TIMESTAMP:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_TIMESTAMP</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_INT64</span>] Signature creation Unix timestamp</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-EXP-TIMESTAMP:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_EXP_TIMESTAMP</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_INT64</span>] Signature expiration Unix timestamp (0 if no
+expiration)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-PUBKEY-ALGO-NAME:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_PUBKEY_ALGO_NAME</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_STRING</span>] Name of the public key algorithm used to create
+the signature</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-HASH-ALGO-NAME:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_HASH_ALGO_NAME</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_STRING</span>] Name of the hash algorithm used to create the
+signature</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-USER-NAME:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_USER_NAME</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_STRING</span>] The name of the signing key's primary user</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-USER-EMAIL:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_USER_EMAIL</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_STRING</span>] The email address of the signing key's primary
+user</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-FINGERPRINT-PRIMARY:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_FINGERPRINT_PRIMARY</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_STRING</span>] Fingerprint of the signing key's primary key
+(will be the same as OSTREE_GPG_SIGNATURE_ATTR_FINGERPRINT if the
+the signature is already from the primary key rather than a subkey,
+and will be the empty string if the key is missing.)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-KEY-EXP-TIMESTAMP:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_KEY_EXP_TIMESTAMP</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_INT64</span>] Key expiration Unix timestamp (0 if no
+expiration or if the key is missing)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-ATTR-KEY-EXP-TIMESTAMP-PRIMARY:CAPS"></a>OSTREE_GPG_SIGNATURE_ATTR_KEY_EXP_TIMESTAMP_PRIMARY</p></td>
+<td class="enum_member_description">
+<p>[<span class="type">G_VARIANT_TYPE_INT64</span>] Key expiration Unix timestamp of the signing key's
+primary key (will be the same as OSTREE_GPG_SIGNATURE_ATTR_KEY_EXP_TIMESTAMP
+if the signing key is the primary key and 0 if no expiration or if the key
+is missing)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeGpgSignatureFormatFlags"></a><h3>enum OstreeGpgSignatureFormatFlags</h3>
+<p>Formatting flags for <a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe" title="ostree_gpg_verify_result_describe ()"><code class="function">ostree_gpg_verify_result_describe()</code></a>. Currently
+there's only one possible output format, but this enumeration allows
+for future variations.</p>
+<div class="refsect3">
+<a name="OstreeGpgSignatureFormatFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody><tr>
+<td class="enum_member_name"><p><a name="OSTREE-GPG-SIGNATURE-FORMAT-DEFAULT:CAPS"></a>OSTREE_GPG_SIGNATURE_FORMAT_DEFAULT</p></td>
+<td class="enum_member_description">
+<p>Use the default output format</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-In-memory-modifiable-filesystem-tree.html b/reference/ostree-In-memory-modifiable-filesystem-tree.html
new file mode 100644
index 00000000..f06af255
--- /dev/null
+++ b/reference/ostree-In-memory-modifiable-filesystem-tree.html
@@ -0,0 +1,685 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>In-memory modifiable filesystem tree: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">
+<link rel="next" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-In-memory-modifiable-filesystem-tree.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-OstreeRepo.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-Root-partition-mount-point.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-In-memory-modifiable-filesystem-tree"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-In-memory-modifiable-filesystem-tree.top_of_page"></a>In-memory modifiable filesystem tree</span></h2>
+<p>In-memory modifiable filesystem tree — Modifiable filesystem tree</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-In-memory-modifiable-filesystem-tree.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="returnvalue">OstreeMutableTree</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new" title="ostree_mutable_tree_new ()">ostree_mutable_tree_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="returnvalue">OstreeMutableTree</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new-from-commit" title="ostree_mutable_tree_new_from_commit ()">ostree_mutable_tree_new_from_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="returnvalue">OstreeMutableTree</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new-from-checksum" title="ostree_mutable_tree_new_from_checksum ()">ostree_mutable_tree_new_from_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-check-error" title="ostree_mutable_tree_check_error ()">ostree_mutable_tree_check_error</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-set-metadata-checksum" title="ostree_mutable_tree_set_metadata_checksum ()">ostree_mutable_tree_set_metadata_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-metadata-checksum" title="ostree_mutable_tree_get_metadata_checksum ()">ostree_mutable_tree_get_metadata_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-set-contents-checksum" title="ostree_mutable_tree_set_contents_checksum ()">ostree_mutable_tree_set_contents_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-contents-checksum" title="ostree_mutable_tree_get_contents_checksum ()">ostree_mutable_tree_get_contents_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-replace-file" title="ostree_mutable_tree_replace_file ()">ostree_mutable_tree_replace_file</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-remove" title="ostree_mutable_tree_remove ()">ostree_mutable_tree_remove</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-ensure-dir" title="ostree_mutable_tree_ensure_dir ()">ostree_mutable_tree_ensure_dir</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-lookup" title="ostree_mutable_tree_lookup ()">ostree_mutable_tree_lookup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-ensure-parent-dirs" title="ostree_mutable_tree_ensure_parent_dirs ()">ostree_mutable_tree_ensure_parent_dirs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-walk" title="ostree_mutable_tree_walk ()">ostree_mutable_tree_walk</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GHashTable</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-subdirs" title="ostree_mutable_tree_get_subdirs ()">ostree_mutable_tree_get_subdirs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GHashTable</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-files" title="ostree_mutable_tree_get_files ()">ostree_mutable_tree_get_files</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-fill-empty-from-dirtree" title="ostree_mutable_tree_fill_empty_from_dirtree ()">ostree_mutable_tree_fill_empty_from_dirtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-In-memory-modifiable-filesystem-tree.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree">OstreeMutableTree</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-In-memory-modifiable-filesystem-tree.description"></a><h2>Description</h2>
+<p>In order to commit content into an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>, it must first be
+imported into an <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a>. There are several high level
+APIs to create an initiable <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> from a physical
+filesystem directory, but they may also be computed
+programmatically.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-In-memory-modifiable-filesystem-tree.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-mutable-tree-new"></a><h3>ostree_mutable_tree_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="returnvalue">OstreeMutableTree</span></a> *
+ostree_mutable_tree_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-mutable-tree-new.returns"></a><h4>Returns</h4>
+<p>A new tree. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-new-from-commit"></a><h3>ostree_mutable_tree_new_from_commit ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="returnvalue">OstreeMutableTree</span></a> *
+ostree_mutable_tree_new_from_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *rev</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Creates a new OstreeMutableTree with the contents taken from the given commit.
+The data will be loaded from the repo lazily as needed.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-new-from-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>The repo which contains the objects refered by the checksums.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rev</p></td>
+<td class="parameter_description"><p>ref or SHA-256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-mutable-tree-new-from-commit.returns"></a><h4>Returns</h4>
+<p>A new tree. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2021.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-new-from-checksum"></a><h3>ostree_mutable_tree_new_from_checksum ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="returnvalue">OstreeMutableTree</span></a> *
+ostree_mutable_tree_new_from_checksum (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *contents_checksum</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *metadata_checksum</code></em>);</pre>
+<p>Creates a new OstreeMutableTree with the contents taken from the given repo
+and checksums. The data will be loaded from the repo lazily as needed.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-new-from-checksum.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>The repo which contains the objects refered by the checksums.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>contents_checksum</p></td>
+<td class="parameter_description"><p>dirtree checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>metadata_checksum</p></td>
+<td class="parameter_description"><p>dirmeta checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-mutable-tree-new-from-checksum.returns"></a><h4>Returns</h4>
+<p>A new tree. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-check-error"></a><h3>ostree_mutable_tree_check_error ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_check_error (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>In some cases, a tree may be in a "lazy" state that loads
+data in the background; if an error occurred during a non-throwing
+API call, it will have been cached. This function checks for a
+cached error. The tree remains in error state.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-check-error.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-mutable-tree-check-error.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success</p>
+</div>
+<p class="since">Since: 2018.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-set-metadata-checksum"></a><h3>ostree_mutable_tree_set_metadata_checksum ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_mutable_tree_set_metadata_checksum
+ (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-get-metadata-checksum"></a><h3>ostree_mutable_tree_get_metadata_checksum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_mutable_tree_get_metadata_checksum
+ (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-set-contents-checksum"></a><h3>ostree_mutable_tree_set_contents_checksum ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_mutable_tree_set_contents_checksum
+ (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-get-contents-checksum"></a><h3>ostree_mutable_tree_get_contents_checksum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_mutable_tree_get_contents_checksum
+ (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-replace-file"></a><h3>ostree_mutable_tree_replace_file ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_replace_file (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-remove"></a><h3>ostree_mutable_tree_remove ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_remove (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> allow_noent</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Remove the file or subdirectory named <em class="parameter"><code>name</code></em>
+ from the mutable tree <em class="parameter"><code>self</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-remove.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of file or subdirectory to remove</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allow_noent</p></td>
+<td class="parameter_description"><p>If <em class="parameter"><code>FALSE</code></em>
+, an error will be thrown if <em class="parameter"><code>name</code></em>
+does not exist in the tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.9</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-ensure-dir"></a><h3>ostree_mutable_tree_ensure_dir ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_ensure_dir (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> **out_subdir</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Returns the subdirectory of self with filename <em class="parameter"><code>name</code></em>
+, creating an empty one
+it if it doesn't exist.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-ensure-dir.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of subdirectory of self to retrieve/creates</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_subdir</p></td>
+<td class="parameter_description"><p>the subdirectory. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-lookup"></a><h3>ostree_mutable_tree_lookup ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_lookup (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_file_checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> **out_subdir</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Lookup <em class="parameter"><code>name</code></em>
+ and returns <em class="parameter"><code>out_file_checksum</code></em>
+ or <em class="parameter"><code>out_subdir</code></em>
+ depending on its
+file type.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-lookup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_file_checksum</p></td>
+<td class="parameter_description"><p>checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_subdir</p></td>
+<td class="parameter_description"><p>subdirectory. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-mutable-tree-lookup.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success and either <em class="parameter"><code>out_file_checksum</code></em>
+or <em class="parameter"><code>out_subdir</code></em>
+are
+filled, <code class="literal">FALSE</code> otherwise.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-ensure-parent-dirs"></a><h3>ostree_mutable_tree_ensure_parent_dirs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_ensure_parent_dirs
+ (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *split_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *metadata_checksum</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> **out_parent</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Create all parent trees necessary for the given <em class="parameter"><code>split_path</code></em>
+ to
+exist.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-ensure-parent-dirs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>split_path</p></td>
+<td class="parameter_description"><p>File path components. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>metadata_checksum</p></td>
+<td class="parameter_description"><p>SHA256 checksum for metadata</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_parent</p></td>
+<td class="parameter_description"><p>The parent tree. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-walk"></a><h3>ostree_mutable_tree_walk ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_walk (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *split_path</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> start</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> **out_subdir</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Traverse <em class="parameter"><code>start</code></em>
+ number of elements starting from <em class="parameter"><code>split_path</code></em>
+; the
+child will be returned in <em class="parameter"><code>out_subdir</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-walk.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>split_path</p></td>
+<td class="parameter_description"><p>Split pathname. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>start</p></td>
+<td class="parameter_description"><p>Descend from this number of elements in <em class="parameter"><code>split_path</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_subdir</p></td>
+<td class="parameter_description"><p>Target parent. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-get-subdirs"></a><h3>ostree_mutable_tree_get_subdirs ()</h3>
+<pre class="programlisting"><span class="returnvalue">GHashTable</span> *
+ostree_mutable_tree_get_subdirs (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-mutable-tree-get-subdirs.returns"></a><h4>Returns</h4>
+<p>All children directories. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8 OstreeMutableTree]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-get-files"></a><h3>ostree_mutable_tree_get_files ()</h3>
+<pre class="programlisting"><span class="returnvalue">GHashTable</span> *
+ostree_mutable_tree_get_files (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-mutable-tree-get-files.returns"></a><h4>Returns</h4>
+<p>All children files (the value is a checksum). </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8 utf8]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-mutable-tree-fill-empty-from-dirtree"></a><h3>ostree_mutable_tree_fill_empty_from_dirtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_mutable_tree_fill_empty_from_dirtree
+ (<em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *contents_checksum</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *metadata_checksum</code></em>);</pre>
+<p>Merges <em class="parameter"><code>self</code></em>
+ with the tree given by <em class="parameter"><code>contents_checksum</code></em>
+ and
+<em class="parameter"><code>metadata_checksum</code></em>
+, but only if it's possible without writing new objects to
+the <em class="parameter"><code>repo</code></em>
+. We can do this if either <em class="parameter"><code>self</code></em>
+ is empty, the tree given by
+<em class="parameter"><code>contents_checksum</code></em>
+ is empty or if both trees already have the same
+<em class="parameter"><code>contents_checksum</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-mutable-tree-fill-empty-from-dirtree.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+if merge was successful, <em class="parameter"><code>FALSE</code></em>
+if it was not possible.</p>
+<p>This function enables optimisations when composing trees. The provided
+checksums are not loaded or checked when this function is called. Instead
+the contents will be loaded only when needed.</p>
+</div>
+<p class="since">Since: 2018.7</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-In-memory-modifiable-filesystem-tree.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeMutableTree"></a><h3>OstreeMutableTree</h3>
+<pre class="programlisting">typedef struct OstreeMutableTree OstreeMutableTree;
+</pre>
+<p>Private instance structure.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-OstreeRepo.html b/reference/ostree-OstreeRepo.html
new file mode 100644
index 00000000..c4a0a981
--- /dev/null
+++ b/reference/ostree-OstreeRepo.html
@@ -0,0 +1,10574 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>OstreeRepo: Content-addressed object store: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">
+<link rel="next" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-OstreeRepo.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-Core-repository-independent-functions.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-In-memory-modifiable-filesystem-tree.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-OstreeRepo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-OstreeRepo.top_of_page"></a>OstreeRepo: Content-addressed object store</span></h2>
+<p>OstreeRepo: Content-addressed object store — A git-like storage system for operating system binaries</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-OstreeRepo.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-mode-from-string" title="ostree_repo_mode_from_string ()">ostree_repo_mode_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open-at" title="ostree_repo_open_at ()">ostree_repo_open_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-new" title="ostree_repo_new ()">ostree_repo_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-new-for-sysroot-path" title="ostree_repo_new_for_sysroot_path ()">ostree_repo_new_for_sysroot_path</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-new-default" title="ostree_repo_new_default ()">ostree_repo_new_default</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()">ostree_repo_open</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-disable-fsync" title="ostree_repo_set_disable_fsync ()">ostree_repo_set_disable_fsync</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-disable-fsync" title="ostree_repo_get_disable_fsync ()">ostree_repo_get_disable_fsync</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-is-system" title="ostree_repo_is_system ()">ostree_repo_is_system</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-is-writable" title="ostree_repo_is_writable ()">ostree_repo_is_writable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-create-at" title="ostree_repo_create_at ()">ostree_repo_create_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-create" title="ostree_repo_create ()">ostree_repo_create</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-collection-id" title="ostree_repo_get_collection_id ()">ostree_repo_get_collection_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-bootloader" title="ostree_repo_get_bootloader ()">ostree_repo_get_bootloader</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-path" title="ostree_repo_get_path ()">ostree_repo_get_path</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode"><span class="returnvalue">OstreeRepoMode</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-mode" title="ostree_repo_get_mode ()">ostree_repo_get_mode</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-min-free-space-bytes" title="ostree_repo_get_min_free_space_bytes ()">ostree_repo_get_min_free_space_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GKeyFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-config" title="ostree_repo_get_config ()">ostree_repo_get_config</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-dfd" title="ostree_repo_get_dfd ()">ostree_repo_get_dfd</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *const *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-default-repo-finders" title="ostree_repo_get_default_repo_finders ()">ostree_repo_get_default_repo_finders</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-pop" title="ostree_repo_lock_pop ()">ostree_repo_lock_pop</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-push" title="ostree_repo_lock_push ()">ostree_repo_lock_push</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock"><span class="returnvalue">OstreeRepoAutoLock</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-push" title="ostree_repo_auto_lock_push ()">ostree_repo_auto_lock_push</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-cleanup" title="ostree_repo_auto_lock_cleanup ()">ostree_repo_auto_lock_cleanup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-hash" title="ostree_repo_hash ()">ostree_repo_hash</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-equal" title="ostree_repo_equal ()">ostree_repo_equal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GKeyFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-copy-config" title="ostree_repo_copy_config ()">ostree_repo_copy_config</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-add" title="ostree_repo_remote_add ()">ostree_repo_remote_add</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-delete" title="ostree_repo_remote_delete ()">ostree_repo_remote_delete</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-change" title="ostree_repo_remote_change ()">ostree_repo_remote_change</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> **
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-list" title="ostree_repo_remote_list ()">ostree_repo_remote_list</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-list-collection-refs" title="ostree_repo_remote_list_collection_refs ()">ostree_repo_remote_list_collection_refs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-url" title="ostree_repo_remote_get_url ()">ostree_repo_remote_get_url</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-verify" title="ostree_repo_remote_get_gpg_verify ()">ostree_repo_remote_get_gpg_verify</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-verify-summary" title="ostree_repo_remote_get_gpg_verify_summary ()">ostree_repo_remote_get_gpg_verify_summary</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-keys" title="ostree_repo_remote_get_gpg_keys ()">ostree_repo_remote_get_gpg_keys</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-gpg-import" title="ostree_repo_remote_gpg_import ()">ostree_repo_remote_gpg_import</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary" title="ostree_repo_remote_fetch_summary ()">ostree_repo_remote_fetch_summary</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary-with-options" title="ostree_repo_remote_fetch_summary_with_options ()">ostree_repo_remote_fetch_summary_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-reload-config" title="ostree_repo_reload_config ()">ostree_repo_reload_config</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-remote-boolean-option" title="ostree_repo_get_remote_boolean_option ()">ostree_repo_get_remote_boolean_option</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-remote-list-option" title="ostree_repo_get_remote_list_option ()">ostree_repo_get_remote_list_option</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-remote-option" title="ostree_repo_get_remote_option ()">ostree_repo_get_remote_option</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-parent" title="ostree_repo_get_parent ()">ostree_repo_get_parent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-config" title="ostree_repo_write_config ()">ostree_repo_write_config</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-scan-hardlinks" title="ostree_repo_scan_hardlinks ()">ostree_repo_scan_hardlinks</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prepare-transaction" title="ostree_repo_prepare_transaction ()">ostree_repo_prepare_transaction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()">ostree_repo_commit_transaction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-abort-transaction" title="ostree_repo_abort_transaction ()">ostree_repo_abort_transaction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-refspec" title="ostree_repo_transaction_set_refspec ()">ostree_repo_transaction_set_refspec</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-collection-ref" title="ostree_repo_transaction_set_collection_ref ()">ostree_repo_transaction_set_collection_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-ref" title="ostree_repo_transaction_set_ref ()">ostree_repo_transaction_set_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-ref-immediate" title="ostree_repo_set_ref_immediate ()">ostree_repo_set_ref_immediate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-alias-ref-immediate" title="ostree_repo_set_alias_ref_immediate ()">ostree_repo_set_alias_ref_immediate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-cache-dir" title="ostree_repo_set_cache_dir ()">ostree_repo_set_cache_dir</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-collection-id" title="ostree_repo_set_collection_id ()">ostree_repo_set_collection_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-collection-ref-immediate" title="ostree_repo_set_collection_ref_immediate ()">ostree_repo_set_collection_ref_immediate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-sign-delta" title="ostree_repo_sign_delta ()">ostree_repo_sign_delta</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-has-object" title="ostree_repo_has_object ()">ostree_repo_has_object</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-mark-commit-partial" title="ostree_repo_mark_commit_partial ()">ostree_repo_mark_commit_partial</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-mark-commit-partial-reason" title="ostree_repo_mark_commit_partial_reason ()">ostree_repo_mark_commit_partial_reason</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata" title="ostree_repo_write_metadata ()">ostree_repo_write_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-async" title="ostree_repo_write_metadata_async ()">ostree_repo_write_metadata_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-finish" title="ostree_repo_write_metadata_finish ()">ostree_repo_write_metadata_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content" title="ostree_repo_write_content ()">ostree_repo_write_content</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeContentWriter</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-regfile" title="ostree_repo_write_regfile ()">ostree_repo_write_regfile</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-regfile-inline" title="ostree_repo_write_regfile_inline ()">ostree_repo_write_regfile_inline</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-symlink" title="ostree_repo_write_symlink ()">ostree_repo_write_symlink</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-trusted" title="ostree_repo_write_metadata_trusted ()">ostree_repo_write_metadata_trusted</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-stream-trusted" title="ostree_repo_write_metadata_stream_trusted ()">ostree_repo_write_metadata_stream_trusted</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-trusted" title="ostree_repo_write_content_trusted ()">ostree_repo_write_content_trusted</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-async" title="ostree_repo_write_content_async ()">ostree_repo_write_content_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-finish" title="ostree_repo_write_content_finish ()">ostree_repo_write_content_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-rev" title="ostree_repo_resolve_rev ()">ostree_repo_resolve_rev</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-rev-ext" title="ostree_repo_resolve_rev_ext ()">ostree_repo_resolve_rev_ext</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-refs" title="ostree_repo_list_refs ()">ostree_repo_list_refs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-refs-ext" title="ostree_repo_list_refs_ext ()">ostree_repo_list_refs_ext</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-collection-refs" title="ostree_repo_list_collection_refs ()">ostree_repo_list_collection_refs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-list-refs" title="ostree_repo_remote_list_refs ()">ostree_repo_remote_list_refs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-collection-ref" title="ostree_repo_resolve_collection_ref ()">ostree_repo_resolve_collection_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-variant" title="ostree_repo_load_variant ()">ostree_repo_load_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-commit" title="ostree_repo_load_commit ()">ostree_repo_load_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-variant-if-exists" title="ostree_repo_load_variant_if_exists ()">ostree_repo_load_variant_if_exists</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-file" title="ostree_repo_load_file ()">ostree_repo_load_file</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-object-stream" title="ostree_repo_load_object_stream ()">ostree_repo_load_object_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-query-object-storage-size" title="ostree_repo_query_object_storage_size ()">ostree_repo_query_object_storage_size</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-import-object-from" title="ostree_repo_import_object_from ()">ostree_repo_import_object_from</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-import-object-from-with-trust" title="ostree_repo_import_object_from_with_trust ()">ostree_repo_import_object_from_with_trust</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-import-archive-to-mtree" title="ostree_repo_import_archive_to_mtree ()">ostree_repo_import_archive_to_mtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-export-tree-to-archive" title="ostree_repo_export_tree_to_archive ()">ostree_repo_export_tree_to_archive</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-delete-object" title="ostree_repo_delete_object ()">ostree_repo_delete_object</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-fsck-object" title="ostree_repo_fsck_object ()">ostree_repo_fsck_object</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilterResult" title="enum OstreeRepoCommitFilterResult"><span class="returnvalue">OstreeRepoCommitFilterResult</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilter" title="OstreeRepoCommitFilter ()">*OstreeRepoCommitFilter</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="returnvalue">OstreeRepoCommitModifier</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-new" title="ostree_repo_commit_modifier_new ()">ostree_repo_commit_modifier_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifierXattrCallback" title="OstreeRepoCommitModifierXattrCallback ()">*OstreeRepoCommitModifierXattrCallback</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-xattr-callback" title="ostree_repo_commit_modifier_set_xattr_callback ()">ostree_repo_commit_modifier_set_xattr_callback</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy" title="ostree_repo_commit_modifier_set_sepolicy ()">ostree_repo_commit_modifier_set_sepolicy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy-from-commit" title="ostree_repo_commit_modifier_set_sepolicy_from_commit ()">ostree_repo_commit_modifier_set_sepolicy_from_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-devino-cache" title="ostree_repo_commit_modifier_set_devino_cache ()">ostree_repo_commit_modifier_set_devino_cache</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="returnvalue">OstreeRepoCommitModifier</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-ref" title="ostree_repo_commit_modifier_ref ()">ostree_repo_commit_modifier_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-unref" title="ostree_repo_commit_modifier_unref ()">ostree_repo_commit_modifier_unref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeRepoDevInoCache</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-new" title="ostree_repo_devino_cache_new ()">ostree_repo_devino_cache_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeRepoDevInoCache</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-ref" title="ostree_repo_devino_cache_ref ()">ostree_repo_devino_cache_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-unref" title="ostree_repo_devino_cache_unref ()">ostree_repo_devino_cache_unref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GType</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-get-type" title="ostree_repo_devino_cache_get_type ()">ostree_repo_devino_cache_get_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()">ostree_repo_write_directory_to_mtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-dfd-to-mtree" title="ostree_repo_write_dfd_to_mtree ()">ostree_repo_write_dfd_to_mtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-archive-to-mtree" title="ostree_repo_write_archive_to_mtree ()">ostree_repo_write_archive_to_mtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-archive-to-mtree-from-fd" title="ostree_repo_write_archive_to_mtree_from_fd ()">ostree_repo_write_archive_to_mtree_from_fd</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-mtree" title="ostree_repo_write_mtree ()">ostree_repo_write_mtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit" title="ostree_repo_write_commit ()">ostree_repo_write_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit-with-time" title="ostree_repo_write_commit_with_time ()">ostree_repo_write_commit_with_time</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-read-commit-detached-metadata" title="ostree_repo_read_commit_detached_metadata ()">ostree_repo_read_commit_detached_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit-detached-metadata" title="ostree_repo_write_commit_detached_metadata ()">ostree_repo_write_commit_detached_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at-options-set-devino" title="ostree_repo_checkout_at_options_set_devino ()">ostree_repo_checkout_at_options_set_devino</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree" title="ostree_repo_checkout_tree ()">ostree_repo_checkout_tree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree-at" title="ostree_repo_checkout_tree_at ()">ostree_repo_checkout_tree_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at" title="ostree_repo_checkout_at ()">ostree_repo_checkout_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-gc" title="ostree_repo_checkout_gc ()">ostree_repo_checkout_gc</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-read-commit" title="ostree_repo_read_commit ()">ostree_repo_read_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-objects" title="ostree_repo_list_objects ()">ostree_repo_list_objects</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-commit-objects-starting-with" title="ostree_repo_list_commit_objects_starting_with ()">ostree_repo_list_commit_objects_starting_with</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-static-delta-names" title="ostree_repo_list_static_delta_names ()">ostree_repo_list_static_delta_names</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-static-delta-indexes" title="ostree_repo_list_static_delta_indexes ()">ostree_repo_list_static_delta_indexes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-reindex" title="ostree_repo_static_delta_reindex ()">ostree_repo_static_delta_reindex</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-generate" title="ostree_repo_static_delta_generate ()">ostree_repo_static_delta_generate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-execute-offline-with-signature" title="ostree_repo_static_delta_execute_offline_with_signature ()">ostree_repo_static_delta_execute_offline_with_signature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-execute-offline" title="ostree_repo_static_delta_execute_offline ()">ostree_repo_static_delta_execute_offline</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-verify-signature" title="ostree_repo_static_delta_verify_signature ()">ostree_repo_static_delta_verify_signature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GHashTable</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-new-reachable" title="ostree_repo_traverse_new_reachable ()">ostree_repo_traverse_new_reachable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GHashTable</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-new-parents" title="ostree_repo_traverse_new_parents ()">ostree_repo_traverse_new_parents</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> **
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-parents-get-commits" title="ostree_repo_traverse_parents_get_commits ()">ostree_repo_traverse_parents_get_commits</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit" title="ostree_repo_traverse_commit ()">ostree_repo_traverse_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit-union" title="ostree_repo_traverse_commit_union ()">ostree_repo_traverse_commit_union</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit-union-with-parents" title="ostree_repo_traverse_commit_union_with_parents ()">ostree_repo_traverse_commit_union_with_parents</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit-with-flags" title="ostree_repo_traverse_commit_with_flags ()">ostree_repo_traverse_commit_with_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-cleanup" title="ostree_repo_commit_traverse_iter_cleanup ()">ostree_repo_commit_traverse_iter_cleanup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-clear" title="ostree_repo_commit_traverse_iter_clear ()">ostree_repo_commit_traverse_iter_clear</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-dir" title="ostree_repo_commit_traverse_iter_get_dir ()">ostree_repo_commit_traverse_iter_get_dir</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-file" title="ostree_repo_commit_traverse_iter_get_file ()">ostree_repo_commit_traverse_iter_get_file</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-init-commit" title="ostree_repo_commit_traverse_iter_init_commit ()">ostree_repo_commit_traverse_iter_init_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-init-dirtree" title="ostree_repo_commit_traverse_iter_init_dirtree ()">ostree_repo_commit_traverse_iter_init_dirtree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitIterResult" title="enum OstreeRepoCommitIterResult"><span class="returnvalue">OstreeRepoCommitIterResult</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-next" title="ostree_repo_commit_traverse_iter_next ()">ostree_repo_commit_traverse_iter_next</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune" title="ostree_repo_prune ()">ostree_repo_prune</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune-static-deltas" title="ostree_repo_prune_static_deltas ()">ostree_repo_prune_static_deltas</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-reachable-refs" title="ostree_repo_traverse_reachable_refs ()">ostree_repo_traverse_reachable_refs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune-from-reachable" title="ostree_repo_prune_from_reachable ()">ostree_repo_prune_from_reachable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull" title="ostree_repo_pull ()">ostree_repo_pull</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-one-dir" title="ostree_repo_pull_one_dir ()">ostree_repo_pull_one_dir</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-with-options" title="ostree_repo_pull_with_options ()">ostree_repo_pull_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-default-console-progress-changed" title="ostree_repo_pull_default_console_progress_changed ()">ostree_repo_pull_default_console_progress_changed</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-sign-commit" title="ostree_repo_sign_commit ()">ostree_repo_sign_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-append-gpg-signature" title="ostree_repo_append_gpg_signature ()">ostree_repo_append_gpg_signature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-add-gpg-signature-summary" title="ostree_repo_add_gpg_signature_summary ()">ostree_repo_add_gpg_signature_summary</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-gpg-sign-data" title="ostree_repo_gpg_sign_data ()">ostree_repo_gpg_sign_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-gpg-verify-data" title="ostree_repo_gpg_verify_data ()">ostree_repo_gpg_verify_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-signature-verify-commit-data" title="ostree_repo_signature_verify_commit_data ()">ostree_repo_signature_verify_commit_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit" title="ostree_repo_verify_commit ()">ostree_repo_verify_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit-ext" title="ostree_repo_verify_commit_ext ()">ostree_repo_verify_commit_ext</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit-for-remote" title="ostree_repo_verify_commit_for_remote ()">ostree_repo_verify_commit_for_remote</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-summary" title="ostree_repo_verify_summary ()">ostree_repo_verify_summary</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-metadata" title="ostree_repo_regenerate_metadata ()">ostree_repo_regenerate_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-summary" title="ostree_repo_regenerate_summary ()">ostree_repo_regenerate_summary</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-OstreeRepo.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo">OstreeRepo</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode">OstreeRepoMode</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoLockType" title="enum OstreeRepoLockType">OstreeRepoLockType</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock">OstreeRepoAutoLock</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoRemoteChange" title="enum OstreeRepoRemoteChange">OstreeRepoRemoteChange</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoTransactionStats" title="struct OstreeRepoTransactionStats">OstreeRepoTransactionStats</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoResolveRevExtFlags" title="enum OstreeRepoResolveRevExtFlags">OstreeRepoResolveRevExtFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoListRefsExtFlags" title="enum OstreeRepoListRefsExtFlags">OstreeRepoListRefsExtFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitState" title="enum OstreeRepoCommitState">OstreeRepoCommitState</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilterResult" title="enum OstreeRepoCommitFilterResult">OstreeRepoCommitFilterResult</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier">OstreeRepoCommitModifier</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifierFlags" title="enum OstreeRepoCommitModifierFlags">OstreeRepoCommitModifierFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCheckoutMode" title="enum OstreeRepoCheckoutMode">OstreeRepoCheckoutMode</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCheckoutOverwriteMode" title="enum OstreeRepoCheckoutOverwriteMode">OstreeRepoCheckoutOverwriteMode</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoListObjectsFlags" title="enum OstreeRepoListObjectsFlags">OstreeRepoListObjectsFlags</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-VARIANT-TYPE:CAPS" title="OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE">OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeStaticDeltaGenerateOpt" title="enum OstreeStaticDeltaGenerateOpt">OstreeStaticDeltaGenerateOpt</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitTraverseFlags" title="enum OstreeRepoCommitTraverseFlags">OstreeRepoCommitTraverseFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitIterResult" title="enum OstreeRepoCommitIterResult">OstreeRepoCommitIterResult</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPruneFlags" title="enum OstreeRepoPruneFlags">OstreeRepoPruneFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags">OstreeRepoPullFlags</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-OstreeRepo.description"></a><h2>Description</h2>
+<p>The <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> is like git, a content-addressed object store.
+Unlike git, it records uid, gid, and extended attributes.</p>
+<p>There are four possible "modes" for an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>; <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE:CAPS"><code class="literal">OSTREE_REPO_MODE_BARE</code></a>
+is very simple - content files are represented exactly as they are, and
+checkouts are just hardlinks. <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE-USER:CAPS"><code class="literal">OSTREE_REPO_MODE_BARE_USER</code></a> is similar, except
+the uid/gids are not set on the files, and checkouts as hardlinks work only
+for user checkouts. <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE-USER-ONLY:CAPS"><code class="literal">OSTREE_REPO_MODE_BARE_USER_ONLY</code></a> is the same as
+BARE_USER, but all metadata is not stored, so it can only be used for user
+checkouts. This mode does not require xattrs. A <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-MODE-ARCHIVE:CAPS"><code class="literal">OSTREE_REPO_MODE_ARCHIVE</code></a>
+(also known as <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-MODE-ARCHIVE-Z2:CAPS"><code class="literal">OSTREE_REPO_MODE_ARCHIVE_Z2</code></a>) repository in contrast stores
+content files zlib-compressed. It is suitable for non-root-owned
+repositories that can be served via a static HTTP server.</p>
+<p>Creating an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> does not invoke any file I/O, and thus needs
+to be initialized, either from existing contents or as a new
+repository. If you have an existing repo, use <a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()"><code class="function">ostree_repo_open()</code></a>
+to load it from disk and check its validity. To initialize a new
+repository in the given filepath, use <a class="link" href="ostree-OstreeRepo.html#ostree-repo-create" title="ostree_repo_create ()"><code class="function">ostree_repo_create()</code></a> instead.</p>
+<p>To store content in the repo, first start a transaction with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prepare-transaction" title="ostree_repo_prepare_transaction ()"><code class="function">ostree_repo_prepare_transaction()</code></a>. Then create a
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a>, and apply functions such as
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()"><code class="function">ostree_repo_write_directory_to_mtree()</code></a> to traverse a physical
+filesystem and write content, possibly multiple times.</p>
+<p>Once the <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> is complete, write all of its metadata
+with <a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-mtree" title="ostree_repo_write_mtree ()"><code class="function">ostree_repo_write_mtree()</code></a>, and finally create a commit with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit" title="ostree_repo_write_commit ()"><code class="function">ostree_repo_write_commit()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.3.5.7"></a><h4>Collection IDs</h4>
+<p>A collection ID is a globally unique identifier which, if set, is used to
+identify refs from a repository which are mirrored elsewhere, such as in
+mirror repositories or peer to peer networks.</p>
+<p>This is separate from the <code class="literal">collection-id</code> configuration key for a remote, which
+is used to store the collection ID of the repository that remote points to.</p>
+<p>The collection ID should only be set on an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> if it is the canonical
+collection for some refs.</p>
+<p>A collection ID must be a reverse DNS name, where the domain name is under the
+control of the curator of the collection, so they can demonstrate ownership
+of the collection. The later elements in the reverse DNS name can be used to
+disambiguate between multiple collections from the same curator. For example,
+<code class="literal">org.exampleos.Main</code> and <code class="literal">org.exampleos.Apps</code>. For the complete format of
+collection IDs, see <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-collection-id" title="ostree_validate_collection_id ()"><code class="function">ostree_validate_collection_id()</code></a>.</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-OstreeRepo.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-repo-mode-from-string"></a><h3>ostree_repo_mode_from_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_mode_from_string (<em class="parameter"><code>const <span class="type">char</span> *mode</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode"><span class="type">OstreeRepoMode</span></a> *out_mode</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-mode-from-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>a repo mode as a string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_mode</p></td>
+<td class="parameter_description"><p>the corresponding <a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode"><span class="type">OstreeRepoMode</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span> if the string is not a valid mode</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-open-at"></a><h3>ostree_repo_open_at ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_open_at (<em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This combines <a class="link" href="ostree-OstreeRepo.html#ostree-repo-new" title="ostree_repo_new ()"><code class="function">ostree_repo_new()</code></a> (but using fd-relative access) with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()"><code class="function">ostree_repo_open()</code></a>. Use this when you know you should be operating on an
+already extant repository. If you want to create one, use <a class="link" href="ostree-OstreeRepo.html#ostree-repo-create-at" title="ostree_repo_create_at ()"><code class="function">ostree_repo_create_at()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-open-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory fd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-open-at.returns"></a><h4>Returns</h4>
+<p>An accessor object for an OSTree repository located at <em class="parameter"><code>dfd</code></em>
++ <em class="parameter"><code>path</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2017.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-new"></a><h3>ostree_repo_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_new (<em class="parameter"><code><span class="type">GFile</span> *path</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path to a repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-new.returns"></a><h4>Returns</h4>
+<p>An accessor object for an OSTree repository located at <em class="parameter"><code>path</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-new-for-sysroot-path"></a><h3>ostree_repo_new_for_sysroot_path ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_new_for_sysroot_path (<em class="parameter"><code><span class="type">GFile</span> *repo_path</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *sysroot_path</code></em>);</pre>
+<p>Creates a new <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> instance, taking the system root path explicitly
+instead of assuming "/".</p>
+<div class="refsect3">
+<a name="ostree-repo-new-for-sysroot-path.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo_path</p></td>
+<td class="parameter_description"><p>Path to a repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sysroot_path</p></td>
+<td class="parameter_description"><p>Path to the system root</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-new-for-sysroot-path.returns"></a><h4>Returns</h4>
+<p>An accessor object for the OSTree repository located at <em class="parameter"><code>repo_path</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-new-default"></a><h3>ostree_repo_new_default ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_new_default (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>If the current working directory appears to be an OSTree
+repository, create a new <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> object for accessing it.
+Otherwise use the path in the OSTREE_REPO environment variable
+(if defined) or else the default system repository located at
+/ostree/repo.</p>
+<div class="refsect3">
+<a name="ostree-repo-new-default.returns"></a><h4>Returns</h4>
+<p>An accessor object for an OSTree repository located at /ostree/repo. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-open"></a><h3>ostree_repo_open ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_open (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-set-disable-fsync"></a><h3>ostree_repo_set_disable_fsync ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_set_disable_fsync (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> disable_fsync</code></em>);</pre>
+<p>Disable requests to <code class="function">fsync()</code> to stable storage during commits. This
+option should only be used by build system tools which are creating
+disposable virtual machines, or have higher level mechanisms for
+ensuring data consistency.</p>
+<div class="refsect3">
+<a name="ostree-repo-set-disable-fsync.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>disable_fsync</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, do not fsync</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-disable-fsync"></a><h3>ostree_repo_get_disable_fsync ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_get_disable_fsync (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>For more information see <a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-disable-fsync" title="ostree_repo_set_disable_fsync ()"><code class="function">ostree_repo_set_disable_fsync()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-disable-fsync.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-disable-fsync.returns"></a><h4>Returns</h4>
+<p> Whether or not <code class="function">fsync()</code> is enabled for this repo.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-is-system"></a><h3>ostree_repo_is_system ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_is_system (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-is-system.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-is-system.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if this repository is the root-owned system global repository</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-is-writable"></a><h3>ostree_repo_is_writable ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_is_writable (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Returns whether the repository is writable by the current user.
+If the repository is not writable, the <em class="parameter"><code>error</code></em>
+ indicates why.</p>
+<div class="refsect3">
+<a name="ostree-repo-is-writable.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-is-writable.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if this repository is writable</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-create-at"></a><h3>ostree_repo_create_at ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_create_at (<em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode"><span class="type">OstreeRepoMode</span></a> mode</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This is a file-descriptor relative version of <a class="link" href="ostree-OstreeRepo.html#ostree-repo-create" title="ostree_repo_create ()"><code class="function">ostree_repo_create()</code></a>.
+Create the underlying structure on disk for the repository, and call
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open-at" title="ostree_repo_open_at ()"><code class="function">ostree_repo_open_at()</code></a> on the result, preparing it for use.</p>
+<p>If a repository already exists at <em class="parameter"><code>dfd</code></em>
+ + <em class="parameter"><code>path</code></em>
+ (defined by an <code class="literal">objects/</code>
+subdirectory existing), then this function will simply call
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open-at" title="ostree_repo_open_at ()"><code class="function">ostree_repo_open_at()</code></a>. In other words, this function cannot be used to change
+the mode or configuration (<code class="literal">repo/config</code>) of an existing repo.</p>
+<p>The <em class="parameter"><code>options</code></em>
+ dict may contain:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>collection-id: s: Set as collection ID in repo/config (Since 2017.9)</p></li></ul></div>
+<div class="refsect3">
+<a name="ostree-repo-create-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory fd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>The mode to store the repository in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>a{sv}: See below for accepted keys. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-create-at.returns"></a><h4>Returns</h4>
+<p>A new OSTree repository reference. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2017.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-create"></a><h3>ostree_repo_create ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_create (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode"><span class="type">OstreeRepoMode</span></a> mode</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Create the underlying structure on disk for the repository, and call
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()"><code class="function">ostree_repo_open()</code></a> on the result, preparing it for use.</p>
+<p>Since version 2016.8, this function will succeed on an existing
+repository, and finish creating any necessary files in a partially
+created repository. However, this function cannot change the mode
+of an existing repository, and will silently ignore an attempt to
+do so.</p>
+<p>Since 2017.9, "existing repository" is defined by the existence of an
+<code class="literal">objects</code> subdirectory.</p>
+<p>This function predates <a class="link" href="ostree-OstreeRepo.html#ostree-repo-create-at" title="ostree_repo_create_at ()"><code class="function">ostree_repo_create_at()</code></a>. It is an error to call
+this function on a repository initialized via <a class="link" href="ostree-OstreeRepo.html#ostree-repo-open-at" title="ostree_repo_open_at ()"><code class="function">ostree_repo_open_at()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-create.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>The mode to store the repository in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-collection-id"></a><h3>ostree_repo_get_collection_id ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *
+ostree_repo_get_collection_id (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>Get the collection ID of this repository. See collection IDs.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-collection-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-collection-id.returns"></a><h4>Returns</h4>
+<p>collection ID for the repository. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-bootloader"></a><h3>ostree_repo_get_bootloader ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *
+ostree_repo_get_bootloader (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>Get the bootloader configured. See the documentation for the
+"sysroot.bootloader" config key.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-bootloader.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-bootloader.returns"></a><h4>Returns</h4>
+<p>bootloader configuration for the sysroot. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+<p class="since">Since: 2019.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-path"></a><h3>ostree_repo_get_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">GFile</span> *
+ostree_repo_get_path (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>Note that since the introduction of <a class="link" href="ostree-OstreeRepo.html#ostree-repo-open-at" title="ostree_repo_open_at ()"><code class="function">ostree_repo_open_at()</code></a>, this function may
+return a process-specific path in <code class="literal">/proc</code> if the repository was created using
+that API. In general, you should avoid use of this API.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-path.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-path.returns"></a><h4>Returns</h4>
+<p>Path to repo. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-mode"></a><h3>ostree_repo_get_mode ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode"><span class="returnvalue">OstreeRepoMode</span></a>
+ostree_repo_get_mode (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-min-free-space-bytes"></a><h3>ostree_repo_get_min_free_space_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_get_min_free_space_bytes (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_reserved_bytes</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Determine the number of bytes of free disk space that are reserved according
+to the repo config and return that number in <em class="parameter"><code>out_reserved_bytes</code></em>
+. See the
+documentation for the core.min-free-space-size and
+core.min-free-space-percent repo config options.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-min-free-space-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_reserved_bytes</p></td>
+<td class="parameter_description"><p>Location to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Return location for a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-min-free-space-bytes.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> otherwise.</p>
+</div>
+<p class="since">Since: 2018.9</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-config"></a><h3>ostree_repo_get_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">GKeyFile</span> *
+ostree_repo_get_config (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-get-config.returns"></a><h4>Returns</h4>
+<p>The repository configuration; do not modify. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-dfd"></a><h3>ostree_repo_get_dfd ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_repo_get_dfd (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>In some cases it's useful for applications to access the repository
+directly; for example, writing content into <code class="literal">repo/tmp</code> ensures it's
+on the same filesystem. Another case is detecting the mtime on the
+repository (to see whether a ref was written).</p>
+<div class="refsect3">
+<a name="ostree-repo-get-dfd.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-dfd.returns"></a><h4>Returns</h4>
+<p> File descriptor for repository root - owned by <em class="parameter"><code>self</code></em>
+</p>
+</div>
+<p class="since">Since: 2016.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-default-repo-finders"></a><h3>ostree_repo_get_default_repo_finders ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *const *
+ostree_repo_get_default_repo_finders (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>Get the set of default repo finders configured. See the documentation for
+the "core.default-repo-finders" config key.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-default-repo-finders.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-default-repo-finders.returns"></a><h4>Returns</h4>
+<p><code class="literal">NULL</code>-terminated array of strings. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></p>
+</div>
+<p class="since">Since: 2018.9</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-lock-pop"></a><h3>ostree_repo_lock_pop ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_lock_pop (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoLockType" title="enum OstreeRepoLockType"><span class="type">OstreeRepoLockType</span></a> lock_type</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Release a lock of type <em class="parameter"><code>lock_type</code></em>
+ from the lock state. If the lock state
+becomes empty, the repository is unlocked. Otherwise, the lock state only
+changes when transitioning from an exclusive lock back to a shared lock. The
+requested <em class="parameter"><code>lock_type</code></em>
+ must be the same type that was requested in the call to
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-push" title="ostree_repo_lock_push ()"><code class="function">ostree_repo_lock_push()</code></a>. It is a programmer error if these do not match and
+the program may abort if the lock would reach an invalid state.</p>
+<p>ostree_repo_lock_pop() waits for the lock depending on the repository's
+lock-timeout-secs configuration. When lock-timeout-secs is -1, a blocking lock is
+attempted. Otherwise, the lock is removed non-blocking and
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-pop" title="ostree_repo_lock_pop ()"><code class="function">ostree_repo_lock_pop()</code></a> will sleep synchronously up to lock-timeout-secs seconds
+attempting to remove the lock. If the lock cannot be removed within the
+timeout, a <code class="literal">G_IO_ERROR_WOULD_BLOCK</code> error is returned.</p>
+<p>If <em class="parameter"><code>self</code></em>
+ is not writable by the user, then no unlocking is attempted and
+<code class="literal">TRUE</code> is returned.</p>
+<div class="refsect3">
+<a name="ostree-repo-lock-pop.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>lock_type</p></td>
+<td class="parameter_description"><p>the type of lock to release</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-lock-pop.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, otherwise <code class="literal">FALSE</code> with <em class="parameter"><code>error</code></em>
+set</p>
+</div>
+<p class="since">Since: 2021.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-lock-push"></a><h3>ostree_repo_lock_push ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_lock_push (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoLockType" title="enum OstreeRepoLockType"><span class="type">OstreeRepoLockType</span></a> lock_type</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Takes a lock on the repository and adds it to the lock state. If <em class="parameter"><code>lock_type</code></em>
+
+is <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LOCK-SHARED:CAPS"><code class="literal">OSTREE_REPO_LOCK_SHARED</code></a>, a shared lock is taken. If <em class="parameter"><code>lock_type</code></em>
+ is
+<a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LOCK-EXCLUSIVE:CAPS"><code class="literal">OSTREE_REPO_LOCK_EXCLUSIVE</code></a>, an exclusive lock is taken. The actual lock
+state is only changed when locking a previously unlocked repository or
+upgrading the lock from shared to exclusive. If the requested lock type is
+unchanged or would represent a downgrade (exclusive to shared), the lock
+state is not changed.</p>
+<p>ostree_repo_lock_push() waits for the lock depending on the repository's
+lock-timeout-secs configuration. When lock-timeout-secs is -1, a blocking lock is
+attempted. Otherwise, the lock is taken non-blocking and
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-push" title="ostree_repo_lock_push ()"><code class="function">ostree_repo_lock_push()</code></a> will sleep synchronously up to lock-timeout-secs seconds
+attempting to acquire the lock. If the lock cannot be acquired within the
+timeout, a <code class="literal">G_IO_ERROR_WOULD_BLOCK</code> error is returned.</p>
+<p>If <em class="parameter"><code>self</code></em>
+ is not writable by the user, then no locking is attempted and
+<code class="literal">TRUE</code> is returned.</p>
+<div class="refsect3">
+<a name="ostree-repo-lock-push.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>lock_type</p></td>
+<td class="parameter_description"><p>the type of lock to acquire</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-lock-push.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, otherwise <code class="literal">FALSE</code> with <em class="parameter"><code>error</code></em>
+set</p>
+</div>
+<p class="since">Since: 2021.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-auto-lock-push"></a><h3>ostree_repo_auto_lock_push ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock"><span class="returnvalue">OstreeRepoAutoLock</span></a> *
+ostree_repo_auto_lock_push (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoLockType" title="enum OstreeRepoLockType"><span class="type">OstreeRepoLockType</span></a> lock_type</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-push" title="ostree_repo_lock_push ()"><code class="function">ostree_repo_lock_push()</code></a>, but for usage with <a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock"><span class="type">OstreeRepoAutoLock</span></a>. The
+intended usage is to declare the <a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock"><span class="type">OstreeRepoAutoLock</span></a> with <code class="function">g_autoptr()</code> so
+that <a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-cleanup" title="ostree_repo_auto_lock_cleanup ()"><code class="function">ostree_repo_auto_lock_cleanup()</code></a> is called when it goes out of scope.
+This will automatically release the lock if it was acquired successfully.</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="n">g_autoptr</span><span class="p">(</span><span class="n">OstreeRepoAutoLock</span><span class="p">)</span><span class="w"> </span><span class="n">lock</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span>
+<span class="n">lock</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ostree_repo_auto_lock_push</span><span class="w"> </span><span class="p">(</span><span class="n">repo</span><span class="p">,</span><span class="w"> </span><span class="n">lock_type</span><span class="p">,</span><span class="w"> </span><span class="n">cancellable</span><span class="p">,</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">lock</span><span class="p">)</span>
+<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p></p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-auto-lock-push.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>lock_type</p></td>
+<td class="parameter_description"><p>the type of lock to acquire</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-auto-lock-push.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>self</code></em>
+on success, otherwise <code class="literal">NULL</code> with <em class="parameter"><code>error</code></em>
+set</p>
+</div>
+<p class="since">Since: 2021.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-auto-lock-cleanup"></a><h3>ostree_repo_auto_lock_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_auto_lock_cleanup (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock"><span class="type">OstreeRepoAutoLock</span></a> *lock</code></em>);</pre>
+<p>A cleanup handler for use with <a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-push" title="ostree_repo_auto_lock_push ()"><code class="function">ostree_repo_auto_lock_push()</code></a>. If <em class="parameter"><code>lock</code></em>
+ is
+not <code class="literal">NULL</code>, <a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-pop" title="ostree_repo_lock_pop ()"><code class="function">ostree_repo_lock_pop()</code></a> will be called on it. If
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-pop" title="ostree_repo_lock_pop ()"><code class="function">ostree_repo_lock_pop()</code></a> fails, a critical warning will be emitted.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-auto-lock-cleanup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>lock</p></td>
+<td class="parameter_description"><p>a <a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock"><span class="type">OstreeRepoAutoLock</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2021.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-hash"></a><h3>ostree_repo_hash ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_repo_hash (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>Calculate a hash value for the given open repository, suitable for use when
+putting it into a hash table. It is an error to call this on an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>
+which is not yet open, as a persistent hash value cannot be calculated until
+the repository is open and the inode of its root directory has been loaded.</p>
+<p>This function does no I/O.</p>
+<div class="refsect3">
+<a name="ostree-repo-hash.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-hash.returns"></a><h4>Returns</h4>
+<p> hash value for the <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p>
+</div>
+<p class="since">Since: 2017.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-equal"></a><h3>ostree_repo_equal ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_equal (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *a</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *b</code></em>);</pre>
+<p>Check whether two opened repositories are the same on disk: if their root
+directories are the same inode. If <em class="parameter"><code>a</code></em>
+ or <em class="parameter"><code>b</code></em>
+ are not open yet (due to
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()"><code class="function">ostree_repo_open()</code></a> not being called on them yet), <code class="literal">FALSE</code> will be returned.</p>
+<div class="refsect3">
+<a name="ostree-repo-equal.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-equal.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>a</code></em>
+and <em class="parameter"><code>b</code></em>
+are the same repository on disk, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2017.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-copy-config"></a><h3>ostree_repo_copy_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">GKeyFile</span> *
+ostree_repo_copy_config (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-copy-config.returns"></a><h4>Returns</h4>
+<p>A newly-allocated copy of the repository config. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-add"></a><h3>ostree_repo_remote_add ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_add (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *url</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Create a new remote named <em class="parameter"><code>name</code></em>
+ pointing to <em class="parameter"><code>url</code></em>
+. If <em class="parameter"><code>options</code></em>
+ is
+provided, then it will be mapped to <span class="type">GKeyFile</span> entries, where the
+GVariant dictionary key is an option string, and the value is
+mapped as follows:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>s: <code class="function">g_key_file_set_string()</code></p></li>
+<li class="listitem"><p>b: <code class="function">g_key_file_set_boolean()</code></p></li>
+<li class="listitem"><p>as: <code class="function">g_key_file_set_string_list()</code></p></li>
+</ul></div>
+<div class="refsect3">
+<a name="ostree-repo-remote-add.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>url</p></td>
+<td class="parameter_description"><p>URL for remote (if URL begins with metalink=, it will be used as such). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>GVariant of type a{sv}. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-delete"></a><h3>ostree_repo_remote_delete ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_delete (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Delete the remote named <em class="parameter"><code>name</code></em>
+. It is an error if the provided
+remote does not exist.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-delete.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-change"></a><h3>ostree_repo_remote_change ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_change (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *sysroot</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoRemoteChange" title="enum OstreeRepoRemoteChange"><span class="type">OstreeRepoRemoteChange</span></a> changeop</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *url</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>A combined function handling the equivalent of
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-add" title="ostree_repo_remote_add ()"><code class="function">ostree_repo_remote_add()</code></a>, <a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-delete" title="ostree_repo_remote_delete ()"><code class="function">ostree_repo_remote_delete()</code></a>, with more
+options.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-change.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>System root. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>changeop</p></td>
+<td class="parameter_description"><p>Operation to perform</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>url</p></td>
+<td class="parameter_description"><p>URL for remote (if URL begins with metalink=, it will be used as such). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>GVariant of type a{sv}. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-list"></a><h3>ostree_repo_remote_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> **
+ostree_repo_remote_list (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> *out_n_remotes</code></em>);</pre>
+<p>List available remote names in an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>. Remote names are sorted
+alphabetically. If no remotes are available the function returns <code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-list.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_n_remotes</p></td>
+<td class="parameter_description"><p>Number of remotes available. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-list.returns"></a><h4>Returns</h4>
+<p>a <code class="literal">NULL</code>-terminated
+array of remote names. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> length=out_n_remotes][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-list-collection-refs"></a><h3>ostree_repo_remote_list_collection_refs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_list_collection_refs
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_all_refs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>List refs advertised by <em class="parameter"><code>remote_name</code></em>
+, including refs which are part of
+collections. If the repository at <em class="parameter"><code>remote_name</code></em>
+ has a collection ID set, its
+refs will be returned with that collection ID; otherwise, they will be returned
+with a <code class="literal">NULL</code> collection ID in each <span class="type">OstreeCollectionRef</span> key in <em class="parameter"><code>out_all_refs</code></em>
+.
+Any refs for other collections stored in the repository will also be returned.
+No filtering is performed.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-list-collection-refs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of the remote.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_all_refs</p></td>
+<td class="parameter_description"><p>Mapping from collection–ref to checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeCollectionRef utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-get-url"></a><h3>ostree_repo_remote_get_url ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_get_url (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_url</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Return the URL of the remote named <em class="parameter"><code>name</code></em>
+ through <em class="parameter"><code>out_url</code></em>
+. It is an
+error if the provided remote does not exist.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-url.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_url</p></td>
+<td class="parameter_description"><p>Remote's URL. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-url.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-get-gpg-verify"></a><h3>ostree_repo_remote_get_gpg_verify ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_get_gpg_verify (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_gpg_verify</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Return whether GPG verification is enabled for the remote named <em class="parameter"><code>name</code></em>
+
+through <em class="parameter"><code>out_gpg_verify</code></em>
+. It is an error if the provided remote does
+not exist.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-gpg-verify.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_gpg_verify</p></td>
+<td class="parameter_description"><p>Remote's GPG option. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-gpg-verify.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-get-gpg-verify-summary"></a><h3>ostree_repo_remote_get_gpg_verify_summary ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_get_gpg_verify_summary
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_gpg_verify_summary</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Return whether GPG verification of the summary is enabled for the remote
+named <em class="parameter"><code>name</code></em>
+ through <em class="parameter"><code>out_gpg_verify_summary</code></em>
+. It is an error if the provided
+remote does not exist.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-gpg-verify-summary.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_gpg_verify_summary</p></td>
+<td class="parameter_description"><p>Remote's GPG option. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-gpg-verify-summary.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-get-gpg-keys"></a><h3>ostree_repo_remote_get_gpg_keys ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_get_gpg_keys (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *const *key_ids</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> **out_keys</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Enumerate the trusted GPG keys for the remote <em class="parameter"><code>name</code></em>
+. If <em class="parameter"><code>name</code></em>
+ is
+<code class="literal">NULL</code>, the global GPG keys will be returned. The keys will be
+returned in the <em class="parameter"><code>out_keys</code></em>
+ <span class="type">GPtrArray</span>. Each element in the array is a
+<span class="type">GVariant</span> of format <code class="literal">OSTREE_GPG_KEY_GVARIANT_FORMAT</code>. The <em class="parameter"><code>key_ids</code></em>
+
+array can be used to limit which keys are included. If <em class="parameter"><code>key_ids</code></em>
+ is
+<code class="literal">NULL</code>, then all keys are included.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-gpg-keys.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name of the remote or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_ids</p></td>
+<td class="parameter_description"><p>a <code class="literal">NULL</code>-terminated array of GPG key IDs to include, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_keys</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GPtrArray</span> of the remote's trusted GPG keys, or
+<code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span>, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-get-gpg-keys.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if the GPG keys could be enumerated, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2021.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-gpg-import"></a><h3>ostree_repo_remote_gpg_import ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_gpg_import (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *source_stream</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *const *key_ids</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> *out_imported</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Imports one or more GPG keys from the open <em class="parameter"><code>source_stream</code></em>
+, or from the
+user's personal keyring if <em class="parameter"><code>source_stream</code></em>
+ is <code class="literal">NULL</code>. The <em class="parameter"><code>key_ids</code></em>
+ array
+can optionally restrict which keys are imported. If <em class="parameter"><code>key_ids</code></em>
+ is <code class="literal">NULL</code>,
+then all keys are imported.</p>
+<p>The imported keys will be used to conduct GPG verification when pulling
+from the remote named <em class="parameter"><code>name</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-gpg-import.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name of a remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>source_stream</p></td>
+<td class="parameter_description"><p>a <span class="type">GInputStream</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_ids</p></td>
+<td class="parameter_description"><p>a <code class="literal">NULL</code>-terminated array of
+GPG key IDs, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_imported</p></td>
+<td class="parameter_description"><p>return location for the number of imported
+keys, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-gpg-import.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-fetch-summary"></a><h3>ostree_repo_remote_fetch_summary ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_fetch_summary (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> **out_summary</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> **out_signatures</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Tries to fetch the summary file and any GPG signatures on the summary file
+over HTTP, and returns the binary data in <em class="parameter"><code>out_summary</code></em>
+ and <em class="parameter"><code>out_signatures</code></em>
+
+respectively.</p>
+<p>If no summary file exists on the remote server, <em class="parameter"><code>out_summary</code></em>
+ is set to
+<em class="parameter"><code>NULL</code></em>
+. Likewise if the summary file is not signed, <em class="parameter"><code>out_signatures</code></em>
+ is
+set to <em class="parameter"><code>NULL</code></em>
+. In either case the function still returns <code class="literal">TRUE</code>.</p>
+<p>This method does not verify the signature of the downloaded summary file.
+Use <a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-summary" title="ostree_repo_verify_summary ()"><code class="function">ostree_repo_verify_summary()</code></a> for that.</p>
+<p>Parse the summary data into a <span class="type">GVariant</span> using <code class="function">g_variant_new_from_bytes()</code>
+with <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-FORMAT:CAPS" title="OSTREE_SUMMARY_GVARIANT_FORMAT"><span class="type">OSTREE_SUMMARY_GVARIANT_FORMAT</span></a> as the format string.</p>
+<div class="refsect3">
+<a name="ostree-repo-remote-fetch-summary.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name of a remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_summary</p></td>
+<td class="parameter_description"><p>return location for raw summary data, or
+<code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_signatures</p></td>
+<td class="parameter_description"><p>return location for raw summary
+signature data, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-fetch-summary.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-fetch-summary-with-options"></a><h3>ostree_repo_remote_fetch_summary_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_fetch_summary_with_options
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> **out_summary</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> **out_signatures</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary" title="ostree_repo_remote_fetch_summary ()"><code class="function">ostree_repo_remote_fetch_summary()</code></a>, but supports an extensible set of flags.
+The following are currently defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>override-url (s): Fetch summary from this URL if remote specifies no metalink in options</p></li>
+<li class="listitem"><p>http-headers (a(ss)): Additional headers to add to all HTTP requests</p></li>
+<li class="listitem"><p>append-user-agent (s): Additional string to append to the user agent</p></li>
+<li class="listitem"><p>n-network-retries (u): Number of times to retry each download on receiving
+a transient network error, such as a socket timeout; default is 5, 0
+means return errors without retrying</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="ostree-repo-remote-fetch-summary-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name of a remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>A GVariant a{sv} with an extensible set of flags. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_summary</p></td>
+<td class="parameter_description"><p>return location for raw summary data, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_signatures</p></td>
+<td class="parameter_description"><p>return location for raw summary signature
+data, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-remote-fetch-summary-with-options.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+<p class="since">Since: 2016.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-reload-config"></a><h3>ostree_repo_reload_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_reload_config (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>By default, an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> will cache the remote configuration and its
+own repo/config data. This API can be used to reload it.</p>
+<div class="refsect3">
+<a name="ostree-repo-reload-config.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-remote-boolean-option"></a><h3>ostree_repo_get_remote_boolean_option ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_get_remote_boolean_option (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option_name</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> default_value</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_value</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>OSTree remotes are represented by keyfile groups, formatted like:
+<code class="literal">[remote "remotename"]</code>. This function returns a value named <em class="parameter"><code>option_name</code></em>
+
+underneath that group, and returns it as a boolean.
+If the option is not set, <em class="parameter"><code>out_value</code></em>
+ will be set to <em class="parameter"><code>default_value</code></em>
+. If an
+error is returned, <em class="parameter"><code>out_value</code></em>
+ will be set to <code class="literal">FALSE</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-remote-boolean-option.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A OstreeRepo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>option_name</p></td>
+<td class="parameter_description"><p>Option</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>default_value</p></td>
+<td class="parameter_description"><p>Value returned if <em class="parameter"><code>option_name</code></em>
+is not present</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_value</p></td>
+<td class="parameter_description"><p>(out) : location to store the result.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-remote-boolean-option.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, otherwise <code class="literal">FALSE</code> with <em class="parameter"><code>error</code></em>
+set</p>
+</div>
+<p class="since">Since: 2016.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-remote-list-option"></a><h3>ostree_repo_get_remote_list_option ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_get_remote_list_option (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option_name</code></em>,
+ <em class="parameter"><code><span class="type">char</span> ***out_value</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>OSTree remotes are represented by keyfile groups, formatted like:
+<code class="literal">[remote "remotename"]</code>. This function returns a value named <em class="parameter"><code>option_name</code></em>
+
+underneath that group, and returns it as a zero terminated array of strings.
+If the option is not set, or if an error is returned, <em class="parameter"><code>out_value</code></em>
+ will be set
+to <code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-remote-list-option.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A OstreeRepo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>option_name</p></td>
+<td class="parameter_description"><p>Option</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_value</p></td>
+<td class="parameter_description"><p>location to store the list
+of strings. The list should be freed with
+<code class="function">g_strfreev()</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-remote-list-option.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, otherwise <code class="literal">FALSE</code> with <em class="parameter"><code>error</code></em>
+set</p>
+</div>
+<p class="since">Since: 2016.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-remote-option"></a><h3>ostree_repo_get_remote_option ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_get_remote_option (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *option_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *default_value</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_value</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>OSTree remotes are represented by keyfile groups, formatted like:
+<code class="literal">[remote "remotename"]</code>. This function returns a value named <em class="parameter"><code>option_name</code></em>
+
+underneath that group, or <em class="parameter"><code>default_value</code></em>
+ if the remote exists but not the
+option name. If an error is returned, <em class="parameter"><code>out_value</code></em>
+ will be set to <code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-remote-option.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A OstreeRepo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>option_name</p></td>
+<td class="parameter_description"><p>Option</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>default_value</p></td>
+<td class="parameter_description"><p>Value returned if <em class="parameter"><code>option_name</code></em>
+is not present. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_value</p></td>
+<td class="parameter_description"><p>Return location for value. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-remote-option.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, otherwise <code class="literal">FALSE</code> with <em class="parameter"><code>error</code></em>
+set</p>
+</div>
+<p class="since">Since: 2016.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-get-parent"></a><h3>ostree_repo_get_parent ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_get_parent (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>);</pre>
+<p>Before this function can be used, <code class="function">ostree_repo_init()</code> must have been
+called.</p>
+<div class="refsect3">
+<a name="ostree-repo-get-parent.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-get-parent.returns"></a><h4>Returns</h4>
+<p>Parent repository, or <code class="literal">NULL</code> if none. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-config"></a><h3>ostree_repo_write_config ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_config (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *new_config</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Save <em class="parameter"><code>new_config</code></em>
+ in place of this repository's config file.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-config.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>new_config</p></td>
+<td class="parameter_description"><p>Overwrite the config file with this data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-scan-hardlinks"></a><h3>ostree_repo_scan_hardlinks ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_scan_hardlinks (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function is deprecated in favor of using <a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-new" title="ostree_repo_devino_cache_new ()"><code class="function">ostree_repo_devino_cache_new()</code></a>,
+which allows a precise mapping to be built up between hardlink checkout files
+and their checksums between <code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at" title="ostree_repo_checkout_at ()"><code class="function">ostree_repo_checkout_at()</code></a></code> and
+<code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()"><code class="function">ostree_repo_write_directory_to_mtree()</code></a></code>.</p>
+<p>When invoking <a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()"><code class="function">ostree_repo_write_directory_to_mtree()</code></a>, it has to compute the
+checksum of all files. If your commit contains hardlinks from a checkout,
+this functions builds a mapping of device numbers and inodes to their
+checksum.</p>
+<p>There is an upfront cost to creating this mapping, as this will scan the
+entire objects directory. If your commit is composed of mostly hardlinks to
+existing ostree objects, then this will speed up considerably, so call it
+before you call <a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()"><code class="function">ostree_repo_write_directory_to_mtree()</code></a> or similar. However,
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-new" title="ostree_repo_devino_cache_new ()"><code class="function">ostree_repo_devino_cache_new()</code></a> is better as it avoids scanning all objects.</p>
+<p>Multithreading: This function is *not* MT safe.</p>
+<div class="refsect3">
+<a name="ostree-repo-scan-hardlinks.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-prepare-transaction"></a><h3>ostree_repo_prepare_transaction ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_prepare_transaction (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_transaction_resume</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Starts or resumes a transaction. In order to write to a repo, you
+need to start a transaction. You can complete the transaction with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a>, or abort the transaction with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-abort-transaction" title="ostree_repo_abort_transaction ()"><code class="function">ostree_repo_abort_transaction()</code></a>.</p>
+<p>Currently, transactions may result in partial commits or data in the target
+repository if interrupted during <a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a>, and
+further writing refs is also not currently atomic.</p>
+<p>There can be at most one transaction active on a repo at a time per instance
+of <code class="literal">OstreeRepo</code>; however, it is safe to have multiple threads writing objects
+on a single <code class="literal">OstreeRepo</code> instance as long as their lifetime is bounded by the
+transaction.</p>
+<p>Locking: Acquires a <code class="literal">shared</code> lock; release via commit or abort
+Multithreading: This function is *not* MT safe; only one transaction can be
+active at a time.</p>
+<div class="refsect3">
+<a name="ostree-repo-prepare-transaction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_transaction_resume</p></td>
+<td class="parameter_description"><p>Whether this transaction
+is resuming from a previous one. This is a legacy state, now OSTree
+pulls use per-commit <code class="literal">state/.commitpartial</code> files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>][<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-transaction"></a><h3>ostree_repo_commit_transaction ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_commit_transaction (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoTransactionStats" title="struct OstreeRepoTransactionStats"><span class="type">OstreeRepoTransactionStats</span></a> *out_stats</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Complete the transaction. Any refs set with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-ref" title="ostree_repo_transaction_set_ref ()"><code class="function">ostree_repo_transaction_set_ref()</code></a> or
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-refspec" title="ostree_repo_transaction_set_refspec ()"><code class="function">ostree_repo_transaction_set_refspec()</code></a> will be written out.</p>
+<p>Note that if multiple threads are performing writes, all such threads must
+have terminated before this function is invoked.</p>
+<p>Locking: Releases <code class="literal">shared</code> lock acquired by <code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-prepare-transaction" title="ostree_repo_prepare_transaction ()"><code class="function">ostree_repo_prepare_transaction()</code></a></code>
+Multithreading: This function is *not* MT safe; only one transaction can be
+active at a time.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-transaction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_stats</p></td>
+<td class="parameter_description"><p>A set of statistics of things
+that happened during this transaction. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>][<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-abort-transaction"></a><h3>ostree_repo_abort_transaction ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_abort_transaction (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Abort the active transaction; any staged objects and ref changes will be
+discarded. You *must* invoke this if you have chosen not to invoke
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a>. Calling this function when not in a
+transaction will do nothing and return successfully.</p>
+<div class="refsect3">
+<a name="ostree-repo-abort-transaction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-transaction-set-refspec"></a><h3>ostree_repo_transaction_set_refspec ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_transaction_set_refspec (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *refspec</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+<p>Like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-ref" title="ostree_repo_transaction_set_ref ()"><code class="function">ostree_repo_transaction_set_ref()</code></a>, but takes concatenated
+<em class="parameter"><code>refspec</code></em>
+ format as input instead of separate remote and name
+arguments.</p>
+<p>Multithreading: Since v2017.15 this function is MT safe.</p>
+<div class="refsect3">
+<a name="ostree-repo-transaction-set-refspec.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refspec</p></td>
+<td class="parameter_description"><p>The refspec to write</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>The checksum to point it to. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-transaction-set-collection-ref"></a><h3>ostree_repo_transaction_set_collection_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_transaction_set_collection_ref
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *ref</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+<p>If <em class="parameter"><code>checksum</code></em>
+ is not <code class="literal">NULL</code>, then record it as the target of local ref named
+<em class="parameter"><code>ref</code></em>
+.</p>
+<p>Otherwise, if <em class="parameter"><code>checksum</code></em>
+ is <code class="literal">NULL</code>, then record that the ref should
+be deleted.</p>
+<p>The change will not be written out immediately, but when the transaction
+is completed with <a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a>. If the transaction
+is instead aborted with <a class="link" href="ostree-OstreeRepo.html#ostree-repo-abort-transaction" title="ostree_repo_abort_transaction ()"><code class="function">ostree_repo_abort_transaction()</code></a>, no changes will
+be made to the repository.</p>
+<p>Multithreading: Since v2017.15 this function is MT safe.</p>
+<div class="refsect3">
+<a name="ostree-repo-transaction-set-collection-ref.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>The collection–ref to write</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>The checksum to point it to. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-transaction-set-ref"></a><h3>ostree_repo_transaction_set_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_transaction_set_ref (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ref</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>);</pre>
+<p>If <em class="parameter"><code>checksum</code></em>
+ is not <code class="literal">NULL</code>, then record it as the target of ref named
+<em class="parameter"><code>ref</code></em>
+; if <em class="parameter"><code>remote</code></em>
+ is provided, the ref will appear to originate from that
+remote.</p>
+<p>Otherwise, if <em class="parameter"><code>checksum</code></em>
+ is <code class="literal">NULL</code>, then record that the ref should
+be deleted.</p>
+<p>The change will be written when the transaction is completed with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a>; that function takes care of writing all of
+the objects (such as the commit referred to by <em class="parameter"><code>checksum</code></em>
+) before updating the
+refs. If the transaction is instead aborted with
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-abort-transaction" title="ostree_repo_abort_transaction ()"><code class="function">ostree_repo_abort_transaction()</code></a>, no changes to the ref will be made to the
+repository.</p>
+<p>Note however that currently writing *multiple* refs is not truly atomic; if
+the process or system is terminated during
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()"><code class="function">ostree_repo_commit_transaction()</code></a>, it is possible that just some of the refs
+will have been updated. Your application should take care to handle this
+case.</p>
+<p>Multithreading: Since v2017.15 this function is MT safe.</p>
+<div class="refsect3">
+<a name="ostree-repo-transaction-set-ref.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>A remote for the ref. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>The ref to write</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>The checksum to point it to. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-set-ref-immediate"></a><h3>ostree_repo_set_ref_immediate ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_set_ref_immediate (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ref</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This is like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-ref" title="ostree_repo_transaction_set_ref ()"><code class="function">ostree_repo_transaction_set_ref()</code></a>, except it may be
+invoked outside of a transaction. This is presently safe for the
+case where we're creating or overwriting an existing ref.</p>
+<p>Multithreading: This function is MT safe.</p>
+<div class="refsect3">
+<a name="ostree-repo-set-ref-immediate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>A remote for the ref. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>The ref to write</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>The checksum to point it to, or <code class="literal">NULL</code> to unset. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>GCancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>GError</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-set-alias-ref-immediate"></a><h3>ostree_repo_set_alias_ref_immediate ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_set_alias_ref_immediate (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ref</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *target</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-ref-immediate" title="ostree_repo_set_ref_immediate ()"><code class="function">ostree_repo_set_ref_immediate()</code></a>, but creates an alias.</p>
+<div class="refsect3">
+<a name="ostree-repo-set-alias-ref-immediate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>A remote for the ref. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>The ref to write</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>The ref target to point it to, or <code class="literal">NULL</code> to unset. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>GCancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>GError</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-set-cache-dir"></a><h3>ostree_repo_set_cache_dir ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_set_cache_dir (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Set a custom location for the cache directory used for e.g.
+per-remote summary caches. Setting this manually is useful when
+doing operations on a system repo as a user because you don't have
+write permissions in the repo, where the cache is normally stored.</p>
+<div class="refsect3">
+<a name="ostree-repo-set-cache-dir.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>directory fd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>subpath in <em class="parameter"><code>dfd</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-set-collection-id"></a><h3>ostree_repo_set_collection_id ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_set_collection_id (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *collection_id</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Set or clear the collection ID of this repository. See collection IDs.
+The update will be made in memory, but must be written out to the repository
+configuration on disk using <a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-config" title="ostree_repo_write_config ()"><code class="function">ostree_repo_write_config()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-set-collection-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection_id</p></td>
+<td class="parameter_description"><p>new collection ID, or <code class="literal">NULL</code> to unset it. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span>, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-set-collection-id.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-set-collection-ref-immediate"></a><h3>ostree_repo_set_collection_ref_immediate ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_set_collection_ref_immediate
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *ref</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This is like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-collection-ref" title="ostree_repo_transaction_set_collection_ref ()"><code class="function">ostree_repo_transaction_set_collection_ref()</code></a>, except it may be
+invoked outside of a transaction. This is presently safe for the
+case where we're creating or overwriting an existing ref.</p>
+<div class="refsect3">
+<a name="ostree-repo-set-collection-ref-immediate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>The collection–ref to write</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>The checksum to point it to, or <code class="literal">NULL</code> to unset. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>GCancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>GError</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-set-collection-ref-immediate.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-sign-delta"></a><h3>ostree_repo_sign_delta ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_sign_delta (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *from_commit</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *to_commit</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *key_id</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *homedir</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function is deprecated, sign the summary file instead.
+Add a GPG signature to a static delta.</p>
+<div class="refsect3">
+<a name="ostree-repo-sign-delta.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>from_commit</p></td>
+<td class="parameter_description"><p>From commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>to_commit</p></td>
+<td class="parameter_description"><p>To commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_id</p></td>
+<td class="parameter_description"><p>key id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>homedir</p></td>
+<td class="parameter_description"><p>homedir</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-has-object"></a><h3>ostree_repo_has_object ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_has_object (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_have_object</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Set <em class="parameter"><code>out_have_object</code></em>
+ to <code class="literal">TRUE</code> if <em class="parameter"><code>self</code></em>
+ contains the given object;
+<code class="literal">FALSE</code> otherwise.</p>
+<div class="refsect3">
+<a name="ostree-repo-has-object.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_have_object</p></td>
+<td class="parameter_description"><p><code class="literal">TRUE</code> if repository contains object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-has-object.returns"></a><h4>Returns</h4>
+<p> <code class="literal">FALSE</code> if an unexpected error occurred, <code class="literal">TRUE</code> otherwise</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-mark-commit-partial"></a><h3>ostree_repo_mark_commit_partial ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_mark_commit_partial (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> is_partial</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Commits in the "partial" state do not have all their child objects
+written. This occurs in various situations, such as during a pull,
+but also if a "subpath" pull is used, as well as "commit only"
+pulls.</p>
+<p>This function is used by <a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-with-options" title="ostree_repo_pull_with_options ()"><code class="function">ostree_repo_pull_with_options()</code></a>; you
+should use this if you are implementing a different type of transport.</p>
+<div class="refsect3">
+<a name="ostree-repo-mark-commit-partial.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>Commit SHA-256</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>is_partial</p></td>
+<td class="parameter_description"><p>Whether or not this commit is partial</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-mark-commit-partial-reason"></a><h3>ostree_repo_mark_commit_partial_reason ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_mark_commit_partial_reason
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> is_partial</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitState" title="enum OstreeRepoCommitState"><span class="type">OstreeRepoCommitState</span></a> in_state</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Allows the setting of a reason code for a partial commit. Presently
+it only supports setting reason bitmask to
+OSTREE_REPO_COMMIT_STATE_FSCK_PARTIAL, or
+OSTREE_REPO_COMMIT_STATE_NORMAL. This will allow successive ostree
+fsck operations to exit properly with an error code if the
+repository has been truncated as a result of fsck trying to repair
+it.</p>
+<div class="refsect3">
+<a name="ostree-repo-mark-commit-partial-reason.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>Commit SHA-256</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>is_partial</p></td>
+<td class="parameter_description"><p>Whether or not this commit is partial</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_state</p></td>
+<td class="parameter_description"><p>Reason bitmask for partial commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-metadata"></a><h3>ostree_repo_write_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_metadata (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *object</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store the metadata object <em class="parameter"><code>object</code></em>
+. Return the checksum
+as <em class="parameter"><code>out_csum</code></em>
+.</p>
+<p>If <em class="parameter"><code>expected_checksum</code></em>
+ is not <code class="literal">NULL</code>, verify it against the
+computed checksum.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>If provided, validate content against this checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p>Metadata</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>Binary checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-metadata-async"></a><h3>ostree_repo_write_metadata_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_write_metadata_async (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *object</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Asynchronously store the metadata object <em class="parameter"><code>variant</code></em>
+. If provided,
+the checksum <em class="parameter"><code>expected_checksum</code></em>
+ will be verified.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-metadata-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>If provided, validate content against this checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p>Metadata</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>Invoked when metadata is writed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>Data for <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-metadata-finish"></a><h3>ostree_repo_write_metadata_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_metadata_finish (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Complete a call to <a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-async" title="ostree_repo_write_metadata_async ()"><code class="function">ostree_repo_write_metadata_async()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-metadata-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>Result</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>Binary checksum value. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> guint8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-content"></a><h3>ostree_repo_write_content ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_content (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *object_input</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> length</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store the content object streamed as <em class="parameter"><code>object_input</code></em>
+,
+with total length <em class="parameter"><code>length</code></em>
+. The actual checksum will
+be returned as <em class="parameter"><code>out_csum</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-content.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>If provided, validate content against this checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object_input</p></td>
+<td class="parameter_description"><p>Content object stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>Length of <em class="parameter"><code>object_input</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>Binary checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> fixed-size=32][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-regfile"></a><h3>ostree_repo_write_regfile ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeContentWriter</span> *
+ostree_repo_write_regfile (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> uid</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> gid</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> mode</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> content_len</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Create an <code class="literal">OstreeContentWriter</code> that allows streaming output into
+the repository.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-regfile.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo,</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>Expected checksum (SHA-256 hex string). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uid</p></td>
+<td class="parameter_description"><p>user id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gid</p></td>
+<td class="parameter_description"><p>group id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>Unix file mode</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>content_len</p></td>
+<td class="parameter_description"><p>Expected content length</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes (GVariant type <code class="literal">(ayay)</code>). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-write-regfile.returns"></a><h4>Returns</h4>
+<p>A new writer, or <code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2021.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-regfile-inline"></a><h3>ostree_repo_write_regfile_inline ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_repo_write_regfile_inline (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> uid</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> gid</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> mode</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code>const <span class="type">guint8</span> *buf</code></em>,
+ <em class="parameter"><code><span class="type">gsize</span> len</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Synchronously create a file object from the provided content. This API
+is intended for small files where it is reasonable to buffer the entire
+content in memory.</p>
+<p>Unlike <code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content" title="ostree_repo_write_content ()"><code class="function">ostree_repo_write_content()</code></a></code>, if <em class="parameter"><code>expected_checksum</code></em>
+ is provided,
+this function will not check for the presence of the object beforehand.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-regfile-inline.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>The expected checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uid</p></td>
+<td class="parameter_description"><p>User id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gid</p></td>
+<td class="parameter_description"><p>Group id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>File mode</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes, GVariant of type (ayay). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf</p></td>
+<td class="parameter_description"><p>File contents. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> length=len][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> guint8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-write-regfile-inline.returns"></a><h4>Returns</h4>
+<p>Checksum (as a hex string) of the committed file. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2021.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-symlink"></a><h3>ostree_repo_write_symlink ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_repo_write_symlink (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> uid</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> gid</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *xattrs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *symlink_target</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Synchronously create a symlink object.</p>
+<p>Unlike <code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content" title="ostree_repo_write_content ()"><code class="function">ostree_repo_write_content()</code></a></code>, if <em class="parameter"><code>expected_checksum</code></em>
+ is provided,
+this function will not check for the presence of the object beforehand.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-symlink.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>The expected checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uid</p></td>
+<td class="parameter_description"><p>User id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gid</p></td>
+<td class="parameter_description"><p>Group id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes, GVariant of type (ayay). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>symlink_target</p></td>
+<td class="parameter_description"><p>Target of the symbolic link</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-write-symlink.returns"></a><h4>Returns</h4>
+<p>Checksum (as a hex string) of the committed file. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2021.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-metadata-trusted"></a><h3>ostree_repo_write_metadata_trusted ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_metadata_trusted (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *variant</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store the metadata object <em class="parameter"><code>variant</code></em>
+; the provided <em class="parameter"><code>checksum</code></em>
+ is
+trusted.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-metadata-trusted.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>Store object with this ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>variant</p></td>
+<td class="parameter_description"><p>Metadata object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-metadata-stream-trusted"></a><h3>ostree_repo_write_metadata_stream_trusted ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_metadata_stream_trusted
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *object_input</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> length</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store the metadata object <em class="parameter"><code>variant</code></em>
+; the provided <em class="parameter"><code>checksum</code></em>
+ is
+trusted.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-metadata-stream-trusted.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>Store object with this ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object_input</p></td>
+<td class="parameter_description"><p>Metadata object stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>Length, may be 0 for unknown</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-content-trusted"></a><h3>ostree_repo_write_content_trusted ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_content_trusted (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *object_input</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> length</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store the content object streamed as <em class="parameter"><code>object_input</code></em>
+, with total
+length <em class="parameter"><code>length</code></em>
+. The given <em class="parameter"><code>checksum</code></em>
+ will be treated as trusted.</p>
+<p>This function should be used when importing file objects from local
+disk, for example.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-content-trusted.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>Store content using this ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object_input</p></td>
+<td class="parameter_description"><p>Content stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>Length of <em class="parameter"><code>object_input</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Data for <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-content-async"></a><h3>ostree_repo_write_content_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_write_content_async (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *expected_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> *object</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> length</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Asynchronously store the content object <em class="parameter"><code>object</code></em>
+. If provided, the
+checksum <em class="parameter"><code>expected_checksum</code></em>
+ will be verified.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-content-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_checksum</p></td>
+<td class="parameter_description"><p>If provided, validate content against this checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p>Input</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>Length of <em class="parameter"><code>object</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>Invoked when content is writed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>User data for <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-content-finish"></a><h3>ostree_repo_write_content_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_content_finish (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">guchar</span> **out_csum</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Completes an invocation of <a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-async" title="ostree_repo_write_content_async ()"><code class="function">ostree_repo_write_content_async()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-content-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>a <span class="type">GAsyncResult</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_csum</p></td>
+<td class="parameter_description"><p>A binary SHA256
+checksum of the content object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-resolve-rev"></a><h3>ostree_repo_resolve_rev ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_resolve_rev (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *refspec</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> allow_noent</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_rev</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Look up the given refspec, returning the checksum it references in
+the parameter <em class="parameter"><code>out_rev</code></em>
+. Will fall back on remote directory if cannot
+find the given refspec in local.</p>
+<div class="refsect3">
+<a name="ostree-repo-resolve-rev.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refspec</p></td>
+<td class="parameter_description"><p>A refspec</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allow_noent</p></td>
+<td class="parameter_description"><p>Do not throw an error if refspec does not exist</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_rev</p></td>
+<td class="parameter_description"><p>A checksum,or <code class="literal">NULL</code> if <em class="parameter"><code>allow_noent</code></em>
+is true and it
+does not exist. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-resolve-rev-ext"></a><h3>ostree_repo_resolve_rev_ext ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_resolve_rev_ext (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *refspec</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> allow_noent</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoResolveRevExtFlags" title="enum OstreeRepoResolveRevExtFlags"><span class="type">OstreeRepoResolveRevExtFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_rev</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Look up the given refspec, returning the checksum it references in
+the parameter <em class="parameter"><code>out_rev</code></em>
+. Differently from <a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-rev" title="ostree_repo_resolve_rev ()"><code class="function">ostree_repo_resolve_rev()</code></a>,
+this will not fall back to searching through remote repos if a
+local ref is specified but not found.</p>
+<p>The flag <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-RESOLVE-REV-EXT-LOCAL-ONLY:CAPS"><code class="literal">OSTREE_REPO_RESOLVE_REV_EXT_LOCAL_ONLY</code></a> is implied so
+using it has no effect.</p>
+<div class="refsect3">
+<a name="ostree-repo-resolve-rev-ext.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refspec</p></td>
+<td class="parameter_description"><p>A refspec</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allow_noent</p></td>
+<td class="parameter_description"><p>Do not throw an error if refspec does not exist</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Options controlling behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_rev</p></td>
+<td class="parameter_description"><p>A checksum,or <code class="literal">NULL</code> if <em class="parameter"><code>allow_noent</code></em>
+is true and it
+does not exist. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-refs"></a><h3>ostree_repo_list_refs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_refs (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *refspec_prefix</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_all_refs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>If <em class="parameter"><code>refspec_prefix</code></em>
+ is <code class="literal">NULL</code>, list all local and remote refspecs,
+with their current values in <em class="parameter"><code>out_all_refs</code></em>
+. Otherwise, only list
+refspecs which have <em class="parameter"><code>refspec_prefix</code></em>
+ as a prefix.</p>
+<p><em class="parameter"><code>out_all_refs</code></em>
+ will be returned as a mapping from refspecs (including the
+remote name) to checksums. If <em class="parameter"><code>refspec_prefix</code></em>
+ is non-<code class="literal">NULL</code>, it will be
+removed as a prefix from the hash table keys.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-refs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refspec_prefix</p></td>
+<td class="parameter_description"><p>Only list refs which match this prefix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_all_refs</p></td>
+<td class="parameter_description"><p>Mapping from refspec to checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8 utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-refs-ext"></a><h3>ostree_repo_list_refs_ext ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_refs_ext (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *refspec_prefix</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_all_refs</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoListRefsExtFlags" title="enum OstreeRepoListRefsExtFlags"><span class="type">OstreeRepoListRefsExtFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>If <em class="parameter"><code>refspec_prefix</code></em>
+ is <code class="literal">NULL</code>, list all local and remote refspecs,
+with their current values in <em class="parameter"><code>out_all_refs</code></em>
+. Otherwise, only list
+refspecs which have <em class="parameter"><code>refspec_prefix</code></em>
+ as a prefix.</p>
+<p><em class="parameter"><code>out_all_refs</code></em>
+ will be returned as a mapping from refspecs (including the
+remote name) to checksums. Differently from <a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-refs" title="ostree_repo_list_refs ()"><code class="function">ostree_repo_list_refs()</code></a>, the
+<em class="parameter"><code>refspec_prefix</code></em>
+ will not be removed from the refspecs in the hash table.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-refs-ext.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refspec_prefix</p></td>
+<td class="parameter_description"><p>Only list refs which match this prefix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_all_refs</p></td>
+<td class="parameter_description"><p>Mapping from refspec to checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8 utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Options controlling listing behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-collection-refs"></a><h3>ostree_repo_list_collection_refs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_collection_refs (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *match_collection_id</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_all_refs</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoListRefsExtFlags" title="enum OstreeRepoListRefsExtFlags"><span class="type">OstreeRepoListRefsExtFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>List all local, mirrored, and remote refs, mapping them to the commit
+checksums they currently point to in <em class="parameter"><code>out_all_refs</code></em>
+. If <em class="parameter"><code>match_collection_id</code></em>
+
+is specified, the results will be limited to those with an equal collection
+ID.</p>
+<p><span class="type">OstreeCollectionRefs</span> are guaranteed to be returned with their collection ID
+set to a non-<code class="literal">NULL</code> value; so no refs from <code class="literal">refs/heads</code> will be listed if no
+collection ID is configured for the repository
+(<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-collection-id" title="ostree_repo_get_collection_id ()"><code class="function">ostree_repo_get_collection_id()</code></a>).</p>
+<p>If you want to exclude refs from <code class="literal">refs/remotes</code>, use
+<a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LIST-REFS-EXT-EXCLUDE-REMOTES:CAPS"><code class="literal">OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_REMOTES</code></a> in <em class="parameter"><code>flags</code></em>
+. Similarly use
+<a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LIST-REFS-EXT-EXCLUDE-MIRRORS:CAPS"><code class="literal">OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_MIRRORS</code></a> to exclude refs from
+<code class="literal">refs/mirrors</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-collection-refs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>match_collection_id</p></td>
+<td class="parameter_description"><p>If non-<code class="literal">NULL</code>, only list refs from this collection. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_all_refs</p></td>
+<td class="parameter_description"><p>Mapping from collection–ref to checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeCollectionRef utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Options controlling listing behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-list-collection-refs.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-remote-list-refs"></a><h3>ostree_repo_remote_list_refs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_remote_list_refs (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_all_refs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-remote-list-refs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of the remote.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_all_refs</p></td>
+<td class="parameter_description"><p>Mapping from ref to checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8 utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-resolve-collection-ref"></a><h3>ostree_repo_resolve_collection_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_resolve_collection_ref (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *ref</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> allow_noent</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoResolveRevExtFlags" title="enum OstreeRepoResolveRevExtFlags"><span class="type">OstreeRepoResolveRevExtFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_rev</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Look up the checksum for the given collection–ref, returning it in <em class="parameter"><code>out_rev</code></em>
+.
+This will search through the mirrors and remote refs.</p>
+<p>If <em class="parameter"><code>allow_noent</code></em>
+ is <code class="literal">TRUE</code> and the given <em class="parameter"><code>ref</code></em>
+ cannot be found, <code class="literal">TRUE</code> will be
+returned and <em class="parameter"><code>out_rev</code></em>
+ will be set to <code class="literal">NULL</code>. If <em class="parameter"><code>allow_noent</code></em>
+ is <code class="literal">FALSE</code> and
+the given <em class="parameter"><code>ref</code></em>
+ cannot be found, a <code class="literal">G_IO_ERROR_NOT_FOUND</code> error will be
+returned.</p>
+<p>If you want to check only local refs, not remote or mirrored ones, use the
+flag <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-RESOLVE-REV-EXT-LOCAL-ONLY:CAPS"><code class="literal">OSTREE_REPO_RESOLVE_REV_EXT_LOCAL_ONLY</code></a>. This is analogous to using
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-rev-ext" title="ostree_repo_resolve_rev_ext ()"><code class="function">ostree_repo_resolve_rev_ext()</code></a> but for collection-refs.</p>
+<div class="refsect3">
+<a name="ostree-repo-resolve-collection-ref.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>a collection–ref to resolve</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allow_noent</p></td>
+<td class="parameter_description"><p><code class="literal">TRUE</code> to not throw an error if <em class="parameter"><code>ref</code></em>
+doesn’t exist</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>options controlling behaviour</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_rev</p></td>
+<td class="parameter_description"><p>return location for
+the checksum corresponding to <em class="parameter"><code>ref</code></em>
+, or <code class="literal">NULL</code> if <em class="parameter"><code>allow_noent</code></em>
+is <code class="literal">TRUE</code> and
+the <em class="parameter"><code>ref</code></em>
+could not be found. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span>, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-resolve-collection-ref.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-load-variant"></a><h3>ostree_repo_load_variant ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_load_variant (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sha256</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_variant</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Load the metadata object <em class="parameter"><code>sha256</code></em>
+ of type <em class="parameter"><code>objtype</code></em>
+, storing the
+result in <em class="parameter"><code>out_variant</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-load-variant.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Expected object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sha256</p></td>
+<td class="parameter_description"><p>Checksum string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_variant</p></td>
+<td class="parameter_description"><p>Metadata object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-load-commit"></a><h3>ostree_repo_load_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_load_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_commit</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitState" title="enum OstreeRepoCommitState"><span class="type">OstreeRepoCommitState</span></a> *out_state</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>A version of <a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-variant" title="ostree_repo_load_variant ()"><code class="function">ostree_repo_load_variant()</code></a> specialized to commits,
+capable of returning extended state information. Currently
+the only extended state is <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-STATE-PARTIAL:CAPS"><code class="literal">OSTREE_REPO_COMMIT_STATE_PARTIAL</code></a>, which
+means that only a sub-path of the commit is available.</p>
+<div class="refsect3">
+<a name="ostree-repo-load-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>Commit checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_commit</p></td>
+<td class="parameter_description"><p>Commit. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_state</p></td>
+<td class="parameter_description"><p>Commit state. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-load-variant-if-exists"></a><h3>ostree_repo_load_variant_if_exists ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_load_variant_if_exists (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sha256</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_variant</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Attempt to load the metadata object <em class="parameter"><code>sha256</code></em>
+ of type <em class="parameter"><code>objtype</code></em>
+ if it
+exists, storing the result in <em class="parameter"><code>out_variant</code></em>
+. If it doesn't exist,
+<em class="parameter"><code>out_variant</code></em>
+ will be set to <code class="literal">NULL</code> and the function will still
+return TRUE.</p>
+<div class="refsect3">
+<a name="ostree-repo-load-variant-if-exists.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sha256</p></td>
+<td class="parameter_description"><p>ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_variant</p></td>
+<td class="parameter_description"><p>Metadata. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-load-file"></a><h3>ostree_repo_load_file ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_load_file (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> **out_file_info</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Load content object, decomposing it into three parts: the actual
+content (for regular files), the metadata, and extended attributes.</p>
+<div class="refsect3">
+<a name="ostree-repo-load-file.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>File content. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_file_info</p></td>
+<td class="parameter_description"><p>File information. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_xattrs</p></td>
+<td class="parameter_description"><p>Extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-load-object-stream"></a><h3>ostree_repo_load_object_stream ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_load_object_stream (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GInputStream</span> **out_input</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_size</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Load object as a stream; useful when copying objects between
+repositories.</p>
+<div class="refsect3">
+<a name="ostree-repo-load-object-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_input</p></td>
+<td class="parameter_description"><p>Stream for object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_size</p></td>
+<td class="parameter_description"><p>Length of <em class="parameter"><code>out_input</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-query-object-storage-size"></a><h3>ostree_repo_query_object_storage_size ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_query_object_storage_size (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sha256</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_size</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Return the size in bytes of object with checksum <em class="parameter"><code>sha256</code></em>
+, after any
+compression has been applied.</p>
+<div class="refsect3">
+<a name="ostree-repo-query-object-storage-size.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sha256</p></td>
+<td class="parameter_description"><p>Checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_size</p></td>
+<td class="parameter_description"><p>Size in bytes object occupies physically. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-import-object-from"></a><h3>ostree_repo_import_object_from ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_import_object_from (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *source</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Copy object named by <em class="parameter"><code>objtype</code></em>
+ and <em class="parameter"><code>checksum</code></em>
+ into <em class="parameter"><code>self</code></em>
+ from the
+source repository <em class="parameter"><code>source</code></em>
+. If both repositories are of the same
+type and on the same filesystem, this will simply be a fast Unix
+hard link operation.</p>
+<p>Otherwise, a copy will be performed.</p>
+<div class="refsect3">
+<a name="ostree-repo-import-object-from.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Destination repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>source</p></td>
+<td class="parameter_description"><p>Source repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-import-object-from-with-trust"></a><h3>ostree_repo_import_object_from_with_trust ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_import_object_from_with_trust
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *source</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> trusted</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Copy object named by <em class="parameter"><code>objtype</code></em>
+ and <em class="parameter"><code>checksum</code></em>
+ into <em class="parameter"><code>self</code></em>
+ from the
+source repository <em class="parameter"><code>source</code></em>
+. If <em class="parameter"><code>trusted</code></em>
+ is <code class="literal">TRUE</code> and both
+repositories are of the same type and on the same filesystem,
+this will simply be a fast Unix hard link operation.</p>
+<p>Otherwise, a copy will be performed.</p>
+<div class="refsect3">
+<a name="ostree-repo-import-object-from-with-trust.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Destination repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>source</p></td>
+<td class="parameter_description"><p>Source repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>trusted</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, assume the source repo is valid and trusted</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-import-archive-to-mtree"></a><h3>ostree_repo_import_archive_to_mtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_import_archive_to_mtree (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoImportArchiveOptions</span> *opts</code></em>,
+ <em class="parameter"><code><span class="type">void</span> *archive</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *mtree</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Import an archive file <em class="parameter"><code>archive</code></em>
+ into the repository, and write its
+file structure to <em class="parameter"><code>mtree</code></em>
+.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-import-archive-to-mtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opts</p></td>
+<td class="parameter_description"><p>Options structure, ensure this is zeroed, then set specific variables</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>archive</p></td>
+<td class="parameter_description"><p>Really this is "struct archive*"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mtree</p></td>
+<td class="parameter_description"><p>The <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> to write to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Optional commit modifier. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-export-tree-to-archive"></a><h3>ostree_repo_export_tree_to_archive ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_export_tree_to_archive (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoExportArchiveOptions</span> *opts</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *root</code></em>,
+ <em class="parameter"><code><span class="type">void</span> *archive</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Import an archive file <em class="parameter"><code>archive</code></em>
+ into the repository, and write its
+file structure to <em class="parameter"><code>mtree</code></em>
+.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-export-tree-to-archive.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opts</p></td>
+<td class="parameter_description"><p>Options controlling conversion</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>root</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> for the base directory</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>archive</p></td>
+<td class="parameter_description"><p>A <code class="literal">struct archive</code>, but specified as void to avoid a dependency on the libarchive
+headers</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-delete-object"></a><h3>ostree_repo_delete_object ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_delete_object (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sha256</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Remove the object of type <em class="parameter"><code>objtype</code></em>
+ with checksum <em class="parameter"><code>sha256</code></em>
+
+from the repository. An error of type <code class="literal">G_IO_ERROR_NOT_FOUND</code>
+is thrown if the object does not exist.</p>
+<div class="refsect3">
+<a name="ostree-repo-delete-object.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sha256</p></td>
+<td class="parameter_description"><p>Checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-fsck-object"></a><h3>ostree_repo_fsck_object ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_fsck_object (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType"><span class="type">OstreeObjectType</span></a> objtype</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *sha256</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Verify consistency of the object; this performs checks only relevant to the
+immediate object itself, such as checksumming. This API call will not itself
+traverse metadata objects for example.</p>
+<div class="refsect3">
+<a name="ostree-repo-fsck-object.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>objtype</p></td>
+<td class="parameter_description"><p>Object type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sha256</p></td>
+<td class="parameter_description"><p>Checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitFilter"></a><h3>OstreeRepoCommitFilter ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilterResult" title="enum OstreeRepoCommitFilterResult"><span class="returnvalue">OstreeRepoCommitFilterResult</span></a>
+<span class="c_punctuation">(</span>*OstreeRepoCommitFilter<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *file_info</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<div class="refsect3">
+<a name="OstreeRepoCommitFilter.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path to file</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file_info</p></td>
+<td class="parameter_description"><p>File information</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>User data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="OstreeRepoCommitFilter.returns"></a><h4>Returns</h4>
+<p> <a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilterResult" title="enum OstreeRepoCommitFilterResult"><span class="type">OstreeRepoCommitFilterResult</span></a> saying whether or not to commit this file</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-new"></a><h3>ostree_repo_commit_modifier_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="returnvalue">OstreeRepoCommitModifier</span></a> *
+ostree_repo_commit_modifier_new (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifierFlags" title="enum OstreeRepoCommitModifierFlags"><span class="type">OstreeRepoCommitModifierFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilter" title="OstreeRepoCommitFilter ()"><span class="type">OstreeRepoCommitFilter</span></a> commit_filter</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>,
+ <em class="parameter"><code><span class="type">GDestroyNotify</span> destroy_notify</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-commit-modifier-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Control options for filter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_filter</p></td>
+<td class="parameter_description"><p>Function that can inspect individual files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>User data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy_notify</p></td>
+<td class="parameter_description"><p>A <span class="type">GDestroyNotify</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-commit-modifier-new.returns"></a><h4>Returns</h4>
+<p>A new commit modifier. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitModifierXattrCallback"></a><h3>OstreeRepoCommitModifierXattrCallback ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+<span class="c_punctuation">(</span>*OstreeRepoCommitModifierXattrCallback<span class="c_punctuation">)</span>
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *file_info</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-set-xattr-callback"></a><h3>ostree_repo_commit_modifier_set_xattr_callback ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_modifier_set_xattr_callback
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifierXattrCallback" title="OstreeRepoCommitModifierXattrCallback ()"><span class="type">OstreeRepoCommitModifierXattrCallback</span></a> callback</code></em>,
+ <em class="parameter"><code><span class="type">GDestroyNotify</span> destroy</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>If set, this function should return extended attributes to use for
+the given path. This is useful for things like ACLs and SELinux,
+where a build system can label the files as it's committing to the
+repository.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-modifier-set-xattr-callback.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>Function to be invoked, should return extended attributes for path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy</p></td>
+<td class="parameter_description"><p>Destroy notification</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>Data for <em class="parameter"><code>callback</code></em>
+:</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-set-sepolicy"></a><h3>ostree_repo_commit_modifier_set_sepolicy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_modifier_set_sepolicy
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *sepolicy</code></em>);</pre>
+<p>If <em class="parameter"><code>policy</code></em>
+ is non-<code class="literal">NULL</code>, use it to look up labels to use for
+"security.selinux" extended attributes.</p>
+<p>Note that any policy specified this way operates in addition to any
+extended attributes provided via
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-xattr-callback" title="ostree_repo_commit_modifier_set_xattr_callback ()"><code class="function">ostree_repo_commit_modifier_set_xattr_callback()</code></a>. However if both
+specify a value for "security.selinux", then the one from the
+policy wins.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-modifier-set-sepolicy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sepolicy</p></td>
+<td class="parameter_description"><p>Policy to use for labeling. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-set-sepolicy-from-commit"></a><h3>ostree_repo_commit_modifier_set_sepolicy_from_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_commit_modifier_set_sepolicy_from_commit
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *rev</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>In many cases, one wants to create a "derived" commit from base commit.
+SELinux policy labels are part of that base commit. This API allows
+one to easily set up SELinux labeling from a base commit.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-modifier-set-sepolicy-from-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Commit modifier</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>OSTree repo containing <em class="parameter"><code>rev</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rev</p></td>
+<td class="parameter_description"><p>Find SELinux policy from this base commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-set-devino-cache"></a><h3>ostree_repo_commit_modifier_set_devino_cache ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_modifier_set_devino_cache
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoDevInoCache</span> *cache</code></em>);</pre>
+<p>See the documentation for
+<code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-new" title="ostree_repo_devino_cache_new ()"><code class="function">ostree_repo_devino_cache_new()</code></a></code>. This function can
+then be used for later calls to
+<code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()"><code class="function">ostree_repo_write_directory_to_mtree()</code></a></code> to optimize commits.</p>
+<p>Note if your process has multiple writers, you should use separate
+<code class="literal">OSTreeRepo</code> instances if you want to also use this API.</p>
+<p>This function will add a reference to <em class="parameter"><code>cache</code></em>
+ without copying - you
+should avoid further mutation of the cache.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-modifier-set-devino-cache.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Modifier</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cache</p></td>
+<td class="parameter_description"><p>A hash table caching device,inode to checksums</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-ref"></a><h3>ostree_repo_commit_modifier_ref ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="returnvalue">OstreeRepoCommitModifier</span></a> *
+ostree_repo_commit_modifier_ref (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-modifier-unref"></a><h3>ostree_repo_commit_modifier_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_modifier_unref (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-devino-cache-new"></a><h3>ostree_repo_devino_cache_new ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeRepoDevInoCache</span> *
+ostree_repo_devino_cache_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>OSTree has support for pairing <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree-at" title="ostree_repo_checkout_tree_at ()"><code class="function">ostree_repo_checkout_tree_at()</code></a> using
+hardlinks in combination with a later
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()"><code class="function">ostree_repo_write_directory_to_mtree()</code></a> using a (normally modified)
+directory. In order for OSTree to optimally detect just the new
+files, use this function and fill in the <code class="literal">devino_to_csum_cache</code>
+member of <code class="literal">OstreeRepoCheckoutAtOptions</code>, then call
+<code class="function">ostree_repo_commit_set_devino_cache()</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-devino-cache-new.returns"></a><h4>Returns</h4>
+<p>Newly allocated cache. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-devino-cache-ref"></a><h3>ostree_repo_devino_cache_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeRepoDevInoCache</span> *
+ostree_repo_devino_cache_ref (<em class="parameter"><code><span class="type">OstreeRepoDevInoCache</span> *cache</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-devino-cache-unref"></a><h3>ostree_repo_devino_cache_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_devino_cache_unref (<em class="parameter"><code><span class="type">OstreeRepoDevInoCache</span> *cache</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-devino-cache-get-type"></a><h3>ostree_repo_devino_cache_get_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">GType</span>
+ostree_repo_devino_cache_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-directory-to-mtree"></a><h3>ostree_repo_write_directory_to_mtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_directory_to_mtree (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *dir</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *mtree</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store objects for <em class="parameter"><code>dir</code></em>
+ and all children into the repository <em class="parameter"><code>self</code></em>
+,
+overlaying the resulting filesystem hierarchy into <em class="parameter"><code>mtree</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-directory-to-mtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dir</p></td>
+<td class="parameter_description"><p>Path to a directory</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mtree</p></td>
+<td class="parameter_description"><p>Overlay directory contents into this tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Optional modifier. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-dfd-to-mtree"></a><h3>ostree_repo_write_dfd_to_mtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_dfd_to_mtree (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *mtree</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store as objects all contents of the directory referred to by <em class="parameter"><code>dfd</code></em>
+
+and <em class="parameter"><code>path</code></em>
+ all children into the repository <em class="parameter"><code>self</code></em>
+, overlaying the
+resulting filesystem hierarchy into <em class="parameter"><code>mtree</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-dfd-to-mtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory file descriptor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mtree</p></td>
+<td class="parameter_description"><p>Overlay directory contents into this tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Optional modifier. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-archive-to-mtree"></a><h3>ostree_repo_write_archive_to_mtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_archive_to_mtree (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *archive</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *mtree</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> autocreate_parents</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Import an archive file <em class="parameter"><code>archive</code></em>
+ into the repository, and write its
+file structure to <em class="parameter"><code>mtree</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-archive-to-mtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>archive</p></td>
+<td class="parameter_description"><p>A path to an archive file</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mtree</p></td>
+<td class="parameter_description"><p>The <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> to write to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Optional commit modifier. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>autocreate_parents</p></td>
+<td class="parameter_description"><p>Autocreate parent directories</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-archive-to-mtree-from-fd"></a><h3>ostree_repo_write_archive_to_mtree_from_fd ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_archive_to_mtree_from_fd
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> fd</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *mtree</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier"><span class="type">OstreeRepoCommitModifier</span></a> *modifier</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> autocreate_parents</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Read an archive from <em class="parameter"><code>fd</code></em>
+ and import it into the repository, writing
+its file structure to <em class="parameter"><code>mtree</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-archive-to-mtree-from-fd.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fd</p></td>
+<td class="parameter_description"><p>A file descriptor to read the archive from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mtree</p></td>
+<td class="parameter_description"><p>The <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> to write to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modifier</p></td>
+<td class="parameter_description"><p>Optional commit modifier. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>autocreate_parents</p></td>
+<td class="parameter_description"><p>Autocreate parent directories</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-mtree"></a><h3>ostree_repo_write_mtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_mtree (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree"><span class="type">OstreeMutableTree</span></a> *mtree</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> **out_file</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Write all metadata objects for <em class="parameter"><code>mtree</code></em>
+ to repo; the resulting
+<em class="parameter"><code>out_file</code></em>
+ points to the <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-TREE:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_DIR_TREE</code></a> object that
+the <em class="parameter"><code>mtree</code></em>
+ represented.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-mtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mtree</p></td>
+<td class="parameter_description"><p>Mutable tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_file</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> representing <em class="parameter"><code>mtree</code></em>
+'s root. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-commit"></a><h3>ostree_repo_write_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *parent</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *subject</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *body</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *metadata</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *root</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Write a commit metadata object, referencing <em class="parameter"><code>root_contents_checksum</code></em>
+
+and <em class="parameter"><code>root_metadata_checksum</code></em>
+.
+This uses the current time as the commit timestamp, but it can be
+overridden with an explicit timestamp via the
+<a class="ulink" href="https://reproducible-builds.org/specs/source-date-epoch/" target="_top">standard</a>
+<code class="literal">SOURCE_DATE_EPOCH</code> environment flag.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum for parent, or <code class="literal">NULL</code> for none. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>subject</p></td>
+<td class="parameter_description"><p>Subject. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>body</p></td>
+<td class="parameter_description"><p>Body. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>metadata</p></td>
+<td class="parameter_description"><p>GVariant of type a{sv}, or <code class="literal">NULL</code> for none. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>root</p></td>
+<td class="parameter_description"><p>The tree to point the commit to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_commit</p></td>
+<td class="parameter_description"><p>Resulting ASCII SHA256 checksum for
+commit. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-commit-with-time"></a><h3>ostree_repo_write_commit_with_time ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_commit_with_time (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *parent</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *subject</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *body</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *metadata</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *root</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> time</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Write a commit metadata object, referencing <em class="parameter"><code>root_contents_checksum</code></em>
+
+and <em class="parameter"><code>root_metadata_checksum</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-commit-with-time.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum for parent, or <code class="literal">NULL</code> for none. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>subject</p></td>
+<td class="parameter_description"><p>Subject. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>body</p></td>
+<td class="parameter_description"><p>Body. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>metadata</p></td>
+<td class="parameter_description"><p>GVariant of type a{sv}, or <code class="literal">NULL</code> for none. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>root</p></td>
+<td class="parameter_description"><p>The tree to point the commit to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>time</p></td>
+<td class="parameter_description"><p>The time to use to stamp the commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_commit</p></td>
+<td class="parameter_description"><p>Resulting ASCII SHA256 checksum for
+commit. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-read-commit-detached-metadata"></a><h3>ostree_repo_read_commit_detached_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_read_commit_detached_metadata
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_metadata</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>OSTree commits can have arbitrary metadata associated; this
+function retrieves them. If none exists, <em class="parameter"><code>out_metadata</code></em>
+ will be set
+to <code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-repo-read-commit-detached-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 commit checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_metadata</p></td>
+<td class="parameter_description"><p>Metadata associated with commit in with format
+"a{sv}", or <code class="literal">NULL</code> if none exists. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-write-commit-detached-metadata"></a><h3>ostree_repo_write_commit_detached_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_write_commit_detached_metadata
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *metadata</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Replace any existing metadata associated with commit referred to by
+<em class="parameter"><code>checksum</code></em>
+ with <em class="parameter"><code>metadata</code></em>
+. If <em class="parameter"><code>metadata</code></em>
+ is <code class="literal">NULL</code>, then existing
+data will be deleted.</p>
+<div class="refsect3">
+<a name="ostree-repo-write-commit-detached-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 commit checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>metadata</p></td>
+<td class="parameter_description"><p>Metadata to associate with commit in with format "a{sv}", or <code class="literal">NULL</code> to
+delete. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-checkout-at-options-set-devino"></a><h3>ostree_repo_checkout_at_options_set_devino ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_checkout_at_options_set_devino
+ (<em class="parameter"><code><span class="type">OstreeRepoCheckoutAtOptions</span> *opts</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoDevInoCache</span> *cache</code></em>);</pre>
+<p>This function simply assigns <em class="parameter"><code>cache</code></em>
+ to the <code class="literal">devino_to_csum_cache</code> member of
+<em class="parameter"><code>opts</code></em>
+; it's only useful for introspection.</p>
+<p>Note that cache does *not* have its refcount incremented - the lifetime of
+<em class="parameter"><code>cache</code></em>
+ must be equal to or greater than that of <em class="parameter"><code>opts</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-checkout-at-options-set-devino.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>opts</p></td>
+<td class="parameter_description"><p>Checkout options</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cache</p></td>
+<td class="parameter_description"><p>Devino cache. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-checkout-tree"></a><h3>ostree_repo_checkout_tree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_checkout_tree (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCheckoutMode" title="enum OstreeRepoCheckoutMode"><span class="type">OstreeRepoCheckoutMode</span></a> mode</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCheckoutOverwriteMode" title="enum OstreeRepoCheckoutOverwriteMode"><span class="type">OstreeRepoCheckoutOverwriteMode</span></a> overwrite_mode</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *destination</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *source</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *source_info</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Check out <em class="parameter"><code>source</code></em>
+ into <em class="parameter"><code>destination</code></em>
+, which must live on the
+physical filesystem. <em class="parameter"><code>source</code></em>
+ may be any subdirectory of a given
+commit. The <em class="parameter"><code>mode</code></em>
+ and <em class="parameter"><code>overwrite_mode</code></em>
+ allow control over how the
+files are checked out.</p>
+<div class="refsect3">
+<a name="ostree-repo-checkout-tree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>Options controlling all files</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>overwrite_mode</p></td>
+<td class="parameter_description"><p>Whether or not to overwrite files</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destination</p></td>
+<td class="parameter_description"><p>Place tree here</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>source</p></td>
+<td class="parameter_description"><p>Source tree</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>source_info</p></td>
+<td class="parameter_description"><p>Source info</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-checkout-tree-at"></a><h3>ostree_repo_checkout_tree_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_checkout_tree_at (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoCheckoutOptions</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">int</span> destination_dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *destination_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="warning"><p><code class="literal">ostree_repo_checkout_tree_at</code> is deprecated and should not be used in newly-written code.</p></div>
+<p>Similar to <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree" title="ostree_repo_checkout_tree ()"><code class="function">ostree_repo_checkout_tree()</code></a>, but uses directory-relative
+paths for the destination, uses a new <code class="literal">OstreeRepoCheckoutAtOptions</code>,
+and takes a commit checksum and optional subpath pair, rather than
+requiring use of <code class="literal">GFile</code> APIs for the caller.</p>
+<p>Note in addition that unlike <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree" title="ostree_repo_checkout_tree ()"><code class="function">ostree_repo_checkout_tree()</code></a>, the
+default is not to use the repository-internal uncompressed objects
+cache.</p>
+<p>This function is deprecated. Use <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at" title="ostree_repo_checkout_at ()"><code class="function">ostree_repo_checkout_at()</code></a> instead.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-checkout-tree-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>Options. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destination_dfd</p></td>
+<td class="parameter_description"><p>Directory FD for destination</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destination_path</p></td>
+<td class="parameter_description"><p>Directory for destination</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit</p></td>
+<td class="parameter_description"><p>Checksum for commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-checkout-at"></a><h3>ostree_repo_checkout_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_checkout_at (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoCheckoutAtOptions</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">int</span> destination_dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *destination_path</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Similar to <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree" title="ostree_repo_checkout_tree ()"><code class="function">ostree_repo_checkout_tree()</code></a>, but uses directory-relative
+paths for the destination, uses a new <code class="literal">OstreeRepoCheckoutAtOptions</code>,
+and takes a commit checksum and optional subpath pair, rather than
+requiring use of <code class="literal">GFile</code> APIs for the caller.</p>
+<p>It also replaces <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at" title="ostree_repo_checkout_at ()"><code class="function">ostree_repo_checkout_at()</code></a> which was not safe to
+use with GObject introspection.</p>
+<p>Note in addition that unlike <a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree" title="ostree_repo_checkout_tree ()"><code class="function">ostree_repo_checkout_tree()</code></a>, the
+default is not to use the repository-internal uncompressed objects
+cache.</p>
+<div class="refsect3">
+<a name="ostree-repo-checkout-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>Options. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destination_dfd</p></td>
+<td class="parameter_description"><p>Directory FD for destination</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destination_path</p></td>
+<td class="parameter_description"><p>Directory for destination</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit</p></td>
+<td class="parameter_description"><p>Checksum for commit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-checkout-gc"></a><h3>ostree_repo_checkout_gc ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_checkout_gc (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Call this after finishing a succession of checkout operations; it
+will delete any currently-unused uncompressed objects from the
+cache.</p>
+<div class="refsect3">
+<a name="ostree-repo-checkout-gc.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-read-commit"></a><h3>ostree_repo_read_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_read_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ref</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> **out_root</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Load the content for <em class="parameter"><code>rev</code></em>
+ into <em class="parameter"><code>out_root</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-read-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>Ref or ASCII checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_root</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> corresponding to the root. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_commit</p></td>
+<td class="parameter_description"><p>The resolved commit checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-objects"></a><h3>ostree_repo_list_objects ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_objects (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoListObjectsFlags" title="enum OstreeRepoListObjectsFlags"><span class="type">OstreeRepoListObjectsFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_objects</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function synchronously enumerates all objects in the
+repository, returning data in <em class="parameter"><code>out_objects</code></em>
+. <em class="parameter"><code>out_objects</code></em>
+
+maps from keys returned by <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-serialize" title="ostree_object_name_serialize ()"><code class="function">ostree_object_name_serialize()</code></a>
+to <span class="type">GVariant</span> values of type <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-VARIANT-TYPE:CAPS" title="OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE"><code class="literal">OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-objects.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags controlling enumeration</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects</p></td>
+<td class="parameter_description"><p>Map of serialized object name to variant data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant GVariant]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-list-objects.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on error, and <em class="parameter"><code>error</code></em>
+will be set</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-commit-objects-starting-with"></a><h3>ostree_repo_list_commit_objects_starting_with ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_commit_objects_starting_with
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *start</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_commits</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function synchronously enumerates all commit objects starting
+with <em class="parameter"><code>start</code></em>
+, returning data in <em class="parameter"><code>out_commits</code></em>
+.</p>
+<p>To list all commit objects, provide the empty string <code class="literal">""</code> for <em class="parameter"><code>start</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-commit-objects-starting-with.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>start</p></td>
+<td class="parameter_description"><p>List commits starting with this checksum (empty string for all)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_commits</p></td>
+<td class="parameter_description"><p>Map of serialized commit name to variant data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant GVariant]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-list-commit-objects-starting-with.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on error, and <em class="parameter"><code>error</code></em>
+will be set</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-static-delta-names"></a><h3>ostree_repo_list_static_delta_names ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_static_delta_names (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> **out_deltas</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function synchronously enumerates all static deltas in the
+repository, returning its result in <em class="parameter"><code>out_deltas</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-static-delta-names.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_deltas</p></td>
+<td class="parameter_description"><p>String name of deltas
+(checksum-checksum.delta). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-list-static-delta-indexes"></a><h3>ostree_repo_list_static_delta_indexes ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_list_static_delta_indexes (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> **out_indexes</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function synchronously enumerates all static delta indexes in the
+repository, returning its result in <em class="parameter"><code>out_indexes</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-list-static-delta-indexes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_indexes</p></td>
+<td class="parameter_description"><p>String name of delta indexes
+(checksum). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-static-delta-reindex"></a><h3>ostree_repo_static_delta_reindex ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_static_delta_reindex (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code><span class="type">OstreeStaticDeltaIndexFlags</span> flags</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *opt_to_commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>The delta index for a particular commit lists all the existing deltas that can be used
+when downloading that commit. This operation regenerates these indexes, either for
+a particular commit (if <em class="parameter"><code>opt_to_commit</code></em>
+ is non-<code class="literal">NULL</code>), or for all commits that
+are reachable by an existing delta (if <em class="parameter"><code>opt_to_commit</code></em>
+ is <code class="literal">NULL</code>).</p>
+<p>This is normally called automatically when the summary is updated in
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-summary" title="ostree_repo_regenerate_summary ()"><code class="function">ostree_repo_regenerate_summary()</code></a>.</p>
+<p>Locking: shared</p>
+<div class="refsect3">
+<a name="ostree-repo-static-delta-reindex.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags affecting the indexing operation</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opt_to_commit</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum of target commit, or <code class="literal">NULL</code> to index all targets</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-static-delta-generate"></a><h3>ostree_repo_static_delta_generate ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_static_delta_generate (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeStaticDeltaGenerateOpt" title="enum OstreeStaticDeltaGenerateOpt"><span class="type">OstreeStaticDeltaGenerateOpt</span></a> opt</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *from</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *to</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *metadata</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *params</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Generate a lookaside "static delta" from <em class="parameter"><code>from</code></em>
+ (<code class="literal">NULL</code> means
+from-empty) which can generate the objects in <em class="parameter"><code>to</code></em>
+. This delta is
+an optimization over fetching individual objects, and can be
+conveniently stored and applied offline.</p>
+<p>The <em class="parameter"><code>params</code></em>
+ argument should be an a{sv}. The following attributes
+are known:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>min-fallback-size: u: Minimum uncompressed size in megabytes to use fallback, 0 to disable
+fallbacks</p></li>
+<li class="listitem"><p>max-chunk-size: u: Maximum size in megabytes of a delta part</p></li>
+<li class="listitem"><p>max-bsdiff-size: u: Maximum size in megabytes to consider bsdiff compression
+for input files</p></li>
+<li class="listitem"><p>compression: y: Compression type: 0=none, x=lzma, g=gzip</p></li>
+<li class="listitem"><p>bsdiff-enabled: b: Enable bsdiff compression. Default TRUE.</p></li>
+<li class="listitem"><p>inline-parts: b: Put part data in header, to get a single file delta. Default FALSE.</p></li>
+<li class="listitem"><p>verbose: b: Print diagnostic messages. Default FALSE.</p></li>
+<li class="listitem"><p>endianness: b: Deltas use host byte order by default; this option allows choosing
+(G_BIG_ENDIAN or G_LITTLE_ENDIAN)</p></li>
+<li class="listitem"><p>filename: ^ay: Save delta superblock to this filename (bytestring), and parts in the same
+directory. Default saves to repository.</p></li>
+<li class="listitem"><p>sign-name: ^ay: Signature type to use (bytestring).</p></li>
+<li class="listitem"><p>sign-key-ids: ^as: NULL-terminated array of keys used to sign delta superblock.</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="ostree-repo-static-delta-generate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opt</p></td>
+<td class="parameter_description"><p>High level optimization choice</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>from</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum of origin, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>to</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum of target</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>metadata</p></td>
+<td class="parameter_description"><p>Optional metadata. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>Parameters, see below. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-static-delta-execute-offline-with-signature"></a><h3>ostree_repo_static_delta_execute_offline_with_signature ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_static_delta_execute_offline_with_signature
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *dir_or_file</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *sign</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> skip_validation</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Given a directory representing an already-downloaded static delta
+on disk, apply it, generating a new commit.
+If sign is passed, the static delta signature is verified.
+If sign-verify-deltas configuration option is set and static delta is signed,
+signature verification will be mandatory before apply the static delta.
+The directory must be named with the form "FROM-TO", where both are
+checksums, and it must contain a file named "superblock", along with at least
+one part.</p>
+<div class="refsect3">
+<a name="ostree-repo-static-delta-execute-offline-with-signature.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dir_or_file</p></td>
+<td class="parameter_description"><p>Path to a directory containing static delta data, or directly to the superblock</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sign</p></td>
+<td class="parameter_description"><p>Signature engine used to check superblock</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>skip_validation</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, assume data integrity</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-static-delta-execute-offline"></a><h3>ostree_repo_static_delta_execute_offline ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_static_delta_execute_offline
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *dir_or_file</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> skip_validation</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Given a directory representing an already-downloaded static delta
+on disk, apply it, generating a new commit. The directory must be
+named with the form "FROM-TO", where both are checksums, and it
+must contain a file named "superblock", along with at least one part.</p>
+<div class="refsect3">
+<a name="ostree-repo-static-delta-execute-offline.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dir_or_file</p></td>
+<td class="parameter_description"><p>Path to a directory containing static delta data, or directly to the superblock</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>skip_validation</p></td>
+<td class="parameter_description"><p>If <code class="literal">TRUE</code>, assume data integrity</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-static-delta-verify-signature"></a><h3>ostree_repo_static_delta_verify_signature ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_static_delta_verify_signature
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *delta_id</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *sign</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_success_message</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Verify static delta file signature.</p>
+<div class="refsect3">
+<a name="ostree-repo-static-delta-verify-signature.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>delta_id</p></td>
+<td class="parameter_description"><p>delta path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sign</p></td>
+<td class="parameter_description"><p>Signature engine used to check superblock</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_success_message</p></td>
+<td class="parameter_description"><p>success message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-static-delta-verify-signature.returns"></a><h4>Returns</h4>
+<p> TRUE if the signature of static delta file is valid using the
+signature engine provided, FALSE otherwise.</p>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-new-reachable"></a><h3>ostree_repo_traverse_new_reachable ()</h3>
+<pre class="programlisting"><span class="returnvalue">GHashTable</span> *
+ostree_repo_traverse_new_reachable (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>This hash table is a set of <span class="type">GVariant</span> which can be accessed via
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-deserialize" title="ostree_object_name_deserialize ()"><code class="function">ostree_object_name_deserialize()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-new-reachable.returns"></a><h4>Returns</h4>
+<p>A new hash table. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant GVariant]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-new-parents"></a><h3>ostree_repo_traverse_new_parents ()</h3>
+<pre class="programlisting"><span class="returnvalue">GHashTable</span> *
+ostree_repo_traverse_new_parents (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>This hash table is a mapping from <span class="type">GVariant</span> which can be accessed
+via <a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-deserialize" title="ostree_object_name_deserialize ()"><code class="function">ostree_object_name_deserialize()</code></a> to a <span class="type">GVariant</span> containing either
+a similar <span class="type">GVariant</span> or and array of them, listing the parents of the key.</p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-new-parents.returns"></a><h4>Returns</h4>
+<p>A new hash table. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant GVariant]</span></p>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-parents-get-commits"></a><h3>ostree_repo_traverse_parents_get_commits ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> **
+ostree_repo_traverse_parents_get_commits
+ (<em class="parameter"><code><span class="type">GHashTable</span> *parents</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *object</code></em>);</pre>
+<p>Gets all the commits that a certain object belongs to, as recorded
+by a parents table gotten from ostree_repo_traverse_commit_union_with_parents.</p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-parents-get-commits.returns"></a><h4>Returns</h4>
+<p>An array of checksums for
+the commits the key belongs to. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></p>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-commit"></a><h3>ostree_repo_traverse_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_traverse_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">int</span> maxdepth</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> **out_reachable</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Create a new set <em class="parameter"><code>out_reachable</code></em>
+ containing all objects reachable
+from <em class="parameter"><code>commit_checksum</code></em>
+, traversing <em class="parameter"><code>maxdepth</code></em>
+ parent commits.</p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maxdepth</p></td>
+<td class="parameter_description"><p>Traverse this many parent commits, -1 for unlimited</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_reachable</p></td>
+<td class="parameter_description"><p>Set of reachable
+objects. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant GVariant]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-commit-union"></a><h3>ostree_repo_traverse_commit_union ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_traverse_commit_union (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">int</span> maxdepth</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *inout_reachable</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Update the set <em class="parameter"><code>inout_reachable</code></em>
+ containing all objects reachable
+from <em class="parameter"><code>commit_checksum</code></em>
+, traversing <em class="parameter"><code>maxdepth</code></em>
+ parent commits.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-commit-union.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maxdepth</p></td>
+<td class="parameter_description"><p>Traverse this many parent commits, -1 for unlimited</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inout_reachable</p></td>
+<td class="parameter_description"><p>Set of reachable objects</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-commit-union-with-parents"></a><h3>ostree_repo_traverse_commit_union_with_parents ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_traverse_commit_union_with_parents
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">int</span> maxdepth</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *inout_reachable</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *inout_parents</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Update the set <em class="parameter"><code>inout_reachable</code></em>
+ containing all objects reachable
+from <em class="parameter"><code>commit_checksum</code></em>
+, traversing <em class="parameter"><code>maxdepth</code></em>
+ parent commits.</p>
+<p>Additionally this constructs a mapping from each object to the parents
+of the object, which can be used to track which commits an object
+belongs to.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-commit-union-with-parents.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maxdepth</p></td>
+<td class="parameter_description"><p>Traverse this many parent commits, -1 for unlimited</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inout_reachable</p></td>
+<td class="parameter_description"><p>Set of reachable objects</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inout_parents</p></td>
+<td class="parameter_description"><p>Map from object to parent object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-commit-with-flags"></a><h3>ostree_repo_traverse_commit_with_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_traverse_commit_with_flags
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitTraverseFlags" title="enum OstreeRepoCommitTraverseFlags"><span class="type">OstreeRepoCommitTraverseFlags</span></a> flags</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">int</span> maxdepth</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *inout_reachable</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *inout_parents</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Update the set <em class="parameter"><code>inout_reachable</code></em>
+ containing all objects reachable
+from <em class="parameter"><code>commit_checksum</code></em>
+, traversing <em class="parameter"><code>maxdepth</code></em>
+ parent commits.</p>
+<p>Additionally this constructs a mapping from each object to the parents
+of the object, which can be used to track which commits an object
+belongs to.</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-commit-with-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>change traversal behaviour according to these flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maxdepth</p></td>
+<td class="parameter_description"><p>Traverse this many parent commits, -1 for unlimited</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inout_reachable</p></td>
+<td class="parameter_description"><p>Set of reachable objects</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inout_parents</p></td>
+<td class="parameter_description"><p>Map from object to parent object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-cleanup"></a><h3>ostree_repo_commit_traverse_iter_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_traverse_iter_cleanup
+ (<em class="parameter"><code><span class="type">void</span> *p</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-clear"></a><h3>ostree_repo_commit_traverse_iter_clear ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_traverse_iter_clear
+ (<em class="parameter"><code><span class="type">OstreeRepoCommitTraverseIter</span> *iter</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-get-dir"></a><h3>ostree_repo_commit_traverse_iter_get_dir ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_traverse_iter_get_dir
+ (<em class="parameter"><code><span class="type">OstreeRepoCommitTraverseIter</span> *iter</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_name</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_content_checksum</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_meta_checksum</code></em>);</pre>
+<p>Return information on the current directory. This function may
+only be called if <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-DIR:CAPS"><code class="literal">OSTREE_REPO_COMMIT_ITER_RESULT_DIR</code></a> was returned
+from <a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-next" title="ostree_repo_commit_traverse_iter_next ()"><code class="function">ostree_repo_commit_traverse_iter_next()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-traverse-iter-get-dir.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>iter</p></td>
+<td class="parameter_description"><p>An iter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_name</p></td>
+<td class="parameter_description"><p>Name of current dir. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_content_checksum</p></td>
+<td class="parameter_description"><p>Checksum of current content. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_meta_checksum</p></td>
+<td class="parameter_description"><p>Checksum of current metadata. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-get-file"></a><h3>ostree_repo_commit_traverse_iter_get_file ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_commit_traverse_iter_get_file
+ (<em class="parameter"><code><span class="type">OstreeRepoCommitTraverseIter</span> *iter</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_name</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_checksum</code></em>);</pre>
+<p>Return information on the current file. This function may only be
+called if <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-FILE:CAPS"><code class="literal">OSTREE_REPO_COMMIT_ITER_RESULT_FILE</code></a> was returned from
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-next" title="ostree_repo_commit_traverse_iter_next ()"><code class="function">ostree_repo_commit_traverse_iter_next()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-traverse-iter-get-file.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>iter</p></td>
+<td class="parameter_description"><p>An iter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_name</p></td>
+<td class="parameter_description"><p>Name of current file. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_checksum</p></td>
+<td class="parameter_description"><p>Checksum of current file. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-init-commit"></a><h3>ostree_repo_commit_traverse_iter_init_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_commit_traverse_iter_init_commit
+ (<em class="parameter"><code><span class="type">OstreeRepoCommitTraverseIter</span> *iter</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *commit</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitTraverseFlags" title="enum OstreeRepoCommitTraverseFlags"><span class="type">OstreeRepoCommitTraverseFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Initialize (in place) an iterator over the root of a commit object.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-traverse-iter-init-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>iter</p></td>
+<td class="parameter_description"><p>An iter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>A repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit</p></td>
+<td class="parameter_description"><p>Variant of type <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-COMMIT:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_COMMIT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-init-dirtree"></a><h3>ostree_repo_commit_traverse_iter_init_dirtree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_commit_traverse_iter_init_dirtree
+ (<em class="parameter"><code><span class="type">OstreeRepoCommitTraverseIter</span> *iter</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *dirtree</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitTraverseFlags" title="enum OstreeRepoCommitTraverseFlags"><span class="type">OstreeRepoCommitTraverseFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Initialize (in place) an iterator over a directory tree.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-traverse-iter-init-dirtree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>iter</p></td>
+<td class="parameter_description"><p>An iter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>A repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dirtree</p></td>
+<td class="parameter_description"><p>Variant of type <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-TREE:CAPS"><code class="literal">OSTREE_OBJECT_TYPE_DIR_TREE</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-commit-traverse-iter-next"></a><h3>ostree_repo_commit_traverse_iter_next ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitIterResult" title="enum OstreeRepoCommitIterResult"><span class="returnvalue">OstreeRepoCommitIterResult</span></a>
+ostree_repo_commit_traverse_iter_next (<em class="parameter"><code><span class="type">OstreeRepoCommitTraverseIter</span> *iter</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Step the interator to the next item. Files will be returned first,
+then subdirectories. Call this in a loop; upon encountering
+<a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-END:CAPS"><code class="literal">OSTREE_REPO_COMMIT_ITER_RESULT_END</code></a>, there will be no more files or
+directories. If <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-DIR:CAPS"><code class="literal">OSTREE_REPO_COMMIT_ITER_RESULT_DIR</code></a> is returned,
+then call <a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-dir" title="ostree_repo_commit_traverse_iter_get_dir ()"><code class="function">ostree_repo_commit_traverse_iter_get_dir()</code></a> to retrieve
+data for that directory. Similarly, if
+<a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-FILE:CAPS"><code class="literal">OSTREE_REPO_COMMIT_ITER_RESULT_FILE</code></a> is returned, call
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-file" title="ostree_repo_commit_traverse_iter_get_file ()"><code class="function">ostree_repo_commit_traverse_iter_get_file()</code></a>.</p>
+<p>If <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-ERROR:CAPS"><code class="literal">OSTREE_REPO_COMMIT_ITER_RESULT_ERROR</code></a> is returned, it is a
+program error to call any further API on <em class="parameter"><code>iter</code></em>
+ except for
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-clear" title="ostree_repo_commit_traverse_iter_clear ()"><code class="function">ostree_repo_commit_traverse_iter_clear()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-commit-traverse-iter-next.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>iter</p></td>
+<td class="parameter_description"><p>An iter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-prune"></a><h3>ostree_repo_prune ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_prune (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPruneFlags" title="enum OstreeRepoPruneFlags"><span class="type">OstreeRepoPruneFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> depth</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> *out_objects_total</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> *out_objects_pruned</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_pruned_object_size_total</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Delete content from the repository. By default, this function will
+only delete "orphaned" objects not referred to by any commit. This
+can happen during a local commit operation, when we have written
+content objects but not saved the commit referencing them.</p>
+<p>However, if <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-REFS-ONLY:CAPS"><code class="literal">OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY</code></a> is provided, instead
+of traversing all commits, only refs will be used. Particularly
+when combined with <em class="parameter"><code>depth</code></em>
+, this is a convenient way to delete
+history from the repository.</p>
+<p>Use the <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-NO-PRUNE:CAPS"><code class="literal">OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE</code></a> to just determine
+statistics on objects that would be deleted, without actually
+deleting them.</p>
+<p>Locking: exclusive</p>
+<div class="refsect3">
+<a name="ostree-repo-prune.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Options controlling prune process</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>depth</p></td>
+<td class="parameter_description"><p>Stop traversal after this many iterations (-1 for unlimited)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects_total</p></td>
+<td class="parameter_description"><p>Number of objects found. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects_pruned</p></td>
+<td class="parameter_description"><p>Number of objects deleted. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_pruned_object_size_total</p></td>
+<td class="parameter_description"><p>Storage size in bytes of objects deleted. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-prune-static-deltas"></a><h3>ostree_repo_prune_static_deltas ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_prune_static_deltas (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *commit</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Prune static deltas, if COMMIT is specified then delete static delta files only
+targeting that commit; otherwise any static delta of non existing commits are
+deleted.</p>
+<p>Locking: exclusive</p>
+<div class="refsect3">
+<a name="ostree-repo-prune-static-deltas.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum for commit, or <code class="literal">NULL</code> for each
+non existing commit. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-traverse-reachable-refs"></a><h3>ostree_repo_traverse_reachable_refs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_traverse_reachable_refs (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> depth</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *reachable</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Add all commit objects directly reachable via a ref to <em class="parameter"><code>reachable</code></em>
+.</p>
+<p>Locking: shared</p>
+<div class="refsect3">
+<a name="ostree-repo-traverse-reachable-refs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>depth</p></td>
+<td class="parameter_description"><p>Depth of traversal</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>reachable</p></td>
+<td class="parameter_description"><p>Set of reachable objects (will be modified). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> GVariant GVariant]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-prune-from-reachable"></a><h3>ostree_repo_prune_from_reachable ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_prune_from_reachable (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoPruneOptions</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> *out_objects_total</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> *out_objects_pruned</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_pruned_object_size_total</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Delete content from the repository. This function is the "backend"
+half of the higher level <a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune" title="ostree_repo_prune ()"><code class="function">ostree_repo_prune()</code></a>. To use this function,
+you determine the root set yourself, and this function finds all other
+unreferenced objects and deletes them.</p>
+<p>Use this API when you want to perform more selective pruning - for example,
+retain all commits from a production branch, but just GC some history from
+your dev branch.</p>
+<p>The <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-NO-PRUNE:CAPS"><code class="literal">OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE</code></a> flag may be specified to just determine
+statistics on objects that would be deleted, without actually deleting them.</p>
+<p>Locking: exclusive</p>
+<div class="refsect3">
+<a name="ostree-repo-prune-from-reachable.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>Options controlling prune process</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects_total</p></td>
+<td class="parameter_description"><p>Number of objects found. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects_pruned</p></td>
+<td class="parameter_description"><p>Number of objects deleted. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_pruned_object_size_total</p></td>
+<td class="parameter_description"><p>Storage size in bytes of objects deleted. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-pull"></a><h3>ostree_repo_pull ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_pull (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **refs_to_fetch</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags"><span class="type">OstreeRepoPullFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Connect to the remote repository, fetching the specified set of
+refs <em class="parameter"><code>refs_to_fetch</code></em>
+. For each ref that is changed, download the
+commit, all metadata, and all content objects, storing them safely
+on disk in <em class="parameter"><code>self</code></em>
+.</p>
+<p>If <em class="parameter"><code>flags</code></em>
+ contains <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-MIRROR:CAPS"><code class="literal">OSTREE_REPO_PULL_FLAGS_MIRROR</code></a>, and
+the <em class="parameter"><code>refs_to_fetch</code></em>
+ is <code class="literal">NULL</code>, and the remote repository contains a
+summary file, then all refs will be fetched.</p>
+<p>If <em class="parameter"><code>flags</code></em>
+ contains <a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-COMMIT-ONLY:CAPS"><code class="literal">OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY</code></a>, then only the
+metadata for the commits in <em class="parameter"><code>refs_to_fetch</code></em>
+ is pulled.</p>
+<p>Warning: This API will iterate the thread default main context,
+which is a bug, but kept for compatibility reasons. If you want to
+avoid this, use <code class="function">g_main_context_push_thread_default()</code> to push a new
+one around this call.</p>
+<div class="refsect3">
+<a name="ostree-repo-pull.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refs_to_fetch</p></td>
+<td class="parameter_description"><p>Optional list of
+refs; if <code class="literal">NULL</code>, fetch all configured refs. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Options controlling fetch behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>Progress. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-pull-one-dir"></a><h3>ostree_repo_pull_one_dir ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_pull_one_dir (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dir_to_pull</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **refs_to_fetch</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags"><span class="type">OstreeRepoPullFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This is similar to <a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull" title="ostree_repo_pull ()"><code class="function">ostree_repo_pull()</code></a>, but only fetches a single
+subpath.</p>
+<div class="refsect3">
+<a name="ostree-repo-pull-one-dir.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dir_to_pull</p></td>
+<td class="parameter_description"><p>Subdirectory path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refs_to_fetch</p></td>
+<td class="parameter_description"><p>Optional list of
+refs; if <code class="literal">NULL</code>, fetch all configured refs. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Options controlling fetch behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>Progress. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-pull-with-options"></a><h3>ostree_repo_pull_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_pull_with_options (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name_or_baseurl</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull" title="ostree_repo_pull ()"><code class="function">ostree_repo_pull()</code></a>, but supports an extensible set of flags.
+The following are currently defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p><code class="literal">refs</code> (<code class="literal">as</code>): Array of string refs</p></li>
+<li class="listitem"><p><code class="literal">collection-refs</code> (<code class="literal">a(sss)</code>): Array of (collection ID, ref name, checksum) tuples to pull;
+mutually exclusive with <code class="literal">refs</code> and <code class="literal">override-commit-ids</code>. Checksums may be the empty
+string to pull the latest commit for that ref</p></li>
+<li class="listitem"><p><code class="literal">flags</code> (<code class="literal">i</code>): An instance of <a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags"><span class="type">OstreeRepoPullFlags</span></a></p></li>
+<li class="listitem"><p><code class="literal">subdir</code> (<code class="literal">s</code>): Pull just this subdirectory</p></li>
+<li class="listitem"><p><code class="literal">subdirs</code> (<code class="literal">as</code>): Pull just these subdirectories</p></li>
+<li class="listitem"><p><code class="literal">override-remote-name</code> (<code class="literal">s</code>): If local, add this remote to refspec</p></li>
+<li class="listitem"><p><code class="literal">gpg-verify</code> (<code class="literal">b</code>): GPG verify commits</p></li>
+<li class="listitem"><p><code class="literal">gpg-verify-summary</code> (<code class="literal">b</code>): GPG verify summary</p></li>
+<li class="listitem"><p><code class="literal">disable-sign-verify</code> (<code class="literal">b</code>): Disable signapi verification of commits</p></li>
+<li class="listitem"><p><code class="literal">disable-sign-verify-summary</code> (<code class="literal">b</code>): Disable signapi verification of the summary</p></li>
+<li class="listitem"><p><code class="literal">depth</code> (<code class="literal">i</code>): How far in the history to traverse; default is 0, -1 means infinite</p></li>
+<li class="listitem"><p><code class="literal">per-object-fsync</code> (<code class="literal">b</code>): Perform disk writes more slowly, avoiding a single large I/O sync</p></li>
+<li class="listitem"><p><code class="literal">disable-static-deltas</code> (<code class="literal">b</code>): Do not use static deltas</p></li>
+<li class="listitem"><p><code class="literal">require-static-deltas</code> (<code class="literal">b</code>): Require static deltas</p></li>
+<li class="listitem"><p><code class="literal">override-commit-ids</code> (<code class="literal">as</code>): Array of specific commit IDs to fetch for refs</p></li>
+<li class="listitem"><p><code class="literal">timestamp-check</code> (<code class="literal">b</code>): Verify commit timestamps are newer than current (when pulling via
+ref); Since: 2017.11</p></li>
+<li class="listitem"><p><code class="literal">timestamp-check-from-rev</code> (<code class="literal">s</code>): Verify that all fetched commit timestamps are newer than
+timestamp of given rev; Since: 2020.4</p></li>
+<li class="listitem"><p><code class="literal">max-metadata-size</code> (<code class="literal">t</code>): Restrict metadata objects to a maximum number of bytes; 0 to
+disable. Since: 2018.9</p></li>
+<li class="listitem"><p><code class="literal">dry-run</code> (<code class="literal">b</code>): Only print information on what will be downloaded (requires static deltas)</p></li>
+<li class="listitem"><p><code class="literal">override-url</code> (<code class="literal">s</code>): Fetch objects from this URL if remote specifies no metalink in options</p></li>
+<li class="listitem"><p><code class="literal">inherit-transaction</code> (<code class="literal">b</code>): Don't initiate, finish or abort a transaction, useful to do
+multiple pulls in one transaction.</p></li>
+<li class="listitem"><p><code class="literal">http-headers</code> (<code class="literal">a(ss)</code>): Additional headers to add to all HTTP requests</p></li>
+<li class="listitem"><p><code class="literal">update-frequency</code> (<code class="literal">u</code>): Frequency to call the async progress callback in milliseconds, if
+any; only values higher than 0 are valid</p></li>
+<li class="listitem"><p><code class="literal">localcache-repos</code> (<code class="literal">as</code>): File paths for local repos to use as caches when doing remote
+fetches</p></li>
+<li class="listitem"><p><code class="literal">append-user-agent</code> (<code class="literal">s</code>): Additional string to append to the user agent</p></li>
+<li class="listitem"><p><code class="literal">n-network-retries</code> (<code class="literal">u</code>): Number of times to retry each download on receiving
+a transient network error, such as a socket timeout; default is 5, 0
+means return errors without retrying. Since: 2018.6</p></li>
+<li class="listitem"><p><code class="literal">ref-keyring-map</code> (<code class="literal">a(sss)</code>): Array of (collection ID, ref name, keyring
+remote name) tuples specifying which remote's keyring should be used when
+doing GPG verification of each collection-ref. This is useful to prevent a
+remote from serving malicious updates to refs which did not originate from
+it. This can be a subset or superset of the refs being pulled; any ref
+not being pulled will be ignored and any ref without a keyring remote
+will be verified with the keyring of the remote being pulled from.</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="ostree-repo-pull-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name_or_baseurl</p></td>
+<td class="parameter_description"><p>Name of remote or file:// url</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>A GVariant a{sv} with an extensible set of flags.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>Progress. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.9</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-pull-default-console-progress-changed"></a><h3>ostree_repo_pull_default_console_progress_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_pull_default_console_progress_changed
+ (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Convenient "changed" callback for use with
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new-and-connect" title="ostree_async_progress_new_and_connect ()"><code class="function">ostree_async_progress_new_and_connect()</code></a> when pulling from a remote
+repository.</p>
+<p>Depending on the state of the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a>, either displays a
+custom status message, or else outstanding fetch progress in bytes/sec,
+or else outstanding content or metadata writes to the repository in
+number of objects.</p>
+<p>Compatibility note: this function previously assumed that <em class="parameter"><code>user_data</code></em>
+
+was a pointer to a <span class="type">GSConsole</span> instance. This is no longer the case,
+and <em class="parameter"><code>user_data</code></em>
+ is ignored.</p>
+<div class="refsect3">
+<a name="ostree-repo-pull-default-console-progress-changed.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>Async progress</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>User data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-sign-commit"></a><h3>ostree_repo_sign_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_sign_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *key_id</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *homedir</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Add a GPG signature to a commit.</p>
+<div class="refsect3">
+<a name="ostree-repo-sign-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>SHA256 of given commit to sign</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_id</p></td>
+<td class="parameter_description"><p>Use this GPG key id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>homedir</p></td>
+<td class="parameter_description"><p>GPG home directory, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-append-gpg-signature"></a><h3>ostree_repo_append_gpg_signature ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_append_gpg_signature (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *signature_bytes</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Append a GPG signature to a commit.</p>
+<div class="refsect3">
+<a name="ostree-repo-append-gpg-signature.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>SHA256 of given commit to sign</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signature_bytes</p></td>
+<td class="parameter_description"><p>Signature data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-add-gpg-signature-summary"></a><h3>ostree_repo_add_gpg_signature_summary ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_add_gpg_signature_summary (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> **key_id</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *homedir</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Add a GPG signature to a summary file.</p>
+<div class="refsect3">
+<a name="ostree-repo-add-gpg-signature-summary.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_id</p></td>
+<td class="parameter_description"><p>NULL-terminated array of GPG keys. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>homedir</p></td>
+<td class="parameter_description"><p>GPG home directory, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-gpg-sign-data"></a><h3>ostree_repo_gpg_sign_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_gpg_sign_data (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *data</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *old_signatures</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> **key_id</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *homedir</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> **out_signatures</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Sign the given <em class="parameter"><code>data</code></em>
+ with the specified keys in <em class="parameter"><code>key_id</code></em>
+. Similar to
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-add-gpg-signature-summary" title="ostree_repo_add_gpg_signature_summary ()"><code class="function">ostree_repo_add_gpg_signature_summary()</code></a> but can be used on any
+data.</p>
+<p>You can use <a class="link" href="ostree-OstreeRepo.html#ostree-repo-gpg-verify-data" title="ostree_repo_gpg_verify_data ()"><code class="function">ostree_repo_gpg_verify_data()</code></a> to verify the signatures.</p>
+<div class="refsect3">
+<a name="ostree-repo-gpg-sign-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>Data as a <span class="type">GBytes</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>old_signatures</p></td>
+<td class="parameter_description"><p>Existing signatures to append to (or <code class="literal">NULL</code>). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_id</p></td>
+<td class="parameter_description"><p>NULL-terminated array of GPG keys. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>homedir</p></td>
+<td class="parameter_description"><p>GPG home directory, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_signatures</p></td>
+<td class="parameter_description"><p>in case of success will contain signature. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-gpg-sign-data.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>data</code></em>
+has been signed successfully,
+<code class="literal">FALSE</code> in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-gpg-verify-data"></a><h3>ostree_repo_gpg_verify_data ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+ostree_repo_gpg_verify_data (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *data</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *signatures</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *keyringdir</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *extra_keyring</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Verify <em class="parameter"><code>signatures</code></em>
+ for <em class="parameter"><code>data</code></em>
+ using GPG keys in the keyring for
+<em class="parameter"><code>remote_name</code></em>
+, and return an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>.</p>
+<p>The <em class="parameter"><code>remote_name</code></em>
+ parameter can be <code class="literal">NULL</code>. In that case it will do
+the verifications using GPG keys in the keyrings of all remotes.</p>
+<div class="refsect3">
+<a name="ostree-repo-gpg-verify-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of remote. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>Data as a <span class="type">GBytes</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signatures</p></td>
+<td class="parameter_description"><p>Signatures as a <span class="type">GBytes</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>keyringdir</p></td>
+<td class="parameter_description"><p>Path to directory GPG keyrings; overrides built-in default if given. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>extra_keyring</p></td>
+<td class="parameter_description"><p>Path to additional keyring file (not a directory). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-gpg-verify-data.returns"></a><h4>Returns</h4>
+<p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>, or <code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2016.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-signature-verify-commit-data"></a><h3>ostree_repo_signature_verify_commit_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_signature_verify_commit_data
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *commit_data</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *commit_metadata</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoVerifyFlags</span> flags</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_results</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Validate the commit data using the commit metadata which must
+contain at least one valid signature. If GPG and signapi are
+both enabled, then both must find at least one valid signature.</p>
+<div class="refsect3">
+<a name="ostree-repo-signature-verify-commit-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_data</p></td>
+<td class="parameter_description"><p>Commit object data (GVariant)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_metadata</p></td>
+<td class="parameter_description"><p>Commit metadata (GVariant <code class="literal">a{sv}</code>), must contain at least one valid signature</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Optionally disable GPG or signapi</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_results</p></td>
+<td class="parameter_description"><p>Textual description of results. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-verify-commit"></a><h3>ostree_repo_verify_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_verify_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *keyringdir</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *extra_keyring</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Check for a valid GPG signature on commit named by the ASCII
+checksum <em class="parameter"><code>commit_checksum</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-verify-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>keyringdir</p></td>
+<td class="parameter_description"><p>Path to directory GPG keyrings; overrides built-in default if given. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>extra_keyring</p></td>
+<td class="parameter_description"><p>Path to additional keyring file (not a directory). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-verify-commit.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if there was a GPG signature from a trusted keyring, otherwise <code class="literal">FALSE</code></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-verify-commit-ext"></a><h3>ostree_repo_verify_commit_ext ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+ostree_repo_verify_commit_ext (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *keyringdir</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *extra_keyring</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Read GPG signature(s) on the commit named by the ASCII checksum
+<em class="parameter"><code>commit_checksum</code></em>
+ and return detailed results.</p>
+<div class="refsect3">
+<a name="ostree-repo-verify-commit-ext.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>keyringdir</p></td>
+<td class="parameter_description"><p>Path to directory GPG keyrings; overrides built-in default if given. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>extra_keyring</p></td>
+<td class="parameter_description"><p>Path to additional keyring file (not a directory). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-verify-commit-ext.returns"></a><h4>Returns</h4>
+<p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>, or <code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-verify-commit-for-remote"></a><h3>ostree_repo_verify_commit_for_remote ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+ostree_repo_verify_commit_for_remote (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Read GPG signature(s) on the commit named by the ASCII checksum
+<em class="parameter"><code>commit_checksum</code></em>
+ and return detailed results, based on the keyring
+configured for <em class="parameter"><code>remote</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-verify-commit-for-remote.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>ASCII SHA256 checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>OSTree remote to use for configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-verify-commit-for-remote.returns"></a><h4>Returns</h4>
+<p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>, or <code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2016.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-verify-summary"></a><h3>ostree_repo_verify_summary ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="returnvalue">OstreeGpgVerifyResult</span></a> *
+ostree_repo_verify_summary (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *remote_name</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *summary</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *signatures</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Verify <em class="parameter"><code>signatures</code></em>
+ for <em class="parameter"><code>summary</code></em>
+ data using GPG keys in the keyring for
+<em class="parameter"><code>remote_name</code></em>
+, and return an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-verify-summary.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>remote_name</p></td>
+<td class="parameter_description"><p>Name of remote</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>summary</p></td>
+<td class="parameter_description"><p>Summary data as a <span class="type">GBytes</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signatures</p></td>
+<td class="parameter_description"><p>Summary signatures as a <span class="type">GBytes</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-verify-summary.returns"></a><h4>Returns</h4>
+<p>an <a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult"><span class="type">OstreeGpgVerifyResult</span></a>, or <code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-regenerate-metadata"></a><h3>ostree_repo_regenerate_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_regenerate_metadata (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *additional_metadata</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Regenerate the OSTree repository metadata used by clients to describe
+available branches and other metadata.</p>
+<p>The repository metadata currently consists of the <code class="literal">summary</code> file. See
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-summary" title="ostree_repo_regenerate_summary ()"><code class="function">ostree_repo_regenerate_summary()</code></a> and <a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-FORMAT:CAPS" title="OSTREE_SUMMARY_GVARIANT_FORMAT"><code class="literal">OSTREE_SUMMARY_GVARIANT_FORMAT</code></a> for
+additional details on its contents.</p>
+<p>Additionally, if the <code class="literal">core/collection-id</code> key is set in the configuration, a
+<a class="link" href="ostree-ostree-repo-remote-finder.html#OSTREE-REPO-METADATA-REF:CAPS" title="OSTREE_REPO_METADATA_REF"><code class="literal">OSTREE_REPO_METADATA_REF</code></a> commit will be created.</p>
+<p>The following <em class="parameter"><code>options</code></em>
+ are currently defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p><code class="literal">gpg-key-ids</code> (<code class="literal">as</code>): Array of GPG key IDs to sign the metadata with.</p></li>
+<li class="listitem"><p><code class="literal">gpg-homedir</code> (<code class="literal">s</code>): GPG home directory.</p></li>
+<li class="listitem"><p><code class="literal">sign-keys</code> (<code class="literal">av</code>): Array of keys to sign the metadata with. The key
+type is specific to the sign engine used.</p></li>
+<li class="listitem"><p><code class="literal">sign-type</code> (<code class="literal">s</code>): Sign engine type to use. If not specified,
+<code class="literal">OSTREE_SIGN_NAME_ED25519</code> is used.</p></li>
+</ul></div>
+<p>Locking: shared</p>
+<div class="refsect3">
+<a name="ostree-repo-regenerate-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>additional_metadata</p></td>
+<td class="parameter_description"><p>A GVariant <code class="literal">a{sv}</code>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>A GVariant <code class="literal">a{sv}</code> with an extensible set of flags. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2023.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-regenerate-summary"></a><h3>ostree_repo_regenerate_summary ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_regenerate_summary (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *additional_metadata</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>An OSTree repository can contain a high level "summary" file that
+describes the available branches and other metadata.</p>
+<p>If the timetable for making commits and updating the summary file is fairly
+regular, setting the <code class="literal">ostree.summary.expires</code> key in <em class="parameter"><code>additional_metadata</code></em>
+
+will aid clients in working out when to check for updates.</p>
+<p>It is regenerated automatically after any ref is
+added, removed, or updated if <code class="literal">core/auto-update-summary</code> is set.</p>
+<p>If the <code class="literal">core/collection-id</code> key is set in the configuration, it will be
+included as <code class="literal">OSTREE_SUMMARY_COLLECTION_ID</code> in the summary file. Refs that
+have associated collection IDs will be included in the generated summary
+file, listed under the <code class="literal">OSTREE_SUMMARY_COLLECTION_MAP</code> key. Collection IDs
+and refs in <code class="literal">OSTREE_SUMMARY_COLLECTION_MAP</code> are guaranteed to be in
+lexicographic order.</p>
+<p>Locking: shared (Prior to 2021.7, this was exclusive)</p>
+<div class="refsect3">
+<a name="ostree-repo-regenerate-summary.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>additional_metadata</p></td>
+<td class="parameter_description"><p>A GVariant of type a{sv}, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-OstreeRepo.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeRepo"></a><h3>OstreeRepo</h3>
+<pre class="programlisting">typedef struct OstreeRepo OstreeRepo;
+</pre>
+<p>Private instance structure.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoMode"></a><h3>enum OstreeRepoMode</h3>
+<p>See the documentation of <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> for more information about the
+possible modes.</p>
+<div class="refsect3">
+<a name="OstreeRepoMode.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-MODE-BARE:CAPS"></a>OSTREE_REPO_MODE_BARE</p></td>
+<td class="enum_member_description">
+<p>Files are stored as themselves; checkouts are hardlinks; can only be
+written as root</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-MODE-ARCHIVE:CAPS"></a>OSTREE_REPO_MODE_ARCHIVE</p></td>
+<td class="enum_member_description">
+<p>Files are compressed, should be owned by non-root. Can be served via
+HTTP. Since: 2017.12</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-MODE-ARCHIVE-Z2:CAPS"></a>OSTREE_REPO_MODE_ARCHIVE_Z2</p></td>
+<td class="enum_member_description">
+<p>Legacy alias for <code class="literal">OSTREE_REPO_MODE_ARCHIVE</code></p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-MODE-BARE-USER:CAPS"></a>OSTREE_REPO_MODE_BARE_USER</p></td>
+<td class="enum_member_description">
+<p>Files are stored as themselves, except ownership; can be written by
+user. Hardlinks work only in user checkouts.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-MODE-BARE-USER-ONLY:CAPS"></a>OSTREE_REPO_MODE_BARE_USER_ONLY</p></td>
+<td class="enum_member_description">
+<p>Same as BARE_USER, but all metadata is not stored, so it can
+only be used for user checkouts. Does not need xattrs.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-MODE-BARE-SPLIT-XATTRS:CAPS"></a>OSTREE_REPO_MODE_BARE_SPLIT_XATTRS</p></td>
+<td class="enum_member_description">
+<p>Same as BARE_USER, but xattrs are stored separately from
+file content, with dedicated object types.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoLockType"></a><h3>enum OstreeRepoLockType</h3>
+<p>Flags controlling repository locking.</p>
+<div class="refsect3">
+<a name="OstreeRepoLockType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LOCK-SHARED:CAPS"></a>OSTREE_REPO_LOCK_SHARED</p></td>
+<td class="enum_member_description">
+<p>A "read only" lock; multiple readers are allowed.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LOCK-EXCLUSIVE:CAPS"></a>OSTREE_REPO_LOCK_EXCLUSIVE</p></td>
+<td class="enum_member_description">
+<p>A writable lock at most one writer can be active, and zero readers.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2021.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoAutoLock"></a><h3>OstreeRepoAutoLock</h3>
+<pre class="programlisting">typedef struct OstreeRepoAutoLock OstreeRepoAutoLock;
+</pre>
+<p>An opaque type for use with <a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-push" title="ostree_repo_auto_lock_push ()"><code class="function">ostree_repo_auto_lock_push()</code></a>.</p>
+<p class="since">Since: 2021.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoRemoteChange"></a><h3>enum OstreeRepoRemoteChange</h3>
+<div class="refsect3">
+<a name="OstreeRepoRemoteChange.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-REMOTE-CHANGE-ADD:CAPS"></a>OSTREE_REPO_REMOTE_CHANGE_ADD</p></td>
+<td class="enum_member_description">
+<p>Add a remote</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-REMOTE-CHANGE-ADD-IF-NOT-EXISTS:CAPS"></a>OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS</p></td>
+<td class="enum_member_description">
+<p>Like above, but do nothing if the remote exists</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-REMOTE-CHANGE-DELETE:CAPS"></a>OSTREE_REPO_REMOTE_CHANGE_DELETE</p></td>
+<td class="enum_member_description">
+<p>Delete a remote</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-REMOTE-CHANGE-DELETE-IF-EXISTS:CAPS"></a>OSTREE_REPO_REMOTE_CHANGE_DELETE_IF_EXISTS</p></td>
+<td class="enum_member_description">
+<p>Delete a remote, do nothing if the remote does not
+exist</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-REMOTE-CHANGE-REPLACE:CAPS"></a>OSTREE_REPO_REMOTE_CHANGE_REPLACE</p></td>
+<td class="enum_member_description">
+<p>Add or replace a remote (Since: 2019.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoTransactionStats"></a><h3>struct OstreeRepoTransactionStats</h3>
+<pre class="programlisting">struct OstreeRepoTransactionStats {
+ guint metadata_objects_total;
+ guint metadata_objects_written;
+ guint content_objects_total;
+ guint content_objects_written;
+ guint64 content_bytes_written;
+ guint devino_cache_hits;
+
+ guint padding1;
+ guint64 padding2;
+ guint64 padding3;
+ guint64 padding4;
+};
+</pre>
+<p>A list of statistics for each transaction that may be
+interesting for reporting purposes.</p>
+<div class="refsect3">
+<a name="OstreeRepoTransactionStats.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.metadata-objects-total"></a>metadata_objects_total</code></em>;</p></td>
+<td class="struct_member_description"><p>The total number of metadata objects
+in the repository after this transaction has completed.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.metadata-objects-written"></a>metadata_objects_written</code></em>;</p></td>
+<td class="struct_member_description"><p>The number of metadata objects that
+were written to the repository in this transaction.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.content-objects-total"></a>content_objects_total</code></em>;</p></td>
+<td class="struct_member_description"><p>The total number of content objects
+in the repository after this transaction has completed.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.content-objects-written"></a>content_objects_written</code></em>;</p></td>
+<td class="struct_member_description"><p>The number of content objects that
+were written to the repository in this transaction.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint64</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.content-bytes-written"></a>content_bytes_written</code></em>;</p></td>
+<td class="struct_member_description"><p>The amount of data added to the repository,
+in bytes, counting only content objects.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.devino-cache-hits"></a>devino_cache_hits</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.padding1"></a>padding1</code></em>;</p></td>
+<td class="struct_member_description"><p>reserved</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint64</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.padding2"></a>padding2</code></em>;</p></td>
+<td class="struct_member_description"><p>reserved</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint64</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.padding3"></a>padding3</code></em>;</p></td>
+<td class="struct_member_description"><p>reserved</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint64</span> <em class="structfield"><code><a name="OstreeRepoTransactionStats.padding4"></a>padding4</code></em>;</p></td>
+<td class="struct_member_description"><p>reserved</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoResolveRevExtFlags"></a><h3>enum OstreeRepoResolveRevExtFlags</h3>
+<div class="refsect3">
+<a name="OstreeRepoResolveRevExtFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-RESOLVE-REV-EXT-NONE:CAPS"></a>OSTREE_REPO_RESOLVE_REV_EXT_NONE</p></td>
+<td class="enum_member_description">
+<p>No flags.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-RESOLVE-REV-EXT-LOCAL-ONLY:CAPS"></a>OSTREE_REPO_RESOLVE_REV_EXT_LOCAL_ONLY</p></td>
+<td class="enum_member_description">
+<p>Exclude remote and mirrored refs. Since: 2019.2</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoListRefsExtFlags"></a><h3>enum OstreeRepoListRefsExtFlags</h3>
+<div class="refsect3">
+<a name="OstreeRepoListRefsExtFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-REFS-EXT-NONE:CAPS"></a>OSTREE_REPO_LIST_REFS_EXT_NONE</p></td>
+<td class="enum_member_description">
+<p>No flags.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-REFS-EXT-ALIASES:CAPS"></a>OSTREE_REPO_LIST_REFS_EXT_ALIASES</p></td>
+<td class="enum_member_description">
+<p>Only list aliases. Since: 2017.10</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-REFS-EXT-EXCLUDE-REMOTES:CAPS"></a>OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_REMOTES</p></td>
+<td class="enum_member_description">
+<p>Exclude remote refs. Since: 2017.11</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-REFS-EXT-EXCLUDE-MIRRORS:CAPS"></a>OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_MIRRORS</p></td>
+<td class="enum_member_description">
+<p>Exclude mirrored refs. Since: 2019.2</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitState"></a><h3>enum OstreeRepoCommitState</h3>
+<p>Flags representing the state of a commit in the local repository, as returned
+by <a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-commit" title="ostree_repo_load_commit ()"><code class="function">ostree_repo_load_commit()</code></a>.</p>
+<div class="refsect3">
+<a name="OstreeRepoCommitState.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-STATE-NORMAL:CAPS"></a>OSTREE_REPO_COMMIT_STATE_NORMAL</p></td>
+<td class="enum_member_description">
+<p>Commit is complete. This is the default.
+(Since: 2017.14.)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-STATE-PARTIAL:CAPS"></a>OSTREE_REPO_COMMIT_STATE_PARTIAL</p></td>
+<td class="enum_member_description">
+<p>One or more objects are missing from the
+local copy of the commit, but metadata is present. (Since: 2015.7.)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-STATE-FSCK-PARTIAL:CAPS"></a>OSTREE_REPO_COMMIT_STATE_FSCK_PARTIAL</p></td>
+<td class="enum_member_description">
+<p>One or more objects are missing from the
+local copy of the commit, due to an fsck --delete. (Since: 2019.4.)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2015.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitFilterResult"></a><h3>enum OstreeRepoCommitFilterResult</h3>
+<div class="refsect3">
+<a name="OstreeRepoCommitFilterResult.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-FILTER-ALLOW:CAPS"></a>OSTREE_REPO_COMMIT_FILTER_ALLOW</p></td>
+<td class="enum_member_description">
+<p>Do commit this object</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-FILTER-SKIP:CAPS"></a>OSTREE_REPO_COMMIT_FILTER_SKIP</p></td>
+<td class="enum_member_description">
+<p>Ignore this object</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitModifier"></a><h3>OstreeRepoCommitModifier</h3>
+<pre class="programlisting">typedef struct OstreeRepoCommitModifier OstreeRepoCommitModifier;
+</pre>
+<p>A structure allowing control over commits.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitModifierFlags"></a><h3>enum OstreeRepoCommitModifierFlags</h3>
+<p>Flags modifying commit behavior. In bare-user-only mode,
+<em class="parameter"><code>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CANONICAL_PERMISSIONS</code></em>
+ and
+<em class="parameter"><code>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS</code></em>
+ are automatically enabled.</p>
+<div class="refsect3">
+<a name="OstreeRepoCommitModifierFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-NONE:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_NONE</p></td>
+<td class="enum_member_description">
+<p>No special flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-SKIP-XATTRS:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS</p></td>
+<td class="enum_member_description">
+<p>Do not process extended attributes</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-GENERATE-SIZES:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_GENERATE_SIZES</p></td>
+<td class="enum_member_description">
+<p>Generate size information.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-CANONICAL-PERMISSIONS:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CANONICAL_PERMISSIONS</p></td>
+<td class="enum_member_description">
+<p>Canonicalize permissions.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-ERROR-ON-UNLABELED:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_ERROR_ON_UNLABELED</p></td>
+<td class="enum_member_description">
+<p>Emit an error if configured SELinux
+policy does not provide a label</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-CONSUME:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CONSUME</p></td>
+<td class="enum_member_description">
+<p>Delete added files/directories after commit; Since:
+2017.13</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-MODIFIER-FLAGS-DEVINO-CANONICAL:CAPS"></a>OSTREE_REPO_COMMIT_MODIFIER_FLAGS_DEVINO_CANONICAL</p></td>
+<td class="enum_member_description">
+<p>If a devino cache hit is found, skip
+modifier filters (non-directories only); Since: 2017.14</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCheckoutMode"></a><h3>enum OstreeRepoCheckoutMode</h3>
+<div class="refsect3">
+<a name="OstreeRepoCheckoutMode.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-CHECKOUT-MODE-NONE:CAPS"></a>OSTREE_REPO_CHECKOUT_MODE_NONE</p></td>
+<td class="enum_member_description">
+<p>No special options</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-CHECKOUT-MODE-USER:CAPS"></a>OSTREE_REPO_CHECKOUT_MODE_USER</p></td>
+<td class="enum_member_description">
+<p>Ignore uid/gid of files</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCheckoutOverwriteMode"></a><h3>enum OstreeRepoCheckoutOverwriteMode</h3>
+<div class="refsect3">
+<a name="OstreeRepoCheckoutOverwriteMode.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-CHECKOUT-OVERWRITE-NONE:CAPS"></a>OSTREE_REPO_CHECKOUT_OVERWRITE_NONE</p></td>
+<td class="enum_member_description">
+<p>No special options</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-CHECKOUT-OVERWRITE-UNION-FILES:CAPS"></a>OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES</p></td>
+<td class="enum_member_description">
+<p>When layering checkouts, <code class="function">unlink()</code> and replace
+existing files, but do not modify existing directories (unless whiteouts are enabled, then
+directories are replaced)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-CHECKOUT-OVERWRITE-ADD-FILES:CAPS"></a>OSTREE_REPO_CHECKOUT_OVERWRITE_ADD_FILES</p></td>
+<td class="enum_member_description">
+<p>Only add new files/directories</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-CHECKOUT-OVERWRITE-UNION-IDENTICAL:CAPS"></a>OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_IDENTICAL</p></td>
+<td class="enum_member_description">
+<p>Like UNION_FILES, but error if files are not
+identical (requires hardlink checkouts)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoListObjectsFlags"></a><h3>enum OstreeRepoListObjectsFlags</h3>
+<div class="refsect3">
+<a name="OstreeRepoListObjectsFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-OBJECTS-LOOSE:CAPS"></a>OSTREE_REPO_LIST_OBJECTS_LOOSE</p></td>
+<td class="enum_member_description">
+<p>List only loose (plain file) objects</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-OBJECTS-PACKED:CAPS"></a>OSTREE_REPO_LIST_OBJECTS_PACKED</p></td>
+<td class="enum_member_description">
+<p>List only packed (compacted into blobs) objects</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-OBJECTS-ALL:CAPS"></a>OSTREE_REPO_LIST_OBJECTS_ALL</p></td>
+<td class="enum_member_description">
+<p>List all objects</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-LIST-OBJECTS-NO-PARENTS:CAPS"></a>OSTREE_REPO_LIST_OBJECTS_NO_PARENTS</p></td>
+<td class="enum_member_description">
+<p>Only list objects in this repo, not parents</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-REPO-LIST-OBJECTS-VARIANT-TYPE:CAPS"></a><h3>OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE</h3>
+<pre class="programlisting">#define OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE (G_VARIANT_TYPE ("(bas)")
+</pre>
+<p>b - <code class="literal">TRUE</code> if object is available "loose"
+as - List of pack file checksums in which this object appears</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeStaticDeltaGenerateOpt"></a><h3>enum OstreeStaticDeltaGenerateOpt</h3>
+<p>Parameters controlling optimization of static deltas.</p>
+<div class="refsect3">
+<a name="OstreeStaticDeltaGenerateOpt.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-STATIC-DELTA-GENERATE-OPT-LOWLATENCY:CAPS"></a>OSTREE_STATIC_DELTA_GENERATE_OPT_LOWLATENCY</p></td>
+<td class="enum_member_description">
+<p>Optimize for speed of delta creation over space</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-STATIC-DELTA-GENERATE-OPT-MAJOR:CAPS"></a>OSTREE_STATIC_DELTA_GENERATE_OPT_MAJOR</p></td>
+<td class="enum_member_description">
+<p>Optimize for delta size (may be very slow)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitTraverseFlags"></a><h3>enum OstreeRepoCommitTraverseFlags</h3>
+<div class="refsect3">
+<a name="OstreeRepoCommitTraverseFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-TRAVERSE-FLAG-NONE:CAPS"></a>OSTREE_REPO_COMMIT_TRAVERSE_FLAG_NONE</p></td>
+<td class="enum_member_description">
+<p>No special options for traverse</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-TRAVERSE-FLAG-COMMIT-ONLY:CAPS"></a>OSTREE_REPO_COMMIT_TRAVERSE_FLAG_COMMIT_ONLY</p></td>
+<td class="enum_member_description">
+<p>Traverse and retrieve only commit objects.
+(Since: 2022.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoCommitIterResult"></a><h3>enum OstreeRepoCommitIterResult</h3>
+<div class="refsect3">
+<a name="OstreeRepoCommitIterResult.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-ITER-RESULT-ERROR:CAPS"></a>OSTREE_REPO_COMMIT_ITER_RESULT_ERROR</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-ITER-RESULT-END:CAPS"></a>OSTREE_REPO_COMMIT_ITER_RESULT_END</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-ITER-RESULT-FILE:CAPS"></a>OSTREE_REPO_COMMIT_ITER_RESULT_FILE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-COMMIT-ITER-RESULT-DIR:CAPS"></a>OSTREE_REPO_COMMIT_ITER_RESULT_DIR</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoPruneFlags"></a><h3>enum OstreeRepoPruneFlags</h3>
+<div class="refsect3">
+<a name="OstreeRepoPruneFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PRUNE-FLAGS-NONE:CAPS"></a>OSTREE_REPO_PRUNE_FLAGS_NONE</p></td>
+<td class="enum_member_description">
+<p>No special options for pruning</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PRUNE-FLAGS-NO-PRUNE:CAPS"></a>OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE</p></td>
+<td class="enum_member_description">
+<p>Don't actually delete objects</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PRUNE-FLAGS-REFS-ONLY:CAPS"></a>OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY</p></td>
+<td class="enum_member_description">
+<p>Do not traverse individual commit objects, only follow refs
+for reachability calculations</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PRUNE-FLAGS-COMMIT-ONLY:CAPS"></a>OSTREE_REPO_PRUNE_FLAGS_COMMIT_ONLY</p></td>
+<td class="enum_member_description">
+<p>Only traverse commit objects. (Since 2022.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoPullFlags"></a><h3>enum OstreeRepoPullFlags</h3>
+<div class="refsect3">
+<a name="OstreeRepoPullFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PULL-FLAGS-NONE:CAPS"></a>OSTREE_REPO_PULL_FLAGS_NONE</p></td>
+<td class="enum_member_description">
+<p>No special options for pull</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PULL-FLAGS-MIRROR:CAPS"></a>OSTREE_REPO_PULL_FLAGS_MIRROR</p></td>
+<td class="enum_member_description">
+<p>Write out refs suitable for mirrors and fetch all refs if none
+requested</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PULL-FLAGS-COMMIT-ONLY:CAPS"></a>OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY</p></td>
+<td class="enum_member_description">
+<p>Fetch only the commit metadata</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PULL-FLAGS-UNTRUSTED:CAPS"></a>OSTREE_REPO_PULL_FLAGS_UNTRUSTED</p></td>
+<td class="enum_member_description">
+<p>Do verify checksums of local (filesystem-accessible)
+repositories (defaults on for HTTP)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PULL-FLAGS-BAREUSERONLY-FILES:CAPS"></a>OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES</p></td>
+<td class="enum_member_description">
+<p>Since 2017.7. Reject writes of content objects with
+modes outside of 0775.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-REPO-PULL-FLAGS-TRUSTED-HTTP:CAPS"></a>OSTREE_REPO_PULL_FLAGS_TRUSTED_HTTP</p></td>
+<td class="enum_member_description">
+<p>Don't verify checksums of objects HTTP repositories
+(Since: 2017.12)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-Progress-notification-system-for-asynchronous-operations.html b/reference/ostree-Progress-notification-system-for-asynchronous-operations.html
new file mode 100644
index 00000000..b0229a41
--- /dev/null
+++ b/reference/ostree-Progress-notification-system-for-asynchronous-operations.html
@@ -0,0 +1,623 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Progress notification system for asynchronous operations: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">
+<link rel="next" href="ostree-SELinux-policy-management.html" title="SELinux policy management">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-Progress-notification-system-for-asynchronous-operations.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-Root-partition-mount-point.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-SELinux-policy-management.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-Progress-notification-system-for-asynchronous-operations"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-Progress-notification-system-for-asynchronous-operations.top_of_page"></a>Progress notification system for asynchronous operations</span></h2>
+<p>Progress notification system for asynchronous operations — Values representing progress</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-Progress-notification-system-for-asynchronous-operations.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="returnvalue">OstreeAsyncProgress</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new" title="ostree_async_progress_new ()">ostree_async_progress_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="returnvalue">OstreeAsyncProgress</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new-and-connect" title="ostree_async_progress_new_and_connect ()">ostree_async_progress_new_and_connect</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-copy-state" title="ostree_async_progress_copy_state ()">ostree_async_progress_copy_state</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-status" title="ostree_async_progress_get_status ()">ostree_async_progress_get_status</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get" title="ostree_async_progress_get ()">ostree_async_progress_get</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-variant" title="ostree_async_progress_get_variant ()">ostree_async_progress_get_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-uint" title="ostree_async_progress_get_uint ()">ostree_async_progress_get_uint</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint64</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-uint64" title="ostree_async_progress_get_uint64 ()">ostree_async_progress_get_uint64</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-status" title="ostree_async_progress_set_status ()">ostree_async_progress_set_status</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set" title="ostree_async_progress_set ()">ostree_async_progress_set</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-variant" title="ostree_async_progress_set_variant ()">ostree_async_progress_set_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-uint" title="ostree_async_progress_set_uint ()">ostree_async_progress_set_uint</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-uint64" title="ostree_async_progress_set_uint64 ()">ostree_async_progress_set_uint64</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-finish" title="ostree_async_progress_finish ()">ostree_async_progress_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Progress-notification-system-for-asynchronous-operations.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress">OstreeAsyncProgress</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Progress-notification-system-for-asynchronous-operations.description"></a><h2>Description</h2>
+<p>For many asynchronous operations, it's desirable for callers to be
+able to watch their status as they progress. For example, an user
+interface calling an asynchronous download operation will want to
+be able to see the total number of bytes downloaded.</p>
+<p>This class provides a mechanism for callees of asynchronous
+operations to communicate back with callers. It transparently
+handles thread safety, ensuring that the progress change
+notification occurs in the thread-default context of the calling
+operation.</p>
+<p>The <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-status" title="ostree_async_progress_get_status ()"><code class="function">ostree_async_progress_get_status()</code></a> and <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-status" title="ostree_async_progress_set_status ()"><code class="function">ostree_async_progress_set_status()</code></a>
+methods get and set a well-known <code class="literal">status</code> key of type <code class="literal">G_VARIANT_TYPE_STRING</code>.
+This key may be accessed using the other <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> methods, but it
+must always have the correct type.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-Progress-notification-system-for-asynchronous-operations.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-async-progress-new"></a><h3>ostree_async_progress_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="returnvalue">OstreeAsyncProgress</span></a> *
+ostree_async_progress_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-async-progress-new.returns"></a><h4>Returns</h4>
+<p>A new progress object. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-new-and-connect"></a><h3>ostree_async_progress_new_and_connect ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="returnvalue">OstreeAsyncProgress</span></a> *
+ostree_async_progress_new_and_connect (<em class="parameter"><code><span class="type">void</span> (*changed) (OstreeAsyncProgress *self, gpointer user_data)</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-async-progress-new-and-connect.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>changed</p></td>
+<td class="parameter_description"><p>a notification callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>data to pass to <em class="parameter"><code>changed</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-async-progress-new-and-connect.returns"></a><h4>Returns</h4>
+<p>A new progress object. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-copy-state"></a><h3>ostree_async_progress_copy_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_copy_state (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *dest</code></em>);</pre>
+<p>Atomically copies all the state from <em class="parameter"><code>self</code></em>
+ to <em class="parameter"><code>dest</code></em>
+, without invoking the
+callback.
+This is used for proxying progress objects across different <span class="type">GMainContexts</span>.</p>
+<div class="refsect3">
+<a name="ostree-async-progress-copy-state.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> to copy to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-get-status"></a><h3>ostree_async_progress_get_status ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_async_progress_get_status (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>);</pre>
+<p>Get the human-readable status string from the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a>. This
+operation is thread-safe. The retuned value may be <code class="literal">NULL</code> if no status is
+set.</p>
+<p>This is a convenience function to get the well-known <code class="literal">status</code> key.</p>
+<div class="refsect3">
+<a name="ostree-async-progress-get-status.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-async-progress-get-status.returns"></a><h4>Returns</h4>
+<p>the current status, or <code class="literal">NULL</code> if none is set. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2017.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-get"></a><h3>ostree_async_progress_get ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_get (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>...</code></em>);</pre>
+<p>Get the values corresponding to zero or more keys from the
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a>. Each key is specified in @... as the key name, followed
+by a <span class="type">GVariant</span> format string, followed by the necessary arguments for that
+format string, just as for <code class="function">g_variant_get()</code>. After those arguments is the
+next key name. The varargs list must be <code class="literal">NULL</code>-terminated.</p>
+<p>Each format string must make deep copies of its value, as the values stored
+in the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> may be freed from another thread after this
+function returns.</p>
+<p>This operation is thread-safe, and all the keys are queried atomically.</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="n">guint32</span><span class="w"> </span><span class="n">outstanding_fetches</span><span class="p">;</span>
+<span class="n">guint64</span><span class="w"> </span><span class="n">bytes_received</span><span class="p">;</span>
+<span class="n">g_autofree</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span>
+<span class="n">g_autoptr</span><span class="p">(</span><span class="n">GVariant</span><span class="p">)</span><span class="w"> </span><span class="n">refs_variant</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span>
+
+<span class="n">ostree_async_progress_get</span><span class="w"> </span><span class="p">(</span><span class="n">progress</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;outstanding-fetches&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;u&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">outstanding_fetches</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;bytes-received&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;t&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">bytes_received</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;status&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;s&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">status</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;refs&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;@a{ss}&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">refs_variant</span><span class="p">,</span>
+<span class="w"> </span><span class="nb">NULL</span><span class="p">);</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p></p>
+<div class="refsect3">
+<a name="ostree-async-progress-get.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>key name, format string, <span class="type">GVariant</span> return locations, …, followed by <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-get-variant"></a><h3>ostree_async_progress_get_variant ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_async_progress_get_variant (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<p>Look up a key in the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> and return the <span class="type">GVariant</span> associated
+with it. The lookup is thread-safe.</p>
+<div class="refsect3">
+<a name="ostree-async-progress-get-variant.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>a key to look up</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-async-progress-get-variant.returns"></a><h4>Returns</h4>
+<p>value for the given <em class="parameter"><code>key</code></em>
+, or <code class="literal">NULL</code> if
+it was not set. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2017.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-get-uint"></a><h3>ostree_async_progress_get_uint ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_async_progress_get_uint (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-get-uint64"></a><h3>ostree_async_progress_get_uint64 ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint64</span>
+ostree_async_progress_get_uint64 (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-set-status"></a><h3>ostree_async_progress_set_status ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_set_status (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *status</code></em>);</pre>
+<p>Set the human-readable status string for the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a>. This
+operation is thread-safe. <code class="literal">NULL</code> may be passed to clear the status.</p>
+<p>This is a convenience function to set the well-known <code class="literal">status</code> key.</p>
+<div class="refsect3">
+<a name="ostree-async-progress-set-status.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>status</p></td>
+<td class="parameter_description"><p>new status string, or <code class="literal">NULL</code> to clear the status. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-set"></a><h3>ostree_async_progress_set ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_set (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>...</code></em>);</pre>
+<p>Set the values for zero or more keys in the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a>. Each key is
+specified in @... as the key name, followed by a <span class="type">GVariant</span> format string,
+followed by the necessary arguments for that format string, just as for
+<code class="function">g_variant_new()</code>. After those arguments is the next key name. The varargs list
+must be <code class="literal">NULL</code>-terminated.</p>
+<p>g_variant_ref_sink() will be called as appropriate on the <span class="type">GVariant</span>
+parameters, so they may be floating.</p>
+<p>This operation is thread-safe, and all the keys are set atomically.</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="n">guint32</span><span class="w"> </span><span class="n">outstanding_fetches</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span>
+<span class="n">guint64</span><span class="w"> </span><span class="n">bytes_received</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1000</span><span class="p">;</span>
+
+<span class="n">ostree_async_progress_set</span><span class="w"> </span><span class="p">(</span><span class="n">progress</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;outstanding-fetches&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;u&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">outstanding_fetches</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;bytes-received&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;t&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">bytes_received</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;status&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;s&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Updated status&quot;</span><span class="p">,</span>
+<span class="w"> </span><span class="s">&quot;refs&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;@a{ss}&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">g_variant_new_parsed</span><span class="w"> </span><span class="p">(</span><span class="s">&quot;@a{ss} {}&quot;</span><span class="p">),</span>
+<span class="w"> </span><span class="nb">NULL</span><span class="p">);</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p></p>
+<div class="refsect3">
+<a name="ostree-async-progress-set.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>key name, format string, <span class="type">GVariant</span> parameters, …, followed by <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-set-variant"></a><h3>ostree_async_progress_set_variant ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_set_variant (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *value</code></em>);</pre>
+<p>Assign a new <em class="parameter"><code>value</code></em>
+ to the given <em class="parameter"><code>key</code></em>
+, replacing any existing value. The
+operation is thread-safe. <em class="parameter"><code>value</code></em>
+ may be a floating reference;
+<code class="function">g_variant_ref_sink()</code> will be called on it.</p>
+<p>Any watchers of the <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> will be notified of the change if
+<em class="parameter"><code>value</code></em>
+ differs from the existing value for <em class="parameter"><code>key</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-async-progress-set-variant.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>a key to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>the value to assign to <em class="parameter"><code>key</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-set-uint"></a><h3>ostree_async_progress_set_uint ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_set_uint (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code><span class="type">guint</span> value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-set-uint64"></a><h3>ostree_async_progress_set_uint64 ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_set_uint64 (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-async-progress-finish"></a><h3>ostree_async_progress_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_async_progress_finish (<em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *self</code></em>);</pre>
+<p>Process any pending signals, ensuring the main context is cleared
+of sources used by this object. Also ensures that no further
+events will be queued.</p>
+<div class="refsect3">
+<a name="ostree-async-progress-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-Progress-notification-system-for-asynchronous-operations.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeAsyncProgress"></a><h3>OstreeAsyncProgress</h3>
+<pre class="programlisting">typedef struct OstreeAsyncProgress OstreeAsyncProgress;
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-Root-partition-mount-point.html b/reference/ostree-Root-partition-mount-point.html
new file mode 100644
index 00000000..8461c186
--- /dev/null
+++ b/reference/ostree-Root-partition-mount-point.html
@@ -0,0 +1,2497 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Root partition mount point: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">
+<link rel="next" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-Root-partition-mount-point.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-In-memory-modifiable-filesystem-tree.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-Progress-notification-system-for-asynchronous-operations.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-Root-partition-mount-point"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-Root-partition-mount-point.top_of_page"></a>Root partition mount point</span></h2>
+<p>Root partition mount point — Manage physical root filesystem</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-Root-partition-mount-point.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="returnvalue">OstreeSysroot</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-new" title="ostree_sysroot_new ()">ostree_sysroot_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="returnvalue">OstreeSysroot</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-new-default" title="ostree_sysroot_new_default ()">ostree_sysroot_new_default</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()">ostree_sysroot_initialize</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize-with-mount-namespace" title="ostree_sysroot_initialize_with_mount_namespace ()">ostree_sysroot_initialize_with_mount_namespace</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-path" title="ostree_sysroot_get_path ()">ostree_sysroot_get_path</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()">ostree_sysroot_load</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load-if-changed" title="ostree_sysroot_load_if_changed ()">ostree_sysroot_load_if_changed</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock" title="ostree_sysroot_lock ()">ostree_sysroot_lock</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-try-lock" title="ostree_sysroot_try_lock ()">ostree_sysroot_try_lock</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-async" title="ostree_sysroot_lock_async ()">ostree_sysroot_lock_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-finish" title="ostree_sysroot_lock_finish ()">ostree_sysroot_lock_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-unlock" title="ostree_sysroot_unlock ()">ostree_sysroot_unlock</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-unload" title="ostree_sysroot_unload ()">ostree_sysroot_unload</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-set-mount-namespace-in-use" title="ostree_sysroot_set_mount_namespace_in_use ()">ostree_sysroot_set_mount_namespace_in_use</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-is-booted" title="ostree_sysroot_is_booted ()">ostree_sysroot_is_booted</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-fd" title="ostree_sysroot_get_fd ()">ostree_sysroot_get_fd</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-ensure-initialized" title="ostree_sysroot_ensure_initialized ()">ostree_sysroot_ensure_initialized</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-bootversion" title="ostree_sysroot_get_bootversion ()">ostree_sysroot_get_bootversion</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-subbootversion" title="ostree_sysroot_get_subbootversion ()">ostree_sysroot_get_subbootversion</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GPtrArray</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployments" title="ostree_sysroot_get_deployments ()">ostree_sysroot_get_deployments</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-booted-deployment" title="ostree_sysroot_get_booted_deployment ()">ostree_sysroot_get_booted_deployment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-require-booted-deployment" title="ostree_sysroot_require_booted_deployment ()">ostree_sysroot_require_booted_deployment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-directory" title="ostree_sysroot_get_deployment_directory ()">ostree_sysroot_get_deployment_directory</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-dirpath" title="ostree_sysroot_get_deployment_dirpath ()">ostree_sysroot_get_deployment_dirpath</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-origin-path" title="ostree_sysroot_get_deployment_origin_path ()">ostree_sysroot_get_deployment_origin_path</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup" title="ostree_sysroot_cleanup ()">ostree_sysroot_cleanup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-prepare-cleanup" title="ostree_sysroot_prepare_cleanup ()">ostree_sysroot_prepare_cleanup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup-prune-repo" title="ostree_sysroot_cleanup_prune_repo ()">ostree_sysroot_cleanup_prune_repo</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-repo" title="ostree_sysroot_repo ()">ostree_sysroot_repo</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-repo" title="ostree_sysroot_get_repo ()">ostree_sysroot_get_repo</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-staged-deployment" title="ostree_sysroot_get_staged_deployment ()">ostree_sysroot_get_staged_deployment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-init-osname" title="ostree_sysroot_init_osname ()">ostree_sysroot_init_osname</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-kargs" title="ostree_sysroot_deployment_set_kargs ()">ostree_sysroot_deployment_set_kargs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-kargs-in-place" title="ostree_sysroot_deployment_set_kargs_in_place ()">ostree_sysroot_deployment_set_kargs_in_place</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-mutable" title="ostree_sysroot_deployment_set_mutable ()">ostree_sysroot_deployment_set_mutable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-unlock" title="ostree_sysroot_deployment_unlock ()">ostree_sysroot_deployment_unlock</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-pinned" title="ostree_sysroot_deployment_set_pinned ()">ostree_sysroot_deployment_set_pinned</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments" title="ostree_sysroot_write_deployments ()">ostree_sysroot_write_deployments</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments-with-options" title="ostree_sysroot_write_deployments_with_options ()">ostree_sysroot_write_deployments_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-origin-file" title="ostree_sysroot_write_origin_file ()">ostree_sysroot_write_origin_file</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree" title="ostree_sysroot_stage_tree ()">ostree_sysroot_stage_tree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree-with-options" title="ostree_sysroot_stage_tree_with_options ()">ostree_sysroot_stage_tree_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-overlay-initrd" title="ostree_sysroot_stage_overlay_initrd ()">ostree_sysroot_stage_overlay_initrd</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree" title="ostree_sysroot_deploy_tree ()">ostree_sysroot_deploy_tree</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree-with-options" title="ostree_sysroot_deploy_tree_with_options ()">ostree_sysroot_deploy_tree_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-merge-deployment" title="ostree_sysroot_get_merge_deployment ()">ostree_sysroot_get_merge_deployment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-query-deployments-for" title="ostree_sysroot_query_deployments_for ()">ostree_sysroot_query_deployments_for</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GKeyFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-origin-new-from-refspec" title="ostree_sysroot_origin_new_from_refspec ()">ostree_sysroot_origin_new_from_refspec</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-simple-write-deployment" title="ostree_sysroot_simple_write_deployment ()">ostree_sysroot_simple_write_deployment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Root-partition-mount-point.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot">OstreeSysroot</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysrootSimpleWriteDeploymentFlags" title="enum OstreeSysrootSimpleWriteDeploymentFlags">OstreeSysrootSimpleWriteDeploymentFlags</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Root-partition-mount-point.description"></a><h2>Description</h2>
+<p>A <a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> object represents a physical root filesystem,
+which in particular should contain a toplevel /ostree directory.
+Inside this directory is an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> in /ostree/repo, plus a set
+of deployments in /ostree/deploy.</p>
+<p>This class is not by default safe against concurrent use by threads
+or external processes. You can use <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock" title="ostree_sysroot_lock ()"><code class="function">ostree_sysroot_lock()</code></a> to
+perform locking externally.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-Root-partition-mount-point.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-sysroot-new"></a><h3>ostree_sysroot_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="returnvalue">OstreeSysroot</span></a> *
+ostree_sysroot_new (<em class="parameter"><code><span class="type">GFile</span> *path</code></em>);</pre>
+<p>Create a new <a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> object for the sysroot at <em class="parameter"><code>path</code></em>
+. If <em class="parameter"><code>path</code></em>
+ is <code class="literal">NULL</code>,
+the current visible root file system is used, equivalent to
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-new-default" title="ostree_sysroot_new_default ()"><code class="function">ostree_sysroot_new_default()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path to a system root directory, or <code class="literal">NULL</code> to use the
+current visible root file system. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-new.returns"></a><h4>Returns</h4>
+<p>An accessor object for an system root located at <em class="parameter"><code>path</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-new-default"></a><h3>ostree_sysroot_new_default ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="returnvalue">OstreeSysroot</span></a> *
+ostree_sysroot_new_default (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-new-default.returns"></a><h4>Returns</h4>
+<p>An accessor for the current visible root / filesystem. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-initialize"></a><h3>ostree_sysroot_initialize ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_initialize (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Subset of <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a>; performs basic initialization. Notably, one
+can invoke <code class="literal"><a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-fd" title="ostree_sysroot_get_fd ()"><code class="function">ostree_sysroot_get_fd()</code></a></code> after calling this function.</p>
+<p>It is not necessary to call this function if <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a> is
+invoked.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-initialize.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-initialize-with-mount-namespace"></a><h3>ostree_sysroot_initialize_with_mount_namespace ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_initialize_with_mount_namespace
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Prepare the current process for modifying a booted sysroot, if applicable.
+This function subsumes the functionality of <code class="literal">ostree_sysroot_initialize</code>
+and may be invoked wherever that function is.</p>
+<p>If the sysroot does not appear to be booted, or where the current process is not uid 0,
+this function returns successfully.</p>
+<p>Otherwise, if the process is in the same mount namespace as pid 1, create
+a new namespace.</p>
+<p>If you invoke this function, it must be before <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a>; it may
+be invoked before or after <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()"><code class="function">ostree_sysroot_initialize()</code></a>.</p>
+<p class="since">Since: 2022.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-path"></a><h3>ostree_sysroot_get_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">GFile</span> *
+ostree_sysroot_get_path (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-get-path.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-path.returns"></a><h4>Returns</h4>
+<p>Path to rootfs. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-load"></a><h3>ostree_sysroot_load ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_load (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Load deployment list, bootversion, and subbootversion from the
+rootfs <em class="parameter"><code>self</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-load.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-load-if-changed"></a><h3>ostree_sysroot_load_if_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_load_if_changed (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_changed</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-load-if-changed.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_changed</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out%20caller-allocates"><span class="acronym">out caller-allocates</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-lock"></a><h3>ostree_sysroot_lock ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_lock (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Acquire an exclusive multi-process write lock for <em class="parameter"><code>self</code></em>
+. This call
+blocks until the lock has been acquired. The lock is not
+reentrant.</p>
+<p>Release the lock with <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-unlock" title="ostree_sysroot_unlock ()"><code class="function">ostree_sysroot_unlock()</code></a>. The lock will also
+be released if <em class="parameter"><code>self</code></em>
+ is deallocated.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-lock.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-try-lock"></a><h3>ostree_sysroot_try_lock ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_try_lock (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_acquired</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Try to acquire an exclusive multi-process write lock for <em class="parameter"><code>self</code></em>
+. If
+another process holds the lock, this function will return
+immediately, setting <em class="parameter"><code>out_acquired</code></em>
+ to <code class="literal">FALSE</code>, and returning <code class="literal">TRUE</code>
+(and no error).</p>
+<p>Release the lock with <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-unlock" title="ostree_sysroot_unlock ()"><code class="function">ostree_sysroot_unlock()</code></a>. The lock will also
+be released if <em class="parameter"><code>self</code></em>
+ is deallocated.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-try-lock.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_acquired</p></td>
+<td class="parameter_description"><p>Whether or not the lock has been acquired. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-lock-async"></a><h3>ostree_sysroot_lock_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_sysroot_lock_async (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>An asynchronous version of <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock" title="ostree_sysroot_lock ()"><code class="function">ostree_sysroot_lock()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-lock-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>Callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>User data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-lock-finish"></a><h3>ostree_sysroot_lock_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_lock_finish (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Call when <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-async" title="ostree_sysroot_lock_async ()"><code class="function">ostree_sysroot_lock_async()</code></a> is ready.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-lock-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>Result</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-unlock"></a><h3>ostree_sysroot_unlock ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_sysroot_unlock (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>Clear the lock previously acquired with <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock" title="ostree_sysroot_lock ()"><code class="function">ostree_sysroot_lock()</code></a>. It
+is safe to call this function if the lock has not been previously
+acquired.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-unlock.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-unload"></a><h3>ostree_sysroot_unload ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_sysroot_unload (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>Release any resources such as file descriptors referring to the
+root directory of this sysroot. Normally, those resources are
+cleared by finalization, but in garbage collected languages that
+may not be predictable.</p>
+<p>This undoes the effect of <code class="literal"><a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a></code>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-unload.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-set-mount-namespace-in-use"></a><h3>ostree_sysroot_set_mount_namespace_in_use ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_sysroot_set_mount_namespace_in_use
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>If this function is invoked, then libostree will assume that
+a private Linux mount namespace has been created by the process.
+The primary use case for this is to have e.g. /sysroot mounted
+read-only by default.</p>
+<p>If this function has been called, then when a function which requires
+writable access is invoked, libostree will automatically remount as writable
+any mount points on which it operates. This currently is just <code class="literal">/sysroot</code> and
+<code class="literal">/boot</code>.</p>
+<p>If you invoke this function, it must be before <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a>; it may
+be invoked before or after <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()"><code class="function">ostree_sysroot_initialize()</code></a>.</p>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-is-booted"></a><h3>ostree_sysroot_is_booted ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_is_booted (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>Can only be invoked after <code class="literal"><a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()"><code class="function">ostree_sysroot_initialize()</code></a></code>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-is-booted.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-is-booted.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> iff the sysroot points to a booted deployment</p>
+</div>
+<p class="since">Since: 2020.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-fd"></a><h3>ostree_sysroot_get_fd ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_sysroot_get_fd (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>Access a file descriptor that refers to the root directory of this sysroot.
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()"><code class="function">ostree_sysroot_initialize()</code></a> (or <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a>) must have been invoked
+prior to calling this function.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-get-fd.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-fd.returns"></a><h4>Returns</h4>
+<p> A file descriptor valid for the lifetime of <em class="parameter"><code>self</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-ensure-initialized"></a><h3>ostree_sysroot_ensure_initialized ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_ensure_initialized (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Ensure that <em class="parameter"><code>self</code></em>
+ is set up as a valid rootfs, by creating
+/ostree/repo, among other things.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-ensure-initialized.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-bootversion"></a><h3>ostree_sysroot_get_bootversion ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_sysroot_get_bootversion (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-subbootversion"></a><h3>ostree_sysroot_get_subbootversion ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_sysroot_get_subbootversion (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-deployments"></a><h3>ostree_sysroot_get_deployments ()</h3>
+<pre class="programlisting"><span class="returnvalue">GPtrArray</span> *
+ostree_sysroot_get_deployments (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployments.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployments.returns"></a><h4>Returns</h4>
+<p>Ordered list of deployments. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeDeployment][<a href="http://foldoc.org/transfer%20container"><span class="acronym">transfer container</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-booted-deployment"></a><h3>ostree_sysroot_get_booted_deployment ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+ostree_sysroot_get_booted_deployment (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>This function may only be called if the sysroot is loaded.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-get-booted-deployment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-booted-deployment.returns"></a><h4>Returns</h4>
+<p>The currently booted deployment, or <code class="literal">NULL</code> if none. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-require-booted-deployment"></a><h3>ostree_sysroot_require_booted_deployment ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+ostree_sysroot_require_booted_deployment
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Find the booted deployment, or return an error if not booted via OSTree.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-require-booted-deployment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-require-booted-deployment.returns"></a><h4>Returns</h4>
+<p>The currently booted deployment, or an error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2021.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-deployment-directory"></a><h3>ostree_sysroot_get_deployment_directory ()</h3>
+<pre class="programlisting"><span class="returnvalue">GFile</span> *
+ostree_sysroot_get_deployment_directory
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployment-directory.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployment-directory.returns"></a><h4>Returns</h4>
+<p>Path to deployment root directory. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-deployment-dirpath"></a><h3>ostree_sysroot_get_deployment_dirpath ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_sysroot_get_deployment_dirpath (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>);</pre>
+<p>Note this function only returns a *relative* path - if you want
+to access, it, you must either use fd-relative api such as <code class="function">openat()</code>,
+or concatenate it with the full <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-path" title="ostree_sysroot_get_path ()"><code class="function">ostree_sysroot_get_path()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployment-dirpath.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployment-dirpath.returns"></a><h4>Returns</h4>
+<p>Path to deployment root directory, relative to sysroot. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-deployment-origin-path"></a><h3>ostree_sysroot_get_deployment_origin_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">GFile</span> *
+ostree_sysroot_get_deployment_origin_path
+ (<em class="parameter"><code><span class="type">GFile</span> *deployment_path</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployment-origin-path.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>deployment_path</p></td>
+<td class="parameter_description"><p>A deployment path</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-deployment-origin-path.returns"></a><h4>Returns</h4>
+<p>Path to deployment origin file. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-cleanup"></a><h3>ostree_sysroot_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_cleanup (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Delete any state that resulted from a partially completed
+transaction, such as incomplete deployments.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-cleanup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-prepare-cleanup"></a><h3>ostree_sysroot_prepare_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_prepare_cleanup (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup" title="ostree_sysroot_cleanup ()"><code class="function">ostree_sysroot_cleanup()</code></a> in that it cleans up incomplete deployments
+and old boot versions, but does NOT prune the repository.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-prepare-cleanup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-cleanup-prune-repo"></a><h3>ostree_sysroot_cleanup_prune_repo ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_cleanup_prune_repo (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *sysroot</code></em>,
+ <em class="parameter"><code><span class="type">OstreeRepoPruneOptions</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> *out_objects_total</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> *out_objects_pruned</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> *out_pruned_object_size_total</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Prune the system repository. This is a thin wrapper
+around <a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune-from-reachable" title="ostree_repo_prune_from_reachable ()"><code class="function">ostree_repo_prune_from_reachable()</code></a>; the primary
+addition is that this function automatically gathers
+all deployed commits into the reachable set.</p>
+<p>You generally want to at least set the <code class="literal">OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY</code>
+flag in <em class="parameter"><code>options</code></em>
+. A commit traversal depth of <code class="literal">0</code> is assumed.</p>
+<p>Locking: exclusive</p>
+<div class="refsect3">
+<a name="ostree-sysroot-cleanup-prune-repo.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>Flags controlling pruning</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects_total</p></td>
+<td class="parameter_description"><p>Number of objects found. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_objects_pruned</p></td>
+<td class="parameter_description"><p>Number of objects deleted. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_pruned_object_size_total</p></td>
+<td class="parameter_description"><p>Storage size in bytes of objects deleted. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-repo"></a><h3>ostree_sysroot_repo ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_sysroot_repo (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<p>This function is a variant of <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-repo" title="ostree_sysroot_get_repo ()"><code class="function">ostree_sysroot_get_repo()</code></a> that cannot fail, and
+returns a cached repository. Can only be called after <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()"><code class="function">ostree_sysroot_initialize()</code></a>
+or <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()"><code class="function">ostree_sysroot_load()</code></a> has been invoked successfully.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-repo.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-repo.returns"></a><h4>Returns</h4>
+<p>The OSTree repository in sysroot <em class="parameter"><code>self</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2017.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-repo"></a><h3>ostree_sysroot_get_repo ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_get_repo (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> **out_repo</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Retrieve the OSTree repository in sysroot <em class="parameter"><code>self</code></em>
+. The repo is guaranteed to be open
+(see <a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()"><code class="function">ostree_repo_open()</code></a>).</p>
+<div class="refsect3">
+<a name="ostree-sysroot-get-repo.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_repo</p></td>
+<td class="parameter_description"><p>Repository in sysroot <em class="parameter"><code>self</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-repo.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> otherwise</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-staged-deployment"></a><h3>ostree_sysroot_get_staged_deployment ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+ostree_sysroot_get_staged_deployment (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-get-staged-deployment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-staged-deployment.returns"></a><h4>Returns</h4>
+<p>The currently staged deployment, or <code class="literal">NULL</code> if none. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-init-osname"></a><h3>ostree_sysroot_init_osname ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_init_osname (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Initialize the directory structure for an "osname", which is a
+group of operating system deployments, with a shared <code class="literal">/var</code>. One
+is required for generating a deployment.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-init-osname.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>Name group of operating system checkouts</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deployment-set-kargs"></a><h3>ostree_sysroot_deployment_set_kargs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deployment_set_kargs (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **new_kargs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Entirely replace the kernel arguments of <em class="parameter"><code>deployment</code></em>
+ with the
+values in <em class="parameter"><code>new_kargs</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deployment-set-kargs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>new_kargs</p></td>
+<td class="parameter_description"><p>Replace deployment's kernel arguments. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deployment-set-kargs-in-place"></a><h3>ostree_sysroot_deployment_set_kargs_in_place ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deployment_set_kargs_in_place
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *kargs_str</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Replace the kernel arguments of <em class="parameter"><code>deployment</code></em>
+ with the values in <em class="parameter"><code>kargs_str</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deployment-set-kargs-in-place.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>kargs_str</p></td>
+<td class="parameter_description"><p>Replace <em class="parameter"><code>deployment</code></em>
+'s kernel arguments. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deployment-set-mutable"></a><h3>ostree_sysroot_deployment_set_mutable ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deployment_set_mutable (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> is_mutable</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>By default, deployment directories are not mutable. This function
+will allow making them temporarily mutable, for example to allow
+layering additional non-OSTree content.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deployment-set-mutable.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>is_mutable</p></td>
+<td class="parameter_description"><p>Whether or not deployment's files can be changed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deployment-unlock"></a><h3>ostree_sysroot_deployment_unlock ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deployment_unlock (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>,
+ <em class="parameter"><code><span class="type">OstreeDeploymentUnlockedState</span> unlocked_state</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Configure the target deployment <em class="parameter"><code>deployment</code></em>
+ such that it
+is writable. There are multiple modes, essentially differing
+in whether or not any changes persist across reboot.</p>
+<p>The <code class="literal">OSTREE_DEPLOYMENT_UNLOCKED_HOTFIX</code> state is persistent
+across reboots.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deployment-unlock.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>unlocked_state</p></td>
+<td class="parameter_description"><p>Transition to this unlocked state</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2016.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deployment-set-pinned"></a><h3>ostree_sysroot_deployment_set_pinned ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deployment_set_pinned (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> is_pinned</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>By default, deployments may be subject to garbage collection. Typical uses of
+libostree only retain at most 2 deployments. If <em class="parameter"><code>is_pinned</code></em>
+ is <code class="literal">TRUE</code>, a
+metadata bit will be set causing libostree to avoid automatic GC of the
+deployment. However, this is really an "advisory" note; it's still possible
+for e.g. older versions of libostree unaware of pinning to GC the deployment.</p>
+<p>This function does nothing and returns successfully if the deployment
+is already in the desired pinning state. It is an error to try to pin
+the staged deployment (as it's not in the bootloader entries).</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deployment-set-pinned.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>is_pinned</p></td>
+<td class="parameter_description"><p>Whether or not deployment will be automatically GC'd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-write-deployments"></a><h3>ostree_sysroot_write_deployments ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_write_deployments (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *new_deployments</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Older version of <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments-with-options" title="ostree_sysroot_write_deployments_with_options ()"><code class="function">ostree_sysroot_write_deployments_with_options()</code></a>. This
+version will perform post-deployment cleanup by default.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-write-deployments.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>new_deployments</p></td>
+<td class="parameter_description"><p>List of new deployments. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeDeployment]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-write-deployments-with-options"></a><h3>ostree_sysroot_write_deployments_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_write_deployments_with_options
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *new_deployments</code></em>,
+ <em class="parameter"><code><span class="type">OstreeSysrootWriteDeploymentsOpts</span> *opts</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Assuming <em class="parameter"><code>new_deployments</code></em>
+ have already been deployed in place on disk via
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree" title="ostree_sysroot_deploy_tree ()"><code class="function">ostree_sysroot_deploy_tree()</code></a>, atomically update bootloader configuration. By
+default, no post-transaction cleanup will be performed. You should invoke
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup" title="ostree_sysroot_cleanup ()"><code class="function">ostree_sysroot_cleanup()</code></a> at some point after the transaction, or specify
+<code class="literal">do_postclean</code> in <em class="parameter"><code>opts</code></em>
+. Skipping the post-transaction cleanup is useful
+if for example you want to control pruning of the repository.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-write-deployments-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>new_deployments</p></td>
+<td class="parameter_description"><p>List of new deployments. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeDeployment]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opts</p></td>
+<td class="parameter_description"><p>Options</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-write-origin-file"></a><h3>ostree_sysroot_write_origin_file ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_write_origin_file (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *sysroot</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *deployment</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *new_origin</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Immediately replace the origin file of the referenced <em class="parameter"><code>deployment</code></em>
+
+with the contents of <em class="parameter"><code>new_origin</code></em>
+. If <em class="parameter"><code>new_origin</code></em>
+ is <code class="literal">NULL</code>,
+this function will write the current origin of <em class="parameter"><code>deployment</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-write-origin-file.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>System root</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployment</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>new_origin</p></td>
+<td class="parameter_description"><p>Origin content. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-stage-tree"></a><h3>ostree_sysroot_stage_tree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_stage_tree (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *revision</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *merge_deployment</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **override_kernel_argv</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> **out_new_deployment</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Older version of <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree-with-options" title="ostree_sysroot_stage_tree_with_options ()"><code class="function">ostree_sysroot_stage_tree_with_options()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-stage-tree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>osname to use for merge deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>revision</p></td>
+<td class="parameter_description"><p>Checksum to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>Origin to use for upgrades. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>merge_deployment</p></td>
+<td class="parameter_description"><p>Use this deployment for merge path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>override_kernel_argv</p></td>
+<td class="parameter_description"><p>Use these as
+kernel arguments; if <code class="literal">NULL</code>, inherit options from provided_merge_deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_new_deployment</p></td>
+<td class="parameter_description"><p>The new deployment path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-stage-tree-with-options"></a><h3>ostree_sysroot_stage_tree_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_stage_tree_with_options
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *revision</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *merge_deployment</code></em>,
+ <em class="parameter"><code><span class="type">OstreeSysrootDeployTreeOpts</span> *opts</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> **out_new_deployment</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree" title="ostree_sysroot_deploy_tree ()"><code class="function">ostree_sysroot_deploy_tree()</code></a>, but "finalization" only occurs at OS
+shutdown time.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-stage-tree-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>osname to use for merge deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>revision</p></td>
+<td class="parameter_description"><p>Checksum to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>Origin to use for upgrades. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>merge_deployment</p></td>
+<td class="parameter_description"><p>Use this deployment for merge path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opts</p></td>
+<td class="parameter_description"><p>Options</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_new_deployment</p></td>
+<td class="parameter_description"><p>The new deployment path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-stage-overlay-initrd"></a><h3>ostree_sysroot_stage_overlay_initrd ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_stage_overlay_initrd (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> fd</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Stage an overlay initrd to be used in an upcoming deployment. Returns a checksum which
+can be passed to <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree-with-options" title="ostree_sysroot_deploy_tree_with_options ()"><code class="function">ostree_sysroot_deploy_tree_with_options()</code></a> or
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree-with-options" title="ostree_sysroot_stage_tree_with_options ()"><code class="function">ostree_sysroot_stage_tree_with_options()</code></a> via the <code class="literal">overlay_initrds</code> array option.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-stage-overlay-initrd.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fd</p></td>
+<td class="parameter_description"><p>File descriptor to overlay initrd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_checksum</p></td>
+<td class="parameter_description"><p>Overlay initrd checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deploy-tree"></a><h3>ostree_sysroot_deploy_tree ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deploy_tree (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *revision</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *provided_merge_deployment</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **override_kernel_argv</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> **out_new_deployment</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Older version of <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree-with-options" title="ostree_sysroot_stage_tree_with_options ()"><code class="function">ostree_sysroot_stage_tree_with_options()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deploy-tree.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>osname to use for merge deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>revision</p></td>
+<td class="parameter_description"><p>Checksum to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>Origin to use for upgrades. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>provided_merge_deployment</p></td>
+<td class="parameter_description"><p>Use this deployment for merge path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>override_kernel_argv</p></td>
+<td class="parameter_description"><p>Use these as
+kernel arguments; if <code class="literal">NULL</code>, inherit options from provided_merge_deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> utf8]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_new_deployment</p></td>
+<td class="parameter_description"><p>The new deployment path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-deploy-tree-with-options"></a><h3>ostree_sysroot_deploy_tree_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_deploy_tree_with_options
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *revision</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *provided_merge_deployment</code></em>,
+ <em class="parameter"><code><span class="type">OstreeSysrootDeployTreeOpts</span> *opts</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> **out_new_deployment</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Check out deployment tree with revision <em class="parameter"><code>revision</code></em>
+, performing a 3
+way merge with <em class="parameter"><code>provided_merge_deployment</code></em>
+ for configuration.</p>
+<p>When booted into the sysroot, you should use the
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree" title="ostree_sysroot_stage_tree ()"><code class="function">ostree_sysroot_stage_tree()</code></a> API instead.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-deploy-tree-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>osname to use for merge deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>revision</p></td>
+<td class="parameter_description"><p>Checksum to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>Origin to use for upgrades. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>provided_merge_deployment</p></td>
+<td class="parameter_description"><p>Use this deployment for merge path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>opts</p></td>
+<td class="parameter_description"><p>Options. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_new_deployment</p></td>
+<td class="parameter_description"><p>The new deployment path. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-get-merge-deployment"></a><h3>ostree_sysroot_get_merge_deployment ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+ostree_sysroot_get_merge_deployment (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>);</pre>
+<p>Find the deployment to use as a configuration merge source; this is
+the first one in the current deployment list which matches osname.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-get-merge-deployment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>Operating system group. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-get-merge-deployment.returns"></a><h4>Returns</h4>
+<p>Configuration merge deployment. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-query-deployments-for"></a><h3>ostree_sysroot_query_deployments_for ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_sysroot_query_deployments_for (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> **out_pending</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> **out_rollback</code></em>);</pre>
+<p>Find the pending and rollback deployments for <em class="parameter"><code>osname</code></em>
+. Pass <code class="literal">NULL</code> for <em class="parameter"><code>osname</code></em>
+
+to use the booted deployment's osname. By default, pending deployment is the
+first deployment in the order that matches <em class="parameter"><code>osname</code></em>
+, and <em class="parameter"><code>rollback</code></em>
+ will be the
+next one after the booted deployment, or the deployment after the pending if
+we're not looking at the booted deployment.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-query-deployments-for.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>"stateroot" name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_pending</p></td>
+<td class="parameter_description"><p>The pending deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_rollback</p></td>
+<td class="parameter_description"><p>The rollback deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-origin-new-from-refspec"></a><h3>ostree_sysroot_origin_new_from_refspec ()</h3>
+<pre class="programlisting"><span class="returnvalue">GKeyFile</span> *
+ostree_sysroot_origin_new_from_refspec
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *refspec</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-origin-new-from-refspec.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refspec</p></td>
+<td class="parameter_description"><p>A refspec</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-origin-new-from-refspec.returns"></a><h4>Returns</h4>
+<p>A new config file which sets <em class="parameter"><code>refspec</code></em>
+as an origin. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-simple-write-deployment"></a><h3>ostree_sysroot_simple_write_deployment ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_simple_write_deployment
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *sysroot</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *new_deployment</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *merge_deployment</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysrootSimpleWriteDeploymentFlags" title="enum OstreeSysrootSimpleWriteDeploymentFlags"><span class="type">OstreeSysrootSimpleWriteDeploymentFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Prepend <em class="parameter"><code>new_deployment</code></em>
+ to the list of deployments, commit, and
+cleanup. By default, all other deployments for the given <em class="parameter"><code>osname</code></em>
+
+except the merge deployment and the booted deployment will be
+garbage collected.</p>
+<p>If <a class="link" href="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN:CAPS"><code class="literal">OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN</code></a> is
+specified, then all current deployments will be kept.</p>
+<p>If <a class="link" href="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN-PENDING:CAPS"><code class="literal">OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN_PENDING</code></a> is
+specified, then pending deployments will be kept.</p>
+<p>If <a class="link" href="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN-ROLLBACK:CAPS"><code class="literal">OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN_ROLLBACK</code></a> is
+specified, then rollback deployments will be kept.</p>
+<p>If <a class="link" href="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NOT-DEFAULT:CAPS"><code class="literal">OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NOT_DEFAULT</code></a> is
+specified, then instead of prepending, the new deployment will be
+added right after the booted or merge deployment, instead of first.</p>
+<p>If <a class="link" href="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NO-CLEAN:CAPS"><code class="literal">OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NO_CLEAN</code></a> is
+specified, then no cleanup will be performed after adding the
+deployment. Make sure to call <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup" title="ostree_sysroot_cleanup ()"><code class="function">ostree_sysroot_cleanup()</code></a> sometime
+later, instead.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-simple-write-deployment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>OS name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>new_deployment</p></td>
+<td class="parameter_description"><p>Prepend this deployment to the list</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>merge_deployment</p></td>
+<td class="parameter_description"><p>Use this deployment for configuration merge. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags controlling behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-Root-partition-mount-point.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeSysroot"></a><h3>OstreeSysroot</h3>
+<pre class="programlisting">typedef struct OstreeSysroot OstreeSysroot;
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeSysrootSimpleWriteDeploymentFlags"></a><h3>enum OstreeSysrootSimpleWriteDeploymentFlags</h3>
+<div class="refsect3">
+<a name="OstreeSysrootSimpleWriteDeploymentFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NONE:CAPS"></a>OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN:CAPS"></a>OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NOT-DEFAULT:CAPS"></a>OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NOT_DEFAULT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NO-CLEAN:CAPS"></a>OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NO_CLEAN</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN-PENDING:CAPS"></a>OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN_PENDING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN-ROLLBACK:CAPS"></a>OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN_ROLLBACK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-SELinux-policy-management.html b/reference/ostree-SELinux-policy-management.html
new file mode 100644
index 00000000..116c2acf
--- /dev/null
+++ b/reference/ostree-SELinux-policy-management.html
@@ -0,0 +1,566 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SELinux policy management: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">
+<link rel="next" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-SELinux-policy-management.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-Progress-notification-system-for-asynchronous-operations.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-Simple-upgrade-class.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-SELinux-policy-management"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-SELinux-policy-management.top_of_page"></a>SELinux policy management</span></h2>
+<p>SELinux policy management — Read SELinux policy and manage filesystem labels</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-SELinux-policy-management.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="returnvalue">OstreeSePolicy</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-new" title="ostree_sepolicy_new ()">ostree_sepolicy_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="returnvalue">OstreeSePolicy</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-new-at" title="ostree_sepolicy_new_at ()">ostree_sepolicy_new_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="returnvalue">OstreeSePolicy</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-new-from-commit" title="ostree_sepolicy_new_from_commit ()">ostree_sepolicy_new_from_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-path" title="ostree_sepolicy_get_path ()">ostree_sepolicy_get_path</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-name" title="ostree_sepolicy_get_name ()">ostree_sepolicy_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-label" title="ostree_sepolicy_get_label ()">ostree_sepolicy_get_label</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-csum" title="ostree_sepolicy_get_csum ()">ostree_sepolicy_get_csum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-restorecon" title="ostree_sepolicy_restorecon ()">ostree_sepolicy_restorecon</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-setfscreatecon" title="ostree_sepolicy_setfscreatecon ()">ostree_sepolicy_setfscreatecon</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-fscreatecon-cleanup" title="ostree_sepolicy_fscreatecon_cleanup ()">ostree_sepolicy_fscreatecon_cleanup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-SELinux-policy-management.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy">OstreeSePolicy</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicyRestoreconFlags" title="enum OstreeSePolicyRestoreconFlags">OstreeSePolicyRestoreconFlags</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-SELinux-policy-management.description"></a><h2>Description</h2>
+<p>A <a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> object can load the SELinux policy from a given
+root and perform labeling.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-SELinux-policy-management.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-sepolicy-new"></a><h3>ostree_sepolicy_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="returnvalue">OstreeSePolicy</span></a> *
+ostree_sepolicy_new (<em class="parameter"><code><span class="type">GFile</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sepolicy-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path to a root directory</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sepolicy-new.returns"></a><h4>Returns</h4>
+<p>An accessor object for SELinux policy in root located at <em class="parameter"><code>path</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-new-at"></a><h3>ostree_sepolicy_new_at ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="returnvalue">OstreeSePolicy</span></a> *
+ostree_sepolicy_new_at (<em class="parameter"><code><span class="type">int</span> rootfs_dfd</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sepolicy-new-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>rootfs_dfd</p></td>
+<td class="parameter_description"><p>Directory fd for rootfs (will not be cloned)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sepolicy-new-at.returns"></a><h4>Returns</h4>
+<p>An accessor object for SELinux policy in root located at <em class="parameter"><code>rootfs_dfd</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-new-from-commit"></a><h3>ostree_sepolicy_new_from_commit ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="returnvalue">OstreeSePolicy</span></a> *
+ostree_sepolicy_new_from_commit (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *rev</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Extract the SELinux policy from a commit object via a partial checkout. This is useful
+for labeling derived content as separate commits.</p>
+<p>This function is the backend of <code class="literal"><a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy-from-commit" title="ostree_repo_commit_modifier_set_sepolicy_from_commit ()"><code class="function">ostree_repo_commit_modifier_set_sepolicy_from_commit()</code></a></code>.</p>
+<div class="refsect3">
+<a name="ostree-sepolicy-new-from-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>The repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rev</p></td>
+<td class="parameter_description"><p>ostree ref or checksum</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sepolicy-new-from-commit.returns"></a><h4>Returns</h4>
+<p>A new policy. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-get-path"></a><h3>ostree_sepolicy_get_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">GFile</span> *
+ostree_sepolicy_get_path (<em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *self</code></em>);</pre>
+<p>This API should be considered deprecated, because it's supported for
+policy objects to be created from file-descriptor relative paths, which
+may not be globally accessible.</p>
+<div class="refsect3">
+<a name="ostree-sepolicy-get-path.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A SePolicy object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sepolicy-get-path.returns"></a><h4>Returns</h4>
+<p>Path to rootfs. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-get-name"></a><h3>ostree_sepolicy_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_sepolicy_get_name (<em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sepolicy-get-name.returns"></a><h4>Returns</h4>
+<p>Type of current policy. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-get-label"></a><h3>ostree_sepolicy_get_label ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sepolicy_get_label (<em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *relpath</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> unix_mode</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_label</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Store in <em class="parameter"><code>out_label</code></em>
+ the security context for the given <em class="parameter"><code>relpath</code></em>
+ and
+mode <em class="parameter"><code>unix_mode</code></em>
+. If the policy does not specify a label, <code class="literal">NULL</code>
+will be returned.</p>
+<div class="refsect3">
+<a name="ostree-sepolicy-get-label.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>relpath</p></td>
+<td class="parameter_description"><p>Path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>unix_mode</p></td>
+<td class="parameter_description"><p>Unix mode</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_label</p></td>
+<td class="parameter_description"><p>Return location for security context. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-get-csum"></a><h3>ostree_sepolicy_get_csum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_sepolicy_get_csum (<em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sepolicy-get-csum.returns"></a><h4>Returns</h4>
+<p>Checksum of current policy. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2016.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-restorecon"></a><h3>ostree_sepolicy_restorecon ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sepolicy_restorecon (<em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> *info</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *target</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicyRestoreconFlags" title="enum OstreeSePolicyRestoreconFlags"><span class="type">OstreeSePolicyRestoreconFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_new_label</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Reset the security context of <em class="parameter"><code>target</code></em>
+ based on the SELinux policy.</p>
+<div class="refsect3">
+<a name="ostree-sepolicy-restorecon.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Path string to use for policy lookup</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>File attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>Physical path to target file</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags controlling behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_new_label</p></td>
+<td class="parameter_description"><p>New label, or <code class="literal">NULL</code> if unchanged. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>][<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-setfscreatecon"></a><h3>ostree_sepolicy_setfscreatecon ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sepolicy_setfscreatecon (<em class="parameter"><code><a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy"><span class="type">OstreeSePolicy</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">guint32</span> mode</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sepolicy-setfscreatecon.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Policy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>Use this path to determine a label</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>Used along with <em class="parameter"><code>path</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sepolicy-fscreatecon-cleanup"></a><h3>ostree_sepolicy_fscreatecon_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_sepolicy_fscreatecon_cleanup (<em class="parameter"><code><span class="type">void</span> **unused</code></em>);</pre>
+<p>Cleanup function for <a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-setfscreatecon" title="ostree_sepolicy_setfscreatecon ()"><code class="function">ostree_sepolicy_setfscreatecon()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-sepolicy-fscreatecon-cleanup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>unused</p></td>
+<td class="parameter_description"><p>Not used, just in case you didn't infer that from the parameter name</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-SELinux-policy-management.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeSePolicy"></a><h3>OstreeSePolicy</h3>
+<pre class="programlisting">typedef struct OstreeSePolicy OstreeSePolicy;
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeSePolicyRestoreconFlags"></a><h3>enum OstreeSePolicyRestoreconFlags</h3>
+<div class="refsect3">
+<a name="OstreeSePolicyRestoreconFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SEPOLICY-RESTORECON-FLAGS-NONE:CAPS"></a>OSTREE_SEPOLICY_RESTORECON_FLAGS_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SEPOLICY-RESTORECON-FLAGS-ALLOW-NOLABEL:CAPS"></a>OSTREE_SEPOLICY_RESTORECON_FLAGS_ALLOW_NOLABEL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SEPOLICY-RESTORECON-FLAGS-KEEP-EXISTING:CAPS"></a>OSTREE_SEPOLICY_RESTORECON_FLAGS_KEEP_EXISTING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-Signature-management.html b/reference/ostree-Signature-management.html
new file mode 100644
index 00000000..3ac4fce3
--- /dev/null
+++ b/reference/ostree-Signature-management.html
@@ -0,0 +1,878 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Signature management: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">
+<link rel="next" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-Signature-management.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-GPG-signature-verification-results.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-bootconfig-parser.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-Signature-management"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-Signature-management.top_of_page"></a>Signature management</span></h2>
+<p>Signature management — Sign and verify commits</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-Signature-management.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GPtrArray</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-get-all" title="ostree_sign_get_all ()">ostree_sign_get_all</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-commit" title="ostree_sign_commit ()">ostree_sign_commit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-commit-verify" title="ostree_sign_commit_verify ()">ostree_sign_commit_verify</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-data" title="ostree_sign_data ()">ostree_sign_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-data-verify" title="ostree_sign_data_verify ()">ostree_sign_data_verify</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="returnvalue">OstreeSign</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-get-by-name" title="ostree_sign_get_by_name ()">ostree_sign_get_by_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-get-name" title="ostree_sign_get_name ()">ostree_sign_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-add-pk" title="ostree_sign_add_pk ()">ostree_sign_add_pk</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-clear-keys" title="ostree_sign_clear_keys ()">ostree_sign_clear_keys</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-load-pk" title="ostree_sign_load_pk ()">ostree_sign_load_pk</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-metadata-format" title="ostree_sign_metadata_format ()">ostree_sign_metadata_format</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-metadata-key" title="ostree_sign_metadata_key ()">ostree_sign_metadata_key</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-set-pk" title="ostree_sign_set_pk ()">ostree_sign_set_pk</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-set-sk" title="ostree_sign_set_sk ()">ostree_sign_set_sk</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Signature-management.html#ostree-sign-summary" title="ostree_sign_summary ()">ostree_sign_summary</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Signature-management.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign">OstreeSign</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Signature-management.description"></a><h2>Description</h2>
+<p>An <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> interface allows to select and use any available engine
+for signing or verifying the commit object or summary file.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-Signature-management.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-sign-get-all"></a><h3>ostree_sign_get_all ()</h3>
+<pre class="programlisting"><span class="returnvalue">GPtrArray</span> *
+ostree_sign_get_all (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Return an array with newly allocated instances of all available
+signing engines; they will not be initialized.</p>
+<div class="refsect3">
+<a name="ostree-sign-get-all.returns"></a><h4>Returns</h4>
+<p>an array of signing engines. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeSign]</span></p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-commit"></a><h3>ostree_sign_commit ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_commit (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Add a signature to a commit.</p>
+<p>Depending of the signing engine used you will need to load
+the secret key with <a class="link" href="ostree-Signature-management.html#ostree-sign-set-sk" title="ostree_sign_set_sk ()"><span class="type">ostree_sign_set_sk</span></a>.</p>
+<div class="refsect3">
+<a name="ostree-sign-commit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>an <span class="type">OsreeRepo</span> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>SHA256 of given commit to sign</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-commit.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+if commit has been signed successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-commit-verify"></a><h3>ostree_sign_commit_verify ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_commit_verify (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *commit_checksum</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_success_message</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Verify if commit is signed with known key.</p>
+<p>Depending of the signing engine used you will need to load
+the public key(s) for verification with <a class="link" href="ostree-Signature-management.html#ostree-sign-set-pk" title="ostree_sign_set_pk ()"><span class="type">ostree_sign_set_pk</span></a>,
+<a class="link" href="ostree-Signature-management.html#ostree-sign-add-pk" title="ostree_sign_add_pk ()"><span class="type">ostree_sign_add_pk</span></a> and/or <a class="link" href="ostree-Signature-management.html#ostree-sign-load-pk" title="ostree_sign_load_pk ()"><span class="type">ostree_sign_load_pk</span></a>.</p>
+<div class="refsect3">
+<a name="ostree-sign-commit-verify.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>an <span class="type">OsreeRepo</span> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>commit_checksum</p></td>
+<td class="parameter_description"><p>SHA256 of given commit to verify</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_success_message</p></td>
+<td class="parameter_description"><p>success message returned by the signing
+engine. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-commit-verify.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+if commit has been verified successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error or no valid keys are available (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-data"></a><h3>ostree_sign_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_data (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *data</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> **signature</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Sign the given <em class="parameter"><code>data</code></em>
+ with pre-loaded secret key.</p>
+<p>Depending of the signing engine used you will need to load
+the secret key with <a class="link" href="ostree-Signature-management.html#ostree-sign-set-sk" title="ostree_sign_set_sk ()"><span class="type">ostree_sign_set_sk</span></a>.</p>
+<div class="refsect3">
+<a name="ostree-sign-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>the raw data to be signed with pre-loaded secret key</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signature</p></td>
+<td class="parameter_description"><p>in case of success will contain signature. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-data.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+if <em class="parameter"><code>data</code></em>
+has been signed successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-data-verify"></a><h3>ostree_sign_data_verify ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_data_verify (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GBytes</span> *data</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *signatures</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_success_message</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Verify given data against signatures with pre-loaded public keys.</p>
+<p>Depending of the signing engine used you will need to load
+the public key(s) with <a class="link" href="ostree-Signature-management.html#ostree-sign-set-pk" title="ostree_sign_set_pk ()"><span class="type">ostree_sign_set_pk</span></a>, <a class="link" href="ostree-Signature-management.html#ostree-sign-add-pk" title="ostree_sign_add_pk ()"><span class="type">ostree_sign_add_pk</span></a>
+or <a class="link" href="ostree-Signature-management.html#ostree-sign-load-pk" title="ostree_sign_load_pk ()"><span class="type">ostree_sign_load_pk</span></a>.</p>
+<div class="refsect3">
+<a name="ostree-sign-data-verify.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>the raw data to check</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signatures</p></td>
+<td class="parameter_description"><p>the signatures to be checked</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_success_message</p></td>
+<td class="parameter_description"><p>success message returned by the signing
+engine. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-data-verify.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+if <em class="parameter"><code>data</code></em>
+has been signed at least with any single valid key,
+<em class="parameter"><code>FALSE</code></em>
+in case of error or no valid keys are available (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-get-by-name"></a><h3>ostree_sign_get_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="returnvalue">OstreeSign</span></a> *
+ostree_sign_get_by_name (<em class="parameter"><code>const <span class="type">gchar</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Create a new instance of a signing engine.</p>
+<div class="refsect3">
+<a name="ostree-sign-get-by-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>the name of desired signature engine</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-get-by-name.returns"></a><h4>Returns</h4>
+<p>New signing engine, or <code class="literal">NULL</code> if the engine is not known. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-get-name"></a><h3>ostree_sign_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *
+ostree_sign_get_name (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>);</pre>
+<p>Return the pointer to the name of currently used/selected signing engine.</p>
+<div class="refsect3">
+<a name="ostree-sign-get-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-get-name.returns"></a><h4>Returns</h4>
+<p>pointer to the name
+<em class="parameter"><code>NULL</code></em>
+in case of error (unlikely). </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-add-pk"></a><h3>ostree_sign_add_pk ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_add_pk (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *public_key</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Add the public key for verification. Could be called multiple times for
+adding all needed keys to be used for verification.</p>
+<p>The <em class="parameter"><code>public_key</code></em>
+ argument depends of the particular engine implementation.</p>
+<div class="refsect3">
+<a name="ostree-sign-add-pk.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>public_key</p></td>
+<td class="parameter_description"><p>single public key to be added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-add-pk.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+in case if the key could be added successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-clear-keys"></a><h3>ostree_sign_clear_keys ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_clear_keys (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Clear all previously preloaded secret and public keys.</p>
+<div class="refsect3">
+<a name="ostree-sign-clear-keys.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-clear-keys.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+in case if no errors, <em class="parameter"><code>FALSE</code></em>
+in case of error</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-load-pk"></a><h3>ostree_sign_load_pk ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_load_pk (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Load public keys for verification from anywhere.
+It is expected that all keys would be added to already pre-loaded keys.</p>
+<p>The <em class="parameter"><code>options</code></em>
+ argument depends of the particular engine implementation.</p>
+<p>For example, <em class="parameter"><code>ed25515</code></em>
+ engine could use following string-formatted options:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p><em class="parameter"><code>filename</code></em>
+ -- single file to use to load keys from</p></li>
+<li class="listitem"><p><em class="parameter"><code>basedir</code></em>
+ -- directory containing subdirectories
+'trusted.ed25519.d' and 'revoked.ed25519.d' with appropriate
+public keys. Used for testing and re-definition of system-wide
+directories if defaults are not suitable for any reason.</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="ostree-sign-load-pk.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>any options</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-load-pk.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+in case if at least one key could be load successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-metadata-format"></a><h3>ostree_sign_metadata_format ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *
+ostree_sign_metadata_format (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>);</pre>
+<p>Return the pointer to the string with format used in (detached) metadata for
+current signing engine.</p>
+<div class="refsect3">
+<a name="ostree-sign-metadata-format.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-metadata-format.returns"></a><h4>Returns</h4>
+<p>pointer to the metadata format,
+<em class="parameter"><code>NULL</code></em>
+in case of error (unlikely). </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-metadata-key"></a><h3>ostree_sign_metadata_key ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *
+ostree_sign_metadata_key (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>);</pre>
+<p>Return the pointer to the name of the key used in (detached) metadata for
+current signing engine.</p>
+<div class="refsect3">
+<a name="ostree-sign-metadata-key.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-metadata-key.returns"></a><h4>Returns</h4>
+<p>pointer to the metadata key name,
+<em class="parameter"><code>NULL</code></em>
+in case of error (unlikely). </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-set-pk"></a><h3>ostree_sign_set_pk ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_set_pk (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *public_key</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Set the public key for verification. It is expected what all
+previously pre-loaded public keys will be dropped.</p>
+<p>The <em class="parameter"><code>public_key</code></em>
+ argument depends of the particular engine implementation.</p>
+<div class="refsect3">
+<a name="ostree-sign-set-pk.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>public_key</p></td>
+<td class="parameter_description"><p>single public key to be added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-set-pk.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+in case if the key could be set successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-set-sk"></a><h3>ostree_sign_set_sk ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_set_sk (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *secret_key</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Set the secret key to be used for signing data, commits and summary.</p>
+<p>The <em class="parameter"><code>secret_key</code></em>
+ argument depends of the particular engine implementation.</p>
+<div class="refsect3">
+<a name="ostree-sign-set-sk.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>secret_key</p></td>
+<td class="parameter_description"><p>secret key to be added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-set-sk.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+in case if the key could be set successfully,
+<em class="parameter"><code>FALSE</code></em>
+in case of error (<em class="parameter"><code>error</code></em>
+will contain the reason).</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sign-summary"></a><h3>ostree_sign_summary ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sign_summary (<em class="parameter"><code><a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign"><span class="type">OstreeSign</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *keys</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Add a signature to a summary file.
+Based on ostree_repo_add_gpg_signature_summary implementation.</p>
+<div class="refsect3">
+<a name="ostree-sign-summary.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>ostree repository</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>keys</p></td>
+<td class="parameter_description"><p>keys -- GVariant containing keys as GVarints specific to signature type.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>A <span class="type">GCancellable</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sign-summary.returns"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>TRUE</code></em>
+if summary file has been signed with all provided keys</p>
+</div>
+<p class="since">Since: 2020.2</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-Signature-management.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeSign"></a><h3>OstreeSign</h3>
+<pre class="programlisting">typedef struct _OstreeSign OstreeSign;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-Simple-upgrade-class.html b/reference/ostree-Simple-upgrade-class.html
new file mode 100644
index 00000000..346ffd40
--- /dev/null
+++ b/reference/ostree-Simple-upgrade-class.html
@@ -0,0 +1,726 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Simple upgrade class: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-SELinux-policy-management.html" title="SELinux policy management">
+<link rel="next" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-Simple-upgrade-class.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-SELinux-policy-management.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-GPG-signature-verification-results.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-Simple-upgrade-class"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-Simple-upgrade-class.top_of_page"></a>Simple upgrade class</span></h2>
+<p>Simple upgrade class — Upgrade OSTree systems</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-Simple-upgrade-class.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="returnvalue">OstreeSysrootUpgrader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new" title="ostree_sysroot_upgrader_new ()">ostree_sysroot_upgrader_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="returnvalue">OstreeSysrootUpgrader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new-for-os" title="ostree_sysroot_upgrader_new_for_os ()">ostree_sysroot_upgrader_new_for_os</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="returnvalue">OstreeSysrootUpgrader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new-for-os-with-flags" title="ostree_sysroot_upgrader_new_for_os_with_flags ()">ostree_sysroot_upgrader_new_for_os_with_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GKeyFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-get-origin" title="ostree_sysroot_upgrader_get_origin ()">ostree_sysroot_upgrader_get_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GKeyFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-dup-origin" title="ostree_sysroot_upgrader_dup_origin ()">ostree_sysroot_upgrader_dup_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-set-origin" title="ostree_sysroot_upgrader_set_origin ()">ostree_sysroot_upgrader_set_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-get-origin-description" title="ostree_sysroot_upgrader_get_origin_description ()">ostree_sysroot_upgrader_get_origin_description</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-check-timestamps" title="ostree_sysroot_upgrader_check_timestamps ()">ostree_sysroot_upgrader_check_timestamps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull" title="ostree_sysroot_upgrader_pull ()">ostree_sysroot_upgrader_pull</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull-one-dir" title="ostree_sysroot_upgrader_pull_one_dir ()">ostree_sysroot_upgrader_pull_one_dir</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-deploy" title="ostree_sysroot_upgrader_deploy ()">ostree_sysroot_upgrader_deploy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Simple-upgrade-class.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader">OstreeSysrootUpgrader</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderFlags" title="enum OstreeSysrootUpgraderFlags">OstreeSysrootUpgraderFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderPullFlags" title="enum OstreeSysrootUpgraderPullFlags">OstreeSysrootUpgraderPullFlags</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-Simple-upgrade-class.description"></a><h2>Description</h2>
+<p>The <a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> class allows performing simple upgrade
+operations.</p>
+</div>
+<div class="refsect1">
+<a name="ostree-Simple-upgrade-class.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-new"></a><h3>ostree_sysroot_upgrader_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="returnvalue">OstreeSysrootUpgrader</span></a> *
+ostree_sysroot_upgrader_new (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *sysroot</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-new.returns"></a><h4>Returns</h4>
+<p>An upgrader. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-new-for-os"></a><h3>ostree_sysroot_upgrader_new_for_os ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="returnvalue">OstreeSysrootUpgrader</span></a> *
+ostree_sysroot_upgrader_new_for_os (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *sysroot</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-new-for-os.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>Operating system name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-new-for-os.returns"></a><h4>Returns</h4>
+<p>An upgrader. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-new-for-os-with-flags"></a><h3>ostree_sysroot_upgrader_new_for_os_with_flags ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="returnvalue">OstreeSysrootUpgrader</span></a> *
+ostree_sysroot_upgrader_new_for_os_with_flags
+ (<em class="parameter"><code><a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a> *sysroot</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderFlags" title="enum OstreeSysrootUpgraderFlags"><span class="type">OstreeSysrootUpgraderFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-new-for-os-with-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>sysroot</p></td>
+<td class="parameter_description"><p>An <a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot"><span class="type">OstreeSysroot</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>Operating system name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-new-for-os-with-flags.returns"></a><h4>Returns</h4>
+<p>An upgrader. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-get-origin"></a><h3>ostree_sysroot_upgrader_get_origin ()</h3>
+<pre class="programlisting"><span class="returnvalue">GKeyFile</span> *
+ostree_sysroot_upgrader_get_origin (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-get-origin.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-get-origin.returns"></a><h4>Returns</h4>
+<p>The origin file, or <code class="literal">NULL</code> if unknown. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-dup-origin"></a><h3>ostree_sysroot_upgrader_dup_origin ()</h3>
+<pre class="programlisting"><span class="returnvalue">GKeyFile</span> *
+ostree_sysroot_upgrader_dup_origin (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-dup-origin.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-dup-origin.returns"></a><h4>Returns</h4>
+<p>A copy of the origin file, or <code class="literal">NULL</code> if unknown. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-set-origin"></a><h3>ostree_sysroot_upgrader_set_origin ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_upgrader_set_origin (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Replace the origin with <em class="parameter"><code>origin</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-set-origin.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Sysroot</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>The new origin. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-get-origin-description"></a><h3>ostree_sysroot_upgrader_get_origin_description ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_sysroot_upgrader_get_origin_description
+ (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-get-origin-description.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Upgrader</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-get-origin-description.returns"></a><h4>Returns</h4>
+<p>A one-line descriptive summary of the origin, or <code class="literal">NULL</code> if
+unknown. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-check-timestamps"></a><h3>ostree_sysroot_upgrader_check_timestamps ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_upgrader_check_timestamps
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *repo</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *from_rev</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *to_rev</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Check that the timestamp on <em class="parameter"><code>to_rev</code></em>
+ is equal to or newer than
+<em class="parameter"><code>from_rev</code></em>
+. This protects systems against man-in-the-middle
+attackers which provide a client with an older commit.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-check-timestamps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>repo</p></td>
+<td class="parameter_description"><p>Repo</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>from_rev</p></td>
+<td class="parameter_description"><p>From revision</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>to_rev</p></td>
+<td class="parameter_description"><p>To revision</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-pull"></a><h3>ostree_sysroot_upgrader_pull ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_upgrader_pull (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags"><span class="type">OstreeRepoPullFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderPullFlags" title="enum OstreeSysrootUpgraderPullFlags"><span class="type">OstreeSysrootUpgraderPullFlags</span></a> upgrader_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_changed</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Perform a pull from the origin. First check if the ref has
+changed, if so download the linked objects, and store the updated
+ref locally. Then <em class="parameter"><code>out_changed</code></em>
+ will be <code class="literal">TRUE</code>.</p>
+<p>If the origin remote is unchanged, <em class="parameter"><code>out_changed</code></em>
+ will be set to
+<code class="literal">FALSE</code>.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-pull.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Upgrader</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags controlling pull behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>upgrader_flags</p></td>
+<td class="parameter_description"><p>Flags controlling upgrader behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>Progress. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_changed</p></td>
+<td class="parameter_description"><p>Whether or not the origin changed. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-pull-one-dir"></a><h3>ostree_sysroot_upgrader_pull_one_dir ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_upgrader_pull_one_dir (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dir_to_pull</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags"><span class="type">OstreeRepoPullFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderPullFlags" title="enum OstreeSysrootUpgraderPullFlags"><span class="type">OstreeSysrootUpgraderPullFlags</span></a> upgrader_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *out_changed</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Like <a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull" title="ostree_sysroot_upgrader_pull ()"><code class="function">ostree_sysroot_upgrader_pull()</code></a>, but allows retrieving just a
+subpath of the tree. This can be used to download metadata files
+from inside the tree such as package databases.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-pull-one-dir.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Upgrader</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dir_to_pull</p></td>
+<td class="parameter_description"><p>Subdirectory path (should include a leading /)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags controlling pull behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>upgrader_flags</p></td>
+<td class="parameter_description"><p>Flags controlling upgrader behavior</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>Progress. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_changed</p></td>
+<td class="parameter_description"><p>Whether or not the origin changed. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-sysroot-upgrader-deploy"></a><h3>ostree_sysroot_upgrader_deploy ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_sysroot_upgrader_deploy (<em class="parameter"><code><a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Write the new deployment to disk, perform a configuration merge
+with /etc, and update the bootloader configuration.</p>
+<div class="refsect3">
+<a name="ostree-sysroot-upgrader-deploy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Self</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-Simple-upgrade-class.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeSysrootUpgrader"></a><h3>OstreeSysrootUpgrader</h3>
+<pre class="programlisting">typedef struct OstreeSysrootUpgrader OstreeSysrootUpgrader;
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeSysrootUpgraderFlags"></a><h3>enum OstreeSysrootUpgraderFlags</h3>
+<p>Flags controlling operation of an <a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader"><span class="type">OstreeSysrootUpgrader</span></a>.</p>
+<div class="refsect3">
+<a name="OstreeSysrootUpgraderFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-UPGRADER-FLAGS-NONE:CAPS"></a>OSTREE_SYSROOT_UPGRADER_FLAGS_NONE</p></td>
+<td class="enum_member_description">
+<p>No options</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-UPGRADER-FLAGS-IGNORE-UNCONFIGURED:CAPS"></a>OSTREE_SYSROOT_UPGRADER_FLAGS_IGNORE_UNCONFIGURED</p></td>
+<td class="enum_member_description">
+<p>Do not error if the origin has an
+unconfigured-state key</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-UPGRADER-FLAGS-STAGE:CAPS"></a>OSTREE_SYSROOT_UPGRADER_FLAGS_STAGE</p></td>
+<td class="enum_member_description">
+<p>Enable "staging" (finalization at shutdown); recommended
+(Since: 2021.4)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeSysrootUpgraderPullFlags"></a><h3>enum OstreeSysrootUpgraderPullFlags</h3>
+<div class="refsect3">
+<a name="OstreeSysrootUpgraderPullFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-UPGRADER-PULL-FLAGS-NONE:CAPS"></a>OSTREE_SYSROOT_UPGRADER_PULL_FLAGS_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-UPGRADER-PULL-FLAGS-ALLOW-OLDER:CAPS"></a>OSTREE_SYSROOT_UPGRADER_PULL_FLAGS_ALLOW_OLDER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-SYSROOT-UPGRADER-PULL-FLAGS-SYNTHETIC:CAPS"></a>OSTREE_SYSROOT_UPGRADER_PULL_FLAGS_SYNTHETIC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-bootconfig-parser.html b/reference/ostree-ostree-bootconfig-parser.html
new file mode 100644
index 00000000..9cda2548
--- /dev/null
+++ b/reference/ostree-ostree-bootconfig-parser.html
@@ -0,0 +1,400 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-bootconfig-parser: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-Signature-management.html" title="Signature management">
+<link rel="next" href="ostree-ostree-chain-input-stream.html" title="ostree-chain-input-stream">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-bootconfig-parser.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-Signature-management.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-chain-input-stream.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-bootconfig-parser"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-bootconfig-parser.top_of_page"></a>ostree-bootconfig-parser</span></h2>
+<p>ostree-bootconfig-parser</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-bootconfig-parser.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="returnvalue">OstreeBootconfigParser</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-new" title="ostree_bootconfig_parser_new ()">ostree_bootconfig_parser_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="returnvalue">OstreeBootconfigParser</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-clone" title="ostree_bootconfig_parser_clone ()">ostree_bootconfig_parser_clone</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-parse" title="ostree_bootconfig_parser_parse ()">ostree_bootconfig_parser_parse</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-parse-at" title="ostree_bootconfig_parser_parse_at ()">ostree_bootconfig_parser_parse_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-write" title="ostree_bootconfig_parser_write ()">ostree_bootconfig_parser_write</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-write-at" title="ostree_bootconfig_parser_write_at ()">ostree_bootconfig_parser_write_at</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-set" title="ostree_bootconfig_parser_set ()">ostree_bootconfig_parser_set</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-get" title="ostree_bootconfig_parser_get ()">ostree_bootconfig_parser_get</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-set-overlay-initrds" title="ostree_bootconfig_parser_set_overlay_initrds ()">ostree_bootconfig_parser_set_overlay_initrds</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> **
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-get-overlay-initrds" title="ostree_bootconfig_parser_get_overlay_initrds ()">ostree_bootconfig_parser_get_overlay_initrds</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-bootconfig-parser.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser">OstreeBootconfigParser</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-bootconfig-parser.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-bootconfig-parser.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-new"></a><h3>ostree_bootconfig_parser_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="returnvalue">OstreeBootconfigParser</span></a> *
+ostree_bootconfig_parser_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-clone"></a><h3>ostree_bootconfig_parser_clone ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="returnvalue">OstreeBootconfigParser</span></a> *
+ostree_bootconfig_parser_clone (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-clone.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Bootconfig to clone</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-clone.returns"></a><h4>Returns</h4>
+<p>Copy of <em class="parameter"><code>self</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-parse"></a><h3>ostree_bootconfig_parser_parse ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_bootconfig_parser_parse (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-parse-at"></a><h3>ostree_bootconfig_parser_parse_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_bootconfig_parser_parse_at (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Initialize a bootconfig from the given file.</p>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-parse-at.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Parser</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dfd</p></td>
+<td class="parameter_description"><p>Directory fd</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>File path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-write"></a><h3>ostree_bootconfig_parser_write ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_bootconfig_parser_write (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *output</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-write-at"></a><h3>ostree_bootconfig_parser_write_at ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_bootconfig_parser_write_at (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> dfd</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-set"></a><h3>ostree_bootconfig_parser_set ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_bootconfig_parser_set (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *value</code></em>);</pre>
+<p>Set the <em class="parameter"><code>key</code></em>
+/<em class="parameter"><code>value</code></em>
+ pair to the boot configuration dictionary.</p>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-set.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Parser</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the key</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>the key</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-get"></a><h3>ostree_bootconfig_parser_get ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_bootconfig_parser_get (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<p>Get the value corresponding to <em class="parameter"><code>key</code></em>
+ from the boot configuration dictionary.</p>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-get.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Parser</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the key name to retrieve</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-get.returns"></a><h4>Returns</h4>
+<p>The corresponding value, or <code class="literal">NULL</code> if the key hasn't been
+found. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-set-overlay-initrds"></a><h3>ostree_bootconfig_parser_set_overlay_initrds ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_bootconfig_parser_set_overlay_initrds
+ (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **initrds</code></em>);</pre>
+<p>These are rendered as additional <code class="literal">initrd</code> keys in the final bootloader configs. The
+base initrd is part of the primary keys.</p>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-set-overlay-initrds.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Parser</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>initrds</p></td>
+<td class="parameter_description"><p>Array of overlay
+initrds or <code class="literal">NULL</code> to unset. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-bootconfig-parser-get-overlay-initrds"></a><h3>ostree_bootconfig_parser_get_overlay_initrds ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> **
+ostree_bootconfig_parser_get_overlay_initrds
+ (<em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-get-overlay-initrds.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Parser</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-bootconfig-parser-get-overlay-initrds.returns"></a><h4>Returns</h4>
+<p>Array of initrds or <code class="literal">NULL</code>
+if none are set. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2020.7</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-bootconfig-parser.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeBootconfigParser"></a><h3>OstreeBootconfigParser</h3>
+<pre class="programlisting">typedef struct _OstreeBootconfigParser OstreeBootconfigParser;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-chain-input-stream.html b/reference/ostree-ostree-chain-input-stream.html
new file mode 100644
index 00000000..8f5262a3
--- /dev/null
+++ b/reference/ostree-ostree-chain-input-stream.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-chain-input-stream: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">
+<link rel="next" href="ostree-ostree-checksum-input-stream.html" title="ostree-checksum-input-stream">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-chain-input-stream.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-bootconfig-parser.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-checksum-input-stream.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-chain-input-stream"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-chain-input-stream.top_of_page"></a>ostree-chain-input-stream</span></h2>
+<p>ostree-chain-input-stream</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-chain-input-stream.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-chain-input-stream.html#OstreeChainInputStream" title="struct OstreeChainInputStream"><span class="returnvalue">OstreeChainInputStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-chain-input-stream.html#ostree-chain-input-stream-new" title="ostree_chain_input_stream_new ()">ostree_chain_input_stream_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-chain-input-stream.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="ostree-ostree-chain-input-stream.html#OstreeChainInputStream" title="struct OstreeChainInputStream">OstreeChainInputStream</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-chain-input-stream.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-chain-input-stream.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-chain-input-stream-new"></a><h3>ostree_chain_input_stream_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-chain-input-stream.html#OstreeChainInputStream" title="struct OstreeChainInputStream"><span class="returnvalue">OstreeChainInputStream</span></a> *
+ostree_chain_input_stream_new (<em class="parameter"><code><span class="type">GPtrArray</span> *streams</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-chain-input-stream.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeChainInputStream"></a><h3>struct OstreeChainInputStream</h3>
+<pre class="programlisting">struct OstreeChainInputStream {
+ GInputStream parent_instance;
+};
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-checksum-input-stream.html b/reference/ostree-ostree-checksum-input-stream.html
new file mode 100644
index 00000000..72e2a30d
--- /dev/null
+++ b/reference/ostree-ostree-checksum-input-stream.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-checksum-input-stream: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-chain-input-stream.html" title="ostree-chain-input-stream">
+<link rel="next" href="ostree-ostree-content-writer.html" title="ostree-content-writer">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-checksum-input-stream.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-chain-input-stream.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-content-writer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-checksum-input-stream"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-checksum-input-stream.top_of_page"></a>ostree-checksum-input-stream</span></h2>
+<p>ostree-checksum-input-stream</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-checksum-input-stream.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-checksum-input-stream.html#OstreeChecksumInputStream" title="struct OstreeChecksumInputStream"><span class="returnvalue">OstreeChecksumInputStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-checksum-input-stream.html#ostree-checksum-input-stream-new" title="ostree_checksum_input_stream_new ()">ostree_checksum_input_stream_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-checksum-input-stream.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="ostree-ostree-checksum-input-stream.html#OstreeChecksumInputStream" title="struct OstreeChecksumInputStream">OstreeChecksumInputStream</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-checksum-input-stream.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-checksum-input-stream.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-checksum-input-stream-new"></a><h3>ostree_checksum_input_stream_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-checksum-input-stream.html#OstreeChecksumInputStream" title="struct OstreeChecksumInputStream"><span class="returnvalue">OstreeChecksumInputStream</span></a> *
+ostree_checksum_input_stream_new (<em class="parameter"><code><span class="type">GInputStream</span> *stream</code></em>,
+ <em class="parameter"><code><span class="type">GChecksum</span> *checksum</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-checksum-input-stream.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeChecksumInputStream"></a><h3>struct OstreeChecksumInputStream</h3>
+<pre class="programlisting">struct OstreeChecksumInputStream {
+ GFilterInputStream parent_instance;
+};
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-content-writer.html b/reference/ostree-ostree-content-writer.html
new file mode 100644
index 00000000..406f81dc
--- /dev/null
+++ b/reference/ostree-ostree-content-writer.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-content-writer: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-checksum-input-stream.html" title="ostree-checksum-input-stream">
+<link rel="next" href="ostree-ostree-deployment.html" title="ostree-deployment">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-content-writer.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-checksum-input-stream.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-deployment.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-content-writer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-content-writer.top_of_page"></a>ostree-content-writer</span></h2>
+<p>ostree-content-writer</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-content-writer.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-content-writer.html#ostree-content-writer-finish" title="ostree_content_writer_finish ()">ostree_content_writer_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-content-writer.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-content-writer.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-content-writer-finish"></a><h3>ostree_content_writer_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_content_writer_finish (<em class="parameter"><code><span class="type">OstreeContentWriter</span> *self</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Complete the object write and return the checksum.</p>
+<div class="refsect3">
+<a name="ostree-content-writer-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Writer</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-content-writer-finish.returns"></a><h4>Returns</h4>
+<p>Checksum, or <code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-deployment.html b/reference/ostree-ostree-deployment.html
new file mode 100644
index 00000000..b77de842
--- /dev/null
+++ b/reference/ostree-ostree-deployment.html
@@ -0,0 +1,842 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-deployment: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-content-writer.html" title="ostree-content-writer">
+<link rel="next" href="ostree-ostree-diff.html" title="ostree-diff">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-deployment.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-content-writer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-diff.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-deployment"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-deployment.top_of_page"></a>ostree-deployment</span></h2>
+<p>ostree-deployment</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-deployment.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-hash" title="ostree_deployment_hash ()">ostree_deployment_hash</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-equal" title="ostree_deployment_equal ()">ostree_deployment_equal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-new" title="ostree_deployment_new ()">ostree_deployment_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-index" title="ostree_deployment_get_index ()">ostree_deployment_get_index</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-osname" title="ostree_deployment_get_osname ()">ostree_deployment_get_osname</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-deployserial" title="ostree_deployment_get_deployserial ()">ostree_deployment_get_deployserial</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-csum" title="ostree_deployment_get_csum ()">ostree_deployment_get_csum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-bootcsum" title="ostree_deployment_get_bootcsum ()">ostree_deployment_get_bootcsum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-bootserial" title="ostree_deployment_get_bootserial ()">ostree_deployment_get_bootserial</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="returnvalue">OstreeBootconfigParser</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-bootconfig" title="ostree_deployment_get_bootconfig ()">ostree_deployment_get_bootconfig</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GKeyFile</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-origin" title="ostree_deployment_get_origin ()">ostree_deployment_get_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-origin-relpath" title="ostree_deployment_get_origin_relpath ()">ostree_deployment_get_origin_relpath</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeDeploymentUnlockedState</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-unlocked" title="ostree_deployment_get_unlocked ()">ostree_deployment_get_unlocked</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-is-pinned" title="ostree_deployment_is_pinned ()">ostree_deployment_is_pinned</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-is-staged" title="ostree_deployment_is_staged ()">ostree_deployment_is_staged</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-index" title="ostree_deployment_set_index ()">ostree_deployment_set_index</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-bootserial" title="ostree_deployment_set_bootserial ()">ostree_deployment_set_bootserial</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-bootconfig" title="ostree_deployment_set_bootconfig ()">ostree_deployment_set_bootconfig</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-origin" title="ostree_deployment_set_origin ()">ostree_deployment_set_origin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-origin-remove-transient-state" title="ostree_deployment_origin_remove_transient_state ()">ostree_deployment_origin_remove_transient_state</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-clone" title="ostree_deployment_clone ()">ostree_deployment_clone</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-unlocked-state-to-string" title="ostree_deployment_unlocked_state_to_string ()">ostree_deployment_unlocked_state_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-deployment.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment">OstreeDeployment</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-deployment.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-deployment.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-deployment-hash"></a><h3>ostree_deployment_hash ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_deployment_hash (<em class="parameter"><code><span class="type">gconstpointer</span> v</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-hash.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>v</p></td>
+<td class="parameter_description"><p>Deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/type"><span class="acronym">type</span></a> OstreeDeployment]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-hash.returns"></a><h4>Returns</h4>
+<p> An integer suitable for use in a <code class="literal">GHashTable</code></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-equal"></a><h3>ostree_deployment_equal ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_deployment_equal (<em class="parameter"><code><span class="type">gconstpointer</span> ap</code></em>,
+ <em class="parameter"><code><span class="type">gconstpointer</span> bp</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-equal.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ap</p></td>
+<td class="parameter_description"><p>A deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/type"><span class="acronym">type</span></a> OstreeDeployment]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bp</p></td>
+<td class="parameter_description"><p>A deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/type"><span class="acronym">type</span></a> OstreeDeployment]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-equal.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if deployments have the same osname, csum, and deployserial</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-new"></a><h3>ostree_deployment_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+ostree_deployment_new (<em class="parameter"><code><span class="type">int</span> index</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *osname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *csum</code></em>,
+ <em class="parameter"><code><span class="type">int</span> deployserial</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *bootcsum</code></em>,
+ <em class="parameter"><code><span class="type">int</span> bootserial</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>index</p></td>
+<td class="parameter_description"><p>Global index into the bootloader entries</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>osname</p></td>
+<td class="parameter_description"><p>"stateroot" for this deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>csum</p></td>
+<td class="parameter_description"><p>OSTree commit that will be deployed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>deployserial</p></td>
+<td class="parameter_description"><p>Unique counter</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bootcsum</p></td>
+<td class="parameter_description"><p>Kernel/initrd checksum. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bootserial</p></td>
+<td class="parameter_description"><p>Unique index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-new.returns"></a><h4>Returns</h4>
+<p>New deployment. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-index"></a><h3>ostree_deployment_get_index ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_deployment_get_index (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-get-index.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-get-index.returns"></a><h4>Returns</h4>
+<p> The global index into the bootloader ordering</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-osname"></a><h3>ostree_deployment_get_osname ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_deployment_get_osname (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-deployserial"></a><h3>ostree_deployment_get_deployserial ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_deployment_get_deployserial (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-csum"></a><h3>ostree_deployment_get_csum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_deployment_get_csum (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-bootcsum"></a><h3>ostree_deployment_get_bootcsum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_deployment_get_bootcsum (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-bootserial"></a><h3>ostree_deployment_get_bootserial ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_deployment_get_bootserial (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-bootconfig"></a><h3>ostree_deployment_get_bootconfig ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="returnvalue">OstreeBootconfigParser</span></a> *
+ostree_deployment_get_bootconfig (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-get-bootconfig.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-get-bootconfig.returns"></a><h4>Returns</h4>
+<p>Boot configuration. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-origin"></a><h3>ostree_deployment_get_origin ()</h3>
+<pre class="programlisting"><span class="returnvalue">GKeyFile</span> *
+ostree_deployment_get_origin (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-get-origin.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-get-origin.returns"></a><h4>Returns</h4>
+<p>Origin. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-origin-relpath"></a><h3>ostree_deployment_get_origin_relpath ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_deployment_get_origin_relpath (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<p>Note this function only returns a *relative* path - if you want to
+access, it, you must either use fd-relative api such as <code class="function">openat()</code>,
+or concatenate it with the full <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-path" title="ostree_sysroot_get_path ()"><code class="function">ostree_sysroot_get_path()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-deployment-get-origin-relpath.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-get-origin-relpath.returns"></a><h4>Returns</h4>
+<p>Path to deployment root directory, relative to sysroot. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-get-unlocked"></a><h3>ostree_deployment_get_unlocked ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeDeploymentUnlockedState</span>
+ostree_deployment_get_unlocked (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<p class="since">Since: 2016.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-is-pinned"></a><h3>ostree_deployment_is_pinned ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_deployment_is_pinned (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<p>See <a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-pinned" title="ostree_sysroot_deployment_set_pinned ()"><code class="function">ostree_sysroot_deployment_set_pinned()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-deployment-is-pinned.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-is-pinned.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if deployment will not be subject to GC</p>
+</div>
+<p class="since">Since: 2018.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-is-staged"></a><h3>ostree_deployment_is_staged ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_deployment_is_staged (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-is-staged.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-is-staged.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if deployment should be "finalized" at shutdown time</p>
+</div>
+<p class="since">Since: 2018.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-set-index"></a><h3>ostree_deployment_set_index ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_deployment_set_index (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> index</code></em>);</pre>
+<p>Sets the global index into the bootloader ordering.</p>
+<div class="refsect3">
+<a name="ostree-deployment-set-index.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>index</p></td>
+<td class="parameter_description"><p>Index into bootloader ordering</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-set-bootserial"></a><h3>ostree_deployment_set_bootserial ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_deployment_set_bootserial (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> index</code></em>);</pre>
+<p>Should never have been made public API; don't use this.</p>
+<div class="refsect3">
+<a name="ostree-deployment-set-bootserial.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>index</p></td>
+<td class="parameter_description"><p>Don't use this</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-set-bootconfig"></a><h3>ostree_deployment_set_bootconfig ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_deployment_set_bootconfig (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *bootconfig</code></em>);</pre>
+<p>Set or clear the bootloader configuration.</p>
+<div class="refsect3">
+<a name="ostree-deployment-set-bootconfig.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bootconfig</p></td>
+<td class="parameter_description"><p>Bootloader configuration object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-set-origin"></a><h3>ostree_deployment_set_origin ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_deployment_set_origin (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>);</pre>
+<p>Replace the "origin", which is a description of the source
+of the deployment and how to update to the next version.</p>
+<div class="refsect3">
+<a name="ostree-deployment-set-origin.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>Set the origin for this deployment. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-origin-remove-transient-state"></a><h3>ostree_deployment_origin_remove_transient_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_deployment_origin_remove_transient_state
+ (<em class="parameter"><code><span class="type">GKeyFile</span> *origin</code></em>);</pre>
+<p>The intention of an origin file is primarily describe the "inputs" that
+resulted in a deployment, and it's commonly used to derive the new state. For
+example, a key value (in pure libostree mode) is the "refspec". However,
+libostree (or other applications) may want to store "transient" state that
+should not be carried across upgrades.</p>
+<p>This function just removes all members of the <code class="literal">libostree-transient</code> group.
+The name of that group is available to all libostree users; best practice
+would be to prefix values underneath there with a short identifier for your
+software.</p>
+<p>Additionally, this function will remove the <code class="literal">origin/unlocked</code> and
+<code class="literal">origin/override-commit</code> members; these should be considered transient state
+that should have been under an explicit group.</p>
+<div class="refsect3">
+<a name="ostree-deployment-origin-remove-transient-state.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>origin</p></td>
+<td class="parameter_description"><p>An origin</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-clone"></a><h3>ostree_deployment_clone ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="returnvalue">OstreeDeployment</span></a> *
+ostree_deployment_clone (<em class="parameter"><code><a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment"><span class="type">OstreeDeployment</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-clone.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>Deployment</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-deployment-clone.returns"></a><h4>Returns</h4>
+<p>New deep copy of <em class="parameter"><code>self</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-deployment-unlocked-state-to-string"></a><h3>ostree_deployment_unlocked_state_to_string ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_deployment_unlocked_state_to_string
+ (<em class="parameter"><code><span class="type">OstreeDeploymentUnlockedState</span> state</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-deployment-unlocked-state-to-string.returns"></a><h4>Returns</h4>
+<p>Description of state. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2016.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-deployment.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeDeployment"></a><h3>OstreeDeployment</h3>
+<pre class="programlisting">typedef struct {
+ GObject parent_instance;
+
+ int index;
+ char *osname;
+ char *csum;
+ int deployserial;
+ char *bootcsum;
+ int bootserial;
+ OstreeBootconfigParser *bootconfig;
+ GKeyFile *origin;
+ OstreeDeploymentUnlockedState unlocked;
+ gboolean staged;
+ char **overlay_initrds;
+ char *overlay_initrds_id;
+} OstreeDeployment;
+</pre>
+<div class="refsect3">
+<a name="OstreeDeployment.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><span class="type">int</span> <em class="structfield"><code><a name="OstreeDeployment.index"></a>index</code></em>;</p></td>
+<td class="struct_member_description"><p>Global offset</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">char</span> *<em class="structfield"><code><a name="OstreeDeployment.osname"></a>osname</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">char</span> *<em class="structfield"><code><a name="OstreeDeployment.csum"></a>csum</code></em>;</p></td>
+<td class="struct_member_description"><p>OSTree checksum of tree</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">int</span> <em class="structfield"><code><a name="OstreeDeployment.deployserial"></a>deployserial</code></em>;</p></td>
+<td class="struct_member_description"><p>How many times this particular csum appears in deployment list</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">char</span> *<em class="structfield"><code><a name="OstreeDeployment.bootcsum"></a>bootcsum</code></em>;</p></td>
+<td class="struct_member_description"><p>Checksum of kernel+initramfs</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">int</span> <em class="structfield"><code><a name="OstreeDeployment.bootserial"></a>bootserial</code></em>;</p></td>
+<td class="struct_member_description"><p>An integer assigned to this tree per its ${bootcsum}</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser"><span class="type">OstreeBootconfigParser</span></a> *<em class="structfield"><code><a name="OstreeDeployment.bootconfig"></a>bootconfig</code></em>;</p></td>
+<td class="struct_member_description"><p>Bootloader configuration</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GKeyFile</span> *<em class="structfield"><code><a name="OstreeDeployment.origin"></a>origin</code></em>;</p></td>
+<td class="struct_member_description"><p>How to construct an upgraded version of this tree</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">OstreeDeploymentUnlockedState</span> <em class="structfield"><code><a name="OstreeDeployment.unlocked"></a>unlocked</code></em>;</p></td>
+<td class="struct_member_description"><p>The unlocked state</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">gboolean</span> <em class="structfield"><code><a name="OstreeDeployment.staged"></a>staged</code></em>;</p></td>
+<td class="struct_member_description"><p>TRUE iff this deployment is staged</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">char</span> **<em class="structfield"><code><a name="OstreeDeployment.overlay-initrds"></a>overlay_initrds</code></em>;</p></td>
+<td class="struct_member_description"><p>Checksums of staged additional initrds for this deployment</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">char</span> *<em class="structfield"><code><a name="OstreeDeployment.overlay-initrds-id"></a>overlay_initrds_id</code></em>;</p></td>
+<td class="struct_member_description"><p>Unique ID generated from initrd checksums; used to compare deployments</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-diff.html b/reference/ostree-ostree-diff.html
new file mode 100644
index 00000000..a6b31877
--- /dev/null
+++ b/reference/ostree-ostree-diff.html
@@ -0,0 +1,369 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-diff: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-deployment.html" title="ostree-deployment">
+<link rel="next" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-diff.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-deployment.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-kernel-args.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-diff"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-diff.top_of_page"></a>ostree-diff</span></h2>
+<p>ostree-diff</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-diff.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem"><span class="returnvalue">OstreeDiffItem</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-item-ref" title="ostree_diff_item_ref ()">ostree_diff_item_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-item-unref" title="ostree_diff_item_unref ()">ostree_diff_item_unref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-dirs" title="ostree_diff_dirs ()">ostree_diff_dirs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-dirs-with-options" title="ostree_diff_dirs_with_options ()">ostree_diff_dirs_with_options</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-print" title="ostree_diff_print ()">ostree_diff_print</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-diff.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="ostree-ostree-diff.html#OstreeDiffFlags" title="enum OstreeDiffFlags">OstreeDiffFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem">OstreeDiffItem</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-diff.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-diff.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-diff-item-ref"></a><h3>ostree_diff_item_ref ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem"><span class="returnvalue">OstreeDiffItem</span></a> *
+ostree_diff_item_ref (<em class="parameter"><code><a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem"><span class="type">OstreeDiffItem</span></a> *diffitem</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-diff-item-unref"></a><h3>ostree_diff_item_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_diff_item_unref (<em class="parameter"><code><a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem"><span class="type">OstreeDiffItem</span></a> *diffitem</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-diff-dirs"></a><h3>ostree_diff_dirs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_diff_dirs (<em class="parameter"><code><a class="link" href="ostree-ostree-diff.html#OstreeDiffFlags" title="enum OstreeDiffFlags"><span class="type">OstreeDiffFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *a</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *b</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *modified</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *removed</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *added</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Compute the difference between directory <em class="parameter"><code>a</code></em>
+ and <em class="parameter"><code>b</code></em>
+ as 3 separate
+sets of <a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem"><span class="type">OstreeDiffItem</span></a> in <em class="parameter"><code>modified</code></em>
+, <em class="parameter"><code>removed</code></em>
+, and <em class="parameter"><code>added</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-diff-dirs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>First directory path, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>First directory path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modified</p></td>
+<td class="parameter_description"><p>Modified files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeDiffItem]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>removed</p></td>
+<td class="parameter_description"><p>Removed files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> Gio.File]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>added</p></td>
+<td class="parameter_description"><p>Added files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> Gio.File]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-diff-dirs-with-options"></a><h3>ostree_diff_dirs_with_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_diff_dirs_with_options (<em class="parameter"><code><a class="link" href="ostree-ostree-diff.html#OstreeDiffFlags" title="enum OstreeDiffFlags"><span class="type">OstreeDiffFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *a</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *b</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *modified</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *removed</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *added</code></em>,
+ <em class="parameter"><code><span class="type">OstreeDiffDirsOptions</span> *options</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Compute the difference between directory <em class="parameter"><code>a</code></em>
+ and <em class="parameter"><code>b</code></em>
+ as 3 separate
+sets of <a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem"><span class="type">OstreeDiffItem</span></a> in <em class="parameter"><code>modified</code></em>
+, <em class="parameter"><code>removed</code></em>
+, and <em class="parameter"><code>added</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-diff-dirs-with-options.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>Flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>First directory path, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>First directory path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modified</p></td>
+<td class="parameter_description"><p>Modified files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeDiffItem]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>removed</p></td>
+<td class="parameter_description"><p>Removed files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> Gio.File]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>added</p></td>
+<td class="parameter_description"><p>Added files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> Gio.File]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>Options. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/allow-none"><span class="acronym">allow-none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-diff-print"></a><h3>ostree_diff_print ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_diff_print (<em class="parameter"><code><span class="type">GFile</span> *a</code></em>,
+ <em class="parameter"><code><span class="type">GFile</span> *b</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *modified</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *removed</code></em>,
+ <em class="parameter"><code><span class="type">GPtrArray</span> *added</code></em>);</pre>
+<p>Print the contents of a diff to stdout.</p>
+<div class="refsect3">
+<a name="ostree-diff-print.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>First directory path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>First directory path</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>modified</p></td>
+<td class="parameter_description"><p>Modified files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeDiffItem]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>removed</p></td>
+<td class="parameter_description"><p>Removed files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> Gio.File]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>added</p></td>
+<td class="parameter_description"><p>Added files. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> Gio.File]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-diff.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeDiffFlags"></a><h3>enum OstreeDiffFlags</h3>
+<div class="refsect3">
+<a name="OstreeDiffFlags.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-DIFF-FLAGS-NONE:CAPS"></a>OSTREE_DIFF_FLAGS_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="OSTREE-DIFF-FLAGS-IGNORE-XATTRS:CAPS"></a>OSTREE_DIFF_FLAGS_IGNORE_XATTRS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeDiffItem"></a><h3>struct OstreeDiffItem</h3>
+<pre class="programlisting">struct OstreeDiffItem {
+ gint refcount; /* atomic */
+
+ GFile *src;
+ GFile *target;
+
+ GFileInfo *src_info;
+ GFileInfo *target_info;
+
+ char *src_checksum;
+ char *target_checksum;
+};
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-kernel-args.html b/reference/ostree-ostree-kernel-args.html
new file mode 100644
index 00000000..1708a690
--- /dev/null
+++ b/reference/ostree-ostree-kernel-args.html
@@ -0,0 +1,1005 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-kernel-args: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-diff.html" title="ostree-diff">
+<link rel="next" href="ostree-ostree-ref.html" title="ostree-ref">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-kernel-args.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-diff.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-ref.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-kernel-args"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-kernel-args.top_of_page"></a>ostree-kernel-args</span></h2>
+<p>ostree-kernel-args</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-kernel-args.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-free" title="ostree_kernel_args_free ()">ostree_kernel_args_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="returnvalue">OstreeKernelArgs</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-new" title="ostree_kernel_args_new ()">ostree_kernel_args_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-cleanup" title="ostree_kernel_args_cleanup ()">ostree_kernel_args_cleanup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-replace-take" title="ostree_kernel_args_replace_take ()">ostree_kernel_args_replace_take</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-replace" title="ostree_kernel_args_replace ()">ostree_kernel_args_replace</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-replace-argv" title="ostree_kernel_args_replace_argv ()">ostree_kernel_args_replace_argv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append" title="ostree_kernel_args_append ()">ostree_kernel_args_append</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-argv" title="ostree_kernel_args_append_argv ()">ostree_kernel_args_append_argv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-argv-filtered" title="ostree_kernel_args_append_argv_filtered ()">ostree_kernel_args_append_argv_filtered</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-if-missing" title="ostree_kernel_args_append_if_missing ()">ostree_kernel_args_append_if_missing</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-new-replace" title="ostree_kernel_args_new_replace ()">ostree_kernel_args_new_replace</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-delete" title="ostree_kernel_args_delete ()">ostree_kernel_args_delete</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-delete-key-entry" title="ostree_kernel_args_delete_key_entry ()">ostree_kernel_args_delete_key_entry</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-proc-cmdline" title="ostree_kernel_args_append_proc_cmdline ()">ostree_kernel_args_append_proc_cmdline</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-parse-append" title="ostree_kernel_args_parse_append ()">ostree_kernel_args_parse_append</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-get-last-value" title="ostree_kernel_args_get_last_value ()">ostree_kernel_args_get_last_value</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="returnvalue">OstreeKernelArgs</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-from-string" title="ostree_kernel_args_from_string ()">ostree_kernel_args_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> **
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-to-strv" title="ostree_kernel_args_to_strv ()">ostree_kernel_args_to_strv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-to-string" title="ostree_kernel_args_to_string ()">ostree_kernel_args_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-contains" title="ostree_kernel_args_contains ()">ostree_kernel_args_contains</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-delete-if-present" title="ostree_kernel_args_delete_if_present ()">ostree_kernel_args_delete_if_present</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-kernel-args.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs">OstreeKernelArgs</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-kernel-args.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-kernel-args.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-kernel-args-free"></a><h3>ostree_kernel_args_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_free (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>);</pre>
+<p>Frees the kargs structure</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>An OstreeKernelArgs that represents kernel arguments</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-new"></a><h3>ostree_kernel_args_new ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="returnvalue">OstreeKernelArgs</span></a> *
+ostree_kernel_args_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes a new OstreeKernelArgs structure and returns it</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-kernel-args-new.returns"></a><h4>Returns</h4>
+<p>A newly created <a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> for kernel arguments. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-cleanup"></a><h3>ostree_kernel_args_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_cleanup (<em class="parameter"><code><span class="type">void</span> *loc</code></em>);</pre>
+<p>Frees the OstreeKernelArgs structure pointed by *loc</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-cleanup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>loc</p></td>
+<td class="parameter_description"><p>Address of an OstreeKernelArgs pointer</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-replace-take"></a><h3>ostree_kernel_args_replace_take ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_replace_take (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code><span class="type">char</span> *arg</code></em>);</pre>
+<p>Finds and replaces the old key if <em class="parameter"><code>arg</code></em>
+ is already in the hash table,
+otherwise adds <em class="parameter"><code>arg</code></em>
+ as new key and split_keyeq (arg) as value.
+Note that when replacing old key, the old values are freed.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-replace-take.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair for replacement. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-replace"></a><h3>ostree_kernel_args_replace ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_replace (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>);</pre>
+<p>Finds and replaces the old key if <em class="parameter"><code>arg</code></em>
+ is already in the hash table,
+otherwise adds <em class="parameter"><code>arg</code></em>
+ as new key and split_keyeq (arg) as value.
+Note that when replacing old key value pair, the old values are freed.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-replace.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair for replacement</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-replace-argv"></a><h3>ostree_kernel_args_replace_argv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_replace_argv (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **argv</code></em>);</pre>
+<p>Finds and replaces each non-null arguments of <em class="parameter"><code>argv</code></em>
+ in the hash table,
+otherwise adds individual arg as new key and split_keyeq (arg) as value.
+Note that when replacing old key value pair, the old values are freed.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-replace-argv.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>argv</p></td>
+<td class="parameter_description"><p>an array of key or key/value pairs</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-append"></a><h3>ostree_kernel_args_append ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_append (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>);</pre>
+<p>Appends <em class="parameter"><code>arg</code></em>
+ which is in the form of key=value pair to the hash table kargs-&gt;table
+(appends to the value list if key is already in the hash table)
+and appends key to kargs-&gt;order if it is not in the hash table already.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-append.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair to be added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-append-argv"></a><h3>ostree_kernel_args_append_argv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_append_argv (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **argv</code></em>);</pre>
+<p>Appends each value in <em class="parameter"><code>argv</code></em>
+ to the corresponding value array and
+appends key to kargs-&gt;order if it is not in the hash table already.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-append-argv.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>argv</p></td>
+<td class="parameter_description"><p>an array of key=value argument pairs. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-append-argv-filtered"></a><h3>ostree_kernel_args_append_argv_filtered ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_append_argv_filtered
+ (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **argv</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **prefixes</code></em>);</pre>
+<p>Appends each argument that does not have one of the <em class="parameter"><code>prefixes</code></em>
+ as prefix to the <em class="parameter"><code>kargs</code></em>
+</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-append-argv-filtered.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>argv</p></td>
+<td class="parameter_description"><p>an array of key=value argument pairs. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>prefixes</p></td>
+<td class="parameter_description"><p>an array of prefix strings. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-append-if-missing"></a><h3>ostree_kernel_args_append_if_missing ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_append_if_missing (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>);</pre>
+<p>Appends <em class="parameter"><code>arg</code></em>
+ which is in the form of key=value pair to the hash table kargs-&gt;table
+(appends to the value list if key is not in the hash table)
+and appends key to kargs-&gt;order if it is not in the hash table.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-append-if-missing.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair to be added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2022.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-new-replace"></a><h3>ostree_kernel_args_new_replace ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_kernel_args_new_replace (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function implements the basic logic behind key/value pair
+replacement. Do note that the arg need to be properly formatted</p>
+<p>When replacing key with exact one value, the arg can be in
+the form:
+key, key=new_val, or key=old_val=new_val
+The first one swaps the old_val with the key to an empty value
+The second and third replace the old_val into the new_val</p>
+<p>When replacing key with multiple values, the arg can only be
+in the form of:
+key=old_val=new_val. Unless there is a special case where
+there is an empty value associated with the key, then
+key=new_val will work because old_val is empty. The empty
+val will be swapped with the new_val in that case</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-new-replace.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>a string argument</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>error instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-new-replace.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure (and in some other instances such as:</p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem"><p>key not found in <em class="parameter"><code>kargs</code></em>
+</p></li>
+<li class="listitem"><p>old value not found when <em class="parameter"><code>arg</code></em>
+is in the form of key=old_val=new_val</p></li>
+<li class="listitem"><p>multiple old values found when <em class="parameter"><code>arg</code></em>
+is in the form of key=old_val)</p></li>
+</ol></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-delete"></a><h3>ostree_kernel_args_delete ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_kernel_args_delete (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>There are few scenarios being handled for deletion:</p>
+<p> 1: for input arg with a single key(i.e without = for split),
+ the key/value pair will be deleted if there is only
+ one value that is associated with the key</p>
+<p> 2: for input arg wth key/value pair, the specific key
+ value pair will be deleted from the pointer array
+ if those exist.</p>
+<p> 3: If the found key has only one value
+ associated with it, the key entry in the table will also
+ be removed, and the key will be removed from order table</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-delete.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair for deletion</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>an GError instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-delete.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-delete-key-entry"></a><h3>ostree_kernel_args_delete_key_entry ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_kernel_args_delete_key_entry (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>This function removes the key entry from the hashtable
+as well from the order pointer array inside kargs</p>
+<p>Note: since both table and order inside kernel args
+are with free function, no extra free functions are
+being called as they are done automatically by GLib</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-delete-key-entry.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>an OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the key to remove</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>an GError instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-delete-key-entry.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-append-proc-cmdline"></a><h3>ostree_kernel_args_append_proc_cmdline ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_kernel_args_append_proc_cmdline
+ (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Appends the command line arguments in the file "/proc/cmdline"
+that does not have "BOOT_IMAGE=" and "initrd=" as prefixes to the <em class="parameter"><code>kargs</code></em>
+</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-append-proc-cmdline.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>optional GCancellable object, NULL to ignore</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>an GError instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-append-proc-cmdline.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-parse-append"></a><h3>ostree_kernel_args_parse_append ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_kernel_args_parse_append (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *options</code></em>);</pre>
+<p>Parses <em class="parameter"><code>options</code></em>
+ by separating it by whitespaces and appends each argument to <em class="parameter"><code>kargs</code></em>
+</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-parse-append.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>a string representing command line arguments</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-get-last-value"></a><h3>ostree_kernel_args_get_last_value ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_kernel_args_get_last_value (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<p>Finds and returns the last element of value array
+corresponding to the <em class="parameter"><code>key</code></em>
+ in <em class="parameter"><code>kargs</code></em>
+ hash table. Note that the application
+will be terminated if the <em class="parameter"><code>key</code></em>
+ is found but the value array is empty</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-get-last-value.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>a key to look for in <em class="parameter"><code>kargs</code></em>
+hash table</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-get-last-value.returns"></a><h4>Returns</h4>
+<p><code class="literal">NULL</code> if <em class="parameter"><code>key</code></em>
+is not found in the <em class="parameter"><code>kargs</code></em>
+hash table,
+otherwise returns last element of value array corresponding to <em class="parameter"><code>key</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-from-string"></a><h3>ostree_kernel_args_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="returnvalue">OstreeKernelArgs</span></a> *
+ostree_kernel_args_from_string (<em class="parameter"><code>const <span class="type">char</span> *options</code></em>);</pre>
+<p>Initializes a new OstreeKernelArgs then parses and appends <em class="parameter"><code>options</code></em>
+
+to the empty OstreeKernelArgs</p>
+<p><span class="annotation">[<a href="http://foldoc.org/skip"><span class="acronym">skip</span></a>]</span></p>
+<div class="refsect3">
+<a name="ostree-kernel-args-from-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>a string representing command line arguments</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-from-string.returns"></a><h4>Returns</h4>
+<p>newly allocated <a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> with <em class="parameter"><code>options</code></em>
+appended. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-to-strv"></a><h3>ostree_kernel_args_to_strv ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> **
+ostree_kernel_args_to_strv (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>);</pre>
+<p>Extracts all key value pairs in <em class="parameter"><code>kargs</code></em>
+ and appends to a temporary
+array in forms of "key=value" or "key" if value is NULL, and returns
+the temporary array with the GPtrArray wrapper freed</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-to-strv.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-to-strv.returns"></a><h4>Returns</h4>
+<p>an array of "key=value" pairs or "key" if value is NULL. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-to-string"></a><h3>ostree_kernel_args_to_string ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> *
+ostree_kernel_args_to_string (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>);</pre>
+<p>Extracts all key value pairs in <em class="parameter"><code>kargs</code></em>
+ and appends to a temporary
+GString in forms of "key=value" or "key" if value is NULL separated
+by a single whitespace, and returns the temporary string with the
+GString wrapper freed</p>
+<p>Note: the application will be terminated if one of the values array
+in <em class="parameter"><code>kargs</code></em>
+ is NULL</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-to-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-to-string.returns"></a><h4>Returns</h4>
+<p>a string of "key=value" pairs or "key" if value is NULL,
+separated by single whitespaces. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2019.3</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-contains"></a><h3>ostree_kernel_args_contains ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_kernel_args_contains (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>);</pre>
+<p>Search for <em class="parameter"><code>arg</code></em>
+ which is in the form of key=value pair at the hash table kargs-&gt;table
+and returns true if finds it.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-contains.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair to check</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-contains.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>arg</code></em>
+is contained in <em class="parameter"><code>kargs</code></em>
+, <code class="literal">FALSE</code> otherwise.</p>
+</div>
+<p class="since">Since: 2022.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-kernel-args-delete-if-present"></a><h3>ostree_kernel_args_delete_if_present ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_kernel_args_delete_if_present (<em class="parameter"><code><a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs"><span class="type">OstreeKernelArgs</span></a> *kargs</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *arg</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Deletes <em class="parameter"><code>arg</code></em>
+ which is in the form of key=value pair from the hash table kargs-&gt;table.</p>
+<div class="refsect3">
+<a name="ostree-kernel-args-delete-if-present.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>kargs</p></td>
+<td class="parameter_description"><p>a OstreeKernelArgs instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg</p></td>
+<td class="parameter_description"><p>key or key/value pair to be deleted</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>an GError instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-kernel-args-delete-if-present.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> on failure</p>
+</div>
+<p class="since">Since: 2022.7</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-kernel-args.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeKernelArgs"></a><h3>OstreeKernelArgs</h3>
+<pre class="programlisting">typedef struct _OstreeKernelArgs OstreeKernelArgs;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-ref.html b/reference/ostree-ostree-ref.html
new file mode 100644
index 00000000..90003270
--- /dev/null
+++ b/reference/ostree-ostree-ref.html
@@ -0,0 +1,373 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-ref: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">
+<link rel="next" href="ostree-ostree-remote.html" title="ostree-remote">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-ref.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-kernel-args.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-remote.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-ref"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-ref.top_of_page"></a>ostree-ref</span></h2>
+<p>ostree-ref</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-ref.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeCollectionRef</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-new" title="ostree_collection_ref_new ()">ostree_collection_ref_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeCollectionRef</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-dup" title="ostree_collection_ref_dup ()">ostree_collection_ref_dup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-free" title="ostree_collection_ref_free ()">ostree_collection_ref_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">guint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-hash" title="ostree_collection_ref_hash ()">ostree_collection_ref_hash</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-equal" title="ostree_collection_ref_equal ()">ostree_collection_ref_equal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeCollectionRef</span> **
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-dupv" title="ostree_collection_ref_dupv ()">ostree_collection_ref_dupv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-freev" title="ostree_collection_ref_freev ()">ostree_collection_ref_freev</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-ref.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-ostree-ref.html#OstreeCollectionRefv" title="OstreeCollectionRefv">OstreeCollectionRefv</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-ref.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-ref.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-collection-ref-new"></a><h3>ostree_collection_ref_new ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeCollectionRef</span> *
+ostree_collection_ref_new (<em class="parameter"><code>const <span class="type">gchar</span> *collection_id</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *ref_name</code></em>);</pre>
+<p>Create a new <span class="type">OstreeCollectionRef</span> containing (<em class="parameter"><code>collection_id</code></em>
+, <em class="parameter"><code>ref_name</code></em>
+). If
+<em class="parameter"><code>collection_id</code></em>
+ is <code class="literal">NULL</code>, this is equivalent to a plain ref name string (not a
+refspec; no remote name is included), which can be used for non-P2P
+operations.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>collection_id</p></td>
+<td class="parameter_description"><p>a collection ID, or <code class="literal">NULL</code> for a plain ref. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref_name</p></td>
+<td class="parameter_description"><p>a ref name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-collection-ref-new.returns"></a><h4>Returns</h4>
+<p>a new <span class="type">OstreeCollectionRef</span>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-collection-ref-dup"></a><h3>ostree_collection_ref_dup ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeCollectionRef</span> *
+ostree_collection_ref_dup (<em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *ref</code></em>);</pre>
+<p>Create a copy of the given <em class="parameter"><code>ref</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-dup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeCollectionRef</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-collection-ref-dup.returns"></a><h4>Returns</h4>
+<p>a newly allocated copy of <em class="parameter"><code>ref</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-collection-ref-free"></a><h3>ostree_collection_ref_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_collection_ref_free (<em class="parameter"><code><span class="type">OstreeCollectionRef</span> *ref</code></em>);</pre>
+<p>Free the given <em class="parameter"><code>ref</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeCollectionRef</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-collection-ref-hash"></a><h3>ostree_collection_ref_hash ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint</span>
+ostree_collection_ref_hash (<em class="parameter"><code><span class="type">gconstpointer</span> ref</code></em>);</pre>
+<p>Hash the given <em class="parameter"><code>ref</code></em>
+. This function is suitable for use with <span class="type">GHashTable</span>.
+<em class="parameter"><code>ref</code></em>
+ must be non-<code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-hash.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ref</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeCollectionRef</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>][<a href="http://foldoc.org/type"><span class="acronym">type</span></a> OstreeCollectionRef]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-collection-ref-hash.returns"></a><h4>Returns</h4>
+<p> hash value for <em class="parameter"><code>ref</code></em>
+</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-collection-ref-equal"></a><h3>ostree_collection_ref_equal ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_collection_ref_equal (<em class="parameter"><code><span class="type">gconstpointer</span> ref1</code></em>,
+ <em class="parameter"><code><span class="type">gconstpointer</span> ref2</code></em>);</pre>
+<p>Compare <em class="parameter"><code>ref1</code></em>
+ and <em class="parameter"><code>ref2</code></em>
+ and return <code class="literal">TRUE</code> if they have the same collection ID and
+ref name, and <code class="literal">FALSE</code> otherwise. Both <em class="parameter"><code>ref1</code></em>
+ and <em class="parameter"><code>ref2</code></em>
+ must be non-<code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-equal.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ref1</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeCollectionRef</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>][<a href="http://foldoc.org/type"><span class="acronym">type</span></a> OstreeCollectionRef]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref2</p></td>
+<td class="parameter_description"><p>another <span class="type">OstreeCollectionRef</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/not%20nullable"><span class="acronym">not nullable</span></a>][<a href="http://foldoc.org/type"><span class="acronym">type</span></a> OstreeCollectionRef]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-collection-ref-equal.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> if <em class="parameter"><code>ref1</code></em>
+and <em class="parameter"><code>ref2</code></em>
+are equal, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-collection-ref-dupv"></a><h3>ostree_collection_ref_dupv ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeCollectionRef</span> **
+ostree_collection_ref_dupv (<em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *const *refs</code></em>);</pre>
+<p>Copy an array of <span class="type">OstreeCollectionRefs</span>, including deep copies of all its
+elements. <em class="parameter"><code>refs</code></em>
+ must be <code class="literal">NULL</code>-terminated; it may be empty, but must not be
+<code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-dupv.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>refs</p></td>
+<td class="parameter_description"><p><code class="literal">NULL</code>-terminated array of <span class="type">OstreeCollectionRefs</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-collection-ref-dupv.returns"></a><h4>Returns</h4>
+<p>a newly allocated copy of <em class="parameter"><code>refs</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-collection-ref-freev"></a><h3>ostree_collection_ref_freev ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_collection_ref_freev (<em class="parameter"><code><span class="type">OstreeCollectionRef</span> **refs</code></em>);</pre>
+<p>Free the given array of <em class="parameter"><code>refs</code></em>
+, including freeing all its elements. <em class="parameter"><code>refs</code></em>
+
+must be <code class="literal">NULL</code>-terminated; it may be empty, but must not be <code class="literal">NULL</code>.</p>
+<div class="refsect3">
+<a name="ostree-collection-ref-freev.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>refs</p></td>
+<td class="parameter_description"><p>an array of <span class="type">OstreeCollectionRefs</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-ref.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeCollectionRefv"></a><h3>OstreeCollectionRefv</h3>
+<pre class="programlisting">typedef OstreeCollectionRef **OstreeCollectionRefv;
+</pre>
+<p>A <code class="literal">NULL</code>-terminated array of <span class="type">OstreeCollectionRef</span> instances, designed to
+be used with <code class="function">g_auto()</code>:</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="n">g_auto</span><span class="p">(</span><span class="n">OstreeCollectionRefv</span><span class="p">)</span><span class="w"> </span><span class="n">refs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p></p>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-remote.html b/reference/ostree-ostree-remote.html
new file mode 100644
index 00000000..5cfd768b
--- /dev/null
+++ b/reference/ostree-ostree-remote.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-remote: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-ref.html" title="ostree-ref">
+<link rel="next" href="ostree-ostree-repo-file.html" title="ostree-repo-file">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-remote.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-ref.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-repo-file.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-remote"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-remote.top_of_page"></a>ostree-remote</span></h2>
+<p>ostree-remote</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-remote.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="returnvalue">OstreeRemote</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-ref" title="ostree_remote_ref ()">ostree_remote_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-unref" title="ostree_remote_unref ()">ostree_remote_unref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-get-name" title="ostree_remote_get_name ()">ostree_remote_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gchar</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-get-url" title="ostree_remote_get_url ()">ostree_remote_get_url</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-remote.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote">OstreeRemote</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-remote.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-remote.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-remote-ref"></a><h3>ostree_remote_ref ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="returnvalue">OstreeRemote</span></a> *
+ostree_remote_ref (<em class="parameter"><code><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> *remote</code></em>);</pre>
+<p>Increase the reference count on the given <em class="parameter"><code>remote</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-remote-ref.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-remote-ref.returns"></a><h4>Returns</h4>
+<p>a copy of <em class="parameter"><code>remote</code></em>
+, for convenience. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-remote-unref"></a><h3>ostree_remote_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_remote_unref (<em class="parameter"><code><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> *remote</code></em>);</pre>
+<p>Decrease the reference count on the given <em class="parameter"><code>remote</code></em>
+ and free it if the
+reference count reaches 0.</p>
+<div class="refsect3">
+<a name="ostree-remote-unref.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-remote-get-name"></a><h3>ostree_remote_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">gchar</span> *
+ostree_remote_get_name (<em class="parameter"><code><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> *remote</code></em>);</pre>
+<p>Get the human-readable name of the remote. This is what the user configured,
+if the remote was explicitly configured; and will otherwise be a stable,
+arbitrary, string.</p>
+<div class="refsect3">
+<a name="ostree-remote-get-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-remote-get-name.returns"></a><h4>Returns</h4>
+<p> remote’s name</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-remote-get-url"></a><h3>ostree_remote_get_url ()</h3>
+<pre class="programlisting"><span class="returnvalue">gchar</span> *
+ostree_remote_get_url (<em class="parameter"><code><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> *remote</code></em>);</pre>
+<p>Get the URL from the remote.</p>
+<div class="refsect3">
+<a name="ostree-remote-get-url.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-remote-get-url.returns"></a><h4>Returns</h4>
+<p>the remote's URL. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-remote.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeRemote"></a><h3>struct OstreeRemote</h3>
+<pre class="programlisting">struct OstreeRemote {
+ int ref_count; /* atomic */
+ char *name; /* (not nullable) */
+ char *refspec_name; /* (nullable) */
+ char *group; /* group name in options (not nullable) */
+ char *keyring; /* keyring name ($refspec_name.trustedkeys.gpg) (not nullable) */
+ GFile *file; /* NULL if remote defined in repo/config */
+ GKeyFile *options;
+};
+</pre>
+<p>This represents the configuration for a single remote repository. Currently,
+remotes can only be passed around as (reference counted) opaque handles. In
+future, more API may be added to create and interrogate them.</p>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-repo-file.html b/reference/ostree-ostree-repo-file.html
new file mode 100644
index 00000000..365900fb
--- /dev/null
+++ b/reference/ostree-ostree-repo-file.html
@@ -0,0 +1,512 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-repo-file: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-remote.html" title="ostree-remote">
+<link rel="next" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-repo-file.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-remote.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-repo-finder.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-repo-file"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-repo-file.top_of_page"></a>ostree-repo-file</span></h2>
+<p>ostree-repo-file</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-file.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-ensure-resolved" title="ostree_repo_file_ensure_resolved ()">ostree_repo_file_ensure_resolved</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-xattrs" title="ostree_repo_file_get_xattrs ()">ostree_repo_file_get_xattrs</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-repo" title="ostree_repo_file_get_repo ()">ostree_repo_file_get_repo</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="returnvalue">OstreeRepoFile</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-root" title="ostree_repo_file_get_root ()">ostree_repo_file_get_root</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-set-metadata" title="ostree_repo_file_tree_set_metadata ()">ostree_repo_file_tree_set_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-contents-checksum" title="ostree_repo_file_tree_get_contents_checksum ()">ostree_repo_file_tree_get_contents_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-metadata-checksum" title="ostree_repo_file_tree_get_metadata_checksum ()">ostree_repo_file_tree_get_metadata_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-contents" title="ostree_repo_file_tree_get_contents ()">ostree_repo_file_tree_get_contents</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GVariant</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-metadata" title="ostree_repo_file_tree_get_metadata ()">ostree_repo_file_tree_get_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <span class="returnvalue">char</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-checksum" title="ostree_repo_file_get_checksum ()">ostree_repo_file_get_checksum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-find-child" title="ostree_repo_file_tree_find_child ()">ostree_repo_file_tree_find_child</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-query-child" title="ostree_repo_file_tree_query_child ()">ostree_repo_file_tree_query_child</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-file.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile">OstreeRepoFile</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-file.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-file.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-repo-file-ensure-resolved"></a><h3>ostree_repo_file_ensure_resolved ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_file_ensure_resolved (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Ensure that the backing metadata is loaded.</p>
+<div class="refsect3">
+<a name="ostree-repo-file-ensure-resolved.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A repo file</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-file-ensure-resolved.returns"></a><h4>Returns</h4>
+<p> <code class="literal">FALSE</code> if the operation failed, <code class="literal">TRUE</code> otherwise</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-get-xattrs"></a><h3>ostree_repo_file_get_xattrs ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_file_get_xattrs (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_xattrs</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-get-xattrs.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_xattrs</p></td>
+<td class="parameter_description"><p>the extended attributes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>Cancellable</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>Error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-get-repo"></a><h3>ostree_repo_file_get_repo ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="returnvalue">OstreeRepo</span></a> *
+ostree_repo_file_get_repo (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-get-repo.returns"></a><h4>Returns</h4>
+<p>Repository. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-get-root"></a><h3>ostree_repo_file_get_root ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="returnvalue">OstreeRepoFile</span></a> *
+ostree_repo_file_get_root (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-get-root.returns"></a><h4>Returns</h4>
+<p>The root directory for the commit referenced by this file. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-set-metadata"></a><h3>ostree_repo_file_tree_set_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_file_tree_set_metadata (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *checksum</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *metadata</code></em>);</pre>
+<p>Replace the metadata checksum and metadata object.</p>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-set-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A repo file</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-get-contents-checksum"></a><h3>ostree_repo_file_tree_get_contents_checksum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_repo_file_tree_get_contents_checksum
+ (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-contents-checksum.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A repo file</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-contents-checksum.returns"></a><h4>Returns</h4>
+<p>The SHA256 digest of the content object, or <code class="literal">NULL</code> if this is not a
+directory. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-get-metadata-checksum"></a><h3>ostree_repo_file_tree_get_metadata_checksum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_repo_file_tree_get_metadata_checksum
+ (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-metadata-checksum.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A repo file</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-metadata-checksum.returns"></a><h4>Returns</h4>
+<p>The SHA256 digest of the metadata object, or <code class="literal">NULL</code> if this is not a
+directory. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-get-contents"></a><h3>ostree_repo_file_tree_get_contents ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_repo_file_tree_get_contents (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+<p>This API will return <code class="literal">NULL</code> if the file is not "resolved" i.e. in a loaded
+state. It will also return <code class="literal">NULL</code> if this path is not a directory tree.</p>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-contents.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A repo file</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-contents.returns"></a><h4>Returns</h4>
+<p>The GVariant representing the children of this directory. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-get-metadata"></a><h3>ostree_repo_file_tree_get_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">GVariant</span> *
+ostree_repo_file_tree_get_metadata (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+<p>This API will return <code class="literal">NULL</code> if the file is not "resolved" i.e. in a loaded
+state. It will also return <code class="literal">NULL</code> if this path is not a directory tree.</p>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-metadata.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>A repo file</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-get-metadata.returns"></a><h4>Returns</h4>
+<p>The GVariant representing the metadata for this directory. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-get-checksum"></a><h3>ostree_repo_file_get_checksum ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *
+ostree_repo_file_get_checksum (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-find-child"></a><h3>ostree_repo_file_tree_find_child ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+ostree_repo_file_tree_find_child (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">gboolean</span> *is_dir</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> **out_container</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-find-child.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name of the child</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>is_dir</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out%20caller-allocates"><span class="acronym">out caller-allocates</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_container</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-file-tree-query-child"></a><h3>ostree_repo_file_tree_query_child ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_file_tree_query_child (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">int</span> n</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *attributes</code></em>,
+ <em class="parameter"><code><span class="type">GFileQueryInfoFlags</span> flags</code></em>,
+ <em class="parameter"><code><span class="type">GFileInfo</span> **out_info</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-query-child.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p><a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile"><span class="type">OstreeRepoFile</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n</p></td>
+<td class="parameter_description"><p>the child number</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>attributes</p></td>
+<td class="parameter_description"><p>an attribute string to match, see <code class="function">g_file_attribute_matcher_new()</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>a <span class="type">GFileQueryInfoFlags</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_info</p></td>
+<td class="parameter_description"><p>the <span class="type">GFileInfo</span> of the child. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/out"><span class="acronym">out</span></a>][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/optional"><span class="acronym">optional</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span> or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <span class="type">GError</span> or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-file-tree-query-child.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success and the <em class="parameter"><code>out_info</code></em>
+is set, <code class="literal">FALSE</code> otherwise.</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-file.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeRepoFile"></a><h3>OstreeRepoFile</h3>
+<pre class="programlisting">typedef struct OstreeRepoFile OstreeRepoFile;
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-repo-finder.html b/reference/ostree-ostree-repo-finder.html
new file mode 100644
index 00000000..337e70bd
--- /dev/null
+++ b/reference/ostree-ostree-repo-finder.html
@@ -0,0 +1,577 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-repo-finder: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-repo-file.html" title="ostree-repo-file">
+<link rel="next" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-repo-finder.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-repo-file.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-repo-remote-finder.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-repo-finder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-repo-finder.top_of_page"></a>ostree-repo-finder</span></h2>
+<p>ostree-repo-finder</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-finder.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-async" title="ostree_repo_finder_resolve_async ()">ostree_repo_finder_resolve_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GPtrArray</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-finish" title="ostree_repo_finder_resolve_finish ()">ostree_repo_finder_resolve_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-async" title="ostree_repo_finder_resolve_all_async ()">ostree_repo_finder_resolve_all_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GPtrArray</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-finish" title="ostree_repo_finder_resolve_all_finish ()">ostree_repo_finder_resolve_all_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeRepoFinderResult</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-new" title="ostree_repo_finder_result_new ()">ostree_repo_finder_result_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeRepoFinderResult</span> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-dup" title="ostree_repo_finder_result_dup ()">ostree_repo_finder_result_dup</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-free" title="ostree_repo_finder_result_free ()">ostree_repo_finder_result_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gint</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-compare" title="ostree_repo_finder_result_compare ()">ostree_repo_finder_result_compare</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-freev" title="ostree_repo_finder_result_freev ()">ostree_repo_finder_result_freev</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-finder.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder">OstreeRepoFinder</a></td>
+</tr>
+<tr>
+<td class="typedef_keyword">typedef</td>
+<td class="function_name"><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinderResultv" title="OstreeRepoFinderResultv">OstreeRepoFinderResultv</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-finder.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-finder.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-repo-finder-resolve-async"></a><h3>ostree_repo_finder_resolve_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_finder_resolve_async (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *const *refs</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *parent_repo</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Find reachable remote URIs which claim to provide any of the given <em class="parameter"><code>refs</code></em>
+. The
+specific method for finding the remotes depends on the <a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a>
+implementation.</p>
+<p>Any remote which is found and which claims to support any of the given <em class="parameter"><code>refs</code></em>
+
+will be returned in the results. It is possible that a remote claims to
+support a given ref, but turns out not to — it is not possible to verify this
+until <a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()"><code class="function">ostree_repo_pull_from_remotes_async()</code></a> is called.</p>
+<p>The returned results will be sorted with the most useful first — this is
+typically the remote which claims to provide the most <em class="parameter"><code>refs</code></em>
+, at the lowest
+latency.</p>
+<p>Each result contains a mapping of <em class="parameter"><code>refs</code></em>
+ to the checksums of the commits
+which the result provides. If the result provides the latest commit for a ref
+across all of the results, the checksum will be set. Otherwise, if the
+result provides an outdated commit, or doesn’t provide a given ref at all,
+the checksum will not be set. Results which provide none of the requested
+<em class="parameter"><code>refs</code></em>
+ may be listed with an empty refs map.</p>
+<p>Pass the results to <a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()"><code class="function">ostree_repo_pull_from_remotes_async()</code></a> to pull the given
+<em class="parameter"><code>refs</code></em>
+ from those remotes.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-resolve-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refs</p></td>
+<td class="parameter_description"><p>non-empty array of collection–ref pairs to find remotes for. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent_repo</p></td>
+<td class="parameter_description"><p>the local repository which the refs are being resolved for,
+which provides configuration information and GPG keys. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>asynchronous completion callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>data to pass to <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-resolve-finish"></a><h3>ostree_repo_finder_resolve_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">GPtrArray</span> *
+ostree_repo_finder_resolve_finish (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Get the results from a <a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-async" title="ostree_repo_finder_resolve_async ()"><code class="function">ostree_repo_finder_resolve_async()</code></a> operation.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-resolve-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p><span class="type">GAsyncResult</span> from the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-finder-resolve-finish.returns"></a><h4>Returns</h4>
+<p>array of zero
+or more results. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeRepoFinderResult]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-resolve-all-async"></a><h3>ostree_repo_finder_resolve_all_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_finder_resolve_all_async (<em class="parameter"><code><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> *const *finders</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *const *refs</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *parent_repo</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>A version of <a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-async" title="ostree_repo_finder_resolve_async ()"><code class="function">ostree_repo_finder_resolve_async()</code></a> which queries one or more
+<em class="parameter"><code>finders</code></em>
+ in parallel and combines the results.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-resolve-all-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>finders</p></td>
+<td class="parameter_description"><p>non-empty array of <a href="ostree-ostree-repo-finder.html#OstreeRepoFinder"><span class="type">OstreeRepoFinders</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refs</p></td>
+<td class="parameter_description"><p>non-empty array of collection–ref pairs to find remotes for. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent_repo</p></td>
+<td class="parameter_description"><p>the local repository which the refs are being resolved for,
+which provides configuration information and GPG keys. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>asynchronous completion callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>data to pass to <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-resolve-all-finish"></a><h3>ostree_repo_finder_resolve_all_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">GPtrArray</span> *
+ostree_repo_finder_resolve_all_finish (<em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Get the results from a <a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-async" title="ostree_repo_finder_resolve_all_async ()"><code class="function">ostree_repo_finder_resolve_all_async()</code></a> operation.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-resolve-all-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p><span class="type">GAsyncResult</span> from the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-finder-resolve-all-finish.returns"></a><h4>Returns</h4>
+<p>array of zero
+or more results. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeRepoFinderResult]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-result-new"></a><h3>ostree_repo_finder_result_new ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeRepoFinderResult</span> *
+ostree_repo_finder_result_new (<em class="parameter"><code><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> *remote</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> *finder</code></em>,
+ <em class="parameter"><code><span class="type">gint</span> priority</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *ref_to_checksum</code></em>,
+ <em class="parameter"><code><span class="type">GHashTable</span> *ref_to_timestamp</code></em>,
+ <em class="parameter"><code><span class="type">guint64</span> summary_last_modified</code></em>);</pre>
+<p>Create a new <span class="type">OstreeRepoFinderResult</span> instance. The semantics for the arguments
+are as described in the <span class="type">OstreeRepoFinderResult</span> documentation.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>remote</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> containing the transport details
+for the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>finder</p></td>
+<td class="parameter_description"><p>the <a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> instance which produced the
+result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>priority</p></td>
+<td class="parameter_description"><p>static priority of the result, where higher numbers indicate lower
+priority</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref_to_checksum</p></td>
+<td class="parameter_description"><p>map of collection–ref pairs to checksums provided by this result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/element-type"><span class="acronym">element-type</span></a> OstreeCollectionRef utf8][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref_to_timestamp</p></td>
+<td class="parameter_description"><p>(element-type OstreeCollectionRef guint64) (nullable)
+(transfer none): map of collection–ref pairs to timestamps provided by this
+result</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>summary_last_modified</p></td>
+<td class="parameter_description"><p>Unix timestamp (seconds since the epoch, UTC) when
+the summary file for the result was last modified, or <code class="literal">0</code> if this is unknown</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-new.returns"></a><h4>Returns</h4>
+<p>a new <span class="type">OstreeRepoFinderResult</span>. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-result-dup"></a><h3>ostree_repo_finder_result_dup ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeRepoFinderResult</span> *
+ostree_repo_finder_result_dup (<em class="parameter"><code><span class="type">OstreeRepoFinderResult</span> *result</code></em>);</pre>
+<p>Copy an <span class="type">OstreeRepoFinderResult</span>.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-dup.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeRepoFinderResult</span> to copy. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-dup.returns"></a><h4>Returns</h4>
+<p>a newly allocated copy of <em class="parameter"><code>result</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-result-free"></a><h3>ostree_repo_finder_result_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_finder_result_free (<em class="parameter"><code><span class="type">OstreeRepoFinderResult</span> *result</code></em>);</pre>
+<p>Free the given <em class="parameter"><code>result</code></em>
+.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeRepoFinderResult</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-result-compare"></a><h3>ostree_repo_finder_result_compare ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint</span>
+ostree_repo_finder_result_compare (<em class="parameter"><code>const <span class="type">OstreeRepoFinderResult</span> *a</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeRepoFinderResult</span> *b</code></em>);</pre>
+<p>Compare two <span class="type">OstreeRepoFinderResult</span> instances to work out which one is better
+to pull from, and hence needs to be ordered before the other.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-compare.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>a</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeRepoFinderResult</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>b</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeRepoFinderResult</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-compare.returns"></a><h4>Returns</h4>
+<p> &lt;0 if <em class="parameter"><code>a</code></em>
+is ordered before <em class="parameter"><code>b</code></em>
+, 0 if they are ordered equally,
+&gt;0 if <em class="parameter"><code>b</code></em>
+is ordered before <em class="parameter"><code>a</code></em>
+</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-finder-result-freev"></a><h3>ostree_repo_finder_result_freev ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_finder_result_freev (<em class="parameter"><code><span class="type">OstreeRepoFinderResult</span> **results</code></em>);</pre>
+<p>Free the given <em class="parameter"><code>results</code></em>
+ array, freeing each element and the container.</p>
+<div class="refsect3">
+<a name="ostree-repo-finder-result-freev.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>results</p></td>
+<td class="parameter_description"><p>an <span class="type">OstreeRepoFinderResult</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-finder.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OstreeRepoFinder"></a><h3>OstreeRepoFinder</h3>
+<pre class="programlisting">typedef struct _OstreeRepoFinder OstreeRepoFinder;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OstreeRepoFinderResultv"></a><h3>OstreeRepoFinderResultv</h3>
+<pre class="programlisting">typedef OstreeRepoFinderResult **OstreeRepoFinderResultv;
+</pre>
+<p>A <code class="literal">NULL</code>-terminated array of <span class="type">OstreeRepoFinderResult</span> instances, designed to
+be used with <code class="function">g_auto()</code>:</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="n">g_auto</span><span class="p">(</span><span class="n">OstreeRepoFinderResultv</span><span class="p">)</span><span class="w"> </span><span class="n">results</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p></p>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-repo-remote-finder.html b/reference/ostree-ostree-repo-remote-finder.html
new file mode 100644
index 00000000..74533e47
--- /dev/null
+++ b/reference/ostree-ostree-repo-remote-finder.html
@@ -0,0 +1,516 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-repo-remote-finder: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">
+<link rel="next" href="ostree-ostree-version.html" title="ostree-version">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-repo-remote-finder.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-repo-finder.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-ostree-version.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-repo-remote-finder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-repo-remote-finder.top_of_page"></a>ostree-repo-remote-finder</span></h2>
+<p>ostree-repo-remote-finder</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-remote-finder.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-async" title="ostree_repo_find_remotes_async ()">ostree_repo_find_remotes_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">OstreeRepoFinderResult</span> **
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-finish" title="ostree_repo_find_remotes_finish ()">ostree_repo_find_remotes_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()">ostree_repo_pull_from_remotes_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">gboolean</span>
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-finish" title="ostree_repo_pull_from_remotes_finish ()">ostree_repo_pull_from_remotes_finish</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="returnvalue">OstreeRemote</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-resolve-keyring-for-collection" title="ostree_repo_resolve_keyring_for_collection ()">ostree_repo_resolve_keyring_for_collection</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-remote-finder.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-repo-remote-finder.html#OSTREE-REPO-METADATA-REF:CAPS" title="OSTREE_REPO_METADATA_REF">OSTREE_REPO_METADATA_REF</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-repo-remote-finder.html#OSTREE-META-KEY-DEPLOY-COLLECTION-ID:CAPS" title="OSTREE_META_KEY_DEPLOY_COLLECTION_ID">OSTREE_META_KEY_DEPLOY_COLLECTION_ID</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-remote-finder.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-remote-finder.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="ostree-repo-find-remotes-async"></a><h3>ostree_repo_find_remotes_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_find_remotes_async (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeCollectionRef</span> *const *refs</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> **finders</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Find reachable remote URIs which claim to provide any of the given named
+<em class="parameter"><code>refs</code></em>
+. This will search for configured remotes (<span class="type">OstreeRepoFinderConfig</span>),
+mounted volumes (<span class="type">OstreeRepoFinderMount</span>) and (if enabled at compile time)
+local network peers (<span class="type">OstreeRepoFinderAvahi</span>). In order to use a custom
+configuration of <a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> instances, call
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-async" title="ostree_repo_finder_resolve_all_async ()"><code class="function">ostree_repo_finder_resolve_all_async()</code></a> on them individually.</p>
+<p>Any remote which is found and which claims to support any of the given <em class="parameter"><code>refs</code></em>
+
+will be returned in the results. It is possible that a remote claims to
+support a given ref, but turns out not to — it is not possible to verify this
+until <a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()"><code class="function">ostree_repo_pull_from_remotes_async()</code></a> is called.</p>
+<p>The returned results will be sorted with the most useful first — this is
+typically the remote which claims to provide the most of <em class="parameter"><code>refs</code></em>
+, at the lowest
+latency.</p>
+<p>Each result contains a list of the subset of <em class="parameter"><code>refs</code></em>
+ it claims to provide. It
+is possible for a non-empty list of results to be returned, but for some of
+<em class="parameter"><code>refs</code></em>
+ to not be listed in any of the results. Callers must check for this.</p>
+<p>Pass the results to <a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()"><code class="function">ostree_repo_pull_from_remotes_async()</code></a> to pull the given <em class="parameter"><code>refs</code></em>
+
+from those remotes.</p>
+<p>The following <em class="parameter"><code>options</code></em>
+ are currently defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p><code class="literal">override-commit-ids</code> (<code class="literal">as</code>): Array of specific commit IDs to fetch. The nth
+commit ID applies to the nth ref, so this must be the same length as <em class="parameter"><code>refs</code></em>
+, if
+provided.</p></li>
+<li class="listitem"><p><code class="literal">n-network-retries</code> (<code class="literal">u</code>): Number of times to retry each download on
+receiving a transient network error, such as a socket timeout; default is
+5, 0 means return errors without retrying. Since: 2018.6</p></li>
+</ul></div>
+<p><em class="parameter"><code>finders</code></em>
+ must be a non-empty <code class="literal">NULL</code>-terminated array of the <a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a>
+instances to use, or <code class="literal">NULL</code> to use the system default set of finders, which
+will typically be all available finders using their default options (but
+this is not guaranteed).</p>
+<p>GPG verification of commits will be used unconditionally.</p>
+<p>This will use the thread-default <span class="type">GMainContext</span>, but will not iterate it.</p>
+<div class="refsect3">
+<a name="ostree-repo-find-remotes-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>refs</p></td>
+<td class="parameter_description"><p>non-empty array of collection–ref pairs to find remotes for. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>a GVariant <code class="literal">a{sv}</code> with an extensible set of flags. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>finders</p></td>
+<td class="parameter_description"><p>non-empty array of
+<a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder"><span class="type">OstreeRepoFinder</span></a> instances to use, or <code class="literal">NULL</code> to use the system defaults. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1][<a href="http://foldoc.org/transfer%20none"><span class="acronym">transfer none</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> to update with the operation’s
+progress, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>asynchronous completion callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>data to pass to <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-find-remotes-finish"></a><h3>ostree_repo_find_remotes_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">OstreeRepoFinderResult</span> **
+ostree_repo_find_remotes_finish (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Finish an asynchronous pull operation started with
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-async" title="ostree_repo_find_remotes_async ()"><code class="function">ostree_repo_find_remotes_async()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-find-remotes-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>the asynchronous result</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span>, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-find-remotes-finish.returns"></a><h4>Returns</h4>
+<p>a potentially empty array
+of <span class="type">OstreeRepoFinderResults</span>, followed by a <code class="literal">NULL</code> terminator element; or
+<code class="literal">NULL</code> on error. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>][<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-pull-from-remotes-async"></a><h3>ostree_repo_pull_from_remotes_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+ostree_repo_pull_from_remotes_async (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">OstreeRepoFinderResult</span> *const *results</code></em>,
+ <em class="parameter"><code><span class="type">GVariant</span> *options</code></em>,
+ <em class="parameter"><code><a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> *progress</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncReadyCallback</span> callback</code></em>,
+ <em class="parameter"><code><span class="type">gpointer</span> user_data</code></em>);</pre>
+<p>Pull refs from multiple remotes which have been found using
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-async" title="ostree_repo_find_remotes_async ()"><code class="function">ostree_repo_find_remotes_async()</code></a>.</p>
+<p><em class="parameter"><code>results</code></em>
+ are expected to be in priority order, with the best remotes to pull
+from listed first. <a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()"><code class="function">ostree_repo_pull_from_remotes_async()</code></a> will generally pull
+from the remotes in order, but may parallelise its downloads.</p>
+<p>If an error is encountered when pulling from a given remote, that remote will
+be ignored and another will be tried instead. If any refs have not been
+downloaded successfully after all remotes have been tried, <code class="literal">G_IO_ERROR_FAILED</code>
+will be returned. The results of any successful downloads will remain cached
+in the local repository.</p>
+<p>If <em class="parameter"><code>cancellable</code></em>
+ is cancelled, <code class="literal">G_IO_ERROR_CANCELLED</code> will be returned
+immediately. The results of any successfully completed downloads at that
+point will remain cached in the local repository.</p>
+<p>GPG verification of commits will be used unconditionally.</p>
+<p>The following <em class="parameter"><code>options</code></em>
+ are currently defined:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p><code class="literal">flags</code> (<code class="literal">i</code>): <a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags"><span class="type">OstreeRepoPullFlags</span></a> to apply to the pull operation</p></li>
+<li class="listitem"><p><code class="literal">inherit-transaction</code> (<code class="literal">b</code>): <code class="literal">TRUE</code> to inherit an ongoing transaction on
+the <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>, rather than encapsulating the pull in a new one</p></li>
+<li class="listitem"><p><code class="literal">depth</code> (<code class="literal">i</code>): How far in the history to traverse; default is 0, -1 means infinite</p></li>
+<li class="listitem"><p><code class="literal">disable-static-deltas</code> (<code class="literal">b</code>): Do not use static deltas</p></li>
+<li class="listitem"><p><code class="literal">http-headers</code> (<code class="literal">a(ss)</code>): Additional headers to add to all HTTP requests</p></li>
+<li class="listitem"><p><code class="literal">subdirs</code> (<code class="literal">as</code>): Pull just these subdirectories</p></li>
+<li class="listitem"><p><code class="literal">update-frequency</code> (<code class="literal">u</code>): Frequency to call the async progress callback in
+milliseconds, if any; only values higher than 0 are valid</p></li>
+<li class="listitem"><p><code class="literal">append-user-agent</code> (<code class="literal">s</code>): Additional string to append to the user agent</p></li>
+<li class="listitem"><p><code class="literal">n-network-retries</code> (<code class="literal">u</code>): Number of times to retry each download on receiving
+a transient network error, such as a socket timeout; default is 5, 0
+means return errors without retrying. Since: 2018.6</p></li>
+<li class="listitem"><p><code class="literal">ref-keyring-map</code> (<code class="literal">a(sss)</code>): Array of (collection ID, ref name, keyring
+remote name) tuples specifying which remote's keyring should be used when
+doing GPG verification of each collection-ref. This is useful to prevent a
+remote from serving malicious updates to refs which did not originate from
+it. This can be a subset or superset of the refs being pulled; any ref
+not being pulled will be ignored and any ref without a keyring remote
+will be verified with the keyring of the remote being pulled from.</p></li>
+</ul></div>
+<div class="refsect3">
+<a name="ostree-repo-pull-from-remotes-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>results</p></td>
+<td class="parameter_description"><p><code class="literal">NULL</code>-terminated array of remotes to
+pull from, including the refs to pull from each. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/array"><span class="acronym">array</span></a> zero-terminated=1]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p>A GVariant <code class="literal">a{sv}</code> with an extensible set of flags. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>progress</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress"><span class="type">OstreeAsyncProgress</span></a> to update with the operation’s
+progress, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>asynchronous completion callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>data to pass to <em class="parameter"><code>callback</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-pull-from-remotes-finish"></a><h3>ostree_repo_pull_from_remotes_finish ()</h3>
+<pre class="programlisting"><span class="returnvalue">gboolean</span>
+ostree_repo_pull_from_remotes_finish (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code><span class="type">GAsyncResult</span> *result</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Finish an asynchronous pull operation started with
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()"><code class="function">ostree_repo_pull_from_remotes_async()</code></a>.</p>
+<div class="refsect3">
+<a name="ostree-repo-pull-from-remotes-finish.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>result</p></td>
+<td class="parameter_description"><p>the asynchronous result</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span>, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-pull-from-remotes-finish.returns"></a><h4>Returns</h4>
+<p> <code class="literal">TRUE</code> on success, <code class="literal">FALSE</code> otherwise</p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="ostree-repo-resolve-keyring-for-collection"></a><h3>ostree_repo_resolve_keyring_for_collection ()</h3>
+<pre class="programlisting"><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="returnvalue">OstreeRemote</span></a> *
+ostree_repo_resolve_keyring_for_collection
+ (<em class="parameter"><code><a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a> *self</code></em>,
+ <em class="parameter"><code>const <span class="type">gchar</span> *collection_id</code></em>,
+ <em class="parameter"><code><span class="type">GCancellable</span> *cancellable</code></em>,
+ <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+<p>Find the GPG keyring for the given <em class="parameter"><code>collection_id</code></em>
+, using the local
+configuration from the given <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a>. This will search the configured
+remotes for ones whose <code class="literal">collection-id</code> key matches <em class="parameter"><code>collection_id</code></em>
+, and will
+return the first matching remote.</p>
+<p>If multiple remotes match and have different keyrings, a debug message will
+be emitted, and the first result will be returned. It is expected that the
+keyrings should match.</p>
+<p>If no match can be found, a <code class="literal">G_IO_ERROR_NOT_FOUND</code> error will be returned.</p>
+<div class="refsect3">
+<a name="ostree-repo-resolve-keyring-for-collection.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>an <a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo"><span class="type">OstreeRepo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection_id</p></td>
+<td class="parameter_description"><p>the collection ID to look up a keyring for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>a <span class="type">GCancellable</span>, or <code class="literal">NULL</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<a href="http://foldoc.org/nullable"><span class="acronym">nullable</span></a>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>return location for a <span class="type">GError</span>, or <code class="literal">NULL</code></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="ostree-repo-resolve-keyring-for-collection.returns"></a><h4>Returns</h4>
+<p><a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote"><span class="type">OstreeRemote</span></a> containing the GPG keyring for
+<em class="parameter"><code>collection_id</code></em>
+. </p>
+<p><span class="annotation">[<a href="http://foldoc.org/transfer%20full"><span class="acronym">transfer full</span></a>]</span></p>
+</div>
+<p class="since">Since: 2018.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-repo-remote-finder.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OSTREE-REPO-METADATA-REF:CAPS"></a><h3>OSTREE_REPO_METADATA_REF</h3>
+<pre class="programlisting">#define OSTREE_REPO_METADATA_REF "ostree-metadata"
+</pre>
+<p>The name of a ref which is used to store metadata for the entire repository,
+such as its expected update time (<code class="literal">ostree.summary.expires</code>), name, or new
+GPG keys. Metadata is stored on contentless commits in the ref, and hence is
+signed with the commits.</p>
+<p>This supersedes the additional metadata dictionary in the <code class="literal">summary</code> file
+(see <a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-summary" title="ostree_repo_regenerate_summary ()"><code class="function">ostree_repo_regenerate_summary()</code></a>), as the use of a ref means that the
+metadata for multiple upstream repositories can be included in a single mirror
+repository, disambiguating the refs using collection IDs. In order to support
+peer to peer redistribution of repository metadata, repositories must set a
+collection ID (<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-collection-id" title="ostree_repo_set_collection_id ()"><code class="function">ostree_repo_set_collection_id()</code></a>).</p>
+<p>Users of OSTree may place arbitrary metadata in commits on this ref, but the
+keys must be namespaced by product or developer. For example,
+<code class="literal">exampleos.end-of-life</code>. The <code class="literal">ostree.</code> prefix is reserved.</p>
+<p class="since">Since: 2018.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-META-KEY-DEPLOY-COLLECTION-ID:CAPS"></a><h3>OSTREE_META_KEY_DEPLOY_COLLECTION_ID</h3>
+<pre class="programlisting">#define OSTREE_META_KEY_DEPLOY_COLLECTION_ID "ostree.deploy-collection-id"
+</pre>
+<p>GVariant type <code class="literal">s</code>. This key can be used in the repo metadata which is stored
+in OSTREE_REPO_METADATA_REF as well as in the summary. The semantics of this
+are that the remote repository wants clients to update their remote config
+to add this collection ID (clients can't do P2P operations involving a
+remote without a collection ID configured on it, even if one is configured
+on the server side). Clients must never change or remove a collection ID
+already set in their remote config.</p>
+<p>Currently, OSTree does not implement changing a remote config based on this
+key, but it may do so in a later release, and until then clients such as
+Flatpak may implement it.</p>
+<p>This is a replacement for the similar metadata key implemented by flatpak,
+<code class="literal">xa.collection-id</code>, which is now deprecated as clients which supported it had
+bugs with their P2P implementations.</p>
+<p class="since">Since: 2018.9</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree-ostree-version.html b/reference/ostree-ostree-version.html
new file mode 100644
index 00000000..6da30136
--- /dev/null
+++ b/reference/ostree-ostree-version.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ostree-version: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="reference.html" title="API Reference">
+<link rel="prev" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+ <a href="#ostree-ostree-version.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="reference.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ostree-ostree-repo-remote-finder.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="refentry">
+<a name="ostree-ostree-version"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="ostree-ostree-version.top_of_page"></a>ostree-version</span></h2>
+<p>ostree-version — ostree version checking</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="ostree-ostree-version.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_proto_type">
+<col class="functions_proto_name">
+</colgroup>
+<tbody><tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="ostree-ostree-version.html#OSTREE-CHECK-VERSION:CAPS" title="OSTREE_CHECK_VERSION()">OSTREE_CHECK_VERSION</a><span class="c_punctuation">()</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-version.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="other_proto_type">
+<col class="other_proto_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-version.html#OSTREE-YEAR-VERSION:CAPS" title="OSTREE_YEAR_VERSION">OSTREE_YEAR_VERSION</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-version.html#OSTREE-RELEASE-VERSION:CAPS" title="OSTREE_RELEASE_VERSION">OSTREE_RELEASE_VERSION</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-version.html#OSTREE-VERSION:CAPS" title="OSTREE_VERSION">OSTREE_VERSION</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-version.html#OSTREE-VERSION-S:CAPS" title="OSTREE_VERSION_S">OSTREE_VERSION_S</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="ostree-ostree-version.html#OSTREE-VERSION-HEX:CAPS" title="OSTREE_VERSION_HEX">OSTREE_VERSION_HEX</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-version.description"></a><h2>Description</h2>
+<p>ostree provides macros to check the version of the library
+at compile-time</p>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-version.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="OSTREE-CHECK-VERSION:CAPS"></a><h3>OSTREE_CHECK_VERSION()</h3>
+<pre class="programlisting">#define OSTREE_CHECK_VERSION(year,release)</pre>
+<p>Compile-time version checking. Evaluates to <code class="literal">TRUE</code> if the version
+of ostree is equal or greater than the required one.</p>
+<div class="refsect3">
+<a name="OSTREE-CHECK-VERSION.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>year</p></td>
+<td class="parameter_description"><p>required year version</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>release</p></td>
+<td class="parameter_description"><p>required release version</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 2017.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="ostree-ostree-version.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="OSTREE-YEAR-VERSION:CAPS"></a><h3>OSTREE_YEAR_VERSION</h3>
+<pre class="programlisting">#define OSTREE_YEAR_VERSION (2023)
+</pre>
+<p>ostree year version component (e.g. 2017 if <a class="link" href="ostree-ostree-version.html#OSTREE-VERSION:CAPS" title="OSTREE_VERSION"><code class="literal">OSTREE_VERSION</code></a> is 2017.2)</p>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-RELEASE-VERSION:CAPS"></a><h3>OSTREE_RELEASE_VERSION</h3>
+<pre class="programlisting">#define OSTREE_RELEASE_VERSION (3)
+</pre>
+<p>ostree release version component (e.g. 2 if <a class="link" href="ostree-ostree-version.html#OSTREE-VERSION:CAPS" title="OSTREE_VERSION"><code class="literal">OSTREE_VERSION</code></a> is 2017.2)</p>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-VERSION:CAPS"></a><h3>OSTREE_VERSION</h3>
+<pre class="programlisting">#define OSTREE_VERSION (2023.3)
+</pre>
+<p>ostree version.</p>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-VERSION-S:CAPS"></a><h3>OSTREE_VERSION_S</h3>
+<pre class="programlisting">#define OSTREE_VERSION_S "2023.3"
+</pre>
+<p>ostree version, encoded as a string, useful for printing and
+concatenation.</p>
+<p class="since">Since: 2017.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="OSTREE-VERSION-HEX:CAPS"></a><h3>OSTREE_VERSION_HEX</h3>
+<pre class="programlisting">#define OSTREE_VERSION_HEX</pre>
+<p>ostree version, encoded as an hexadecimal number, useful for
+integer comparisons.</p>
+<p class="since">Since: 2017.4</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/ostree.devhelp2 b/reference/ostree.devhelp2
new file mode 100644
index 00000000..b47a5012
--- /dev/null
+++ b/reference/ostree.devhelp2
@@ -0,0 +1,673 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<book xmlns="http://www.devhelp.net/book" title="OSTree API references" link="index.html" author="" name="ostree" version="2" language="c">
+ <chapters>
+ <sub name="API Reference" link="reference.html">
+ <sub name="Core repository-independent functions" link="ostree-Core-repository-independent-functions.html"/>
+ <sub name="OstreeRepo: Content-addressed object store" link="ostree-OstreeRepo.html"/>
+ <sub name="In-memory modifiable filesystem tree" link="ostree-In-memory-modifiable-filesystem-tree.html"/>
+ <sub name="Root partition mount point" link="ostree-Root-partition-mount-point.html"/>
+ <sub name="Progress notification system for asynchronous operations" link="ostree-Progress-notification-system-for-asynchronous-operations.html"/>
+ <sub name="SELinux policy management" link="ostree-SELinux-policy-management.html"/>
+ <sub name="Simple upgrade class" link="ostree-Simple-upgrade-class.html"/>
+ <sub name="GPG signature verification results" link="ostree-GPG-signature-verification-results.html"/>
+ <sub name="Signature management" link="ostree-Signature-management.html"/>
+ <sub name="ostree-bootconfig-parser" link="ostree-ostree-bootconfig-parser.html"/>
+ <sub name="ostree-chain-input-stream" link="ostree-ostree-chain-input-stream.html"/>
+ <sub name="ostree-checksum-input-stream" link="ostree-ostree-checksum-input-stream.html"/>
+ <sub name="ostree-content-writer" link="ostree-ostree-content-writer.html"/>
+ <sub name="ostree-deployment" link="ostree-ostree-deployment.html"/>
+ <sub name="ostree-diff" link="ostree-ostree-diff.html"/>
+ <sub name="ostree-kernel-args" link="ostree-ostree-kernel-args.html"/>
+ <sub name="ostree-ref" link="ostree-ostree-ref.html"/>
+ <sub name="ostree-remote" link="ostree-ostree-remote.html"/>
+ <sub name="ostree-repo-file" link="ostree-ostree-repo-file.html"/>
+ <sub name="ostree-repo-finder" link="ostree-ostree-repo-finder.html"/>
+ <sub name="ostree-repo-remote-finder" link="ostree-ostree-repo-remote-finder.html"/>
+ <sub name="ostree-version" link="ostree-ostree-version.html"/>
+ <sub name="API Index" link="reference.html#api-index-full"/>
+ </sub>
+ </chapters>
+ <functions>
+ <keyword type="macro" name="OSTREE_OBJECT_TYPE_IS_META()" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-IS-META:CAPS"/>
+ <keyword type="function" name="ostree_metadata_variant_type ()" link="ostree-Core-repository-independent-functions.html#ostree-metadata-variant-type"/>
+ <keyword type="function" name="ostree_validate_checksum_string ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-checksum-string"/>
+ <keyword type="function" name="ostree_validate_collection_id ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-collection-id" since="2018.6"/>
+ <keyword type="function" name="ostree_checksum_to_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-to-bytes"/>
+ <keyword type="function" name="ostree_checksum_to_bytes_v ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-to-bytes-v"/>
+ <keyword type="function" name="ostree_checksum_from_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-from-bytes"/>
+ <keyword type="function" name="ostree_checksum_from_bytes_v ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-from-bytes-v"/>
+ <keyword type="function" name="ostree_checksum_inplace_from_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-inplace-from-bytes"/>
+ <keyword type="function" name="ostree_checksum_inplace_to_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-inplace-to-bytes"/>
+ <keyword type="function" name="ostree_checksum_bytes_peek ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek"/>
+ <keyword type="function" name="ostree_checksum_bytes_peek_validate ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek-validate"/>
+ <keyword type="function" name="ostree_checksum_b64_from_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-from-bytes" since="2016.8"/>
+ <keyword type="function" name="ostree_checksum_b64_to_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-to-bytes" since="2016.8"/>
+ <keyword type="function" name="ostree_checksum_b64_inplace_from_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-inplace-from-bytes"/>
+ <keyword type="function" name="ostree_checksum_b64_inplace_to_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-inplace-to-bytes"/>
+ <keyword type="function" name="ostree_cmp_checksum_bytes ()" link="ostree-Core-repository-independent-functions.html#ostree-cmp-checksum-bytes"/>
+ <keyword type="function" name="ostree_validate_rev ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-rev"/>
+ <keyword type="function" name="ostree_validate_remote_name ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-remote-name" since="2017.8"/>
+ <keyword type="function" name="ostree_parse_refspec ()" link="ostree-Core-repository-independent-functions.html#ostree-parse-refspec"/>
+ <keyword type="function" name="ostree_object_type_to_string ()" link="ostree-Core-repository-independent-functions.html#ostree-object-type-to-string"/>
+ <keyword type="function" name="ostree_object_type_from_string ()" link="ostree-Core-repository-independent-functions.html#ostree-object-type-from-string"/>
+ <keyword type="function" name="ostree_hash_object_name ()" link="ostree-Core-repository-independent-functions.html#ostree-hash-object-name"/>
+ <keyword type="function" name="ostree_object_name_serialize ()" link="ostree-Core-repository-independent-functions.html#ostree-object-name-serialize"/>
+ <keyword type="function" name="ostree_object_name_deserialize ()" link="ostree-Core-repository-independent-functions.html#ostree-object-name-deserialize"/>
+ <keyword type="function" name="ostree_object_to_string ()" link="ostree-Core-repository-independent-functions.html#ostree-object-to-string"/>
+ <keyword type="function" name="ostree_object_from_string ()" link="ostree-Core-repository-independent-functions.html#ostree-object-from-string"/>
+ <keyword type="function" name="ostree_content_stream_parse ()" link="ostree-Core-repository-independent-functions.html#ostree-content-stream-parse"/>
+ <keyword type="function" name="ostree_content_file_parse ()" link="ostree-Core-repository-independent-functions.html#ostree-content-file-parse"/>
+ <keyword type="function" name="ostree_content_file_parse_at ()" link="ostree-Core-repository-independent-functions.html#ostree-content-file-parse-at"/>
+ <keyword type="function" name="ostree_raw_file_to_archive_z2_stream ()" link="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream" since="2016.6"/>
+ <keyword type="function" name="ostree_raw_file_to_archive_z2_stream_with_options ()" link="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream-with-options" since="2017.3"/>
+ <keyword type="function" name="ostree_raw_file_to_content_stream ()" link="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-content-stream"/>
+ <keyword type="function" name="ostree_break_hardlink ()" link="ostree-Core-repository-independent-functions.html#ostree-break-hardlink" since="2017.15"/>
+ <keyword type="function" name="ostree_checksum_file_from_input ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-file-from-input"/>
+ <keyword type="function" name="ostree_checksum_file ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-file"/>
+ <keyword type="function" name="ostree_checksum_file_at ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-file-at" since="2017.13"/>
+ <keyword type="function" name="ostree_checksum_file_async ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async"/>
+ <keyword type="function" name="ostree_checksum_file_async_finish ()" link="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async-finish"/>
+ <keyword type="function" name="ostree_fs_get_all_xattrs ()" link="ostree-Core-repository-independent-functions.html#ostree-fs-get-all-xattrs"/>
+ <keyword type="function" name="ostree_fs_get_all_xattrs_at ()" link="ostree-Core-repository-independent-functions.html#ostree-fs-get-all-xattrs-at"/>
+ <keyword type="function" name="ostree_create_directory_metadata ()" link="ostree-Core-repository-independent-functions.html#ostree-create-directory-metadata"/>
+ <keyword type="function" name="ostree_validate_structureof_objtype ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-objtype"/>
+ <keyword type="function" name="ostree_validate_structureof_csum_v ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-csum-v"/>
+ <keyword type="function" name="ostree_validate_structureof_checksum_string ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-checksum-string"/>
+ <keyword type="function" name="ostree_validate_structureof_file_mode ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-file-mode"/>
+ <keyword type="function" name="ostree_validate_structureof_commit ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-commit"/>
+ <keyword type="function" name="ostree_validate_structureof_dirtree ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-dirtree"/>
+ <keyword type="function" name="ostree_validate_structureof_dirmeta ()" link="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-dirmeta"/>
+ <keyword type="function" name="ostree_commit_get_parent ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-get-parent"/>
+ <keyword type="function" name="ostree_commit_get_timestamp ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-get-timestamp" since="2016.3"/>
+ <keyword type="function" name="ostree_commit_metadata_for_bootable ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-metadata-for-bootable" since="2021.1"/>
+ <keyword type="function" name="ostree_commit_get_content_checksum ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-get-content-checksum" since="2018.2"/>
+ <keyword type="function" name="ostree_commit_get_object_sizes ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-get-object-sizes" since="2020.1"/>
+ <keyword type="function" name="ostree_commit_sizes_entry_new ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-new" since="2020.1"/>
+ <keyword type="function" name="ostree_commit_sizes_entry_copy ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-copy" since="2020.1"/>
+ <keyword type="function" name="ostree_commit_sizes_entry_free ()" link="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-free" since="2020.1"/>
+ <keyword type="function" name="ostree_check_version ()" link="ostree-Core-repository-independent-functions.html#ostree-check-version" since="2017.4"/>
+ <keyword type="macro" name="OSTREE_MAX_METADATA_SIZE" link="ostree-Core-repository-independent-functions.html#OSTREE-MAX-METADATA-SIZE:CAPS"/>
+ <keyword type="macro" name="OSTREE_MAX_METADATA_WARN_SIZE" link="ostree-Core-repository-independent-functions.html#OSTREE-MAX-METADATA-WARN-SIZE:CAPS"/>
+ <keyword type="enum" name="enum OstreeObjectType" link="ostree-Core-repository-independent-functions.html#OstreeObjectType"/>
+ <keyword type="macro" name="OSTREE_OBJECT_TYPE_LAST" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-LAST:CAPS"/>
+ <keyword type="macro" name="OSTREE_DIRMETA_GVARIANT_STRING" link="ostree-Core-repository-independent-functions.html#OSTREE-DIRMETA-GVARIANT-STRING:CAPS"/>
+ <keyword type="macro" name="OSTREE_DIRMETA_GVARIANT_FORMAT" link="ostree-Core-repository-independent-functions.html#OSTREE-DIRMETA-GVARIANT-FORMAT:CAPS"/>
+ <keyword type="macro" name="OSTREE_FILEMETA_GVARIANT_STRING" link="ostree-Core-repository-independent-functions.html#OSTREE-FILEMETA-GVARIANT-STRING:CAPS"/>
+ <keyword type="macro" name="OSTREE_FILEMETA_GVARIANT_FORMAT" link="ostree-Core-repository-independent-functions.html#OSTREE-FILEMETA-GVARIANT-FORMAT:CAPS"/>
+ <keyword type="macro" name="OSTREE_TREE_GVARIANT_STRING" link="ostree-Core-repository-independent-functions.html#OSTREE-TREE-GVARIANT-STRING:CAPS"/>
+ <keyword type="macro" name="OSTREE_TREE_GVARIANT_FORMAT" link="ostree-Core-repository-independent-functions.html#OSTREE-TREE-GVARIANT-FORMAT:CAPS"/>
+ <keyword type="macro" name="OSTREE_COMMIT_GVARIANT_STRING" link="ostree-Core-repository-independent-functions.html#OSTREE-COMMIT-GVARIANT-STRING:CAPS"/>
+ <keyword type="macro" name="OSTREE_COMMIT_GVARIANT_FORMAT" link="ostree-Core-repository-independent-functions.html#OSTREE-COMMIT-GVARIANT-FORMAT:CAPS"/>
+ <keyword type="macro" name="OSTREE_SUMMARY_GVARIANT_STRING" link="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-STRING:CAPS"/>
+ <keyword type="macro" name="OSTREE_SUMMARY_GVARIANT_FORMAT" link="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-FORMAT:CAPS"/>
+ <keyword type="function" name="ostree_repo_mode_from_string ()" link="ostree-OstreeRepo.html#ostree-repo-mode-from-string"/>
+ <keyword type="function" name="ostree_repo_open_at ()" link="ostree-OstreeRepo.html#ostree-repo-open-at" since="2017.10"/>
+ <keyword type="function" name="ostree_repo_new ()" link="ostree-OstreeRepo.html#ostree-repo-new"/>
+ <keyword type="function" name="ostree_repo_new_for_sysroot_path ()" link="ostree-OstreeRepo.html#ostree-repo-new-for-sysroot-path"/>
+ <keyword type="function" name="ostree_repo_new_default ()" link="ostree-OstreeRepo.html#ostree-repo-new-default"/>
+ <keyword type="function" name="ostree_repo_open ()" link="ostree-OstreeRepo.html#ostree-repo-open"/>
+ <keyword type="function" name="ostree_repo_set_disable_fsync ()" link="ostree-OstreeRepo.html#ostree-repo-set-disable-fsync"/>
+ <keyword type="function" name="ostree_repo_get_disable_fsync ()" link="ostree-OstreeRepo.html#ostree-repo-get-disable-fsync"/>
+ <keyword type="function" name="ostree_repo_is_system ()" link="ostree-OstreeRepo.html#ostree-repo-is-system"/>
+ <keyword type="function" name="ostree_repo_is_writable ()" link="ostree-OstreeRepo.html#ostree-repo-is-writable"/>
+ <keyword type="function" name="ostree_repo_create_at ()" link="ostree-OstreeRepo.html#ostree-repo-create-at" since="2017.10"/>
+ <keyword type="function" name="ostree_repo_create ()" link="ostree-OstreeRepo.html#ostree-repo-create"/>
+ <keyword type="function" name="ostree_repo_get_collection_id ()" link="ostree-OstreeRepo.html#ostree-repo-get-collection-id" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_get_bootloader ()" link="ostree-OstreeRepo.html#ostree-repo-get-bootloader" since="2019.2"/>
+ <keyword type="function" name="ostree_repo_get_path ()" link="ostree-OstreeRepo.html#ostree-repo-get-path"/>
+ <keyword type="function" name="ostree_repo_get_mode ()" link="ostree-OstreeRepo.html#ostree-repo-get-mode"/>
+ <keyword type="function" name="ostree_repo_get_min_free_space_bytes ()" link="ostree-OstreeRepo.html#ostree-repo-get-min-free-space-bytes" since="2018.9"/>
+ <keyword type="function" name="ostree_repo_get_config ()" link="ostree-OstreeRepo.html#ostree-repo-get-config"/>
+ <keyword type="function" name="ostree_repo_get_dfd ()" link="ostree-OstreeRepo.html#ostree-repo-get-dfd" since="2016.4"/>
+ <keyword type="function" name="ostree_repo_get_default_repo_finders ()" link="ostree-OstreeRepo.html#ostree-repo-get-default-repo-finders" since="2018.9"/>
+ <keyword type="function" name="ostree_repo_lock_pop ()" link="ostree-OstreeRepo.html#ostree-repo-lock-pop" since="2021.3"/>
+ <keyword type="function" name="ostree_repo_lock_push ()" link="ostree-OstreeRepo.html#ostree-repo-lock-push" since="2021.3"/>
+ <keyword type="function" name="ostree_repo_auto_lock_push ()" link="ostree-OstreeRepo.html#ostree-repo-auto-lock-push" since="2021.3"/>
+ <keyword type="function" name="ostree_repo_auto_lock_cleanup ()" link="ostree-OstreeRepo.html#ostree-repo-auto-lock-cleanup" since="2021.3"/>
+ <keyword type="function" name="ostree_repo_hash ()" link="ostree-OstreeRepo.html#ostree-repo-hash" since="2017.12"/>
+ <keyword type="function" name="ostree_repo_equal ()" link="ostree-OstreeRepo.html#ostree-repo-equal" since="2017.12"/>
+ <keyword type="function" name="ostree_repo_copy_config ()" link="ostree-OstreeRepo.html#ostree-repo-copy-config"/>
+ <keyword type="function" name="ostree_repo_remote_add ()" link="ostree-OstreeRepo.html#ostree-repo-remote-add"/>
+ <keyword type="function" name="ostree_repo_remote_delete ()" link="ostree-OstreeRepo.html#ostree-repo-remote-delete"/>
+ <keyword type="function" name="ostree_repo_remote_change ()" link="ostree-OstreeRepo.html#ostree-repo-remote-change"/>
+ <keyword type="function" name="ostree_repo_remote_list ()" link="ostree-OstreeRepo.html#ostree-repo-remote-list"/>
+ <keyword type="function" name="ostree_repo_remote_list_collection_refs ()" link="ostree-OstreeRepo.html#ostree-repo-remote-list-collection-refs" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_remote_get_url ()" link="ostree-OstreeRepo.html#ostree-repo-remote-get-url"/>
+ <keyword type="function" name="ostree_repo_remote_get_gpg_verify ()" link="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-verify"/>
+ <keyword type="function" name="ostree_repo_remote_get_gpg_verify_summary ()" link="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-verify-summary"/>
+ <keyword type="function" name="ostree_repo_remote_get_gpg_keys ()" link="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-keys" since="2021.4"/>
+ <keyword type="function" name="ostree_repo_remote_gpg_import ()" link="ostree-OstreeRepo.html#ostree-repo-remote-gpg-import"/>
+ <keyword type="function" name="ostree_repo_remote_fetch_summary ()" link="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary"/>
+ <keyword type="function" name="ostree_repo_remote_fetch_summary_with_options ()" link="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary-with-options" since="2016.6"/>
+ <keyword type="function" name="ostree_repo_reload_config ()" link="ostree-OstreeRepo.html#ostree-repo-reload-config" since="2017.2"/>
+ <keyword type="function" name="ostree_repo_get_remote_boolean_option ()" link="ostree-OstreeRepo.html#ostree-repo-get-remote-boolean-option" since="2016.5"/>
+ <keyword type="function" name="ostree_repo_get_remote_list_option ()" link="ostree-OstreeRepo.html#ostree-repo-get-remote-list-option" since="2016.5"/>
+ <keyword type="function" name="ostree_repo_get_remote_option ()" link="ostree-OstreeRepo.html#ostree-repo-get-remote-option" since="2016.5"/>
+ <keyword type="function" name="ostree_repo_get_parent ()" link="ostree-OstreeRepo.html#ostree-repo-get-parent"/>
+ <keyword type="function" name="ostree_repo_write_config ()" link="ostree-OstreeRepo.html#ostree-repo-write-config"/>
+ <keyword type="function" name="ostree_repo_scan_hardlinks ()" link="ostree-OstreeRepo.html#ostree-repo-scan-hardlinks"/>
+ <keyword type="function" name="ostree_repo_prepare_transaction ()" link="ostree-OstreeRepo.html#ostree-repo-prepare-transaction"/>
+ <keyword type="function" name="ostree_repo_commit_transaction ()" link="ostree-OstreeRepo.html#ostree-repo-commit-transaction"/>
+ <keyword type="function" name="ostree_repo_abort_transaction ()" link="ostree-OstreeRepo.html#ostree-repo-abort-transaction"/>
+ <keyword type="function" name="ostree_repo_transaction_set_refspec ()" link="ostree-OstreeRepo.html#ostree-repo-transaction-set-refspec"/>
+ <keyword type="function" name="ostree_repo_transaction_set_collection_ref ()" link="ostree-OstreeRepo.html#ostree-repo-transaction-set-collection-ref" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_transaction_set_ref ()" link="ostree-OstreeRepo.html#ostree-repo-transaction-set-ref"/>
+ <keyword type="function" name="ostree_repo_set_ref_immediate ()" link="ostree-OstreeRepo.html#ostree-repo-set-ref-immediate"/>
+ <keyword type="function" name="ostree_repo_set_alias_ref_immediate ()" link="ostree-OstreeRepo.html#ostree-repo-set-alias-ref-immediate" since="2017.10"/>
+ <keyword type="function" name="ostree_repo_set_cache_dir ()" link="ostree-OstreeRepo.html#ostree-repo-set-cache-dir" since="2016.5"/>
+ <keyword type="function" name="ostree_repo_set_collection_id ()" link="ostree-OstreeRepo.html#ostree-repo-set-collection-id" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_set_collection_ref_immediate ()" link="ostree-OstreeRepo.html#ostree-repo-set-collection-ref-immediate" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_sign_delta ()" link="ostree-OstreeRepo.html#ostree-repo-sign-delta"/>
+ <keyword type="function" name="ostree_repo_has_object ()" link="ostree-OstreeRepo.html#ostree-repo-has-object"/>
+ <keyword type="function" name="ostree_repo_mark_commit_partial ()" link="ostree-OstreeRepo.html#ostree-repo-mark-commit-partial" since="2017.15"/>
+ <keyword type="function" name="ostree_repo_mark_commit_partial_reason ()" link="ostree-OstreeRepo.html#ostree-repo-mark-commit-partial-reason" since="2019.4"/>
+ <keyword type="function" name="ostree_repo_write_metadata ()" link="ostree-OstreeRepo.html#ostree-repo-write-metadata"/>
+ <keyword type="function" name="ostree_repo_write_metadata_async ()" link="ostree-OstreeRepo.html#ostree-repo-write-metadata-async"/>
+ <keyword type="function" name="ostree_repo_write_metadata_finish ()" link="ostree-OstreeRepo.html#ostree-repo-write-metadata-finish"/>
+ <keyword type="function" name="ostree_repo_write_content ()" link="ostree-OstreeRepo.html#ostree-repo-write-content"/>
+ <keyword type="function" name="ostree_repo_write_regfile ()" link="ostree-OstreeRepo.html#ostree-repo-write-regfile" since="2021.2"/>
+ <keyword type="function" name="ostree_repo_write_regfile_inline ()" link="ostree-OstreeRepo.html#ostree-repo-write-regfile-inline" since="2021.2"/>
+ <keyword type="function" name="ostree_repo_write_symlink ()" link="ostree-OstreeRepo.html#ostree-repo-write-symlink" since="2021.2"/>
+ <keyword type="function" name="ostree_repo_write_metadata_trusted ()" link="ostree-OstreeRepo.html#ostree-repo-write-metadata-trusted"/>
+ <keyword type="function" name="ostree_repo_write_metadata_stream_trusted ()" link="ostree-OstreeRepo.html#ostree-repo-write-metadata-stream-trusted"/>
+ <keyword type="function" name="ostree_repo_write_content_trusted ()" link="ostree-OstreeRepo.html#ostree-repo-write-content-trusted"/>
+ <keyword type="function" name="ostree_repo_write_content_async ()" link="ostree-OstreeRepo.html#ostree-repo-write-content-async"/>
+ <keyword type="function" name="ostree_repo_write_content_finish ()" link="ostree-OstreeRepo.html#ostree-repo-write-content-finish"/>
+ <keyword type="function" name="ostree_repo_resolve_rev ()" link="ostree-OstreeRepo.html#ostree-repo-resolve-rev"/>
+ <keyword type="function" name="ostree_repo_resolve_rev_ext ()" link="ostree-OstreeRepo.html#ostree-repo-resolve-rev-ext" since="2016.7"/>
+ <keyword type="function" name="ostree_repo_list_refs ()" link="ostree-OstreeRepo.html#ostree-repo-list-refs"/>
+ <keyword type="function" name="ostree_repo_list_refs_ext ()" link="ostree-OstreeRepo.html#ostree-repo-list-refs-ext" since="2016.4"/>
+ <keyword type="function" name="ostree_repo_list_collection_refs ()" link="ostree-OstreeRepo.html#ostree-repo-list-collection-refs" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_remote_list_refs ()" link="ostree-OstreeRepo.html#ostree-repo-remote-list-refs"/>
+ <keyword type="function" name="ostree_repo_resolve_collection_ref ()" link="ostree-OstreeRepo.html#ostree-repo-resolve-collection-ref" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_load_variant ()" link="ostree-OstreeRepo.html#ostree-repo-load-variant"/>
+ <keyword type="function" name="ostree_repo_load_commit ()" link="ostree-OstreeRepo.html#ostree-repo-load-commit"/>
+ <keyword type="function" name="ostree_repo_load_variant_if_exists ()" link="ostree-OstreeRepo.html#ostree-repo-load-variant-if-exists"/>
+ <keyword type="function" name="ostree_repo_load_file ()" link="ostree-OstreeRepo.html#ostree-repo-load-file"/>
+ <keyword type="function" name="ostree_repo_load_object_stream ()" link="ostree-OstreeRepo.html#ostree-repo-load-object-stream"/>
+ <keyword type="function" name="ostree_repo_query_object_storage_size ()" link="ostree-OstreeRepo.html#ostree-repo-query-object-storage-size"/>
+ <keyword type="function" name="ostree_repo_import_object_from ()" link="ostree-OstreeRepo.html#ostree-repo-import-object-from"/>
+ <keyword type="function" name="ostree_repo_import_object_from_with_trust ()" link="ostree-OstreeRepo.html#ostree-repo-import-object-from-with-trust" since="2016.5"/>
+ <keyword type="function" name="ostree_repo_import_archive_to_mtree ()" link="ostree-OstreeRepo.html#ostree-repo-import-archive-to-mtree"/>
+ <keyword type="function" name="ostree_repo_export_tree_to_archive ()" link="ostree-OstreeRepo.html#ostree-repo-export-tree-to-archive"/>
+ <keyword type="function" name="ostree_repo_delete_object ()" link="ostree-OstreeRepo.html#ostree-repo-delete-object"/>
+ <keyword type="function" name="ostree_repo_fsck_object ()" link="ostree-OstreeRepo.html#ostree-repo-fsck-object" since="2017.15"/>
+ <keyword type="function" name="OstreeRepoCommitFilter ()" link="ostree-OstreeRepo.html#OstreeRepoCommitFilter"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_new ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-new"/>
+ <keyword type="function" name="OstreeRepoCommitModifierXattrCallback ()" link="ostree-OstreeRepo.html#OstreeRepoCommitModifierXattrCallback"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_set_xattr_callback ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-xattr-callback"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_set_sepolicy ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_set_sepolicy_from_commit ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy-from-commit" since="2020.4"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_set_devino_cache ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-devino-cache" since="2017.13"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_ref ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-ref"/>
+ <keyword type="function" name="ostree_repo_commit_modifier_unref ()" link="ostree-OstreeRepo.html#ostree-repo-commit-modifier-unref"/>
+ <keyword type="function" name="ostree_repo_devino_cache_new ()" link="ostree-OstreeRepo.html#ostree-repo-devino-cache-new"/>
+ <keyword type="function" name="ostree_repo_devino_cache_ref ()" link="ostree-OstreeRepo.html#ostree-repo-devino-cache-ref"/>
+ <keyword type="function" name="ostree_repo_devino_cache_unref ()" link="ostree-OstreeRepo.html#ostree-repo-devino-cache-unref"/>
+ <keyword type="function" name="ostree_repo_devino_cache_get_type ()" link="ostree-OstreeRepo.html#ostree-repo-devino-cache-get-type"/>
+ <keyword type="function" name="ostree_repo_write_directory_to_mtree ()" link="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree"/>
+ <keyword type="function" name="ostree_repo_write_dfd_to_mtree ()" link="ostree-OstreeRepo.html#ostree-repo-write-dfd-to-mtree"/>
+ <keyword type="function" name="ostree_repo_write_archive_to_mtree ()" link="ostree-OstreeRepo.html#ostree-repo-write-archive-to-mtree"/>
+ <keyword type="function" name="ostree_repo_write_archive_to_mtree_from_fd ()" link="ostree-OstreeRepo.html#ostree-repo-write-archive-to-mtree-from-fd"/>
+ <keyword type="function" name="ostree_repo_write_mtree ()" link="ostree-OstreeRepo.html#ostree-repo-write-mtree"/>
+ <keyword type="function" name="ostree_repo_write_commit ()" link="ostree-OstreeRepo.html#ostree-repo-write-commit"/>
+ <keyword type="function" name="ostree_repo_write_commit_with_time ()" link="ostree-OstreeRepo.html#ostree-repo-write-commit-with-time"/>
+ <keyword type="function" name="ostree_repo_read_commit_detached_metadata ()" link="ostree-OstreeRepo.html#ostree-repo-read-commit-detached-metadata"/>
+ <keyword type="function" name="ostree_repo_write_commit_detached_metadata ()" link="ostree-OstreeRepo.html#ostree-repo-write-commit-detached-metadata"/>
+ <keyword type="function" name="ostree_repo_checkout_at_options_set_devino ()" link="ostree-OstreeRepo.html#ostree-repo-checkout-at-options-set-devino" since="2017.13"/>
+ <keyword type="function" name="ostree_repo_checkout_tree ()" link="ostree-OstreeRepo.html#ostree-repo-checkout-tree"/>
+ <keyword type="function" name="ostree_repo_checkout_tree_at ()" link="ostree-OstreeRepo.html#ostree-repo-checkout-tree-at" deprecated=""/>
+ <keyword type="function" name="ostree_repo_checkout_at ()" link="ostree-OstreeRepo.html#ostree-repo-checkout-at" since="2016.8"/>
+ <keyword type="function" name="ostree_repo_checkout_gc ()" link="ostree-OstreeRepo.html#ostree-repo-checkout-gc"/>
+ <keyword type="function" name="ostree_repo_read_commit ()" link="ostree-OstreeRepo.html#ostree-repo-read-commit"/>
+ <keyword type="function" name="ostree_repo_list_objects ()" link="ostree-OstreeRepo.html#ostree-repo-list-objects"/>
+ <keyword type="function" name="ostree_repo_list_commit_objects_starting_with ()" link="ostree-OstreeRepo.html#ostree-repo-list-commit-objects-starting-with"/>
+ <keyword type="function" name="ostree_repo_list_static_delta_names ()" link="ostree-OstreeRepo.html#ostree-repo-list-static-delta-names"/>
+ <keyword type="function" name="ostree_repo_list_static_delta_indexes ()" link="ostree-OstreeRepo.html#ostree-repo-list-static-delta-indexes" since="2020.8"/>
+ <keyword type="function" name="ostree_repo_static_delta_reindex ()" link="ostree-OstreeRepo.html#ostree-repo-static-delta-reindex" since="2020.8"/>
+ <keyword type="function" name="ostree_repo_static_delta_generate ()" link="ostree-OstreeRepo.html#ostree-repo-static-delta-generate"/>
+ <keyword type="function" name="ostree_repo_static_delta_execute_offline_with_signature ()" link="ostree-OstreeRepo.html#ostree-repo-static-delta-execute-offline-with-signature" since="2020.7"/>
+ <keyword type="function" name="ostree_repo_static_delta_execute_offline ()" link="ostree-OstreeRepo.html#ostree-repo-static-delta-execute-offline"/>
+ <keyword type="function" name="ostree_repo_static_delta_verify_signature ()" link="ostree-OstreeRepo.html#ostree-repo-static-delta-verify-signature" since="2020.7"/>
+ <keyword type="function" name="ostree_repo_traverse_new_reachable ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-new-reachable"/>
+ <keyword type="function" name="ostree_repo_traverse_new_parents ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-new-parents" since="2018.5"/>
+ <keyword type="function" name="ostree_repo_traverse_parents_get_commits ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-parents-get-commits" since="2018.5"/>
+ <keyword type="function" name="ostree_repo_traverse_commit ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-commit"/>
+ <keyword type="function" name="ostree_repo_traverse_commit_union ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-commit-union"/>
+ <keyword type="function" name="ostree_repo_traverse_commit_union_with_parents ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-commit-union-with-parents" since="2018.5"/>
+ <keyword type="function" name="ostree_repo_traverse_commit_with_flags ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-commit-with-flags" since="2018.5"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_cleanup ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-cleanup"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_clear ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-clear"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_get_dir ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-dir"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_get_file ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-file"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_init_commit ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-init-commit"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_init_dirtree ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-init-dirtree"/>
+ <keyword type="function" name="ostree_repo_commit_traverse_iter_next ()" link="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-next"/>
+ <keyword type="function" name="ostree_repo_prune ()" link="ostree-OstreeRepo.html#ostree-repo-prune"/>
+ <keyword type="function" name="ostree_repo_prune_static_deltas ()" link="ostree-OstreeRepo.html#ostree-repo-prune-static-deltas"/>
+ <keyword type="function" name="ostree_repo_traverse_reachable_refs ()" link="ostree-OstreeRepo.html#ostree-repo-traverse-reachable-refs" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_prune_from_reachable ()" link="ostree-OstreeRepo.html#ostree-repo-prune-from-reachable" since="2017.1"/>
+ <keyword type="function" name="ostree_repo_pull ()" link="ostree-OstreeRepo.html#ostree-repo-pull"/>
+ <keyword type="function" name="ostree_repo_pull_one_dir ()" link="ostree-OstreeRepo.html#ostree-repo-pull-one-dir"/>
+ <keyword type="function" name="ostree_repo_pull_with_options ()" link="ostree-OstreeRepo.html#ostree-repo-pull-with-options" since="2020.9"/>
+ <keyword type="function" name="ostree_repo_pull_default_console_progress_changed ()" link="ostree-OstreeRepo.html#ostree-repo-pull-default-console-progress-changed"/>
+ <keyword type="function" name="ostree_repo_sign_commit ()" link="ostree-OstreeRepo.html#ostree-repo-sign-commit"/>
+ <keyword type="function" name="ostree_repo_append_gpg_signature ()" link="ostree-OstreeRepo.html#ostree-repo-append-gpg-signature"/>
+ <keyword type="function" name="ostree_repo_add_gpg_signature_summary ()" link="ostree-OstreeRepo.html#ostree-repo-add-gpg-signature-summary"/>
+ <keyword type="function" name="ostree_repo_gpg_sign_data ()" link="ostree-OstreeRepo.html#ostree-repo-gpg-sign-data" since="2020.8"/>
+ <keyword type="function" name="ostree_repo_gpg_verify_data ()" link="ostree-OstreeRepo.html#ostree-repo-gpg-verify-data" since="2016.6"/>
+ <keyword type="function" name="ostree_repo_signature_verify_commit_data ()" link="ostree-OstreeRepo.html#ostree-repo-signature-verify-commit-data"/>
+ <keyword type="function" name="ostree_repo_verify_commit ()" link="ostree-OstreeRepo.html#ostree-repo-verify-commit"/>
+ <keyword type="function" name="ostree_repo_verify_commit_ext ()" link="ostree-OstreeRepo.html#ostree-repo-verify-commit-ext"/>
+ <keyword type="function" name="ostree_repo_verify_commit_for_remote ()" link="ostree-OstreeRepo.html#ostree-repo-verify-commit-for-remote" since="2016.14"/>
+ <keyword type="function" name="ostree_repo_verify_summary ()" link="ostree-OstreeRepo.html#ostree-repo-verify-summary"/>
+ <keyword type="function" name="ostree_repo_regenerate_metadata ()" link="ostree-OstreeRepo.html#ostree-repo-regenerate-metadata" since="2023.1"/>
+ <keyword type="function" name="ostree_repo_regenerate_summary ()" link="ostree-OstreeRepo.html#ostree-repo-regenerate-summary"/>
+ <keyword type="typedef" name="OstreeRepo" link="ostree-OstreeRepo.html#OstreeRepo"/>
+ <keyword type="enum" name="enum OstreeRepoMode" link="ostree-OstreeRepo.html#OstreeRepoMode"/>
+ <keyword type="enum" name="enum OstreeRepoLockType" link="ostree-OstreeRepo.html#OstreeRepoLockType" since="2021.3"/>
+ <keyword type="typedef" name="OstreeRepoAutoLock" link="ostree-OstreeRepo.html#OstreeRepoAutoLock" since="2021.3"/>
+ <keyword type="enum" name="enum OstreeRepoRemoteChange" link="ostree-OstreeRepo.html#OstreeRepoRemoteChange"/>
+ <keyword type="struct" name="struct OstreeRepoTransactionStats" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats"/>
+ <keyword type="enum" name="enum OstreeRepoResolveRevExtFlags" link="ostree-OstreeRepo.html#OstreeRepoResolveRevExtFlags"/>
+ <keyword type="enum" name="enum OstreeRepoListRefsExtFlags" link="ostree-OstreeRepo.html#OstreeRepoListRefsExtFlags"/>
+ <keyword type="enum" name="enum OstreeRepoCommitState" link="ostree-OstreeRepo.html#OstreeRepoCommitState" since="2015.7"/>
+ <keyword type="enum" name="enum OstreeRepoCommitFilterResult" link="ostree-OstreeRepo.html#OstreeRepoCommitFilterResult"/>
+ <keyword type="typedef" name="OstreeRepoCommitModifier" link="ostree-OstreeRepo.html#OstreeRepoCommitModifier"/>
+ <keyword type="enum" name="enum OstreeRepoCommitModifierFlags" link="ostree-OstreeRepo.html#OstreeRepoCommitModifierFlags"/>
+ <keyword type="enum" name="enum OstreeRepoCheckoutMode" link="ostree-OstreeRepo.html#OstreeRepoCheckoutMode"/>
+ <keyword type="enum" name="enum OstreeRepoCheckoutOverwriteMode" link="ostree-OstreeRepo.html#OstreeRepoCheckoutOverwriteMode"/>
+ <keyword type="enum" name="enum OstreeRepoListObjectsFlags" link="ostree-OstreeRepo.html#OstreeRepoListObjectsFlags"/>
+ <keyword type="macro" name="OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-VARIANT-TYPE:CAPS"/>
+ <keyword type="enum" name="enum OstreeStaticDeltaGenerateOpt" link="ostree-OstreeRepo.html#OstreeStaticDeltaGenerateOpt"/>
+ <keyword type="enum" name="enum OstreeRepoCommitTraverseFlags" link="ostree-OstreeRepo.html#OstreeRepoCommitTraverseFlags"/>
+ <keyword type="enum" name="enum OstreeRepoCommitIterResult" link="ostree-OstreeRepo.html#OstreeRepoCommitIterResult"/>
+ <keyword type="enum" name="enum OstreeRepoPruneFlags" link="ostree-OstreeRepo.html#OstreeRepoPruneFlags"/>
+ <keyword type="enum" name="enum OstreeRepoPullFlags" link="ostree-OstreeRepo.html#OstreeRepoPullFlags"/>
+ <keyword type="function" name="ostree_mutable_tree_new ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new"/>
+ <keyword type="function" name="ostree_mutable_tree_new_from_commit ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new-from-commit" since="2021.5"/>
+ <keyword type="function" name="ostree_mutable_tree_new_from_checksum ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new-from-checksum" since="2018.7"/>
+ <keyword type="function" name="ostree_mutable_tree_check_error ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-check-error" since="2018.7"/>
+ <keyword type="function" name="ostree_mutable_tree_set_metadata_checksum ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-set-metadata-checksum"/>
+ <keyword type="function" name="ostree_mutable_tree_get_metadata_checksum ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-metadata-checksum"/>
+ <keyword type="function" name="ostree_mutable_tree_set_contents_checksum ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-set-contents-checksum"/>
+ <keyword type="function" name="ostree_mutable_tree_get_contents_checksum ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-contents-checksum"/>
+ <keyword type="function" name="ostree_mutable_tree_replace_file ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-replace-file"/>
+ <keyword type="function" name="ostree_mutable_tree_remove ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-remove" since="2018.9"/>
+ <keyword type="function" name="ostree_mutable_tree_ensure_dir ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-ensure-dir"/>
+ <keyword type="function" name="ostree_mutable_tree_lookup ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-lookup"/>
+ <keyword type="function" name="ostree_mutable_tree_ensure_parent_dirs ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-ensure-parent-dirs"/>
+ <keyword type="function" name="ostree_mutable_tree_walk ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-walk"/>
+ <keyword type="function" name="ostree_mutable_tree_get_subdirs ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-subdirs"/>
+ <keyword type="function" name="ostree_mutable_tree_get_files ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-files"/>
+ <keyword type="function" name="ostree_mutable_tree_fill_empty_from_dirtree ()" link="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-fill-empty-from-dirtree" since="2018.7"/>
+ <keyword type="typedef" name="OstreeMutableTree" link="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree"/>
+ <keyword type="function" name="ostree_sysroot_new ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-new"/>
+ <keyword type="function" name="ostree_sysroot_new_default ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-new-default"/>
+ <keyword type="function" name="ostree_sysroot_initialize ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" since="2020.1"/>
+ <keyword type="function" name="ostree_sysroot_initialize_with_mount_namespace ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize-with-mount-namespace" since="2022.7"/>
+ <keyword type="function" name="ostree_sysroot_get_path ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-path"/>
+ <keyword type="function" name="ostree_sysroot_load ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-load"/>
+ <keyword type="function" name="ostree_sysroot_load_if_changed ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-load-if-changed" since="2016.4"/>
+ <keyword type="function" name="ostree_sysroot_lock ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-lock"/>
+ <keyword type="function" name="ostree_sysroot_try_lock ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-try-lock"/>
+ <keyword type="function" name="ostree_sysroot_lock_async ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-async"/>
+ <keyword type="function" name="ostree_sysroot_lock_finish ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-finish"/>
+ <keyword type="function" name="ostree_sysroot_unlock ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-unlock"/>
+ <keyword type="function" name="ostree_sysroot_unload ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-unload"/>
+ <keyword type="function" name="ostree_sysroot_set_mount_namespace_in_use ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-set-mount-namespace-in-use" since="2020.1"/>
+ <keyword type="function" name="ostree_sysroot_is_booted ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-is-booted" since="2020.1"/>
+ <keyword type="function" name="ostree_sysroot_get_fd ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-fd"/>
+ <keyword type="function" name="ostree_sysroot_ensure_initialized ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-ensure-initialized"/>
+ <keyword type="function" name="ostree_sysroot_get_bootversion ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-bootversion"/>
+ <keyword type="function" name="ostree_sysroot_get_subbootversion ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-subbootversion"/>
+ <keyword type="function" name="ostree_sysroot_get_deployments ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployments"/>
+ <keyword type="function" name="ostree_sysroot_get_booted_deployment ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-booted-deployment"/>
+ <keyword type="function" name="ostree_sysroot_require_booted_deployment ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-require-booted-deployment" since="2021.1"/>
+ <keyword type="function" name="ostree_sysroot_get_deployment_directory ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-directory"/>
+ <keyword type="function" name="ostree_sysroot_get_deployment_dirpath ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-dirpath"/>
+ <keyword type="function" name="ostree_sysroot_get_deployment_origin_path ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-origin-path"/>
+ <keyword type="function" name="ostree_sysroot_cleanup ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup"/>
+ <keyword type="function" name="ostree_sysroot_prepare_cleanup ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-prepare-cleanup"/>
+ <keyword type="function" name="ostree_sysroot_cleanup_prune_repo ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup-prune-repo" since="2018.6"/>
+ <keyword type="function" name="ostree_sysroot_repo ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-repo" since="2017.7"/>
+ <keyword type="function" name="ostree_sysroot_get_repo ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-repo"/>
+ <keyword type="function" name="ostree_sysroot_get_staged_deployment ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-staged-deployment" since="2018.5"/>
+ <keyword type="function" name="ostree_sysroot_init_osname ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-init-osname" since="2016.4"/>
+ <keyword type="function" name="ostree_sysroot_deployment_set_kargs ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-kargs"/>
+ <keyword type="function" name="ostree_sysroot_deployment_set_kargs_in_place ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-kargs-in-place"/>
+ <keyword type="function" name="ostree_sysroot_deployment_set_mutable ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-mutable"/>
+ <keyword type="function" name="ostree_sysroot_deployment_unlock ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-unlock" since="2016.4"/>
+ <keyword type="function" name="ostree_sysroot_deployment_set_pinned ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-pinned" since="2018.3"/>
+ <keyword type="function" name="ostree_sysroot_write_deployments ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments"/>
+ <keyword type="function" name="ostree_sysroot_write_deployments_with_options ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments-with-options" since="2017.4"/>
+ <keyword type="function" name="ostree_sysroot_write_origin_file ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-write-origin-file"/>
+ <keyword type="function" name="ostree_sysroot_stage_tree ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree" since="2018.5"/>
+ <keyword type="function" name="ostree_sysroot_stage_tree_with_options ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree-with-options" since="2020.7"/>
+ <keyword type="function" name="ostree_sysroot_stage_overlay_initrd ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-overlay-initrd" since="2020.7"/>
+ <keyword type="function" name="ostree_sysroot_deploy_tree ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree" since="2018.5"/>
+ <keyword type="function" name="ostree_sysroot_deploy_tree_with_options ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree-with-options" since="2020.7"/>
+ <keyword type="function" name="ostree_sysroot_get_merge_deployment ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-get-merge-deployment"/>
+ <keyword type="function" name="ostree_sysroot_query_deployments_for ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-query-deployments-for" since="2017.7"/>
+ <keyword type="function" name="ostree_sysroot_origin_new_from_refspec ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-origin-new-from-refspec"/>
+ <keyword type="function" name="ostree_sysroot_simple_write_deployment ()" link="ostree-Root-partition-mount-point.html#ostree-sysroot-simple-write-deployment"/>
+ <keyword type="typedef" name="OstreeSysroot" link="ostree-Root-partition-mount-point.html#OstreeSysroot"/>
+ <keyword type="enum" name="enum OstreeSysrootSimpleWriteDeploymentFlags" link="ostree-Root-partition-mount-point.html#OstreeSysrootSimpleWriteDeploymentFlags"/>
+ <keyword type="function" name="ostree_async_progress_new ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new"/>
+ <keyword type="function" name="ostree_async_progress_new_and_connect ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new-and-connect"/>
+ <keyword type="function" name="ostree_async_progress_copy_state ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-copy-state" since="2019.6"/>
+ <keyword type="function" name="ostree_async_progress_get_status ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-status" since="2017.6"/>
+ <keyword type="function" name="ostree_async_progress_get ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get" since="2017.6"/>
+ <keyword type="function" name="ostree_async_progress_get_variant ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-variant" since="2017.6"/>
+ <keyword type="function" name="ostree_async_progress_get_uint ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-uint"/>
+ <keyword type="function" name="ostree_async_progress_get_uint64 ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-uint64"/>
+ <keyword type="function" name="ostree_async_progress_set_status ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-status" since="2017.6"/>
+ <keyword type="function" name="ostree_async_progress_set ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set" since="2017.6"/>
+ <keyword type="function" name="ostree_async_progress_set_variant ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-variant" since="2017.6"/>
+ <keyword type="function" name="ostree_async_progress_set_uint ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-uint"/>
+ <keyword type="function" name="ostree_async_progress_set_uint64 ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-uint64"/>
+ <keyword type="function" name="ostree_async_progress_finish ()" link="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-finish"/>
+ <keyword type="typedef" name="OstreeAsyncProgress" link="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress"/>
+ <keyword type="function" name="ostree_sepolicy_new ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-new"/>
+ <keyword type="function" name="ostree_sepolicy_new_at ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-new-at" since="2017.4"/>
+ <keyword type="function" name="ostree_sepolicy_new_from_commit ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-new-from-commit"/>
+ <keyword type="function" name="ostree_sepolicy_get_path ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-get-path"/>
+ <keyword type="function" name="ostree_sepolicy_get_name ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-get-name"/>
+ <keyword type="function" name="ostree_sepolicy_get_label ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-get-label"/>
+ <keyword type="function" name="ostree_sepolicy_get_csum ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-get-csum" since="2016.5"/>
+ <keyword type="function" name="ostree_sepolicy_restorecon ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-restorecon"/>
+ <keyword type="function" name="ostree_sepolicy_setfscreatecon ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-setfscreatecon"/>
+ <keyword type="function" name="ostree_sepolicy_fscreatecon_cleanup ()" link="ostree-SELinux-policy-management.html#ostree-sepolicy-fscreatecon-cleanup"/>
+ <keyword type="typedef" name="OstreeSePolicy" link="ostree-SELinux-policy-management.html#OstreeSePolicy"/>
+ <keyword type="enum" name="enum OstreeSePolicyRestoreconFlags" link="ostree-SELinux-policy-management.html#OstreeSePolicyRestoreconFlags"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_new ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_new_for_os ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new-for-os"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_new_for_os_with_flags ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new-for-os-with-flags"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_get_origin ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-get-origin"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_dup_origin ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-dup-origin"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_set_origin ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-set-origin"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_get_origin_description ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-get-origin-description"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_check_timestamps ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-check-timestamps"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_pull ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_pull_one_dir ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull-one-dir"/>
+ <keyword type="function" name="ostree_sysroot_upgrader_deploy ()" link="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-deploy"/>
+ <keyword type="typedef" name="OstreeSysrootUpgrader" link="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader"/>
+ <keyword type="enum" name="enum OstreeSysrootUpgraderFlags" link="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderFlags"/>
+ <keyword type="enum" name="enum OstreeSysrootUpgraderPullFlags" link="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderPullFlags"/>
+ <keyword type="function" name="ostree_gpg_verify_result_count_all ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all"/>
+ <keyword type="function" name="ostree_gpg_verify_result_count_valid ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-valid"/>
+ <keyword type="function" name="ostree_gpg_verify_result_lookup ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-lookup"/>
+ <keyword type="function" name="ostree_gpg_verify_result_get ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get"/>
+ <keyword type="function" name="ostree_gpg_verify_result_get_all ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get-all"/>
+ <keyword type="function" name="ostree_gpg_verify_result_describe ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe"/>
+ <keyword type="function" name="ostree_gpg_verify_result_describe_variant ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe-variant"/>
+ <keyword type="function" name="ostree_gpg_verify_result_require_valid_signature ()" link="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-require-valid-signature" since="2016.6"/>
+ <keyword type="enum" name="enum OstreeGpgError" link="ostree-GPG-signature-verification-results.html#OstreeGpgError" since="2017.10"/>
+ <keyword type="typedef" name="OstreeGpgVerifyResult" link="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult"/>
+ <keyword type="enum" name="enum OstreeGpgSignatureAttr" link="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr"/>
+ <keyword type="enum" name="enum OstreeGpgSignatureFormatFlags" link="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureFormatFlags"/>
+ <keyword type="function" name="ostree_sign_get_all ()" link="ostree-Signature-management.html#ostree-sign-get-all" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_commit ()" link="ostree-Signature-management.html#ostree-sign-commit" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_commit_verify ()" link="ostree-Signature-management.html#ostree-sign-commit-verify" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_data ()" link="ostree-Signature-management.html#ostree-sign-data" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_data_verify ()" link="ostree-Signature-management.html#ostree-sign-data-verify" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_get_by_name ()" link="ostree-Signature-management.html#ostree-sign-get-by-name" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_get_name ()" link="ostree-Signature-management.html#ostree-sign-get-name" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_add_pk ()" link="ostree-Signature-management.html#ostree-sign-add-pk" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_clear_keys ()" link="ostree-Signature-management.html#ostree-sign-clear-keys" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_load_pk ()" link="ostree-Signature-management.html#ostree-sign-load-pk" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_metadata_format ()" link="ostree-Signature-management.html#ostree-sign-metadata-format" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_metadata_key ()" link="ostree-Signature-management.html#ostree-sign-metadata-key" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_set_pk ()" link="ostree-Signature-management.html#ostree-sign-set-pk" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_set_sk ()" link="ostree-Signature-management.html#ostree-sign-set-sk" since="2020.2"/>
+ <keyword type="function" name="ostree_sign_summary ()" link="ostree-Signature-management.html#ostree-sign-summary" since="2020.2"/>
+ <keyword type="struct" name="OstreeSign" link="ostree-Signature-management.html#OstreeSign"/>
+ <keyword type="function" name="ostree_bootconfig_parser_new ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-new"/>
+ <keyword type="function" name="ostree_bootconfig_parser_clone ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-clone"/>
+ <keyword type="function" name="ostree_bootconfig_parser_parse ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-parse"/>
+ <keyword type="function" name="ostree_bootconfig_parser_parse_at ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-parse-at"/>
+ <keyword type="function" name="ostree_bootconfig_parser_write ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-write"/>
+ <keyword type="function" name="ostree_bootconfig_parser_write_at ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-write-at"/>
+ <keyword type="function" name="ostree_bootconfig_parser_set ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-set"/>
+ <keyword type="function" name="ostree_bootconfig_parser_get ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-get"/>
+ <keyword type="function" name="ostree_bootconfig_parser_set_overlay_initrds ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-set-overlay-initrds" since="2020.7"/>
+ <keyword type="function" name="ostree_bootconfig_parser_get_overlay_initrds ()" link="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-get-overlay-initrds" since="2020.7"/>
+ <keyword type="struct" name="OstreeBootconfigParser" link="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser"/>
+ <keyword type="function" name="ostree_chain_input_stream_new ()" link="ostree-ostree-chain-input-stream.html#ostree-chain-input-stream-new"/>
+ <keyword type="struct" name="struct OstreeChainInputStream" link="ostree-ostree-chain-input-stream.html#OstreeChainInputStream"/>
+ <keyword type="function" name="ostree_checksum_input_stream_new ()" link="ostree-ostree-checksum-input-stream.html#ostree-checksum-input-stream-new"/>
+ <keyword type="struct" name="struct OstreeChecksumInputStream" link="ostree-ostree-checksum-input-stream.html#OstreeChecksumInputStream"/>
+ <keyword type="function" name="ostree_content_writer_finish ()" link="ostree-ostree-content-writer.html#ostree-content-writer-finish"/>
+ <keyword type="function" name="ostree_deployment_hash ()" link="ostree-ostree-deployment.html#ostree-deployment-hash"/>
+ <keyword type="function" name="ostree_deployment_equal ()" link="ostree-ostree-deployment.html#ostree-deployment-equal"/>
+ <keyword type="function" name="ostree_deployment_new ()" link="ostree-ostree-deployment.html#ostree-deployment-new"/>
+ <keyword type="function" name="ostree_deployment_get_index ()" link="ostree-ostree-deployment.html#ostree-deployment-get-index"/>
+ <keyword type="function" name="ostree_deployment_get_osname ()" link="ostree-ostree-deployment.html#ostree-deployment-get-osname"/>
+ <keyword type="function" name="ostree_deployment_get_deployserial ()" link="ostree-ostree-deployment.html#ostree-deployment-get-deployserial"/>
+ <keyword type="function" name="ostree_deployment_get_csum ()" link="ostree-ostree-deployment.html#ostree-deployment-get-csum"/>
+ <keyword type="function" name="ostree_deployment_get_bootcsum ()" link="ostree-ostree-deployment.html#ostree-deployment-get-bootcsum"/>
+ <keyword type="function" name="ostree_deployment_get_bootserial ()" link="ostree-ostree-deployment.html#ostree-deployment-get-bootserial"/>
+ <keyword type="function" name="ostree_deployment_get_bootconfig ()" link="ostree-ostree-deployment.html#ostree-deployment-get-bootconfig"/>
+ <keyword type="function" name="ostree_deployment_get_origin ()" link="ostree-ostree-deployment.html#ostree-deployment-get-origin"/>
+ <keyword type="function" name="ostree_deployment_get_origin_relpath ()" link="ostree-ostree-deployment.html#ostree-deployment-get-origin-relpath"/>
+ <keyword type="function" name="ostree_deployment_get_unlocked ()" link="ostree-ostree-deployment.html#ostree-deployment-get-unlocked" since="2016.4"/>
+ <keyword type="function" name="ostree_deployment_is_pinned ()" link="ostree-ostree-deployment.html#ostree-deployment-is-pinned" since="2018.3"/>
+ <keyword type="function" name="ostree_deployment_is_staged ()" link="ostree-ostree-deployment.html#ostree-deployment-is-staged" since="2018.3"/>
+ <keyword type="function" name="ostree_deployment_set_index ()" link="ostree-ostree-deployment.html#ostree-deployment-set-index"/>
+ <keyword type="function" name="ostree_deployment_set_bootserial ()" link="ostree-ostree-deployment.html#ostree-deployment-set-bootserial"/>
+ <keyword type="function" name="ostree_deployment_set_bootconfig ()" link="ostree-ostree-deployment.html#ostree-deployment-set-bootconfig"/>
+ <keyword type="function" name="ostree_deployment_set_origin ()" link="ostree-ostree-deployment.html#ostree-deployment-set-origin"/>
+ <keyword type="function" name="ostree_deployment_origin_remove_transient_state ()" link="ostree-ostree-deployment.html#ostree-deployment-origin-remove-transient-state" since="2018.3"/>
+ <keyword type="function" name="ostree_deployment_clone ()" link="ostree-ostree-deployment.html#ostree-deployment-clone"/>
+ <keyword type="function" name="ostree_deployment_unlocked_state_to_string ()" link="ostree-ostree-deployment.html#ostree-deployment-unlocked-state-to-string" since="2016.4"/>
+ <keyword type="struct" name="OstreeDeployment" link="ostree-ostree-deployment.html#OstreeDeployment"/>
+ <keyword type="function" name="ostree_diff_item_ref ()" link="ostree-ostree-diff.html#ostree-diff-item-ref"/>
+ <keyword type="function" name="ostree_diff_item_unref ()" link="ostree-ostree-diff.html#ostree-diff-item-unref"/>
+ <keyword type="function" name="ostree_diff_dirs ()" link="ostree-ostree-diff.html#ostree-diff-dirs"/>
+ <keyword type="function" name="ostree_diff_dirs_with_options ()" link="ostree-ostree-diff.html#ostree-diff-dirs-with-options" since="2017.4"/>
+ <keyword type="function" name="ostree_diff_print ()" link="ostree-ostree-diff.html#ostree-diff-print"/>
+ <keyword type="enum" name="enum OstreeDiffFlags" link="ostree-ostree-diff.html#OstreeDiffFlags"/>
+ <keyword type="struct" name="struct OstreeDiffItem" link="ostree-ostree-diff.html#OstreeDiffItem"/>
+ <keyword type="function" name="ostree_kernel_args_free ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-free" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_new ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-new" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_cleanup ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-cleanup" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_replace_take ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-replace-take" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_replace ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-replace" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_replace_argv ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-replace-argv" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_append ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-append" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_append_argv ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-append-argv" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_append_argv_filtered ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-append-argv-filtered" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_append_if_missing ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-append-if-missing" since="2022.5"/>
+ <keyword type="function" name="ostree_kernel_args_new_replace ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-new-replace" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_delete ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-delete" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_delete_key_entry ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-delete-key-entry" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_append_proc_cmdline ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-append-proc-cmdline" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_parse_append ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-parse-append" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_get_last_value ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-get-last-value" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_from_string ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-from-string" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_to_strv ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-to-strv" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_to_string ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-to-string" since="2019.3"/>
+ <keyword type="function" name="ostree_kernel_args_contains ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-contains" since="2022.7"/>
+ <keyword type="function" name="ostree_kernel_args_delete_if_present ()" link="ostree-ostree-kernel-args.html#ostree-kernel-args-delete-if-present" since="2022.7"/>
+ <keyword type="struct" name="OstreeKernelArgs" link="ostree-ostree-kernel-args.html#OstreeKernelArgs"/>
+ <keyword type="function" name="ostree_collection_ref_new ()" link="ostree-ostree-ref.html#ostree-collection-ref-new" since="2018.6"/>
+ <keyword type="function" name="ostree_collection_ref_dup ()" link="ostree-ostree-ref.html#ostree-collection-ref-dup" since="2018.6"/>
+ <keyword type="function" name="ostree_collection_ref_free ()" link="ostree-ostree-ref.html#ostree-collection-ref-free" since="2018.6"/>
+ <keyword type="function" name="ostree_collection_ref_hash ()" link="ostree-ostree-ref.html#ostree-collection-ref-hash" since="2018.6"/>
+ <keyword type="function" name="ostree_collection_ref_equal ()" link="ostree-ostree-ref.html#ostree-collection-ref-equal" since="2018.6"/>
+ <keyword type="function" name="ostree_collection_ref_dupv ()" link="ostree-ostree-ref.html#ostree-collection-ref-dupv" since="2018.6"/>
+ <keyword type="function" name="ostree_collection_ref_freev ()" link="ostree-ostree-ref.html#ostree-collection-ref-freev" since="2018.6"/>
+ <keyword type="typedef" name="OstreeCollectionRefv" link="ostree-ostree-ref.html#OstreeCollectionRefv" since="2018.6"/>
+ <keyword type="function" name="ostree_remote_ref ()" link="ostree-ostree-remote.html#ostree-remote-ref" since="2018.6"/>
+ <keyword type="function" name="ostree_remote_unref ()" link="ostree-ostree-remote.html#ostree-remote-unref" since="2018.6"/>
+ <keyword type="function" name="ostree_remote_get_name ()" link="ostree-ostree-remote.html#ostree-remote-get-name" since="2018.6"/>
+ <keyword type="function" name="ostree_remote_get_url ()" link="ostree-ostree-remote.html#ostree-remote-get-url" since="2018.6"/>
+ <keyword type="struct" name="struct OstreeRemote" link="ostree-ostree-remote.html#OstreeRemote" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_file_ensure_resolved ()" link="ostree-ostree-repo-file.html#ostree-repo-file-ensure-resolved"/>
+ <keyword type="function" name="ostree_repo_file_get_xattrs ()" link="ostree-ostree-repo-file.html#ostree-repo-file-get-xattrs"/>
+ <keyword type="function" name="ostree_repo_file_get_repo ()" link="ostree-ostree-repo-file.html#ostree-repo-file-get-repo"/>
+ <keyword type="function" name="ostree_repo_file_get_root ()" link="ostree-ostree-repo-file.html#ostree-repo-file-get-root"/>
+ <keyword type="function" name="ostree_repo_file_tree_set_metadata ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-set-metadata"/>
+ <keyword type="function" name="ostree_repo_file_tree_get_contents_checksum ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-contents-checksum"/>
+ <keyword type="function" name="ostree_repo_file_tree_get_metadata_checksum ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-metadata-checksum"/>
+ <keyword type="function" name="ostree_repo_file_tree_get_contents ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-contents"/>
+ <keyword type="function" name="ostree_repo_file_tree_get_metadata ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-metadata"/>
+ <keyword type="function" name="ostree_repo_file_get_checksum ()" link="ostree-ostree-repo-file.html#ostree-repo-file-get-checksum"/>
+ <keyword type="function" name="ostree_repo_file_tree_find_child ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-find-child"/>
+ <keyword type="function" name="ostree_repo_file_tree_query_child ()" link="ostree-ostree-repo-file.html#ostree-repo-file-tree-query-child"/>
+ <keyword type="typedef" name="OstreeRepoFile" link="ostree-ostree-repo-file.html#OstreeRepoFile"/>
+ <keyword type="function" name="ostree_repo_finder_resolve_async ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-async" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_resolve_finish ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-finish" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_resolve_all_async ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-async" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_resolve_all_finish ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-finish" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_result_new ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-result-new" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_result_dup ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-result-dup" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_result_free ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-result-free" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_result_compare ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-result-compare" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_finder_result_freev ()" link="ostree-ostree-repo-finder.html#ostree-repo-finder-result-freev" since="2018.6"/>
+ <keyword type="struct" name="OstreeRepoFinder" link="ostree-ostree-repo-finder.html#OstreeRepoFinder"/>
+ <keyword type="typedef" name="OstreeRepoFinderResultv" link="ostree-ostree-repo-finder.html#OstreeRepoFinderResultv" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_find_remotes_async ()" link="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-async" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_find_remotes_finish ()" link="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-finish" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_pull_from_remotes_async ()" link="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_pull_from_remotes_finish ()" link="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-finish" since="2018.6"/>
+ <keyword type="function" name="ostree_repo_resolve_keyring_for_collection ()" link="ostree-ostree-repo-remote-finder.html#ostree-repo-resolve-keyring-for-collection" since="2018.6"/>
+ <keyword type="macro" name="OSTREE_REPO_METADATA_REF" link="ostree-ostree-repo-remote-finder.html#OSTREE-REPO-METADATA-REF:CAPS" since="2018.6"/>
+ <keyword type="macro" name="OSTREE_META_KEY_DEPLOY_COLLECTION_ID" link="ostree-ostree-repo-remote-finder.html#OSTREE-META-KEY-DEPLOY-COLLECTION-ID:CAPS" since="2018.9"/>
+ <keyword type="macro" name="OSTREE_CHECK_VERSION()" link="ostree-ostree-version.html#OSTREE-CHECK-VERSION:CAPS" since="2017.4"/>
+ <keyword type="macro" name="OSTREE_YEAR_VERSION" link="ostree-ostree-version.html#OSTREE-YEAR-VERSION:CAPS" since="2017.4"/>
+ <keyword type="macro" name="OSTREE_RELEASE_VERSION" link="ostree-ostree-version.html#OSTREE-RELEASE-VERSION:CAPS" since="2017.4"/>
+ <keyword type="macro" name="OSTREE_VERSION" link="ostree-ostree-version.html#OSTREE-VERSION:CAPS" since="2017.4"/>
+ <keyword type="macro" name="OSTREE_VERSION_S" link="ostree-ostree-version.html#OSTREE-VERSION-S:CAPS" since="2017.4"/>
+ <keyword type="macro" name="OSTREE_VERSION_HEX" link="ostree-ostree-version.html#OSTREE-VERSION-HEX:CAPS" since="2017.4"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_FILE" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-FILE:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_DIR_TREE" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-TREE:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_DIR_META" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-DIR-META:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_COMMIT" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-COMMIT:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_TOMBSTONE_COMMIT" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-TOMBSTONE-COMMIT:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_COMMIT_META" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-COMMIT-META:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_PAYLOAD_LINK" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-PAYLOAD-LINK:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_FILE_XATTRS" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-FILE-XATTRS:CAPS"/>
+ <keyword type="constant" name="OSTREE_OBJECT_TYPE_FILE_XATTRS_LINK" link="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-FILE-XATTRS-LINK:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_MODE_BARE" link="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_MODE_ARCHIVE" link="ostree-OstreeRepo.html#OSTREE-REPO-MODE-ARCHIVE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_MODE_ARCHIVE_Z2" link="ostree-OstreeRepo.html#OSTREE-REPO-MODE-ARCHIVE-Z2:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_MODE_BARE_USER" link="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE-USER:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_MODE_BARE_USER_ONLY" link="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE-USER-ONLY:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_MODE_BARE_SPLIT_XATTRS" link="ostree-OstreeRepo.html#OSTREE-REPO-MODE-BARE-SPLIT-XATTRS:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LOCK_SHARED" link="ostree-OstreeRepo.html#OSTREE-REPO-LOCK-SHARED:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LOCK_EXCLUSIVE" link="ostree-OstreeRepo.html#OSTREE-REPO-LOCK-EXCLUSIVE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_REMOTE_CHANGE_ADD" link="ostree-OstreeRepo.html#OSTREE-REPO-REMOTE-CHANGE-ADD:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS" link="ostree-OstreeRepo.html#OSTREE-REPO-REMOTE-CHANGE-ADD-IF-NOT-EXISTS:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_REMOTE_CHANGE_DELETE" link="ostree-OstreeRepo.html#OSTREE-REPO-REMOTE-CHANGE-DELETE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_REMOTE_CHANGE_DELETE_IF_EXISTS" link="ostree-OstreeRepo.html#OSTREE-REPO-REMOTE-CHANGE-DELETE-IF-EXISTS:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_REMOTE_CHANGE_REPLACE" link="ostree-OstreeRepo.html#OSTREE-REPO-REMOTE-CHANGE-REPLACE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_RESOLVE_REV_EXT_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-RESOLVE-REV-EXT-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_RESOLVE_REV_EXT_LOCAL_ONLY" link="ostree-OstreeRepo.html#OSTREE-REPO-RESOLVE-REV-EXT-LOCAL-ONLY:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_REFS_EXT_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-REFS-EXT-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_REFS_EXT_ALIASES" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-REFS-EXT-ALIASES:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_REMOTES" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-REFS-EXT-EXCLUDE-REMOTES:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_REFS_EXT_EXCLUDE_MIRRORS" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-REFS-EXT-EXCLUDE-MIRRORS:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_STATE_NORMAL" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-STATE-NORMAL:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_STATE_PARTIAL" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-STATE-PARTIAL:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_STATE_FSCK_PARTIAL" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-STATE-FSCK-PARTIAL:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_FILTER_ALLOW" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-FILTER-ALLOW:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_FILTER_SKIP" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-FILTER-SKIP:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-SKIP-XATTRS:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_GENERATE_SIZES" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-GENERATE-SIZES:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CANONICAL_PERMISSIONS" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-CANONICAL-PERMISSIONS:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_ERROR_ON_UNLABELED" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-ERROR-ON-UNLABELED:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CONSUME" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-CONSUME:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_MODIFIER_FLAGS_DEVINO_CANONICAL" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-MODIFIER-FLAGS-DEVINO-CANONICAL:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_CHECKOUT_MODE_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-CHECKOUT-MODE-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_CHECKOUT_MODE_USER" link="ostree-OstreeRepo.html#OSTREE-REPO-CHECKOUT-MODE-USER:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_CHECKOUT_OVERWRITE_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-CHECKOUT-OVERWRITE-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES" link="ostree-OstreeRepo.html#OSTREE-REPO-CHECKOUT-OVERWRITE-UNION-FILES:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_CHECKOUT_OVERWRITE_ADD_FILES" link="ostree-OstreeRepo.html#OSTREE-REPO-CHECKOUT-OVERWRITE-ADD-FILES:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_IDENTICAL" link="ostree-OstreeRepo.html#OSTREE-REPO-CHECKOUT-OVERWRITE-UNION-IDENTICAL:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_OBJECTS_LOOSE" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-LOOSE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_OBJECTS_PACKED" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-PACKED:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_OBJECTS_ALL" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-ALL:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_LIST_OBJECTS_NO_PARENTS" link="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-NO-PARENTS:CAPS"/>
+ <keyword type="constant" name="OSTREE_STATIC_DELTA_GENERATE_OPT_LOWLATENCY" link="ostree-OstreeRepo.html#OSTREE-STATIC-DELTA-GENERATE-OPT-LOWLATENCY:CAPS"/>
+ <keyword type="constant" name="OSTREE_STATIC_DELTA_GENERATE_OPT_MAJOR" link="ostree-OstreeRepo.html#OSTREE-STATIC-DELTA-GENERATE-OPT-MAJOR:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_TRAVERSE_FLAG_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-TRAVERSE-FLAG-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_TRAVERSE_FLAG_COMMIT_ONLY" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-TRAVERSE-FLAG-COMMIT-ONLY:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_ITER_RESULT_ERROR" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-ERROR:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_ITER_RESULT_END" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-END:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_ITER_RESULT_FILE" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-FILE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_COMMIT_ITER_RESULT_DIR" link="ostree-OstreeRepo.html#OSTREE-REPO-COMMIT-ITER-RESULT-DIR:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PRUNE_FLAGS_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE" link="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-NO-PRUNE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY" link="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-REFS-ONLY:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PRUNE_FLAGS_COMMIT_ONLY" link="ostree-OstreeRepo.html#OSTREE-REPO-PRUNE-FLAGS-COMMIT-ONLY:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PULL_FLAGS_NONE" link="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PULL_FLAGS_MIRROR" link="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-MIRROR:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY" link="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-COMMIT-ONLY:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PULL_FLAGS_UNTRUSTED" link="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-UNTRUSTED:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES" link="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-BAREUSERONLY-FILES:CAPS"/>
+ <keyword type="constant" name="OSTREE_REPO_PULL_FLAGS_TRUSTED_HTTP" link="ostree-OstreeRepo.html#OSTREE-REPO-PULL-FLAGS-TRUSTED-HTTP:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NONE" link="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN" link="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NOT_DEFAULT" link="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NOT-DEFAULT:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NO_CLEAN" link="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-NO-CLEAN:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN_PENDING" link="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN-PENDING:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN_ROLLBACK" link="ostree-Root-partition-mount-point.html#OSTREE-SYSROOT-SIMPLE-WRITE-DEPLOYMENT-FLAGS-RETAIN-ROLLBACK:CAPS"/>
+ <keyword type="constant" name="OSTREE_SEPOLICY_RESTORECON_FLAGS_NONE" link="ostree-SELinux-policy-management.html#OSTREE-SEPOLICY-RESTORECON-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_SEPOLICY_RESTORECON_FLAGS_ALLOW_NOLABEL" link="ostree-SELinux-policy-management.html#OSTREE-SEPOLICY-RESTORECON-FLAGS-ALLOW-NOLABEL:CAPS"/>
+ <keyword type="constant" name="OSTREE_SEPOLICY_RESTORECON_FLAGS_KEEP_EXISTING" link="ostree-SELinux-policy-management.html#OSTREE-SEPOLICY-RESTORECON-FLAGS-KEEP-EXISTING:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_UPGRADER_FLAGS_NONE" link="ostree-Simple-upgrade-class.html#OSTREE-SYSROOT-UPGRADER-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_UPGRADER_FLAGS_IGNORE_UNCONFIGURED" link="ostree-Simple-upgrade-class.html#OSTREE-SYSROOT-UPGRADER-FLAGS-IGNORE-UNCONFIGURED:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_UPGRADER_FLAGS_STAGE" link="ostree-Simple-upgrade-class.html#OSTREE-SYSROOT-UPGRADER-FLAGS-STAGE:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_UPGRADER_PULL_FLAGS_NONE" link="ostree-Simple-upgrade-class.html#OSTREE-SYSROOT-UPGRADER-PULL-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_UPGRADER_PULL_FLAGS_ALLOW_OLDER" link="ostree-Simple-upgrade-class.html#OSTREE-SYSROOT-UPGRADER-PULL-FLAGS-ALLOW-OLDER:CAPS"/>
+ <keyword type="constant" name="OSTREE_SYSROOT_UPGRADER_PULL_FLAGS_SYNTHETIC" link="ostree-Simple-upgrade-class.html#OSTREE-SYSROOT-UPGRADER-PULL-FLAGS-SYNTHETIC:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_ERROR_NO_SIGNATURE" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-ERROR-NO-SIGNATURE:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_ERROR_INVALID_SIGNATURE" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-ERROR-INVALID-SIGNATURE:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_ERROR_MISSING_KEY" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-ERROR-MISSING-KEY:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_ERROR_EXPIRED_SIGNATURE" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-ERROR-EXPIRED-SIGNATURE:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_ERROR_EXPIRED_KEY" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-ERROR-EXPIRED-KEY:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_ERROR_REVOKED_KEY" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-ERROR-REVOKED-KEY:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_VALID" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-VALID:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_SIG_EXPIRED" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-SIG-EXPIRED:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_KEY_EXPIRED" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-KEY-EXPIRED:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_KEY_REVOKED" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-KEY-REVOKED:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_KEY_MISSING" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-KEY-MISSING:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_FINGERPRINT" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-FINGERPRINT:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_TIMESTAMP" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-TIMESTAMP:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_EXP_TIMESTAMP" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-EXP-TIMESTAMP:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_PUBKEY_ALGO_NAME" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-PUBKEY-ALGO-NAME:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_HASH_ALGO_NAME" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-HASH-ALGO-NAME:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_USER_NAME" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-USER-NAME:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_USER_EMAIL" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-USER-EMAIL:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_FINGERPRINT_PRIMARY" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-FINGERPRINT-PRIMARY:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_KEY_EXP_TIMESTAMP" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-KEY-EXP-TIMESTAMP:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_ATTR_KEY_EXP_TIMESTAMP_PRIMARY" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-ATTR-KEY-EXP-TIMESTAMP-PRIMARY:CAPS"/>
+ <keyword type="constant" name="OSTREE_GPG_SIGNATURE_FORMAT_DEFAULT" link="ostree-GPG-signature-verification-results.html#OSTREE-GPG-SIGNATURE-FORMAT-DEFAULT:CAPS"/>
+ <keyword type="constant" name="OSTREE_DIFF_FLAGS_NONE" link="ostree-ostree-diff.html#OSTREE-DIFF-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="OSTREE_DIFF_FLAGS_IGNORE_XATTRS" link="ostree-ostree-diff.html#OSTREE-DIFF-FLAGS-IGNORE-XATTRS:CAPS"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.metadata-objects-total" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.metadata-objects-total"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.metadata-objects-written" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.metadata-objects-written"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.content-objects-total" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.content-objects-total"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.content-objects-written" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.content-objects-written"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.content-bytes-written" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.content-bytes-written"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.devino-cache-hits" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.devino-cache-hits"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.padding1" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.padding1"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.padding2" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.padding2"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.padding3" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.padding3"/>
+ <keyword type="member" name="OstreeRepoTransactionStats.padding4" link="ostree-OstreeRepo.html#OstreeRepoTransactionStats.padding4"/>
+ <keyword type="member" name="OstreeDeployment.index" link="ostree-ostree-deployment.html#OstreeDeployment.index"/>
+ <keyword type="member" name="OstreeDeployment.osname" link="ostree-ostree-deployment.html#OstreeDeployment.osname"/>
+ <keyword type="member" name="OstreeDeployment.csum" link="ostree-ostree-deployment.html#OstreeDeployment.csum"/>
+ <keyword type="member" name="OstreeDeployment.deployserial" link="ostree-ostree-deployment.html#OstreeDeployment.deployserial"/>
+ <keyword type="member" name="OstreeDeployment.bootcsum" link="ostree-ostree-deployment.html#OstreeDeployment.bootcsum"/>
+ <keyword type="member" name="OstreeDeployment.bootserial" link="ostree-ostree-deployment.html#OstreeDeployment.bootserial"/>
+ <keyword type="member" name="OstreeDeployment.bootconfig" link="ostree-ostree-deployment.html#OstreeDeployment.bootconfig"/>
+ <keyword type="member" name="OstreeDeployment.origin" link="ostree-ostree-deployment.html#OstreeDeployment.origin"/>
+ <keyword type="member" name="OstreeDeployment.unlocked" link="ostree-ostree-deployment.html#OstreeDeployment.unlocked"/>
+ <keyword type="member" name="OstreeDeployment.staged" link="ostree-ostree-deployment.html#OstreeDeployment.staged"/>
+ <keyword type="member" name="OstreeDeployment.overlay-initrds" link="ostree-ostree-deployment.html#OstreeDeployment.overlay-initrds"/>
+ <keyword type="member" name="OstreeDeployment.overlay-initrds-id" link="ostree-ostree-deployment.html#OstreeDeployment.overlay-initrds-id"/>
+ </functions>
+</book>
diff --git a/reference/reference.html b/reference/reference.html
new file mode 100644
index 00000000..7a8565b9
--- /dev/null
+++ b/reference/reference.html
@@ -0,0 +1,2210 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>API Reference: OSTree API references</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="OSTree API references">
+<link rel="up" href="index.html" title="OSTree API references">
+<link rel="prev" href="index.html" title="OSTree API references">
+<link rel="next" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">
+<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="index.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ostree-Core-repository-independent-functions.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="reference"></a>API Reference</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="ostree-Core-repository-independent-functions.html">Core repository-independent functions</a></span><span class="refpurpose"> — Create, validate, and convert core data types</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-OstreeRepo.html">OstreeRepo: Content-addressed object store</a></span><span class="refpurpose"> — A git-like storage system for operating system binaries</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-In-memory-modifiable-filesystem-tree.html">In-memory modifiable filesystem tree</a></span><span class="refpurpose"> — Modifiable filesystem tree</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Root-partition-mount-point.html">Root partition mount point</a></span><span class="refpurpose"> — Manage physical root filesystem</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Progress-notification-system-for-asynchronous-operations.html">Progress notification system for asynchronous operations</a></span><span class="refpurpose"> — Values representing progress</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-SELinux-policy-management.html">SELinux policy management</a></span><span class="refpurpose"> — Read SELinux policy and manage filesystem labels</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Simple-upgrade-class.html">Simple upgrade class</a></span><span class="refpurpose"> — Upgrade OSTree systems</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-GPG-signature-verification-results.html">GPG signature verification results</a></span><span class="refpurpose"> — Inspect detached GPG signatures</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-Signature-management.html">Signature management</a></span><span class="refpurpose"> — Sign and verify commits</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-bootconfig-parser.html">ostree-bootconfig-parser</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-chain-input-stream.html">ostree-chain-input-stream</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-checksum-input-stream.html">ostree-checksum-input-stream</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-content-writer.html">ostree-content-writer</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-deployment.html">ostree-deployment</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-diff.html">ostree-diff</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-kernel-args.html">ostree-kernel-args</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-ref.html">ostree-ref</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-remote.html">ostree-remote</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-repo-file.html">ostree-repo-file</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-repo-finder.html">ostree-repo-finder</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-repo-remote-finder.html">ostree-repo-remote-finder</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ostree-ostree-version.html">ostree-version</a></span><span class="refpurpose"> — ostree version checking</span>
+</dt>
+<dt><span class="index"><a href="reference.html#api-index-full">API Index</a></span></dt>
+</dl></div>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="api-index-full"></a>API Index</h2></div></div></div>
+<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#OstreeAsyncProgress" title="OstreeAsyncProgress">OstreeAsyncProgress</a>, typedef in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-copy-state" title="ostree_async_progress_copy_state ()">ostree_async_progress_copy_state</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-finish" title="ostree_async_progress_finish ()">ostree_async_progress_finish</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get" title="ostree_async_progress_get ()">ostree_async_progress_get</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-status" title="ostree_async_progress_get_status ()">ostree_async_progress_get_status</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-uint" title="ostree_async_progress_get_uint ()">ostree_async_progress_get_uint</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-uint64" title="ostree_async_progress_get_uint64 ()">ostree_async_progress_get_uint64</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-get-variant" title="ostree_async_progress_get_variant ()">ostree_async_progress_get_variant</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new" title="ostree_async_progress_new ()">ostree_async_progress_new</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-new-and-connect" title="ostree_async_progress_new_and_connect ()">ostree_async_progress_new_and_connect</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set" title="ostree_async_progress_set ()">ostree_async_progress_set</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-status" title="ostree_async_progress_set_status ()">ostree_async_progress_set_status</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-uint" title="ostree_async_progress_set_uint ()">ostree_async_progress_set_uint</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-uint64" title="ostree_async_progress_set_uint64 ()">ostree_async_progress_set_uint64</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html#ostree-async-progress-set-variant" title="ostree_async_progress_set_variant ()">ostree_async_progress_set_variant</a>, function in <a class="link" href="ostree-Progress-notification-system-for-asynchronous-operations.html" title="Progress notification system for asynchronous operations">Progress notification system for asynchronous operations</a>
+</dt>
+<dd></dd>
+<a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#OstreeBootconfigParser" title="OstreeBootconfigParser">OstreeBootconfigParser</a>, struct in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-clone" title="ostree_bootconfig_parser_clone ()">ostree_bootconfig_parser_clone</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-get" title="ostree_bootconfig_parser_get ()">ostree_bootconfig_parser_get</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-get-overlay-initrds" title="ostree_bootconfig_parser_get_overlay_initrds ()">ostree_bootconfig_parser_get_overlay_initrds</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-new" title="ostree_bootconfig_parser_new ()">ostree_bootconfig_parser_new</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-parse" title="ostree_bootconfig_parser_parse ()">ostree_bootconfig_parser_parse</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-parse-at" title="ostree_bootconfig_parser_parse_at ()">ostree_bootconfig_parser_parse_at</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-set" title="ostree_bootconfig_parser_set ()">ostree_bootconfig_parser_set</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-set-overlay-initrds" title="ostree_bootconfig_parser_set_overlay_initrds ()">ostree_bootconfig_parser_set_overlay_initrds</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-write" title="ostree_bootconfig_parser_write ()">ostree_bootconfig_parser_write</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-bootconfig-parser.html#ostree-bootconfig-parser-write-at" title="ostree_bootconfig_parser_write_at ()">ostree_bootconfig_parser_write_at</a>, function in <a class="link" href="ostree-ostree-bootconfig-parser.html" title="ostree-bootconfig-parser">ostree-bootconfig-parser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-break-hardlink" title="ostree_break_hardlink ()">ostree_break_hardlink</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxC"></a><h3 class="title">C</h3>
+<dt>
+<a class="link" href="ostree-ostree-chain-input-stream.html#OstreeChainInputStream" title="struct OstreeChainInputStream">OstreeChainInputStream</a>, struct in <a class="link" href="ostree-ostree-chain-input-stream.html" title="ostree-chain-input-stream">ostree-chain-input-stream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-chain-input-stream.html#ostree-chain-input-stream-new" title="ostree_chain_input_stream_new ()">ostree_chain_input_stream_new</a>, function in <a class="link" href="ostree-ostree-chain-input-stream.html" title="ostree-chain-input-stream">ostree-chain-input-stream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-checksum-input-stream.html#OstreeChecksumInputStream" title="struct OstreeChecksumInputStream">OstreeChecksumInputStream</a>, struct in <a class="link" href="ostree-ostree-checksum-input-stream.html" title="ostree-checksum-input-stream">ostree-checksum-input-stream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-from-bytes" title="ostree_checksum_b64_from_bytes ()">ostree_checksum_b64_from_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-inplace-from-bytes" title="ostree_checksum_b64_inplace_from_bytes ()">ostree_checksum_b64_inplace_from_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-inplace-to-bytes" title="ostree_checksum_b64_inplace_to_bytes ()">ostree_checksum_b64_inplace_to_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-b64-to-bytes" title="ostree_checksum_b64_to_bytes ()">ostree_checksum_b64_to_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek" title="ostree_checksum_bytes_peek ()">ostree_checksum_bytes_peek</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-bytes-peek-validate" title="ostree_checksum_bytes_peek_validate ()">ostree_checksum_bytes_peek_validate</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file" title="ostree_checksum_file ()">ostree_checksum_file</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async" title="ostree_checksum_file_async ()">ostree_checksum_file_async</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-async-finish" title="ostree_checksum_file_async_finish ()">ostree_checksum_file_async_finish</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-at" title="ostree_checksum_file_at ()">ostree_checksum_file_at</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-file-from-input" title="ostree_checksum_file_from_input ()">ostree_checksum_file_from_input</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-from-bytes" title="ostree_checksum_from_bytes ()">ostree_checksum_from_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-from-bytes-v" title="ostree_checksum_from_bytes_v ()">ostree_checksum_from_bytes_v</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-inplace-from-bytes" title="ostree_checksum_inplace_from_bytes ()">ostree_checksum_inplace_from_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-inplace-to-bytes" title="ostree_checksum_inplace_to_bytes ()">ostree_checksum_inplace_to_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-checksum-input-stream.html#ostree-checksum-input-stream-new" title="ostree_checksum_input_stream_new ()">ostree_checksum_input_stream_new</a>, function in <a class="link" href="ostree-ostree-checksum-input-stream.html" title="ostree-checksum-input-stream">ostree-checksum-input-stream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-to-bytes" title="ostree_checksum_to_bytes ()">ostree_checksum_to_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-checksum-to-bytes-v" title="ostree_checksum_to_bytes_v ()">ostree_checksum_to_bytes_v</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-version.html#OSTREE-CHECK-VERSION:CAPS" title="OSTREE_CHECK_VERSION()">OSTREE_CHECK_VERSION</a>, macro in <a class="link" href="ostree-ostree-version.html" title="ostree-version">ostree-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-check-version" title="ostree_check_version ()">ostree_check_version</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-cmp-checksum-bytes" title="ostree_cmp_checksum_bytes ()">ostree_cmp_checksum_bytes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#OstreeCollectionRefv" title="OstreeCollectionRefv">OstreeCollectionRefv</a>, typedef in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-dup" title="ostree_collection_ref_dup ()">ostree_collection_ref_dup</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-dupv" title="ostree_collection_ref_dupv ()">ostree_collection_ref_dupv</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-equal" title="ostree_collection_ref_equal ()">ostree_collection_ref_equal</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-free" title="ostree_collection_ref_free ()">ostree_collection_ref_free</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-freev" title="ostree_collection_ref_freev ()">ostree_collection_ref_freev</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-hash" title="ostree_collection_ref_hash ()">ostree_collection_ref_hash</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-ref.html#ostree-collection-ref-new" title="ostree_collection_ref_new ()">ostree_collection_ref_new</a>, function in <a class="link" href="ostree-ostree-ref.html" title="ostree-ref">ostree-ref</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-content-checksum" title="ostree_commit_get_content_checksum ()">ostree_commit_get_content_checksum</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-object-sizes" title="ostree_commit_get_object_sizes ()">ostree_commit_get_object_sizes</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-parent" title="ostree_commit_get_parent ()">ostree_commit_get_parent</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-get-timestamp" title="ostree_commit_get_timestamp ()">ostree_commit_get_timestamp</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-COMMIT-GVARIANT-FORMAT:CAPS" title="OSTREE_COMMIT_GVARIANT_FORMAT">OSTREE_COMMIT_GVARIANT_FORMAT</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-COMMIT-GVARIANT-STRING:CAPS" title="OSTREE_COMMIT_GVARIANT_STRING">OSTREE_COMMIT_GVARIANT_STRING</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-metadata-for-bootable" title="ostree_commit_metadata_for_bootable ()">ostree_commit_metadata_for_bootable</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-copy" title="ostree_commit_sizes_entry_copy ()">ostree_commit_sizes_entry_copy</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-free" title="ostree_commit_sizes_entry_free ()">ostree_commit_sizes_entry_free</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-commit-sizes-entry-new" title="ostree_commit_sizes_entry_new ()">ostree_commit_sizes_entry_new</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-file-parse" title="ostree_content_file_parse ()">ostree_content_file_parse</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-file-parse-at" title="ostree_content_file_parse_at ()">ostree_content_file_parse_at</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-content-stream-parse" title="ostree_content_stream_parse ()">ostree_content_stream_parse</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-content-writer.html#ostree-content-writer-finish" title="ostree_content_writer_finish ()">ostree_content_writer_finish</a>, function in <a class="link" href="ostree-ostree-content-writer.html" title="ostree-content-writer">ostree-content-writer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-create-directory-metadata" title="ostree_create_directory_metadata ()">ostree_create_directory_metadata</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#OstreeDeployment" title="OstreeDeployment">OstreeDeployment</a>, struct in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-clone" title="ostree_deployment_clone ()">ostree_deployment_clone</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-equal" title="ostree_deployment_equal ()">ostree_deployment_equal</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-bootconfig" title="ostree_deployment_get_bootconfig ()">ostree_deployment_get_bootconfig</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-bootcsum" title="ostree_deployment_get_bootcsum ()">ostree_deployment_get_bootcsum</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-bootserial" title="ostree_deployment_get_bootserial ()">ostree_deployment_get_bootserial</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-csum" title="ostree_deployment_get_csum ()">ostree_deployment_get_csum</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-deployserial" title="ostree_deployment_get_deployserial ()">ostree_deployment_get_deployserial</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-index" title="ostree_deployment_get_index ()">ostree_deployment_get_index</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-origin" title="ostree_deployment_get_origin ()">ostree_deployment_get_origin</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-origin-relpath" title="ostree_deployment_get_origin_relpath ()">ostree_deployment_get_origin_relpath</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-osname" title="ostree_deployment_get_osname ()">ostree_deployment_get_osname</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-get-unlocked" title="ostree_deployment_get_unlocked ()">ostree_deployment_get_unlocked</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-hash" title="ostree_deployment_hash ()">ostree_deployment_hash</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-is-pinned" title="ostree_deployment_is_pinned ()">ostree_deployment_is_pinned</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-is-staged" title="ostree_deployment_is_staged ()">ostree_deployment_is_staged</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-new" title="ostree_deployment_new ()">ostree_deployment_new</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-origin-remove-transient-state" title="ostree_deployment_origin_remove_transient_state ()">ostree_deployment_origin_remove_transient_state</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-bootconfig" title="ostree_deployment_set_bootconfig ()">ostree_deployment_set_bootconfig</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-bootserial" title="ostree_deployment_set_bootserial ()">ostree_deployment_set_bootserial</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-index" title="ostree_deployment_set_index ()">ostree_deployment_set_index</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-set-origin" title="ostree_deployment_set_origin ()">ostree_deployment_set_origin</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-deployment.html#ostree-deployment-unlocked-state-to-string" title="ostree_deployment_unlocked_state_to_string ()">ostree_deployment_unlocked_state_to_string</a>, function in <a class="link" href="ostree-ostree-deployment.html" title="ostree-deployment">ostree-deployment</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#OstreeDiffFlags" title="enum OstreeDiffFlags">OstreeDiffFlags</a>, enum in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#OstreeDiffItem" title="struct OstreeDiffItem">OstreeDiffItem</a>, struct in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-dirs" title="ostree_diff_dirs ()">ostree_diff_dirs</a>, function in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-dirs-with-options" title="ostree_diff_dirs_with_options ()">ostree_diff_dirs_with_options</a>, function in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-item-ref" title="ostree_diff_item_ref ()">ostree_diff_item_ref</a>, function in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-item-unref" title="ostree_diff_item_unref ()">ostree_diff_item_unref</a>, function in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-diff.html#ostree-diff-print" title="ostree_diff_print ()">ostree_diff_print</a>, function in <a class="link" href="ostree-ostree-diff.html" title="ostree-diff">ostree-diff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-DIRMETA-GVARIANT-FORMAT:CAPS" title="OSTREE_DIRMETA_GVARIANT_FORMAT">OSTREE_DIRMETA_GVARIANT_FORMAT</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-DIRMETA-GVARIANT-STRING:CAPS" title="OSTREE_DIRMETA_GVARIANT_STRING">OSTREE_DIRMETA_GVARIANT_STRING</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxF"></a><h3 class="title">F</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-FILEMETA-GVARIANT-FORMAT:CAPS" title="OSTREE_FILEMETA_GVARIANT_FORMAT">OSTREE_FILEMETA_GVARIANT_FORMAT</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-FILEMETA-GVARIANT-STRING:CAPS" title="OSTREE_FILEMETA_GVARIANT_STRING">OSTREE_FILEMETA_GVARIANT_STRING</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-fs-get-all-xattrs" title="ostree_fs_get_all_xattrs ()">ostree_fs_get_all_xattrs</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-fs-get-all-xattrs-at" title="ostree_fs_get_all_xattrs_at ()">ostree_fs_get_all_xattrs_at</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxG"></a><h3 class="title">G</h3>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgError" title="enum OstreeGpgError">OstreeGpgError</a>, enum in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureAttr" title="enum OstreeGpgSignatureAttr">OstreeGpgSignatureAttr</a>, enum in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgSignatureFormatFlags" title="enum OstreeGpgSignatureFormatFlags">OstreeGpgSignatureFormatFlags</a>, enum in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#OstreeGpgVerifyResult" title="OstreeGpgVerifyResult">OstreeGpgVerifyResult</a>, typedef in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-all" title="ostree_gpg_verify_result_count_all ()">ostree_gpg_verify_result_count_all</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-count-valid" title="ostree_gpg_verify_result_count_valid ()">ostree_gpg_verify_result_count_valid</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe" title="ostree_gpg_verify_result_describe ()">ostree_gpg_verify_result_describe</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-describe-variant" title="ostree_gpg_verify_result_describe_variant ()">ostree_gpg_verify_result_describe_variant</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get" title="ostree_gpg_verify_result_get ()">ostree_gpg_verify_result_get</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-get-all" title="ostree_gpg_verify_result_get_all ()">ostree_gpg_verify_result_get_all</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-lookup" title="ostree_gpg_verify_result_lookup ()">ostree_gpg_verify_result_lookup</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-GPG-signature-verification-results.html#ostree-gpg-verify-result-require-valid-signature" title="ostree_gpg_verify_result_require_valid_signature ()">ostree_gpg_verify_result_require_valid_signature</a>, function in <a class="link" href="ostree-GPG-signature-verification-results.html" title="GPG signature verification results">GPG signature verification results</a>
+</dt>
+<dd></dd>
+<a name="idxH"></a><h3 class="title">H</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-hash-object-name" title="ostree_hash_object_name ()">ostree_hash_object_name</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxK"></a><h3 class="title">K</h3>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#OstreeKernelArgs" title="OstreeKernelArgs">OstreeKernelArgs</a>, struct in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append" title="ostree_kernel_args_append ()">ostree_kernel_args_append</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-argv" title="ostree_kernel_args_append_argv ()">ostree_kernel_args_append_argv</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-argv-filtered" title="ostree_kernel_args_append_argv_filtered ()">ostree_kernel_args_append_argv_filtered</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-if-missing" title="ostree_kernel_args_append_if_missing ()">ostree_kernel_args_append_if_missing</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-append-proc-cmdline" title="ostree_kernel_args_append_proc_cmdline ()">ostree_kernel_args_append_proc_cmdline</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-cleanup" title="ostree_kernel_args_cleanup ()">ostree_kernel_args_cleanup</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-contains" title="ostree_kernel_args_contains ()">ostree_kernel_args_contains</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-delete" title="ostree_kernel_args_delete ()">ostree_kernel_args_delete</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-delete-if-present" title="ostree_kernel_args_delete_if_present ()">ostree_kernel_args_delete_if_present</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-delete-key-entry" title="ostree_kernel_args_delete_key_entry ()">ostree_kernel_args_delete_key_entry</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-free" title="ostree_kernel_args_free ()">ostree_kernel_args_free</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-from-string" title="ostree_kernel_args_from_string ()">ostree_kernel_args_from_string</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-get-last-value" title="ostree_kernel_args_get_last_value ()">ostree_kernel_args_get_last_value</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-new" title="ostree_kernel_args_new ()">ostree_kernel_args_new</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-new-replace" title="ostree_kernel_args_new_replace ()">ostree_kernel_args_new_replace</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-parse-append" title="ostree_kernel_args_parse_append ()">ostree_kernel_args_parse_append</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-replace" title="ostree_kernel_args_replace ()">ostree_kernel_args_replace</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-replace-argv" title="ostree_kernel_args_replace_argv ()">ostree_kernel_args_replace_argv</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-replace-take" title="ostree_kernel_args_replace_take ()">ostree_kernel_args_replace_take</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-to-string" title="ostree_kernel_args_to_string ()">ostree_kernel_args_to_string</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-kernel-args.html#ostree-kernel-args-to-strv" title="ostree_kernel_args_to_strv ()">ostree_kernel_args_to_strv</a>, function in <a class="link" href="ostree-ostree-kernel-args.html" title="ostree-kernel-args">ostree-kernel-args</a>
+</dt>
+<dd></dd>
+<a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-MAX-METADATA-SIZE:CAPS" title="OSTREE_MAX_METADATA_SIZE">OSTREE_MAX_METADATA_SIZE</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-MAX-METADATA-WARN-SIZE:CAPS" title="OSTREE_MAX_METADATA_WARN_SIZE">OSTREE_MAX_METADATA_WARN_SIZE</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-metadata-variant-type" title="ostree_metadata_variant_type ()">ostree_metadata_variant_type</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#OSTREE-META-KEY-DEPLOY-COLLECTION-ID:CAPS" title="OSTREE_META_KEY_DEPLOY_COLLECTION_ID">OSTREE_META_KEY_DEPLOY_COLLECTION_ID</a>, macro in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#OstreeMutableTree" title="OstreeMutableTree">OstreeMutableTree</a>, typedef in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-check-error" title="ostree_mutable_tree_check_error ()">ostree_mutable_tree_check_error</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-ensure-dir" title="ostree_mutable_tree_ensure_dir ()">ostree_mutable_tree_ensure_dir</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-ensure-parent-dirs" title="ostree_mutable_tree_ensure_parent_dirs ()">ostree_mutable_tree_ensure_parent_dirs</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-fill-empty-from-dirtree" title="ostree_mutable_tree_fill_empty_from_dirtree ()">ostree_mutable_tree_fill_empty_from_dirtree</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-contents-checksum" title="ostree_mutable_tree_get_contents_checksum ()">ostree_mutable_tree_get_contents_checksum</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-files" title="ostree_mutable_tree_get_files ()">ostree_mutable_tree_get_files</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-metadata-checksum" title="ostree_mutable_tree_get_metadata_checksum ()">ostree_mutable_tree_get_metadata_checksum</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-get-subdirs" title="ostree_mutable_tree_get_subdirs ()">ostree_mutable_tree_get_subdirs</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-lookup" title="ostree_mutable_tree_lookup ()">ostree_mutable_tree_lookup</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new" title="ostree_mutable_tree_new ()">ostree_mutable_tree_new</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new-from-checksum" title="ostree_mutable_tree_new_from_checksum ()">ostree_mutable_tree_new_from_checksum</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-new-from-commit" title="ostree_mutable_tree_new_from_commit ()">ostree_mutable_tree_new_from_commit</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-remove" title="ostree_mutable_tree_remove ()">ostree_mutable_tree_remove</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-replace-file" title="ostree_mutable_tree_replace_file ()">ostree_mutable_tree_replace_file</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-set-contents-checksum" title="ostree_mutable_tree_set_contents_checksum ()">ostree_mutable_tree_set_contents_checksum</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-set-metadata-checksum" title="ostree_mutable_tree_set_metadata_checksum ()">ostree_mutable_tree_set_metadata_checksum</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html#ostree-mutable-tree-walk" title="ostree_mutable_tree_walk ()">ostree_mutable_tree_walk</a>, function in <a class="link" href="ostree-In-memory-modifiable-filesystem-tree.html" title="In-memory modifiable filesystem tree">In-memory modifiable filesystem tree</a>
+</dt>
+<dd></dd>
+<a name="idxO"></a><h3 class="title">O</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OstreeObjectType" title="enum OstreeObjectType">OstreeObjectType</a>, enum in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-from-string" title="ostree_object_from_string ()">ostree_object_from_string</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-deserialize" title="ostree_object_name_deserialize ()">ostree_object_name_deserialize</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-name-serialize" title="ostree_object_name_serialize ()">ostree_object_name_serialize</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-to-string" title="ostree_object_to_string ()">ostree_object_to_string</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-type-from-string" title="ostree_object_type_from_string ()">ostree_object_type_from_string</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-IS-META:CAPS" title="OSTREE_OBJECT_TYPE_IS_META()">OSTREE_OBJECT_TYPE_IS_META</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-OBJECT-TYPE-LAST:CAPS" title="OSTREE_OBJECT_TYPE_LAST">OSTREE_OBJECT_TYPE_LAST</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-object-type-to-string" title="ostree_object_type_to_string ()">ostree_object_type_to_string</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxP"></a><h3 class="title">P</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-parse-refspec" title="ostree_parse_refspec ()">ostree_parse_refspec</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxR"></a><h3 class="title">R</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream" title="ostree_raw_file_to_archive_z2_stream ()">ostree_raw_file_to_archive_z2_stream</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-archive-z2-stream-with-options" title="ostree_raw_file_to_archive_z2_stream_with_options ()">ostree_raw_file_to_archive_z2_stream_with_options</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-raw-file-to-content-stream" title="ostree_raw_file_to_content_stream ()">ostree_raw_file_to_content_stream</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-version.html#OSTREE-RELEASE-VERSION:CAPS" title="OSTREE_RELEASE_VERSION">OSTREE_RELEASE_VERSION</a>, macro in <a class="link" href="ostree-ostree-version.html" title="ostree-version">ostree-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-remote.html#OstreeRemote" title="struct OstreeRemote">OstreeRemote</a>, struct in <a class="link" href="ostree-ostree-remote.html" title="ostree-remote">ostree-remote</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-get-name" title="ostree_remote_get_name ()">ostree_remote_get_name</a>, function in <a class="link" href="ostree-ostree-remote.html" title="ostree-remote">ostree-remote</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-get-url" title="ostree_remote_get_url ()">ostree_remote_get_url</a>, function in <a class="link" href="ostree-ostree-remote.html" title="ostree-remote">ostree-remote</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-ref" title="ostree_remote_ref ()">ostree_remote_ref</a>, function in <a class="link" href="ostree-ostree-remote.html" title="ostree-remote">ostree-remote</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-remote.html#ostree-remote-unref" title="ostree_remote_unref ()">ostree_remote_unref</a>, function in <a class="link" href="ostree-ostree-remote.html" title="ostree-remote">ostree-remote</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepo" title="OstreeRepo">OstreeRepo</a>, typedef in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoAutoLock" title="OstreeRepoAutoLock">OstreeRepoAutoLock</a>, typedef in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCheckoutMode" title="enum OstreeRepoCheckoutMode">OstreeRepoCheckoutMode</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCheckoutOverwriteMode" title="enum OstreeRepoCheckoutOverwriteMode">OstreeRepoCheckoutOverwriteMode</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilter" title="OstreeRepoCommitFilter ()">OstreeRepoCommitFilter</a>, user_function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitFilterResult" title="enum OstreeRepoCommitFilterResult">OstreeRepoCommitFilterResult</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitIterResult" title="enum OstreeRepoCommitIterResult">OstreeRepoCommitIterResult</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifier" title="OstreeRepoCommitModifier">OstreeRepoCommitModifier</a>, typedef in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifierFlags" title="enum OstreeRepoCommitModifierFlags">OstreeRepoCommitModifierFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitModifierXattrCallback" title="OstreeRepoCommitModifierXattrCallback ()">OstreeRepoCommitModifierXattrCallback</a>, user_function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitState" title="enum OstreeRepoCommitState">OstreeRepoCommitState</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoCommitTraverseFlags" title="enum OstreeRepoCommitTraverseFlags">OstreeRepoCommitTraverseFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#OstreeRepoFile" title="OstreeRepoFile">OstreeRepoFile</a>, typedef in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinder" title="OstreeRepoFinder">OstreeRepoFinder</a>, struct in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+OstreeRepoFinderAvahi, struct in OstreeRepoFinderAvahi
+</dt>
+<dd></dd>
+<dt>
+OstreeRepoFinderConfig, struct in OstreeRepoFinderConfig
+</dt>
+<dd></dd>
+<dt>
+OstreeRepoFinderMount, struct in OstreeRepoFinderMount
+</dt>
+<dd></dd>
+<dt>
+OstreeRepoFinderOverride, struct in OstreeRepoFinderOverride
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#OstreeRepoFinderResultv" title="OstreeRepoFinderResultv">OstreeRepoFinderResultv</a>, typedef in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoListObjectsFlags" title="enum OstreeRepoListObjectsFlags">OstreeRepoListObjectsFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoListRefsExtFlags" title="enum OstreeRepoListRefsExtFlags">OstreeRepoListRefsExtFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoLockType" title="enum OstreeRepoLockType">OstreeRepoLockType</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoMode" title="enum OstreeRepoMode">OstreeRepoMode</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoPruneFlags" title="enum OstreeRepoPruneFlags">OstreeRepoPruneFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoPullFlags" title="enum OstreeRepoPullFlags">OstreeRepoPullFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoRemoteChange" title="enum OstreeRepoRemoteChange">OstreeRepoRemoteChange</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoResolveRevExtFlags" title="enum OstreeRepoResolveRevExtFlags">OstreeRepoResolveRevExtFlags</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeRepoTransactionStats" title="struct OstreeRepoTransactionStats">OstreeRepoTransactionStats</a>, struct in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-abort-transaction" title="ostree_repo_abort_transaction ()">ostree_repo_abort_transaction</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-add-gpg-signature-summary" title="ostree_repo_add_gpg_signature_summary ()">ostree_repo_add_gpg_signature_summary</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-append-gpg-signature" title="ostree_repo_append_gpg_signature ()">ostree_repo_append_gpg_signature</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-cleanup" title="ostree_repo_auto_lock_cleanup ()">ostree_repo_auto_lock_cleanup</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-auto-lock-push" title="ostree_repo_auto_lock_push ()">ostree_repo_auto_lock_push</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at" title="ostree_repo_checkout_at ()">ostree_repo_checkout_at</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-at-options-set-devino" title="ostree_repo_checkout_at_options_set_devino ()">ostree_repo_checkout_at_options_set_devino</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-gc" title="ostree_repo_checkout_gc ()">ostree_repo_checkout_gc</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree" title="ostree_repo_checkout_tree ()">ostree_repo_checkout_tree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-checkout-tree-at" title="ostree_repo_checkout_tree_at ()">ostree_repo_checkout_tree_at</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-new" title="ostree_repo_commit_modifier_new ()">ostree_repo_commit_modifier_new</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-ref" title="ostree_repo_commit_modifier_ref ()">ostree_repo_commit_modifier_ref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-devino-cache" title="ostree_repo_commit_modifier_set_devino_cache ()">ostree_repo_commit_modifier_set_devino_cache</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy" title="ostree_repo_commit_modifier_set_sepolicy ()">ostree_repo_commit_modifier_set_sepolicy</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-sepolicy-from-commit" title="ostree_repo_commit_modifier_set_sepolicy_from_commit ()">ostree_repo_commit_modifier_set_sepolicy_from_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-set-xattr-callback" title="ostree_repo_commit_modifier_set_xattr_callback ()">ostree_repo_commit_modifier_set_xattr_callback</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-modifier-unref" title="ostree_repo_commit_modifier_unref ()">ostree_repo_commit_modifier_unref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-transaction" title="ostree_repo_commit_transaction ()">ostree_repo_commit_transaction</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-cleanup" title="ostree_repo_commit_traverse_iter_cleanup ()">ostree_repo_commit_traverse_iter_cleanup</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-clear" title="ostree_repo_commit_traverse_iter_clear ()">ostree_repo_commit_traverse_iter_clear</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-dir" title="ostree_repo_commit_traverse_iter_get_dir ()">ostree_repo_commit_traverse_iter_get_dir</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-get-file" title="ostree_repo_commit_traverse_iter_get_file ()">ostree_repo_commit_traverse_iter_get_file</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-init-commit" title="ostree_repo_commit_traverse_iter_init_commit ()">ostree_repo_commit_traverse_iter_init_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-init-dirtree" title="ostree_repo_commit_traverse_iter_init_dirtree ()">ostree_repo_commit_traverse_iter_init_dirtree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-commit-traverse-iter-next" title="ostree_repo_commit_traverse_iter_next ()">ostree_repo_commit_traverse_iter_next</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-copy-config" title="ostree_repo_copy_config ()">ostree_repo_copy_config</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-create" title="ostree_repo_create ()">ostree_repo_create</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-create-at" title="ostree_repo_create_at ()">ostree_repo_create_at</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-delete-object" title="ostree_repo_delete_object ()">ostree_repo_delete_object</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-get-type" title="ostree_repo_devino_cache_get_type ()">ostree_repo_devino_cache_get_type</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-new" title="ostree_repo_devino_cache_new ()">ostree_repo_devino_cache_new</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-ref" title="ostree_repo_devino_cache_ref ()">ostree_repo_devino_cache_ref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-devino-cache-unref" title="ostree_repo_devino_cache_unref ()">ostree_repo_devino_cache_unref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-equal" title="ostree_repo_equal ()">ostree_repo_equal</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-export-tree-to-archive" title="ostree_repo_export_tree_to_archive ()">ostree_repo_export_tree_to_archive</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-ensure-resolved" title="ostree_repo_file_ensure_resolved ()">ostree_repo_file_ensure_resolved</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-checksum" title="ostree_repo_file_get_checksum ()">ostree_repo_file_get_checksum</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-repo" title="ostree_repo_file_get_repo ()">ostree_repo_file_get_repo</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-root" title="ostree_repo_file_get_root ()">ostree_repo_file_get_root</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-get-xattrs" title="ostree_repo_file_get_xattrs ()">ostree_repo_file_get_xattrs</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-find-child" title="ostree_repo_file_tree_find_child ()">ostree_repo_file_tree_find_child</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-contents" title="ostree_repo_file_tree_get_contents ()">ostree_repo_file_tree_get_contents</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-contents-checksum" title="ostree_repo_file_tree_get_contents_checksum ()">ostree_repo_file_tree_get_contents_checksum</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-metadata" title="ostree_repo_file_tree_get_metadata ()">ostree_repo_file_tree_get_metadata</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-get-metadata-checksum" title="ostree_repo_file_tree_get_metadata_checksum ()">ostree_repo_file_tree_get_metadata_checksum</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-query-child" title="ostree_repo_file_tree_query_child ()">ostree_repo_file_tree_query_child</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-file.html#ostree-repo-file-tree-set-metadata" title="ostree_repo_file_tree_set_metadata ()">ostree_repo_file_tree_set_metadata</a>, function in <a class="link" href="ostree-ostree-repo-file.html" title="ostree-repo-file">ostree-repo-file</a>
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_avahi_new, function in OstreeRepoFinderAvahi
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_avahi_start, function in OstreeRepoFinderAvahi
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_avahi_stop, function in OstreeRepoFinderAvahi
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_config_new, function in OstreeRepoFinderConfig
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_mount_new, function in OstreeRepoFinderMount
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_override_add_uri, function in OstreeRepoFinderOverride
+</dt>
+<dd></dd>
+<dt>
+ostree_repo_finder_override_new, function in OstreeRepoFinderOverride
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-async" title="ostree_repo_finder_resolve_all_async ()">ostree_repo_finder_resolve_all_async</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-all-finish" title="ostree_repo_finder_resolve_all_finish ()">ostree_repo_finder_resolve_all_finish</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-async" title="ostree_repo_finder_resolve_async ()">ostree_repo_finder_resolve_async</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-resolve-finish" title="ostree_repo_finder_resolve_finish ()">ostree_repo_finder_resolve_finish</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-compare" title="ostree_repo_finder_result_compare ()">ostree_repo_finder_result_compare</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-dup" title="ostree_repo_finder_result_dup ()">ostree_repo_finder_result_dup</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-free" title="ostree_repo_finder_result_free ()">ostree_repo_finder_result_free</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-freev" title="ostree_repo_finder_result_freev ()">ostree_repo_finder_result_freev</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-finder.html#ostree-repo-finder-result-new" title="ostree_repo_finder_result_new ()">ostree_repo_finder_result_new</a>, function in <a class="link" href="ostree-ostree-repo-finder.html" title="ostree-repo-finder">ostree-repo-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-async" title="ostree_repo_find_remotes_async ()">ostree_repo_find_remotes_async</a>, function in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-find-remotes-finish" title="ostree_repo_find_remotes_finish ()">ostree_repo_find_remotes_finish</a>, function in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-fsck-object" title="ostree_repo_fsck_object ()">ostree_repo_fsck_object</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-bootloader" title="ostree_repo_get_bootloader ()">ostree_repo_get_bootloader</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-collection-id" title="ostree_repo_get_collection_id ()">ostree_repo_get_collection_id</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-config" title="ostree_repo_get_config ()">ostree_repo_get_config</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-default-repo-finders" title="ostree_repo_get_default_repo_finders ()">ostree_repo_get_default_repo_finders</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-dfd" title="ostree_repo_get_dfd ()">ostree_repo_get_dfd</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-disable-fsync" title="ostree_repo_get_disable_fsync ()">ostree_repo_get_disable_fsync</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-min-free-space-bytes" title="ostree_repo_get_min_free_space_bytes ()">ostree_repo_get_min_free_space_bytes</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-mode" title="ostree_repo_get_mode ()">ostree_repo_get_mode</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-parent" title="ostree_repo_get_parent ()">ostree_repo_get_parent</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-path" title="ostree_repo_get_path ()">ostree_repo_get_path</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-remote-boolean-option" title="ostree_repo_get_remote_boolean_option ()">ostree_repo_get_remote_boolean_option</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-remote-list-option" title="ostree_repo_get_remote_list_option ()">ostree_repo_get_remote_list_option</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-get-remote-option" title="ostree_repo_get_remote_option ()">ostree_repo_get_remote_option</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-gpg-sign-data" title="ostree_repo_gpg_sign_data ()">ostree_repo_gpg_sign_data</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-gpg-verify-data" title="ostree_repo_gpg_verify_data ()">ostree_repo_gpg_verify_data</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-hash" title="ostree_repo_hash ()">ostree_repo_hash</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-has-object" title="ostree_repo_has_object ()">ostree_repo_has_object</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-import-archive-to-mtree" title="ostree_repo_import_archive_to_mtree ()">ostree_repo_import_archive_to_mtree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-import-object-from" title="ostree_repo_import_object_from ()">ostree_repo_import_object_from</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-import-object-from-with-trust" title="ostree_repo_import_object_from_with_trust ()">ostree_repo_import_object_from_with_trust</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-is-system" title="ostree_repo_is_system ()">ostree_repo_is_system</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-is-writable" title="ostree_repo_is_writable ()">ostree_repo_is_writable</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-collection-refs" title="ostree_repo_list_collection_refs ()">ostree_repo_list_collection_refs</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-commit-objects-starting-with" title="ostree_repo_list_commit_objects_starting_with ()">ostree_repo_list_commit_objects_starting_with</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-objects" title="ostree_repo_list_objects ()">ostree_repo_list_objects</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OSTREE-REPO-LIST-OBJECTS-VARIANT-TYPE:CAPS" title="OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE">OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE</a>, macro in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-refs" title="ostree_repo_list_refs ()">ostree_repo_list_refs</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-refs-ext" title="ostree_repo_list_refs_ext ()">ostree_repo_list_refs_ext</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-static-delta-indexes" title="ostree_repo_list_static_delta_indexes ()">ostree_repo_list_static_delta_indexes</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-list-static-delta-names" title="ostree_repo_list_static_delta_names ()">ostree_repo_list_static_delta_names</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-commit" title="ostree_repo_load_commit ()">ostree_repo_load_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-file" title="ostree_repo_load_file ()">ostree_repo_load_file</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-object-stream" title="ostree_repo_load_object_stream ()">ostree_repo_load_object_stream</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-variant" title="ostree_repo_load_variant ()">ostree_repo_load_variant</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-load-variant-if-exists" title="ostree_repo_load_variant_if_exists ()">ostree_repo_load_variant_if_exists</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-pop" title="ostree_repo_lock_pop ()">ostree_repo_lock_pop</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-lock-push" title="ostree_repo_lock_push ()">ostree_repo_lock_push</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-mark-commit-partial" title="ostree_repo_mark_commit_partial ()">ostree_repo_mark_commit_partial</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-mark-commit-partial-reason" title="ostree_repo_mark_commit_partial_reason ()">ostree_repo_mark_commit_partial_reason</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#OSTREE-REPO-METADATA-REF:CAPS" title="OSTREE_REPO_METADATA_REF">OSTREE_REPO_METADATA_REF</a>, macro in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-mode-from-string" title="ostree_repo_mode_from_string ()">ostree_repo_mode_from_string</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-new" title="ostree_repo_new ()">ostree_repo_new</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-new-default" title="ostree_repo_new_default ()">ostree_repo_new_default</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-new-for-sysroot-path" title="ostree_repo_new_for_sysroot_path ()">ostree_repo_new_for_sysroot_path</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open" title="ostree_repo_open ()">ostree_repo_open</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-open-at" title="ostree_repo_open_at ()">ostree_repo_open_at</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prepare-transaction" title="ostree_repo_prepare_transaction ()">ostree_repo_prepare_transaction</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune" title="ostree_repo_prune ()">ostree_repo_prune</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune-from-reachable" title="ostree_repo_prune_from_reachable ()">ostree_repo_prune_from_reachable</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-prune-static-deltas" title="ostree_repo_prune_static_deltas ()">ostree_repo_prune_static_deltas</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull" title="ostree_repo_pull ()">ostree_repo_pull</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-default-console-progress-changed" title="ostree_repo_pull_default_console_progress_changed ()">ostree_repo_pull_default_console_progress_changed</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-async" title="ostree_repo_pull_from_remotes_async ()">ostree_repo_pull_from_remotes_async</a>, function in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-pull-from-remotes-finish" title="ostree_repo_pull_from_remotes_finish ()">ostree_repo_pull_from_remotes_finish</a>, function in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-one-dir" title="ostree_repo_pull_one_dir ()">ostree_repo_pull_one_dir</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-pull-with-options" title="ostree_repo_pull_with_options ()">ostree_repo_pull_with_options</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-query-object-storage-size" title="ostree_repo_query_object_storage_size ()">ostree_repo_query_object_storage_size</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-read-commit" title="ostree_repo_read_commit ()">ostree_repo_read_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-read-commit-detached-metadata" title="ostree_repo_read_commit_detached_metadata ()">ostree_repo_read_commit_detached_metadata</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-metadata" title="ostree_repo_regenerate_metadata ()">ostree_repo_regenerate_metadata</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-regenerate-summary" title="ostree_repo_regenerate_summary ()">ostree_repo_regenerate_summary</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-reload-config" title="ostree_repo_reload_config ()">ostree_repo_reload_config</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-add" title="ostree_repo_remote_add ()">ostree_repo_remote_add</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-change" title="ostree_repo_remote_change ()">ostree_repo_remote_change</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-delete" title="ostree_repo_remote_delete ()">ostree_repo_remote_delete</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary" title="ostree_repo_remote_fetch_summary ()">ostree_repo_remote_fetch_summary</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-fetch-summary-with-options" title="ostree_repo_remote_fetch_summary_with_options ()">ostree_repo_remote_fetch_summary_with_options</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-keys" title="ostree_repo_remote_get_gpg_keys ()">ostree_repo_remote_get_gpg_keys</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-verify" title="ostree_repo_remote_get_gpg_verify ()">ostree_repo_remote_get_gpg_verify</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-gpg-verify-summary" title="ostree_repo_remote_get_gpg_verify_summary ()">ostree_repo_remote_get_gpg_verify_summary</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-get-url" title="ostree_repo_remote_get_url ()">ostree_repo_remote_get_url</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-gpg-import" title="ostree_repo_remote_gpg_import ()">ostree_repo_remote_gpg_import</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-list" title="ostree_repo_remote_list ()">ostree_repo_remote_list</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-list-collection-refs" title="ostree_repo_remote_list_collection_refs ()">ostree_repo_remote_list_collection_refs</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-remote-list-refs" title="ostree_repo_remote_list_refs ()">ostree_repo_remote_list_refs</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-collection-ref" title="ostree_repo_resolve_collection_ref ()">ostree_repo_resolve_collection_ref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-repo-remote-finder.html#ostree-repo-resolve-keyring-for-collection" title="ostree_repo_resolve_keyring_for_collection ()">ostree_repo_resolve_keyring_for_collection</a>, function in <a class="link" href="ostree-ostree-repo-remote-finder.html" title="ostree-repo-remote-finder">ostree-repo-remote-finder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-rev" title="ostree_repo_resolve_rev ()">ostree_repo_resolve_rev</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-resolve-rev-ext" title="ostree_repo_resolve_rev_ext ()">ostree_repo_resolve_rev_ext</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-scan-hardlinks" title="ostree_repo_scan_hardlinks ()">ostree_repo_scan_hardlinks</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-alias-ref-immediate" title="ostree_repo_set_alias_ref_immediate ()">ostree_repo_set_alias_ref_immediate</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-cache-dir" title="ostree_repo_set_cache_dir ()">ostree_repo_set_cache_dir</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-collection-id" title="ostree_repo_set_collection_id ()">ostree_repo_set_collection_id</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-collection-ref-immediate" title="ostree_repo_set_collection_ref_immediate ()">ostree_repo_set_collection_ref_immediate</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-disable-fsync" title="ostree_repo_set_disable_fsync ()">ostree_repo_set_disable_fsync</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-set-ref-immediate" title="ostree_repo_set_ref_immediate ()">ostree_repo_set_ref_immediate</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-signature-verify-commit-data" title="ostree_repo_signature_verify_commit_data ()">ostree_repo_signature_verify_commit_data</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-sign-commit" title="ostree_repo_sign_commit ()">ostree_repo_sign_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-sign-delta" title="ostree_repo_sign_delta ()">ostree_repo_sign_delta</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-execute-offline" title="ostree_repo_static_delta_execute_offline ()">ostree_repo_static_delta_execute_offline</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-execute-offline-with-signature" title="ostree_repo_static_delta_execute_offline_with_signature ()">ostree_repo_static_delta_execute_offline_with_signature</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-generate" title="ostree_repo_static_delta_generate ()">ostree_repo_static_delta_generate</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-reindex" title="ostree_repo_static_delta_reindex ()">ostree_repo_static_delta_reindex</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-static-delta-verify-signature" title="ostree_repo_static_delta_verify_signature ()">ostree_repo_static_delta_verify_signature</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-collection-ref" title="ostree_repo_transaction_set_collection_ref ()">ostree_repo_transaction_set_collection_ref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-ref" title="ostree_repo_transaction_set_ref ()">ostree_repo_transaction_set_ref</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-transaction-set-refspec" title="ostree_repo_transaction_set_refspec ()">ostree_repo_transaction_set_refspec</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit" title="ostree_repo_traverse_commit ()">ostree_repo_traverse_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit-union" title="ostree_repo_traverse_commit_union ()">ostree_repo_traverse_commit_union</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit-union-with-parents" title="ostree_repo_traverse_commit_union_with_parents ()">ostree_repo_traverse_commit_union_with_parents</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-commit-with-flags" title="ostree_repo_traverse_commit_with_flags ()">ostree_repo_traverse_commit_with_flags</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-new-parents" title="ostree_repo_traverse_new_parents ()">ostree_repo_traverse_new_parents</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-new-reachable" title="ostree_repo_traverse_new_reachable ()">ostree_repo_traverse_new_reachable</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-parents-get-commits" title="ostree_repo_traverse_parents_get_commits ()">ostree_repo_traverse_parents_get_commits</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-traverse-reachable-refs" title="ostree_repo_traverse_reachable_refs ()">ostree_repo_traverse_reachable_refs</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit" title="ostree_repo_verify_commit ()">ostree_repo_verify_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit-ext" title="ostree_repo_verify_commit_ext ()">ostree_repo_verify_commit_ext</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-commit-for-remote" title="ostree_repo_verify_commit_for_remote ()">ostree_repo_verify_commit_for_remote</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-verify-summary" title="ostree_repo_verify_summary ()">ostree_repo_verify_summary</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-archive-to-mtree" title="ostree_repo_write_archive_to_mtree ()">ostree_repo_write_archive_to_mtree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-archive-to-mtree-from-fd" title="ostree_repo_write_archive_to_mtree_from_fd ()">ostree_repo_write_archive_to_mtree_from_fd</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit" title="ostree_repo_write_commit ()">ostree_repo_write_commit</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit-detached-metadata" title="ostree_repo_write_commit_detached_metadata ()">ostree_repo_write_commit_detached_metadata</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-commit-with-time" title="ostree_repo_write_commit_with_time ()">ostree_repo_write_commit_with_time</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-config" title="ostree_repo_write_config ()">ostree_repo_write_config</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content" title="ostree_repo_write_content ()">ostree_repo_write_content</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-async" title="ostree_repo_write_content_async ()">ostree_repo_write_content_async</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-finish" title="ostree_repo_write_content_finish ()">ostree_repo_write_content_finish</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-content-trusted" title="ostree_repo_write_content_trusted ()">ostree_repo_write_content_trusted</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-dfd-to-mtree" title="ostree_repo_write_dfd_to_mtree ()">ostree_repo_write_dfd_to_mtree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-directory-to-mtree" title="ostree_repo_write_directory_to_mtree ()">ostree_repo_write_directory_to_mtree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata" title="ostree_repo_write_metadata ()">ostree_repo_write_metadata</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-async" title="ostree_repo_write_metadata_async ()">ostree_repo_write_metadata_async</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-finish" title="ostree_repo_write_metadata_finish ()">ostree_repo_write_metadata_finish</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-stream-trusted" title="ostree_repo_write_metadata_stream_trusted ()">ostree_repo_write_metadata_stream_trusted</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-metadata-trusted" title="ostree_repo_write_metadata_trusted ()">ostree_repo_write_metadata_trusted</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-mtree" title="ostree_repo_write_mtree ()">ostree_repo_write_mtree</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-regfile" title="ostree_repo_write_regfile ()">ostree_repo_write_regfile</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-regfile-inline" title="ostree_repo_write_regfile_inline ()">ostree_repo_write_regfile_inline</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#ostree-repo-write-symlink" title="ostree_repo_write_symlink ()">ostree_repo_write_symlink</a>, function in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicy" title="OstreeSePolicy">OstreeSePolicy</a>, typedef in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#OstreeSePolicyRestoreconFlags" title="enum OstreeSePolicyRestoreconFlags">OstreeSePolicyRestoreconFlags</a>, enum in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-fscreatecon-cleanup" title="ostree_sepolicy_fscreatecon_cleanup ()">ostree_sepolicy_fscreatecon_cleanup</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-csum" title="ostree_sepolicy_get_csum ()">ostree_sepolicy_get_csum</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-label" title="ostree_sepolicy_get_label ()">ostree_sepolicy_get_label</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-name" title="ostree_sepolicy_get_name ()">ostree_sepolicy_get_name</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-get-path" title="ostree_sepolicy_get_path ()">ostree_sepolicy_get_path</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-new" title="ostree_sepolicy_new ()">ostree_sepolicy_new</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-new-at" title="ostree_sepolicy_new_at ()">ostree_sepolicy_new_at</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-new-from-commit" title="ostree_sepolicy_new_from_commit ()">ostree_sepolicy_new_from_commit</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-restorecon" title="ostree_sepolicy_restorecon ()">ostree_sepolicy_restorecon</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-SELinux-policy-management.html#ostree-sepolicy-setfscreatecon" title="ostree_sepolicy_setfscreatecon ()">ostree_sepolicy_setfscreatecon</a>, function in <a class="link" href="ostree-SELinux-policy-management.html" title="SELinux policy management">SELinux policy management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#OstreeSign" title="OstreeSign">OstreeSign</a>, struct in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-add-pk" title="ostree_sign_add_pk ()">ostree_sign_add_pk</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-clear-keys" title="ostree_sign_clear_keys ()">ostree_sign_clear_keys</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-commit" title="ostree_sign_commit ()">ostree_sign_commit</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-commit-verify" title="ostree_sign_commit_verify ()">ostree_sign_commit_verify</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-data" title="ostree_sign_data ()">ostree_sign_data</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-data-verify" title="ostree_sign_data_verify ()">ostree_sign_data_verify</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-get-all" title="ostree_sign_get_all ()">ostree_sign_get_all</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-get-by-name" title="ostree_sign_get_by_name ()">ostree_sign_get_by_name</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-get-name" title="ostree_sign_get_name ()">ostree_sign_get_name</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-load-pk" title="ostree_sign_load_pk ()">ostree_sign_load_pk</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-metadata-format" title="ostree_sign_metadata_format ()">ostree_sign_metadata_format</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-metadata-key" title="ostree_sign_metadata_key ()">ostree_sign_metadata_key</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-set-pk" title="ostree_sign_set_pk ()">ostree_sign_set_pk</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-set-sk" title="ostree_sign_set_sk ()">ostree_sign_set_sk</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Signature-management.html#ostree-sign-summary" title="ostree_sign_summary ()">ostree_sign_summary</a>, function in <a class="link" href="ostree-Signature-management.html" title="Signature management">Signature management</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-OstreeRepo.html#OstreeStaticDeltaGenerateOpt" title="enum OstreeStaticDeltaGenerateOpt">OstreeStaticDeltaGenerateOpt</a>, enum in <a class="link" href="ostree-OstreeRepo.html" title="OstreeRepo: Content-addressed object store">OstreeRepo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-FORMAT:CAPS" title="OSTREE_SUMMARY_GVARIANT_FORMAT">OSTREE_SUMMARY_GVARIANT_FORMAT</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-SUMMARY-GVARIANT-STRING:CAPS" title="OSTREE_SUMMARY_GVARIANT_STRING">OSTREE_SUMMARY_GVARIANT_STRING</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysroot" title="OstreeSysroot">OstreeSysroot</a>, typedef in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#OstreeSysrootSimpleWriteDeploymentFlags" title="enum OstreeSysrootSimpleWriteDeploymentFlags">OstreeSysrootSimpleWriteDeploymentFlags</a>, enum in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgrader" title="OstreeSysrootUpgrader">OstreeSysrootUpgrader</a>, typedef in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderFlags" title="enum OstreeSysrootUpgraderFlags">OstreeSysrootUpgraderFlags</a>, enum in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#OstreeSysrootUpgraderPullFlags" title="enum OstreeSysrootUpgraderPullFlags">OstreeSysrootUpgraderPullFlags</a>, enum in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup" title="ostree_sysroot_cleanup ()">ostree_sysroot_cleanup</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-cleanup-prune-repo" title="ostree_sysroot_cleanup_prune_repo ()">ostree_sysroot_cleanup_prune_repo</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-kargs" title="ostree_sysroot_deployment_set_kargs ()">ostree_sysroot_deployment_set_kargs</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-kargs-in-place" title="ostree_sysroot_deployment_set_kargs_in_place ()">ostree_sysroot_deployment_set_kargs_in_place</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-mutable" title="ostree_sysroot_deployment_set_mutable ()">ostree_sysroot_deployment_set_mutable</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-set-pinned" title="ostree_sysroot_deployment_set_pinned ()">ostree_sysroot_deployment_set_pinned</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deployment-unlock" title="ostree_sysroot_deployment_unlock ()">ostree_sysroot_deployment_unlock</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree" title="ostree_sysroot_deploy_tree ()">ostree_sysroot_deploy_tree</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-deploy-tree-with-options" title="ostree_sysroot_deploy_tree_with_options ()">ostree_sysroot_deploy_tree_with_options</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-ensure-initialized" title="ostree_sysroot_ensure_initialized ()">ostree_sysroot_ensure_initialized</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-booted-deployment" title="ostree_sysroot_get_booted_deployment ()">ostree_sysroot_get_booted_deployment</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-bootversion" title="ostree_sysroot_get_bootversion ()">ostree_sysroot_get_bootversion</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployments" title="ostree_sysroot_get_deployments ()">ostree_sysroot_get_deployments</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-directory" title="ostree_sysroot_get_deployment_directory ()">ostree_sysroot_get_deployment_directory</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-dirpath" title="ostree_sysroot_get_deployment_dirpath ()">ostree_sysroot_get_deployment_dirpath</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-deployment-origin-path" title="ostree_sysroot_get_deployment_origin_path ()">ostree_sysroot_get_deployment_origin_path</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-fd" title="ostree_sysroot_get_fd ()">ostree_sysroot_get_fd</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-merge-deployment" title="ostree_sysroot_get_merge_deployment ()">ostree_sysroot_get_merge_deployment</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-path" title="ostree_sysroot_get_path ()">ostree_sysroot_get_path</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-repo" title="ostree_sysroot_get_repo ()">ostree_sysroot_get_repo</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-staged-deployment" title="ostree_sysroot_get_staged_deployment ()">ostree_sysroot_get_staged_deployment</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-get-subbootversion" title="ostree_sysroot_get_subbootversion ()">ostree_sysroot_get_subbootversion</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize" title="ostree_sysroot_initialize ()">ostree_sysroot_initialize</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-initialize-with-mount-namespace" title="ostree_sysroot_initialize_with_mount_namespace ()">ostree_sysroot_initialize_with_mount_namespace</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-init-osname" title="ostree_sysroot_init_osname ()">ostree_sysroot_init_osname</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-is-booted" title="ostree_sysroot_is_booted ()">ostree_sysroot_is_booted</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load" title="ostree_sysroot_load ()">ostree_sysroot_load</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-load-if-changed" title="ostree_sysroot_load_if_changed ()">ostree_sysroot_load_if_changed</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock" title="ostree_sysroot_lock ()">ostree_sysroot_lock</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-async" title="ostree_sysroot_lock_async ()">ostree_sysroot_lock_async</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-lock-finish" title="ostree_sysroot_lock_finish ()">ostree_sysroot_lock_finish</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-new" title="ostree_sysroot_new ()">ostree_sysroot_new</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-new-default" title="ostree_sysroot_new_default ()">ostree_sysroot_new_default</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-origin-new-from-refspec" title="ostree_sysroot_origin_new_from_refspec ()">ostree_sysroot_origin_new_from_refspec</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-prepare-cleanup" title="ostree_sysroot_prepare_cleanup ()">ostree_sysroot_prepare_cleanup</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-query-deployments-for" title="ostree_sysroot_query_deployments_for ()">ostree_sysroot_query_deployments_for</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-repo" title="ostree_sysroot_repo ()">ostree_sysroot_repo</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-require-booted-deployment" title="ostree_sysroot_require_booted_deployment ()">ostree_sysroot_require_booted_deployment</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-set-mount-namespace-in-use" title="ostree_sysroot_set_mount_namespace_in_use ()">ostree_sysroot_set_mount_namespace_in_use</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-simple-write-deployment" title="ostree_sysroot_simple_write_deployment ()">ostree_sysroot_simple_write_deployment</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-overlay-initrd" title="ostree_sysroot_stage_overlay_initrd ()">ostree_sysroot_stage_overlay_initrd</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree" title="ostree_sysroot_stage_tree ()">ostree_sysroot_stage_tree</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-stage-tree-with-options" title="ostree_sysroot_stage_tree_with_options ()">ostree_sysroot_stage_tree_with_options</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-try-lock" title="ostree_sysroot_try_lock ()">ostree_sysroot_try_lock</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-unload" title="ostree_sysroot_unload ()">ostree_sysroot_unload</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-unlock" title="ostree_sysroot_unlock ()">ostree_sysroot_unlock</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-check-timestamps" title="ostree_sysroot_upgrader_check_timestamps ()">ostree_sysroot_upgrader_check_timestamps</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-deploy" title="ostree_sysroot_upgrader_deploy ()">ostree_sysroot_upgrader_deploy</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-dup-origin" title="ostree_sysroot_upgrader_dup_origin ()">ostree_sysroot_upgrader_dup_origin</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-get-origin" title="ostree_sysroot_upgrader_get_origin ()">ostree_sysroot_upgrader_get_origin</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-get-origin-description" title="ostree_sysroot_upgrader_get_origin_description ()">ostree_sysroot_upgrader_get_origin_description</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new" title="ostree_sysroot_upgrader_new ()">ostree_sysroot_upgrader_new</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new-for-os" title="ostree_sysroot_upgrader_new_for_os ()">ostree_sysroot_upgrader_new_for_os</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-new-for-os-with-flags" title="ostree_sysroot_upgrader_new_for_os_with_flags ()">ostree_sysroot_upgrader_new_for_os_with_flags</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull" title="ostree_sysroot_upgrader_pull ()">ostree_sysroot_upgrader_pull</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-pull-one-dir" title="ostree_sysroot_upgrader_pull_one_dir ()">ostree_sysroot_upgrader_pull_one_dir</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Simple-upgrade-class.html#ostree-sysroot-upgrader-set-origin" title="ostree_sysroot_upgrader_set_origin ()">ostree_sysroot_upgrader_set_origin</a>, function in <a class="link" href="ostree-Simple-upgrade-class.html" title="Simple upgrade class">Simple upgrade class</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments" title="ostree_sysroot_write_deployments ()">ostree_sysroot_write_deployments</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-deployments-with-options" title="ostree_sysroot_write_deployments_with_options ()">ostree_sysroot_write_deployments_with_options</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Root-partition-mount-point.html#ostree-sysroot-write-origin-file" title="ostree_sysroot_write_origin_file ()">ostree_sysroot_write_origin_file</a>, function in <a class="link" href="ostree-Root-partition-mount-point.html" title="Root partition mount point">Root partition mount point</a>
+</dt>
+<dd></dd>
+<a name="idxT"></a><h3 class="title">T</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-TREE-GVARIANT-FORMAT:CAPS" title="OSTREE_TREE_GVARIANT_FORMAT">OSTREE_TREE_GVARIANT_FORMAT</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#OSTREE-TREE-GVARIANT-STRING:CAPS" title="OSTREE_TREE_GVARIANT_STRING">OSTREE_TREE_GVARIANT_STRING</a>, macro in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<a name="idxV"></a><h3 class="title">V</h3>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-checksum-string" title="ostree_validate_checksum_string ()">ostree_validate_checksum_string</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-collection-id" title="ostree_validate_collection_id ()">ostree_validate_collection_id</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-remote-name" title="ostree_validate_remote_name ()">ostree_validate_remote_name</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-rev" title="ostree_validate_rev ()">ostree_validate_rev</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-checksum-string" title="ostree_validate_structureof_checksum_string ()">ostree_validate_structureof_checksum_string</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-commit" title="ostree_validate_structureof_commit ()">ostree_validate_structureof_commit</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-csum-v" title="ostree_validate_structureof_csum_v ()">ostree_validate_structureof_csum_v</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-dirmeta" title="ostree_validate_structureof_dirmeta ()">ostree_validate_structureof_dirmeta</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-dirtree" title="ostree_validate_structureof_dirtree ()">ostree_validate_structureof_dirtree</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-file-mode" title="ostree_validate_structureof_file_mode ()">ostree_validate_structureof_file_mode</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-Core-repository-independent-functions.html#ostree-validate-structureof-objtype" title="ostree_validate_structureof_objtype ()">ostree_validate_structureof_objtype</a>, function in <a class="link" href="ostree-Core-repository-independent-functions.html" title="Core repository-independent functions">Core repository-independent functions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-version.html#OSTREE-VERSION:CAPS" title="OSTREE_VERSION">OSTREE_VERSION</a>, macro in <a class="link" href="ostree-ostree-version.html" title="ostree-version">ostree-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-version.html#OSTREE-VERSION-HEX:CAPS" title="OSTREE_VERSION_HEX">OSTREE_VERSION_HEX</a>, macro in <a class="link" href="ostree-ostree-version.html" title="ostree-version">ostree-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="ostree-ostree-version.html#OSTREE-VERSION-S:CAPS" title="OSTREE_VERSION_S">OSTREE_VERSION_S</a>, macro in <a class="link" href="ostree-ostree-version.html" title="ostree-version">ostree-version</a>
+</dt>
+<dd></dd>
+<a name="idxY"></a><h3 class="title">Y</h3>
+<dt>
+<a class="link" href="ostree-ostree-version.html#OSTREE-YEAR-VERSION:CAPS" title="OSTREE_YEAR_VERSION">OSTREE_YEAR_VERSION</a>, macro in <a class="link" href="ostree-ostree-version.html" title="ostree-version">ostree-version</a>
+</dt>
+<dd></dd>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.33.1</div>
+</body>
+</html> \ No newline at end of file
diff --git a/reference/right-insensitive.png b/reference/right-insensitive.png
new file mode 100644
index 00000000..4c95785b
--- /dev/null
+++ b/reference/right-insensitive.png
Binary files differ
diff --git a/reference/right.png b/reference/right.png
new file mode 100644
index 00000000..76260ec8
--- /dev/null
+++ b/reference/right.png
Binary files differ
diff --git a/reference/style.css b/reference/style.css
new file mode 100644
index 00000000..2eeda1f0
--- /dev/null
+++ b/reference/style.css
@@ -0,0 +1,530 @@
+body
+{
+ font-family: cantarell, sans-serif;
+}
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ background: rgba(238, 238, 236, 0.5);
+ border: solid 1px rgb(238, 238, 236);
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ /* fallback for no rgba support */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ background: rgba(114, 159, 207, 0.1);
+ border: solid 1px rgba(114, 159, 207, 0.2);
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+span.nowrap {
+ white-space: nowrap;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+.function_type,
+.variable_type,
+.property_type,
+.signal_type,
+.parameter_name,
+.struct_member_name,
+.union_member_name,
+.define_keyword,
+.datatype_keyword,
+.typedef_keyword
+{
+ text-align: right;
+}
+
+/* dim non-primary columns */
+.c_punctuation,
+.function_type,
+.variable_type,
+.property_type,
+.signal_type,
+.define_keyword,
+.datatype_keyword,
+.typedef_keyword,
+.property_flags,
+.signal_flags,
+.parameter_annotations,
+.enum_member_annotations,
+.struct_member_annotations,
+.union_member_annotations
+{
+ color: #888a85;
+}
+
+.function_type a,
+.function_type a:visited,
+.function_type a:hover,
+.property_type a,
+.property_type a:visited,
+.property_type a:hover,
+.signal_type a,
+.signal_type a:visited,
+.signal_type a:hover,
+.signal_flags a,
+.signal_flags a:visited,
+.signal_flags a:hover
+{
+ color: #729fcf;
+}
+
+td p
+{
+ margin: 0.25em;
+}
+
+div.informaltable table[border="1"],
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.informaltable table[border="1"] td,
+div.informaltable table th,
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.informaltable table[border="1"] th,
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+h4
+{
+ color: #555753;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+hr
+{
+ /* tango:aluminium 1 */
+ color: #d3d7cf;
+ background: #d3d7cf;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+ margin: 2.0em 0em 2.0em 0em;
+}
+
+dl.toc dt
+{
+ padding-bottom: 0.25em;
+}
+
+dl.toc > dt
+{
+ padding-top: 0.25em;
+ padding-bottom: 0.25em;
+ font-weight: bold;
+}
+
+dl.toc > dl
+{
+ padding-bottom: 0.5em;
+}
+
+.parameter
+{
+ font-style: normal;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.informalfigure,
+.figure
+{
+ margin: 1em;
+}
+
+.informalexample,
+.example
+{
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ background: rgba(252, 175, 62, 0.1);
+ border-color: #ffb04f;
+ border-color: rgba(252, 175, 62, 0.2);
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ background: rgba(138, 226, 52, 0.1);
+ border-color: #abf562;
+ border-color: rgba(138, 226, 52, 0.2);
+}
+div.blockquote
+{
+ border-color: #eeeeec;
+}
+.note, .warning, div.blockquote
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+ margin: 2em;
+}
+.note p, .warning p
+{
+ margin: 0;
+}
+
+div.warning h3.title,
+div.note h3.title
+{
+ display: none;
+}
+
+p + div.section
+{
+ margin-top: 1em;
+}
+
+div.refnamediv,
+div.refsynopsisdiv,
+div.refsect1,
+div.refsect2,
+div.toc,
+div.section
+{
+ margin-bottom: 1em;
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.lineart
+{
+ color: #d3d7cf;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-weight: normal;
+}
+
+.structfield
+{
+ font-style: normal;
+ font-weight: normal;
+}
+
+acronym,abbr
+{
+ border-bottom: 1px dotted gray;
+}
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ border: solid 1px rgba(114, 159, 207, 0.2);
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ background: rgba(114, 159, 207, 0.2);
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+ background: rgba(114, 159, 207, 0.1);
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+ background: none;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
+
+@media screen {
+ /* these have a <sup> as a first child, but since there are no parent selectors
+ * we can't use that. */
+ a.footnote
+ {
+ position: relative;
+ top: 0em ! important;
+ }
+ /* this is needed so that the local anchors are displayed below the naviagtion */
+ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 2.5em;
+ padding-bottom: 500px;
+ max-width: 60em;
+ }
+ p
+ {
+ max-width: 60em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ background: #e2e2e2;
+ border-bottom: solid 1px #babdb6;
+ border-spacing: 5px;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ z-index: 10;
+ }
+ table.navigation#top td
+ {
+ padding-left: 6px;
+ padding-right: 6px;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:sky blue 3 */
+ color: #204a87;
+ }
+ .navigation a:hover
+ {
+ /* tango:sky blue 2 */
+ color: #3465a4;
+ }
+ td.shortcuts
+ {
+ /* tango:sky blue 2 */
+ color: #3465a4;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+ td.shortcuts .dim
+ {
+ color: #babdb6;
+ }
+ .navigation .title
+ {
+ font-size: 80%;
+ max-width: none;
+ margin: 0px;
+ font-weight: normal;
+ }
+}
+@media screen and (min-width: 60em) {
+ /* screen larger than 60em */
+ body { margin: auto; }
+}
+@media screen and (max-width: 60em) {
+ /* screen less than 60em */
+ #nav_hierarchy { display: none; }
+ #nav_interfaces { display: none; }
+ #nav_prerequisites { display: none; }
+ #nav_derived_interfaces { display: none; }
+ #nav_implementations { display: none; }
+ #nav_child_properties { display: none; }
+ #nav_style_properties { display: none; }
+ #nav_index { display: none; }
+ #nav_glossary { display: none; }
+ .gallery_image { display: none; }
+ .property_flags { display: none; }
+ .signal_flags { display: none; }
+ .parameter_annotations { display: none; }
+ .enum_member_annotations { display: none; }
+ .struct_member_annotations { display: none; }
+ .union_member_annotations { display: none; }
+ /* now that a column is hidden, optimize space */
+ col.parameters_name { width: auto; }
+ col.parameters_description { width: auto; }
+ col.struct_members_name { width: auto; }
+ col.struct_members_description { width: auto; }
+ col.enum_members_name { width: auto; }
+ col.enum_members_description { width: auto; }
+ col.union_members_name { width: auto; }
+ col.union_members_description { width: auto; }
+ .listing_lines { display: none; }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ background: #e2e2e2;
+ border: solid 1px #babdb6;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.hll { background-color: #ffffcc }
+.c { color: #3D7B7B; font-style: italic } /* Comment */
+.err { border: 1px solid #FF0000 } /* Error */
+.k { color: #008000; font-weight: bold } /* Keyword */
+.o { color: #666666 } /* Operator */
+.ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.cp { color: #9C6500 } /* Comment.Preproc */
+.cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.gd { color: #A00000 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gr { color: #E40000 } /* Generic.Error */
+.gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.gi { color: #008400 } /* Generic.Inserted */
+.go { color: #717171 } /* Generic.Output */
+.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.gt { color: #0044DD } /* Generic.Traceback */
+.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.kp { color: #008000 } /* Keyword.Pseudo */
+.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.kt { color: #B00040 } /* Keyword.Type */
+.m { color: #666666 } /* Literal.Number */
+.s { color: #BA2121 } /* Literal.String */
+.na { color: #687822 } /* Name.Attribute */
+.nb { color: #008000 } /* Name.Builtin */
+.nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.no { color: #880000 } /* Name.Constant */
+.nd { color: #AA22FF } /* Name.Decorator */
+.ni { color: #717171; font-weight: bold } /* Name.Entity */
+.ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.nf { color: #0000FF } /* Name.Function */
+.nl { color: #767600 } /* Name.Label */
+.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.nt { color: #008000; font-weight: bold } /* Name.Tag */
+.nv { color: #19177C } /* Name.Variable */
+.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.w { color: #bbbbbb } /* Text.Whitespace */
+.mb { color: #666666 } /* Literal.Number.Bin */
+.mf { color: #666666 } /* Literal.Number.Float */
+.mh { color: #666666 } /* Literal.Number.Hex */
+.mi { color: #666666 } /* Literal.Number.Integer */
+.mo { color: #666666 } /* Literal.Number.Oct */
+.sa { color: #BA2121 } /* Literal.String.Affix */
+.sb { color: #BA2121 } /* Literal.String.Backtick */
+.sc { color: #BA2121 } /* Literal.String.Char */
+.dl { color: #BA2121 } /* Literal.String.Delimiter */
+.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.s2 { color: #BA2121 } /* Literal.String.Double */
+.se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.sh { color: #BA2121 } /* Literal.String.Heredoc */
+.si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.sx { color: #008000 } /* Literal.String.Other */
+.sr { color: #A45A77 } /* Literal.String.Regex */
+.s1 { color: #BA2121 } /* Literal.String.Single */
+.ss { color: #19177C } /* Literal.String.Symbol */
+.bp { color: #008000 } /* Name.Builtin.Pseudo */
+.fm { color: #0000FF } /* Name.Function.Magic */
+.vc { color: #19177C } /* Name.Variable.Class */
+.vg { color: #19177C } /* Name.Variable.Global */
+.vi { color: #19177C } /* Name.Variable.Instance */
+.vm { color: #19177C } /* Name.Variable.Magic */
+.il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file
diff --git a/reference/up-insensitive.png b/reference/up-insensitive.png
new file mode 100644
index 00000000..f4049860
--- /dev/null
+++ b/reference/up-insensitive.png
Binary files differ
diff --git a/reference/up.png b/reference/up.png
new file mode 100644
index 00000000..80b4b37e
--- /dev/null
+++ b/reference/up.png
Binary files differ
diff --git a/related-projects/index.html b/related-projects/index.html
new file mode 100644
index 00000000..2d0c1d29
--- /dev/null
+++ b/related-projects/index.html
@@ -0,0 +1,780 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Related Projects | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Related Projects" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/related-projects/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/related-projects/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Related Projects" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Related Projects","url":"https://ostreedev.github.io/ostree/related-projects/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item active"><a href="/ostree/related-projects/" class="nav-list-link active">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="related-projects">
+
+
+ <a href="#related-projects" class="anchor-heading" aria-labelledby="related-projects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Related Projects
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#combining-dpkgrpm--btrfslvm" id="markdown-toc-combining-dpkgrpm--btrfslvm">Combining dpkg/rpm + (BTRFS/LVM)</a></li>
+ <li><a href="#chromiumos-updater" id="markdown-toc-chromiumos-updater">ChromiumOS updater</a></li>
+ <li><a href="#ubuntu-image-based-updates" id="markdown-toc-ubuntu-image-based-updates">Ubuntu Image Based Updates</a></li>
+ <li><a href="#clear-linux-software-update" id="markdown-toc-clear-linux-software-update">Clear Linux Software update</a></li>
+ <li><a href="#casync" id="markdown-toc-casync">casync</a></li>
+ <li><a href="#menderio" id="markdown-toc-menderio">Mender.io</a></li>
+ <li><a href="#olpc-update" id="markdown-toc-olpc-update">OLPC update</a></li>
+ <li><a href="#nixos--nix" id="markdown-toc-nixos--nix">NixOS / Nix</a></li>
+ <li><a href="#solaris-ips" id="markdown-toc-solaris-ips">Solaris IPS</a></li>
+ <li><a href="#google-servers-custom-rsync-like-approach-live-updates" id="markdown-toc-google-servers-custom-rsync-like-approach-live-updates">Google servers (custom rsync-like approach, live updates)</a></li>
+ <li><a href="#conary" id="markdown-toc-conary">Conary</a></li>
+ <li><a href="#bmap" id="markdown-toc-bmap">bmap</a></li>
+ <li><a href="#git" id="markdown-toc-git">Git</a></li>
+ <li><a href="#conda" id="markdown-toc-conda">Conda</a></li>
+ <li><a href="#rpm-ostree" id="markdown-toc-rpm-ostree">rpm-ostree</a></li>
+ <li><a href="#gnome-continuous" id="markdown-toc-gnome-continuous">GNOME Continuous</a></li>
+ <li><a href="#docker" id="markdown-toc-docker">Docker</a></li>
+ <li><a href="#docker-related-balena" id="markdown-toc-docker-related-balena">Docker-related: Balena</a></li>
+ <li><a href="#torizon-platform" id="markdown-toc-torizon-platform">Torizon Platform</a> <ol>
+ <li><a href="#torizoncore" id="markdown-toc-torizoncore">TorizonCore</a></li>
+ <li><a href="#torizoncore-builder" id="markdown-toc-torizoncore-builder">TorizonCore Builder</a></li>
+ <li><a href="#torizon-ota" id="markdown-toc-torizon-ota">Torizon OTA</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol>
+
+<p>OSTree is in many ways very evolutionary. It builds on concepts and
+ideas introduced from many different projects such as
+<a href="http://0pointer.net/blog/projects/stateless.html">Systemd Stateless</a>,
+<a href="https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/">Systemd Bootloader Spec</a>,
+<a href="http://dev.chromium.org/chromium-os/chromiumos-design-docs/filesystem-autoupdate">Chromium Autoupdate</a>,
+the much older
+<a href="https://fedoraproject.org/wiki/StatelessLinux">Fedora/Red Hat Stateless Project</a>,
+<a href="http://linux-vserver.org/index.php?title=util-vserver:Vhashify&amp;oldid=2285">Linux VServer</a>
+and many more.</p>
+
+<p>As mentioned elsewhere, OSTree is strongly influenced by package
+manager designs as well. This page is not intended to be an
+exhaustive list of such projects, but we will try to keep it up to
+date, and relatively agnostic.</p>
+
+<p>Broadly speaking, projects in this area fall into two camps; either
+a tool to snapshot systems on the client side (dpkg/rpm + BTRFS/LVM),
+or a tool to compose on a server and replicate (ChromiumOS, Clear
+Linux). OSTree is flexible enough to do both.</p>
+
+<p>Note that this section of the documentation is almost entirely
+focused on the “ostree for host” model; the <a href="https://github.com/flatpak/flatpak/">flatpak</a>
+project uses libostree to store application data, distinct from the
+host system management model.</p>
+<h2 id="combining-dpkgrpm--btrfslvm">
+
+
+ <a href="#combining-dpkgrpm--btrfslvm" class="anchor-heading" aria-labelledby="combining-dpkgrpm--btrfslvm"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Combining dpkg/rpm + (BTRFS/LVM)
+
+
+</h2>
+
+
+<p>In this approach, one uses a block/filesystem snapshot tool underneath
+the system package manager.</p>
+
+<p>The
+<a href="https://gerrit.ovirt.org/gitweb?p=imgbased.git">oVirt Node imgbased</a>
+tool is an example of this approach, as are a few others below.</p>
+
+<p>Regarding <a href="https://btrfs.wiki.kernel.org/index.php/Main_Page">BTRFS</a>
+in particular - the OSTree author believes that Linux storage is a
+wide world, and while BTRFS is quite good, it is not everywhere now,
+nor will it be in the near future. There are other recently developed
+filesystems like <a href="https://en.wikipedia.org/wiki/F2FS">f2fs</a>, and Red
+Hat Enterprise Linux still defaults to
+<a href="https://en.wikipedia.org/wiki/XFS">XFS</a>.</p>
+
+<p>Using a snapshot tool underneath a package manager does help
+significantly. In the rest of this text, we will use “BTRFS” as a
+mostly generic tool for filesystem snapshots.</p>
+
+<p>The obvious thing to do is layer BTRFS under dpkg/rpm, and have a
+separate subvolume for <code class="language-plaintext highlighter-rouge">/home</code> so rollbacks don’t lose your data. See
+e.g. <a href="http://fedoraproject.org/wiki/Features/SystemRollbackWithBtrfs">Fedora BTRFS Rollback Feature</a>.</p>
+
+<p>More generally, if you want to use BTRFS to roll back changes made by
+dpkg/rpm, you have to carefully set up the partition layout so that
+the files laid out by dpkg/rpm are installed in a subvolume to
+snapshot.</p>
+
+<p>This problem in many ways is addressed by the changes OSTree forces,
+such as putting all local state in <code class="language-plaintext highlighter-rouge">/var</code> (e.g. <code class="language-plaintext highlighter-rouge">/usr/local</code> -&gt;
+<code class="language-plaintext highlighter-rouge">/var/usrlocal</code>). Then one can BTRFS snapshot <code class="language-plaintext highlighter-rouge">/usr</code>. This gets pretty
+far, except handling <code class="language-plaintext highlighter-rouge">/etc</code> is messy. This is something OSTree does
+well.</p>
+
+<p>In general, if one really tries to flesh out the BTRFS approach, a
+nontrivial middle layer of code between dpkg/rpm and BTRFS (or deep
+awareness of BTRFS in dpkg/rpm itself) will be required. A good
+example of this is the <a href="http://snapper.io/">snapper.io</a> project.</p>
+
+<p>The OSTree author believes that having total freedom at the block
+storage layer is better for general purpose operating systems. For
+example, the ability to choose dm-crypt per deployment is quite useful;
+not every site wants to pay the performance penalty. One can choose
+LVM or not, etc.</p>
+
+<p>Where applicable, OSTree does take advantage of copy-on-write/reflink
+features offered by the kernel for <code class="language-plaintext highlighter-rouge">/etc</code>. It uses the now generic
+<code class="language-plaintext highlighter-rouge">ioctl(FICLONE)</code> and <code class="language-plaintext highlighter-rouge">copy_file_range()</code>.</p>
+
+<p>Another major distinction between the default OSTree usage and package managers
+is whether updates are “online” or “offline” by default. The default OSTree
+design writes updates into a new root, leaving the running system unchanged.
+This means preparing updates is completely non-disruptive and safe - if the
+system runs out of disk space in the middle, it’s easy to recover. However,
+there is work in the <a href="https://github.com/projectatomic/rpm-ostree/">rpm-ostree</a>
+project to support online updates as well.</p>
+
+<p>OSTree supports using “bare-user” repositories, which do not require
+root to use. Using a filesystem-level layer without root is more
+difficult and would likely require a setuid helper or privileged service.</p>
+
+<p>Finally, see the next portion around ChromiumOS for why a hybrid but
+integrated package/image system improves on this.</p>
+<h2 id="chromiumos-updater">
+
+
+ <a href="#chromiumos-updater" class="anchor-heading" aria-labelledby="chromiumos-updater"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> ChromiumOS updater
+
+
+</h2>
+
+
+<p>Many people who look at OSTree are most interested in using
+it as an updater for embedded or fixed-purpose systems, similar to use cases
+from the <a href="http://dev.chromium.org/chromium-os/chromiumos-design-docs/filesystem-autoupdate">ChromiumOS updater</a>.</p>
+
+<p>The ChromiumOS approach uses two partitions that are swapped via the
+bootloader. It has a very network-efficient update protocol, using a
+custom binary delta scheme between filesystem snapshots.</p>
+
+<p>This model even allows for switching filesystem types in an update.</p>
+
+<p>A major downside of this approach is that the OS size is doubled on
+disk always. In contrast, OSTree uses plain Unix hardlinks, which
+means it essentially only requires disk space proportional to the
+changed files, plus some small fixed overhead.</p>
+
+<p>This means with OSTree, one can easily have more than two trees
+(deployments). Another example is that the system OSTree repository
+could <em>also</em> be used for application containers.</p>
+
+<p>Finally, the author of OSTree believes that what one really wants for
+many cases is image replication <em>with</em> the ability to layer on some
+additional components (e.g. packages) - a hybrid model. This is what
+<a href="https://github.com/projectatomic/rpm-ostree/">rpm-ostree</a> is aiming
+to support.</p>
+<h2 id="ubuntu-image-based-updates">
+
+
+ <a href="#ubuntu-image-based-updates" class="anchor-heading" aria-labelledby="ubuntu-image-based-updates"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Ubuntu Image Based Updates
+
+
+</h2>
+
+
+<p>See <a href="https://wiki.ubuntu.com/ImageBasedUpgrades">https://wiki.ubuntu.com/ImageBasedUpgrades</a>. Very architecturally
+similar to ChromeOS, although more interesting is discussion for
+supporting package installation on top, similar to
+<a href="https://github.com/projectatomic/rpm-ostree/pull/107">rpm-ostree package layering</a>.</p>
+<h2 id="clear-linux-software-update">
+
+
+ <a href="#clear-linux-software-update" class="anchor-heading" aria-labelledby="clear-linux-software-update"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Clear Linux Software update
+
+
+</h2>
+
+
+<p>The
+<a href="https://clearlinux.org/features/software-update">Clear Linux Software update</a>
+system is not very well documented.
+<a href="https://lists.clearlinux.org/pipermail/dev/2016-January/000159.html">This mailing list post</a>
+has some reverse-engineered design documentation.</p>
+
+<p>Like OSTree static deltas, it also uses bsdiff for network efficiency.</p>
+
+<p>More information will be filled in here over time. The OSTree author
+believes that at the moment, the “CL updater” is not truly atomic in
+the sense that because it applies updates live, there is a window
+where the OS root may be inconsistent.</p>
+<h2 id="casync">
+
+
+ <a href="#casync" class="anchor-heading" aria-labelledby="casync"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> casync
+
+
+</h2>
+
+
+<p>The <a href="https://github.com/systemd/casync">systemd casync</a> project is
+relatively new. Currently, it is more of a storage library, and doesn’t
+support higher level logic for things like GPG signatures, versioning
+information, etc. This is mostly the <code class="language-plaintext highlighter-rouge">OstreeRepo</code> layer. Moving up to
+the <code class="language-plaintext highlighter-rouge">OstreeSysroot</code> level - things like managing the bootloader
+configuration, and most importantly implementing correct merging for <code class="language-plaintext highlighter-rouge">/etc</code>
+are missing. casync also is unaware of SELinux.</p>
+
+<p>OSTree is really today a shared library, and has been for quite some time.
+This has made it easy to build higher level projects such as
+<a href="https://github.com/projectatomic/rpm-ostree/">rpm-ostree</a> which has quite
+a bit more, such as a DBus API and other projects consume that, such as
+<a href="http://cockpit-project.org/">Cockpit</a>.</p>
+
+<p>A major issue with casync today is that it doesn’t support garbage collection
+on the server side. OSTree’s GC works symmetrically on the server and client
+side.</p>
+
+<p>Broadly speaking, casync is a twist on the dual partition approach, and
+shares the general purpose disadvantages of those.</p>
+<h2 id="menderio">
+
+
+ <a href="#menderio" class="anchor-heading" aria-labelledby="menderio"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Mender.io
+
+
+</h2>
+
+
+<p><a href="https://mender.io/">Mender.io</a> is another implementation of the dual
+partition approach.</p>
+<h2 id="olpc-update">
+
+
+ <a href="#olpc-update" class="anchor-heading" aria-labelledby="olpc-update"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OLPC update
+
+
+</h2>
+
+
+<p>OSTree is basically a generalization of olpc-update, except using
+plain HTTP instead of rsync. OSTree has the notion of separate trees
+that one can track independently or parallel install, while still
+sharing storage via the hardlinked repository, whereas olpc-update
+uses version numbers for a single OS.</p>
+
+<p>OSTree has built-in plain old HTTP replication which can be served
+from a static webserver, whereas olpc-update uses <code class="language-plaintext highlighter-rouge">rsync</code> (more server
+load, but more efficient on the network side). The OSTree solution to
+improving network bandwidth consumption is via static deltas.</p>
+
+<p>See
+<a href="http://blog.verbum.org/2013/08/26/ostree-v2013-6-released/#comment-1169">this comment</a>
+for a comparison.</p>
+<h2 id="nixos--nix">
+
+
+ <a href="#nixos--nix" class="anchor-heading" aria-labelledby="nixos--nix"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> NixOS / Nix
+
+
+</h2>
+
+
+<p>See <a href="http://nixos.org/">NixOS</a>. It was a very influential project for OSTree.
+NixOS and OSTree both support the idea of independent “roots” that are bootable.</p>
+
+<p>In NixOS, files in a package are accessed by a path depending on the checksums
+of package inputs (build dependencies) - see
+<a href="http://nixos.org/nix/manual/#chap-package-management/">Nix store</a>.
+However, OSTree uses a commit/deploy model - it isn’t tied to any particular
+directory layout, and you can put whatever data you want inside an OSTree, for
+example the standard FHS layout. A both positive and negative of the Nix model
+is that a change in the build dependencies (e.g. being built with a newer gcc),
+requires a cascading rebuild of everything. It’s good because it makes it easy
+to do massive system-wide changes such as gcc upgrades, and allows installing
+multiple versions of packages at once. However, a security update to e.g. glibc
+forces a rebuild of everything from scratch, and so Nix is not practical at
+scale. OSTree supports using a build system that just rebuilds individual
+components (packages) as they change, without forcing a rebuild of their
+dependencies.</p>
+
+<p>Nix automatically detects runtime package dependencies by scanning content for
+hashes. OSTree only supports only system-level images, and doesn’t do dependency
+management. Nix can store arbitrary files, using nix-store --add, but, more
+commonly, paths are added as the result of running a derivation file generated
+using the Nix language. OSTree is build-system agnostic; filesystem trees are
+committed using a simple C API, and this is the only way to commit files.</p>
+
+<p>OSTree automatically shares the storage of identical data using hard links into
+a content-addressed store. Nix can deduplicate using hard links as well, using
+the auto-optimise-store option, but this is not on by default, and Nix does not
+guarantee that all of its files are in the content-addressed store. OSTree
+provides a git-like command line interface for browsing the content-addressed
+store, while Nix does not have this functionality.</p>
+
+<p>Nix used to use the immutable bit to prevent modifications to /nix/store, but
+now it uses a read-only bind mount. The bind mount can be privately remounted,
+allowing per-process privileged write access. OSTree uses the immutable
+bit on the root of the deployment, and mounts /usr as read-only.</p>
+
+<p>NixOS supports switching OS images on-the-fly, by maintaining both booted-system
+and current-system roots. It is not clear how well this approach works. OSTree
+currently requries a reboot to switch images.</p>
+
+<p>Finally, NixOS supports installing user-specific packages from trusted
+repositories without requiring root, using a trusted daemon.
+<a href="https://lwn.net/Articles/687909/">Flatpak</a>, based on OSTree, similarly has a
+policykit-based system helper that allows you to authenticate via polkit to
+install into the system repository.</p>
+<h2 id="solaris-ips">
+
+
+ <a href="#solaris-ips" class="anchor-heading" aria-labelledby="solaris-ips"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Solaris IPS
+
+
+</h2>
+
+
+<p>See
+<a href="http://hub.opensolaris.org/bin/view/Project+pkg/">Solaris IPS</a>. Broadly,
+this is a similar design as to a combination of BTRFS+RPM/deb. There
+is a bootloader management system which combines with the snapshots.
+It’s relatively well thought through - however, it is a client-side
+system assembly. If one wants to image servers and replicate
+reliably, that’d be a different system.</p>
+<h2 id="google-servers-custom-rsync-like-approach-live-updates">
+
+
+ <a href="#google-servers-custom-rsync-like-approach-live-updates" class="anchor-heading" aria-labelledby="google-servers-custom-rsync-like-approach-live-updates"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Google servers (custom rsync-like approach, live updates)
+
+
+</h2>
+
+
+<p>This paper talks about how Google was (at least at one point) managing
+updates for the host systems for some servers:
+<a href="https://www.usenix.org/node/177348">Live Upgrading Thousands of Servers from an Ancient Red Hat Distribution to 10 Year Newer Debian Based One (USENIX LISA 2013)</a></p>
+<h2 id="conary">
+
+
+ <a href="#conary" class="anchor-heading" aria-labelledby="conary"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Conary
+
+
+</h2>
+
+
+<p>See
+<a href="http://wiki.rpath.com/wiki/Conary:Updates_and_Rollbacks">Conary Updates and Rollbacks</a>. If
+rpm/dpkg are like CVS, Conary is closer to Subversion. It’s not bad,
+but e.g. its rollback model is rather ad-hoc and not atomic. It also
+is a fully client side system and doesn’t have an image-like
+replication with deltas.</p>
+<h2 id="bmap">
+
+
+ <a href="#bmap" class="anchor-heading" aria-labelledby="bmap"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> bmap
+
+
+</h2>
+
+
+<p>See
+<a href="https://source.tizen.org/documentation/reference/bmaptool/introduction">bmap</a>.
+A tool for optimized copying of disk images. Intended for offline use,
+so not directly comparable.</p>
+<h2 id="git">
+
+
+ <a href="#git" class="anchor-heading" aria-labelledby="git"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Git
+
+
+</h2>
+
+
+<p>Although OSTree has been called “Git for Binaries”, and the two share the idea
+of a hashed content store, the implementation details are quite different.
+OSTree supports extended attributes and uses SHA256 instead of Git’s SHA1. It
+“checks out” files via hardlinks, rather than copying, and thus requires the
+checkout to be immutable. At the moment, OSTree commits may have at most one
+parent, as opposed to Git which allows an arbitrary number. Git uses a
+smart-delta protocol for updates, while OSTree uses 1 HTTP request per changed
+file, or can generate static deltas.</p>
+<h2 id="conda">
+
+
+ <a href="#conda" class="anchor-heading" aria-labelledby="conda"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Conda
+
+
+</h2>
+
+
+<p><a href="http://conda.pydata.org/docs/">Conda</a> is an “OS-agnostic, system-level binary
+package manager and ecosystem”; although most well-known for its accompanying
+Python distribution anaconda, its scope has been expanding quickly. The package
+format is very similar to well-known ones such as RPM. However, unlike typical
+RPMs, the packages are built to be relocatable. Also, the package manager runs
+natively on Windows. Conda’s main advantage is its ability to install
+collections of packages into “environments” by unpacking them all to the same
+directory. Conda reduces duplication across environments using hardlinks,
+similar to OSTree’s sharing between deployments (although Conda uses package /
+file path instead of file hash). Overall, it is quite similar to rpm-ostree in
+functionality and scope.</p>
+<h2 id="rpm-ostree">
+
+
+ <a href="#rpm-ostree" class="anchor-heading" aria-labelledby="rpm-ostree"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> rpm-ostree
+
+
+</h2>
+
+
+<p>This builds on top of ostree to support building RPMs into OSTree images, and
+even composing RPMs on-the-fly using an overlay filesystem. It is being
+developed by Fedora, Red Hat, and CentOS as part of Project Atomic.</p>
+<h2 id="gnome-continuous">
+
+
+ <a href="#gnome-continuous" class="anchor-heading" aria-labelledby="gnome-continuous"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> GNOME Continuous
+
+
+</h2>
+
+
+<p>This is a service that incrementally rebuilds and tests GNOME on every commit.
+The need to make and distribute snapshots for this system was the original
+inspiration for ostree.</p>
+<h2 id="docker">
+
+
+ <a href="#docker" class="anchor-heading" aria-labelledby="docker"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Docker
+
+
+</h2>
+
+
+<p>It makes sense to compare OSTree and Docker as far as <em>wire formats</em>
+go. OSTree is not itself a container tool, but can be used as a
+transport/storage format for container tools.</p>
+
+<p>Docker has (at the time of this writing) two format versions (v1 and
+v2). v1 is deprecated, so we’ll look at <a href="https://github.com/docker/docker/blob/master/image/spec/v1.1.md">format version 2</a>.</p>
+
+<p>A Docker image is a series of layers, and a layer is essentially JSON
+metadata plus a tarball. The tarballs capture changes between layers,
+including handling deleting files in higher layers.</p>
+
+<p>Because the payload format is just tar, Docker hence captures
+(numeric) uid/gid and xattrs.</p>
+
+<p>This “layering” model is an interesting and powerful part of Docker,
+allowing different images to reference a shared base. OSTree doesn’t
+implement this natively, but it’s not difficult to implement in higher
+level tools. For example in
+<a href="https://github.com/flatpak/flatpak">flatpak</a>, there’s a concept of a
+SDK and runtime, and it would make a lot of sense for the SDK to
+depend on the runtime, to avoid clients downloading data twice (even
+if it’s deduplicated on disk).</p>
+
+<p>That gets to an advantage of OSTree over Docker; OSTree checksums
+individual files (not tarballs), and uses this for deduplication.
+Docker (natively) only shares storage via layering.</p>
+
+<p>The biggest feature OSTree has over Docker though is support for
+(static) deltas, and even without pre-configured static deltas, the
+<code class="language-plaintext highlighter-rouge">archive</code> format has “natural” deltas. Particularly for a “base
+operating system”, one really wants on-wire deltas. It’d likely be
+possible to extend Docker with this concept.</p>
+
+<p>A core challenge both share is around metadata (particularly signing)
+and search/discovery (the ostree <code class="language-plaintext highlighter-rouge">summary</code> file doesn’t scale very
+well).</p>
+
+<p>One major issue Docker has is that it <a href="https://github.com/projectatomic/skopeo/issues/11">checksums compressed data</a>,
+and furthermore the tar format is flexible, with multiple ways to represent data,
+making it hard to impossible to reassemble and verify from on-disk state.
+The <a href="https://github.com/docker/docker/blob/master/pkg/tarsum/tarsum_spec.md">tarsum</a> effort
+was intended to address this, but it was not adopted in the end for v2.</p>
+<h2 id="docker-related-balena">
+
+
+ <a href="#docker-related-balena" class="anchor-heading" aria-labelledby="docker-related-balena"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Docker-related: Balena
+
+
+</h2>
+
+
+<p>The <a href="https://github.com/resin-os/balena">Balena</a> project forks Docker and aims
+to even use Docker/OCI format for the root filesystem, and adds wire deltas
+using librsync. See also <a href="https://mail.gnome.org/archives/ostree-list/2017-December/msg00002.html">discussion on libostree-list</a>.</p>
+<h2 id="torizon-platform">
+
+
+ <a href="#torizon-platform" class="anchor-heading" aria-labelledby="torizon-platform"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Torizon Platform
+
+
+</h2>
+
+
+<p><a href="https://www.toradex.com/operating-systems/torizon">Torizon</a> is an open-source
+software platform that simplifies the development and maintenance of embedded
+Linux software. It is designed to be used out-of-the-box on devices requiring
+high reliability, allowing you to focus on your application and not on building
+and maintaining the operating system.</p>
+<h3 id="torizoncore">
+
+
+ <a href="#torizoncore" class="anchor-heading" aria-labelledby="torizoncore"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> TorizonCore
+
+
+</h3>
+
+
+<p>The platform OS - <a href="https://developer.toradex.com/knowledge-base/torizoncore-overview">TorizonCore</a> -
+is a minimal OS with a Docker runtime and libostree + Aktualizr. The main goal
+of this system is to allow application developers to use containers, while the
+maintainers of TorizonCore focus on the base system updates.</p>
+<h3 id="torizoncore-builder">
+
+
+ <a href="#torizoncore-builder" class="anchor-heading" aria-labelledby="torizoncore-builder"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> TorizonCore Builder
+
+
+</h3>
+
+
+<p>Since the TorizonCore OS is meant as a binary distribution, OS customization is
+made easier with <a href="https://developer.toradex.com/knowledge-base/torizoncore-builder-tool">TorizonCore Builder</a>,
+as the tool abstracts the handling of OSTree concepts from the final users.</p>
+<h3 id="torizon-ota">
+
+
+ <a href="#torizon-ota" class="anchor-heading" aria-labelledby="torizon-ota"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Torizon OTA
+
+
+</h3>
+
+
+<p><a href="https://developer.toradex.com/knowledge-base/torizon-update-system">Torizon OTA</a>
+is a hosted OTA update system that provides OS updates to TorizonCore using
+OSTree and Aktualizr.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/related-projects.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/repo/index.html b/repo/index.html
new file mode 100644
index 00000000..ee3773f7
--- /dev/null
+++ b/repo/index.html
@@ -0,0 +1,488 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Anatomy of an OSTree repository | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Anatomy of an OSTree repository" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/repo/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/repo/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Anatomy of an OSTree repository" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Anatomy of an OSTree repository","url":"https://ostreedev.github.io/ostree/repo/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item active"><a href="/ostree/repo/" class="nav-list-link active">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item"><a href="/ostree/repository-management/" class="nav-list-link">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="anatomy-of-an-ostree-repository">
+
+
+ <a href="#anatomy-of-an-ostree-repository" class="anchor-heading" aria-labelledby="anatomy-of-an-ostree-repository"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Anatomy of an OSTree repository
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#core-object-types-and-data-model" id="markdown-toc-core-object-types-and-data-model">Core object types and data model</a> <ol>
+ <li><a href="#commit-objects" id="markdown-toc-commit-objects">Commit objects</a></li>
+ <li><a href="#dirtree-objects" id="markdown-toc-dirtree-objects">Dirtree objects</a></li>
+ <li><a href="#dirmeta-objects" id="markdown-toc-dirmeta-objects">Dirmeta objects</a></li>
+ <li><a href="#content-objects" id="markdown-toc-content-objects">Content objects</a></li>
+ <li><a href="#xattrs-objects" id="markdown-toc-xattrs-objects">Xattrs objects</a></li>
+ </ol>
+ </li>
+ <li><a href="#repository-types-and-locations" id="markdown-toc-repository-types-and-locations">Repository types and locations</a> <ol>
+ <li><a href="#refs" id="markdown-toc-refs">Refs</a></li>
+ <li><a href="#the-summary-file" id="markdown-toc-the-summary-file">The summary file</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+</ol>
+<h2 id="core-object-types-and-data-model">
+
+
+ <a href="#core-object-types-and-data-model" class="anchor-heading" aria-labelledby="core-object-types-and-data-model"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Core object types and data model
+
+
+</h2>
+
+
+<p>OSTree is deeply inspired by git; the core layer is a userspace
+content-addressed versioning filesystem. It is worth taking some time
+to familiarize yourself with
+<a href="http://git-scm.com/book/en/Git-Internals">Git Internals</a>, as this
+section will assume some knowledge of how git works.</p>
+
+<p>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. And most crucially, its content objects include uid, gid,
+and extended attributes (but still no timestamps).</p>
+<h3 id="commit-objects">
+
+
+ <a href="#commit-objects" class="anchor-heading" aria-labelledby="commit-objects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Commit objects
+
+
+</h3>
+
+
+<p>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.</p>
+<h3 id="dirtree-objects">
+
+
+ <a href="#dirtree-objects" class="anchor-heading" aria-labelledby="dirtree-objects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Dirtree objects
+
+
+</h3>
+
+
+<p>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. This type of object is stored as files
+ending with <code class="language-plaintext highlighter-rouge">.dirtree</code> in the objects directory.</p>
+<h3 id="dirmeta-objects">
+
+
+ <a href="#dirmeta-objects" class="anchor-heading" aria-labelledby="dirmeta-objects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Dirmeta objects
+
+
+</h3>
+
+
+<p>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.
+These type of objects are stored as files ending with <code class="language-plaintext highlighter-rouge">.dirmeta</code>
+in the objects directory.</p>
+<h3 id="content-objects">
+
+
+ <a href="#content-objects" class="anchor-heading" aria-labelledby="content-objects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Content objects
+
+
+</h3>
+
+
+<p>Unlike the first three object types which are metadata, designed to be
+<code class="language-plaintext highlighter-rouge">mmap()</code>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. These parts together
+form the SHA256 hash for content objects. The content type objects in
+this format exist only in <code class="language-plaintext highlighter-rouge">archive</code> OSTree repositories. Today the
+content part is gzip’ed and the objects are stored as files ending
+with <code class="language-plaintext highlighter-rouge">.filez</code> in the objects directory. Because the SHA256 hash is
+formed over the uncompressed content, these files do not match the
+hash they are named as.</p>
+
+<p>The OSTree data format intentionally does not contain timestamps. The reasoning
+is that data files may be downloaded at different times, and by different build
+systems, and so will have different timestamps but identical physical content.
+These files may be large, so most users would like them to be shared, both in
+the repository and between the repository and deployments.</p>
+
+<p>This could cause problems with programs that check if files are out-of-date by
+comparing timestamps. For Git, the logical choice is to not mess with
+timestamps, because unnecessary rebuilding is better than a broken tree.
+However, OSTree has to hardlink files to check them out, and commits are assumed
+to be internally consistent with no build steps needed. For this reason, OSTree
+acts as though all timestamps are set to time_t 0, so that comparisons will be
+considered up-to-date. Note that for a few releases, OSTree used 1 to fix
+warnings such as GNU Tar emitting “implausibly old time stamp” with 0; however,
+until we have a mechanism to transition cleanly to 1, for compatibilty OSTree
+is reverted to use zero again.</p>
+<h3 id="xattrs-objects">
+
+
+ <a href="#xattrs-objects" class="anchor-heading" aria-labelledby="xattrs-objects"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Xattrs objects
+
+
+</h3>
+
+
+<p>In some repository modes (e.g. <code class="language-plaintext highlighter-rouge">bare-split-xattrs</code>), xattrs are stored on the
+side of the content objects they refer to. This is done via two dedicated
+object types, <code class="language-plaintext highlighter-rouge">file-xattrs</code> and <code class="language-plaintext highlighter-rouge">file-xattrs-link</code>.</p>
+
+<p><code class="language-plaintext highlighter-rouge">file-xattrs</code> store xattrs data, encoded as GVariant. Each object is keyed by
+the checksum of the xattrs content, allowing for multiple references.</p>
+
+<p><code class="language-plaintext highlighter-rouge">file-xattrs-link</code> are hardlinks which are associated to file objects.
+Each object is keyed by the same checksum of the corresponding file
+object. The target of the hardlink is an existing <code class="language-plaintext highlighter-rouge">file-xattrs</code> object.
+In case of reaching the limit of too many links, this object could be
+a plain file too.</p>
+<h1 id="repository-types-and-locations">
+
+
+ <a href="#repository-types-and-locations" class="anchor-heading" aria-labelledby="repository-types-and-locations"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Repository types and locations
+
+
+</h1>
+
+
+<p>Also unlike git, an OSTree repository can be in one of five separate
+modes: <code class="language-plaintext highlighter-rouge">bare</code>, <code class="language-plaintext highlighter-rouge">bare-split-xattrs, </code><code class="language-plaintext highlighter-rouge">bare-user</code>, <code class="language-plaintext highlighter-rouge">bare-user-only</code>, and
+<code class="language-plaintext highlighter-rouge">archive</code>.</p>
+
+<p>A <code class="language-plaintext highlighter-rouge">bare</code> repository is one where content files are just stored as regular
+files; it’s designed to be the source of a “hardlink farm”, where each
+operating system checkout is merely links into it. If you want to store files
+owned by e.g. root in this mode, you must run OSTree as root.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">bare-split-xattrs</code> mode is similar to the above one, but it does store
+xattrs as separate objects. This is meant to avoid conflicts with
+kernel-enforced constraints (e.g. on SELinux labels) and with other softwares
+that may perform ephemeral changes to xattrs (e.g. container runtimes).</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">bare-user</code> mode is a later addition that is like <code class="language-plaintext highlighter-rouge">bare</code> in that
+files are unpacked, but it can (and should generally) be created as
+non-root. In this mode, extended metadata such as owner uid, gid, and
+extended attributes are stored in extended attributes under the name
+<code class="language-plaintext highlighter-rouge">user.ostreemeta</code> but not actually applied.
+The <code class="language-plaintext highlighter-rouge">bare-user</code> mode is useful for build systems that run as non-root
+but want to generate root-owned content, as well as non-root container
+systems.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">bare-user-only</code> mode is a variant to the <code class="language-plaintext highlighter-rouge">bare-user</code> mode. Unlike
+<code class="language-plaintext highlighter-rouge">bare-user</code>, neither ownership nor extended attributes are stored. These repos
+are meant to to be checked out in user mode (with the <code class="language-plaintext highlighter-rouge">-U</code> flag), where this
+information is not applied anyway. Hence this mode may lose metadata.
+The main advantage of <code class="language-plaintext highlighter-rouge">bare-user-only</code> is that repos can be stored on
+filesystems which do not support extended attributes, such as tmpfs.</p>
+
+<p>In contrast, the <code class="language-plaintext highlighter-rouge">archive</code> mode is designed for serving via plain
+HTTP. Like tar files, it can be read/written by non-root users.</p>
+
+<p>On an OSTree-deployed system, the “system repository” is <code class="language-plaintext highlighter-rouge">/ostree/repo</code>. It can
+be read by any uid, but only written by root. The <code class="language-plaintext highlighter-rouge">ostree</code> command will by
+default operate on the system repository; you may provide the <code class="language-plaintext highlighter-rouge">--repo</code> argument
+to override this, or set the <code class="language-plaintext highlighter-rouge">$OSTREE_REPO</code> environment variable.</p>
+<h2 id="refs">
+
+
+ <a href="#refs" class="anchor-heading" aria-labelledby="refs"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Refs
+
+
+</h2>
+
+
+<p>Like git, OSTree uses the terminology “references” (abbreviated
+“refs”) which are text files that name (refer to) particular
+commits. See the
+<a href="https://git-scm.com/book/en/v2/Git-Internals-Git-References">Git Documentation</a>
+for information on how git uses them. Unlike git though, it doesn’t
+usually make sense to have a “main” branch. There is a convention
+for references in OSTree that looks like this:
+<code class="language-plaintext highlighter-rouge">exampleos/buildmain/x86_64-runtime</code> and
+<code class="language-plaintext highlighter-rouge">exampleos/buildmain/x86_64-devel-debug</code>. These two refs point to
+two different generated filesystem trees. In this example, the
+“runtime” tree contains just enough to run a basic system, and
+“devel-debug” contains all of the developer tools and debuginfo.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">ostree</code> supports a simple syntax using the caret <code class="language-plaintext highlighter-rouge">^</code> to refer to
+the parent of a given commit. For example,
+<code class="language-plaintext highlighter-rouge">exampleos/buildmain/x86_64-runtime^</code> refers to the previous build,
+and <code class="language-plaintext highlighter-rouge">exampleos/buildmain/x86_64-runtime^^</code> refers to the one before
+that.</p>
+<h2 id="the-summary-file">
+
+
+ <a href="#the-summary-file" class="anchor-heading" aria-labelledby="the-summary-file"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> The summary file
+
+
+</h2>
+
+
+<p>A later addition to OSTree is the concept of a “summary” file, created
+via the <code class="language-plaintext highlighter-rouge">ostree summary -u</code> command. This was introduced for a few
+reasons. A primary use case is to be compatible with
+<a href="https://en.wikipedia.org/wiki/Metalink">Metalink</a>, which requires a
+single file with a known checksum as a target.</p>
+
+<p>The summary file primarily contains two mappings:</p>
+
+<ul>
+ <li>A mapping of the refs and their checksums, equivalent to fetching
+the ref file individually</li>
+ <li>A list of all static deltas, along with their metadata checksums</li>
+</ul>
+
+<p>This currently means that it grows linearly with both items. On the
+other hand, using the summary file, a client can enumerate branches.</p>
+
+<p>Further, fetching the summary file over e.g. pinned TLS creates a strong
+end-to-end verification of the commit or static delta.</p>
+
+<p>The summary file can also be GPG signed (detached). This is currently
+the only way to provide GPG signatures (transitively) on deltas.</p>
+
+<p>If a repository administrator creates a summary file, they must
+thereafter run <code class="language-plaintext highlighter-rouge">ostree summary -u</code> to update it whenever a ref is
+updated or a static delta is generated.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/repo.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+
diff --git a/repository-management/index.html b/repository-management/index.html
new file mode 100644
index 00000000..f094b873
--- /dev/null
+++ b/repository-management/index.html
@@ -0,0 +1,543 @@
+
+
+<!DOCTYPE html>
+
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge">
+
+ <link rel="stylesheet" href="/ostree/assets/css/just-the-docs-default.css">
+
+
+
+
+ <script src="/ostree/assets/js/vendor/lunr.min.js"></script>
+
+
+
+
+ <script src="/ostree/assets/js/just-the-docs.js"></script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+
+
+ <!-- Begin Jekyll SEO tag v2.8.0 -->
+<title>Managing content in OSTree repositories | ostreedev/ostree</title>
+<meta name="generator" content="Jekyll v3.9.3" />
+<meta property="og:title" content="Managing content in OSTree repositories" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="ostree documentation" />
+<meta property="og:description" content="ostree documentation" />
+<link rel="canonical" href="https://ostreedev.github.io/ostree/repository-management/" />
+<meta property="og:url" content="https://ostreedev.github.io/ostree/repository-management/" />
+<meta property="og:site_name" content="ostreedev/ostree" />
+<meta property="og:type" content="website" />
+<meta name="twitter:card" content="summary" />
+<meta property="twitter:title" content="Managing content in OSTree repositories" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"WebPage","description":"ostree documentation","headline":"Managing content in OSTree repositories","url":"https://ostreedev.github.io/ostree/repository-management/"}</script>
+<!-- End Jekyll SEO tag -->
+
+
+
+
+</head>
+
+<body>
+ <a class="skip-to-main" href="#main-content">Skip to main content</a>
+ <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
+ <symbol id="svg-link" viewBox="0 0 24 24">
+ <title>Link</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
+ </svg>
+</symbol>
+
+ <symbol id="svg-menu" viewBox="0 0 24 24">
+ <title>Menu</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
+ <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
+ </svg>
+</symbol>
+
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
+ <title>Expand</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
+ <polyline points="9 18 15 12 9 6"></polyline>
+ </svg>
+</symbol>
+
+ <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
+<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
+ <title id="svg-external-link-title">(external link)</title>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
+</symbol>
+
+
+ <symbol id="svg-doc" viewBox="0 0 24 24">
+ <title>Document</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
+ </svg>
+</symbol>
+
+ <symbol id="svg-search" viewBox="0 0 24 24">
+ <title>Search</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
+ <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
+ </svg>
+</symbol>
+
+
+
+ <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
+<symbol id="svg-copy" viewBox="0 0 16 16">
+ <title>Copy</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+ <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+ </svg>
+</symbol>
+<symbol id="svg-copied" viewBox="0 0 16 16">
+ <title>Copied</title>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
+ <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
+ <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
+ </svg>
+</symbol>
+
+
+</svg>
+
+ <div class="side-bar">
+ <div class="site-header">
+ <a href="/ostree/" class="site-title lh-tight">
+ ostreedev/ostree
+
+</a>
+ <a href="#" id="menu-button" class="site-button">
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
+ </a>
+ </div>
+ <nav aria-label="Main" id="site-nav" class="site-nav">
+
+
+ <ul class="nav-list"><li class="nav-list-item"><a href="/ostree/" class="nav-list-link">libostree</a></li><li class="nav-list-item"><a href="/ostree/introduction/" class="nav-list-link">OSTree Overview</a></li><li class="nav-list-item"><a href="/ostree/repo/" class="nav-list-link">Anatomy of an OSTree repository</a></li><li class="nav-list-item"><a href="/ostree/deployment/" class="nav-list-link">Deployments</a></li><li class="nav-list-item"><a href="/ostree/atomic-upgrades/" class="nav-list-link">Atomic Upgrades</a></li><li class="nav-list-item"><a href="/ostree/adapting-existing/" class="nav-list-link">Adapting existing mainstream distributions</a></li><li class="nav-list-item"><a href="/ostree/formats/" class="nav-list-link">OSTree data formats</a></li><li class="nav-list-item"><a href="/ostree/buildsystem-and-repos/" class="nav-list-link">Writing a buildsystem and managing repositories</a></li><li class="nav-list-item active"><a href="/ostree/repository-management/" class="nav-list-link active">Managing content in OSTree repositories</a></li><li class="nav-list-item"><a href="/ostree/related-projects/" class="nav-list-link">Related Projects</a></li><li class="nav-list-item"><a href="/ostree/ima/" class="nav-list-link">Using Linux IMA with OSTree</a></li><li class="nav-list-item"><a href="/ostree/CONTRIBUTING/" class="nav-list-link">Contributing</a></li><li class="nav-list-item"><a href="/ostree/contributing-tutorial/" class="nav-list-link">OSTree Contributing Tutorial</a></li><li class="nav-list-item"><a href="/ostree/README-historical/" class="nav-list-link">Historical OSTree README</a></li></ul>
+
+ </nav>
+
+
+
+ <footer class="site-footer">
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
+ </footer>
+
+</div>
+
+ <div class="main" id="top">
+ <div id="main-header" class="main-header">
+
+
+
+<div class="search">
+ <div class="search-input-wrap">
+ <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search ostreedev/ostree" aria-label="Search ostreedev/ostree" autocomplete="off">
+ <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
+ </div>
+ <div id="search-results" class="search-results"></div>
+</div>
+
+
+
+
+ <nav aria-label="Auxiliary" class="aux-nav">
+ <ul class="aux-nav-list">
+
+ <li class="aux-nav-list-item">
+ <a href="https://github.com/ostreedev/ostree" class="site-button"
+
+ >
+ OSTree on GitHub
+ </a>
+ </li>
+
+ </ul>
+</nav>
+
+
+</div>
+
+ <div id="main-content-wrap" class="main-content-wrap">
+
+
+
+
+ <div id="main-content" class="main-content" role="main">
+
+ <h1 class="no_toc" id="managing-content-in-ostree-repositories">
+
+
+ <a href="#managing-content-in-ostree-repositories" class="anchor-heading" aria-labelledby="managing-content-in-ostree-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Managing content in OSTree repositories
+
+
+</h1>
+
+
+<ol id="markdown-toc">
+ <li><a href="#mirroring-repositories" id="markdown-toc-mirroring-repositories">Mirroring repositories</a></li>
+ <li><a href="#separate-development-vs-release-repositories" id="markdown-toc-separate-development-vs-release-repositories">Separate development vs release repositories</a></li>
+ <li><a href="#promoting-content-along-ostree-branches---buildmain-smoketested" id="markdown-toc-promoting-content-along-ostree-branches---buildmain-smoketested">Promoting content along OSTree branches - “buildmain”, “smoketested”</a></li>
+ <li><a href="#promoting-content-between-ostree-repositories" id="markdown-toc-promoting-content-between-ostree-repositories">Promoting content between OSTree repositories</a></li>
+ <li><a href="#derived-data---static-deltas-and-the-summary-file" id="markdown-toc-derived-data---static-deltas-and-the-summary-file">Derived data - static deltas and the summary file</a></li>
+ <li><a href="#pruning-our-build-and-dev-repositories" id="markdown-toc-pruning-our-build-and-dev-repositories">Pruning our build and dev repositories</a></li>
+ <li><a href="#generating-scratch-deltas-for-efficient-initial-downloads" id="markdown-toc-generating-scratch-deltas-for-efficient-initial-downloads">Generating “scratch” deltas for efficient initial downloads</a> <ol>
+ <li><a href="#licensing-for-this-document" id="markdown-toc-licensing-for-this-document">Licensing for this document:</a></li>
+ </ol>
+ </li>
+</ol>
+
+<p>Once you have a build system going, if you actually want client
+systems to retrieve the content, you will quickly feel a need for
+“repository management”.</p>
+
+<p>The command line tool <code class="language-plaintext highlighter-rouge">ostree</code> does cover some core functionality, but
+doesn’t include very high level workflows. One reason is that how
+content is delivered and managed has concerns very specific to the
+organization. For example, some operating system content vendors may
+want integration with a specific errata notification system when
+generating commits.</p>
+
+<p>In this section, we will describe some high level ideas and methods
+for managing content in OSTree repositories, mostly independent of any
+particular model or tool. That said, there is an associated upstream
+project <a href="https://github.com/ostreedev/ostree-releng-scripts">ostree-releng-scripts</a>
+which has some scripts that are intended to implement portions of
+this document.</p>
+
+<p>Another example of software which can assist in managing OSTree
+repositories today is the <a href="http://www.pulpproject.org/">Pulp Project</a>,
+which has a
+<a href="https://docs.pulpproject.org/plugins/pulp_ostree/index.html">Pulp OSTree plugin</a>.</p>
+<h2 id="mirroring-repositories">
+
+
+ <a href="#mirroring-repositories" class="anchor-heading" aria-labelledby="mirroring-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Mirroring repositories
+
+
+</h2>
+
+
+<p>It’s very common to want to perform a full or partial mirror, in
+particular across organizational boundaries (e.g. an upstream OS
+provider, and a user that wants offline and faster access to the
+content). OSTree supports both full and partial mirroring of the base
+<code class="language-plaintext highlighter-rouge">archive</code> content, although not yet of static deltas.</p>
+
+<p>To create a mirror, first create an <code class="language-plaintext highlighter-rouge">archive</code> repository (you don’t
+need to run this as root), then add the upstream as a remote, then use
+<code class="language-plaintext highlighter-rouge">pull --mirror</code>.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo init --mode=archive
+ostree --repo=repo remote add exampleos https://exampleos.com/ostree/repo
+ostree --repo=repo pull --mirror exampleos:exampleos/x86_64/standard
+</code></pre></div></div>
+
+<p>You can use the <code class="language-plaintext highlighter-rouge">--depth=-1</code> option to retrieve all history, or a
+positive integer like <code class="language-plaintext highlighter-rouge">3</code> to retrieve just the last 3 commits.</p>
+
+<p>See also the <code class="language-plaintext highlighter-rouge">rsync-repos</code> script in
+<a href="https://github.com/ostreedev/ostree-releng-scripts">ostree-releng-scripts</a>.</p>
+<h2 id="separate-development-vs-release-repositories">
+
+
+ <a href="#separate-development-vs-release-repositories" class="anchor-heading" aria-labelledby="separate-development-vs-release-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Separate development vs release repositories
+
+
+</h2>
+
+
+<p>By default, OSTree accumulates server side history. This is actually
+optional in that your build system can (using the API) write a commit
+with no parent. But first, we’ll investigate the ramifications of
+server side history.</p>
+
+<p>Many content vendors will want to separate their internal development
+with what is made public to the world. Therefore, you will want (at
+least) two OSTree repositories, we’ll call them “dev” and “prod”.</p>
+
+<p>To phrase this another way, let’s say you have a continuous delivery
+system which is building from git and committing into your “dev”
+OSTree repository. This might happen tens to hundreds of times per
+day. That’s a substantial amount of history over time, and it’s
+unlikely most of your content consumers (i.e. not developers/testers)
+will be interested in all of it.</p>
+
+<p>The original vision of OSTree was to fulfill this “dev” role, and in
+particular the “archive” format was designed for it.</p>
+
+<p>Then, what you’ll want to do is promote content from “dev” to “prod”.
+We’ll discuss this later, but first, let’s talk about promotion
+<em>inside</em> our “dev” repository.</p>
+<h2 id="promoting-content-along-ostree-branches---buildmain-smoketested">
+
+
+ <a href="#promoting-content-along-ostree-branches---buildmain-smoketested" class="anchor-heading" aria-labelledby="promoting-content-along-ostree-branches---buildmain-smoketested"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Promoting content along OSTree branches - “buildmain”, “smoketested”
+
+
+</h2>
+
+
+<p>Besides multiple repositories, OSTree also supports multiple branches
+inside one repository, equivalent to git’s branches. We saw in an
+earlier section an example branch name like
+<code class="language-plaintext highlighter-rouge">exampleos/x86_64/standard</code>. Choosing the branch name for your “prod”
+repository is absolutely critical as client systems will reference it.
+It becomes an important part of your face to the world, in the same
+way the “main” branch in a git repository is.</p>
+
+<p>But with your “dev” repository internally, it can be very useful to
+use OSTree’s branching concepts to represent different stages in a
+software delivery pipeline.</p>
+
+<p>Deriving from <code class="language-plaintext highlighter-rouge">exampleos/x86_64/standard</code>, let’s say our “dev”
+repository contains <code class="language-plaintext highlighter-rouge">exampleos/x86_64/buildmain/standard</code>. We choose the
+term “buildmain” to represent something that came straight from git
+main. It may not be tested very much.</p>
+
+<p>Our next step should be to hook up a testing system (Jenkins,
+Buildbot, etc.) to this. When a build (commit) passes some tests, we
+want to “promote” that commit. Let’s create a new branch called
+<code class="language-plaintext highlighter-rouge">smoketested</code> to say that some basic sanity checks pass on the
+complete system. This might be where human testers get involved, for
+example.</p>
+
+<p>This is a basic way to “promote” the <code class="language-plaintext highlighter-rouge">buildmain</code> commit that passed testing:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree commit -b exampleos/x86_64/smoketested/standard -s 'Passed tests' --tree=ref=aec070645fe53...
+</code></pre></div></div>
+
+<p>Here we’re generating a new commit object (perhaps include in the commit
+log links to build logs, etc.), but we’re reusing the <em>content</em> from the <code class="language-plaintext highlighter-rouge">buildmain</code>
+commit <code class="language-plaintext highlighter-rouge">aec070645fe53</code> that passed the smoketests.</p>
+
+<p>For a more sophisticated implementation of this model, see the
+<a href="https://github.com/ostreedev/ostree-releng-scripts/blob/main/do-release-tags">do-release-tags</a>
+script, which includes support for things like propagating version
+numbers across commit promotion.</p>
+
+<p>We can easily generalize this model to have an arbitrary number of
+stages like <code class="language-plaintext highlighter-rouge">exampleos/x86_64/stage-1-pass/standard</code>,
+<code class="language-plaintext highlighter-rouge">exampleos/x86_64/stage-2-pass/standard</code>, etc. depending on business
+requirements and logic.</p>
+
+<p>In this suggested model, the “stages” are increasingly expensive. The
+logic is that we don’t want to spend substantial time on e.g. network
+performance tests if something basic like a systemd unit file fails on
+bootup.</p>
+<h2 id="promoting-content-between-ostree-repositories">
+
+
+ <a href="#promoting-content-between-ostree-repositories" class="anchor-heading" aria-labelledby="promoting-content-between-ostree-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Promoting content between OSTree repositories
+
+
+</h2>
+
+
+<p>Now, we have our internal continuous delivery stream flowing, it’s
+being tested and works. We want to periodically take the latest
+commit on <code class="language-plaintext highlighter-rouge">exampleos/x86_64/stage-3-pass/standard</code> and expose it in
+our “prod” repository as <code class="language-plaintext highlighter-rouge">exampleos/x86_64/standard</code>, with a much
+smaller history.</p>
+
+<p>We’ll have other business requirements such as writing release notes
+(and potentially putting them in the OSTree commit message), etc.</p>
+
+<p>In <a href="/ostree/buildsystem-and-repos/">Build Systems</a> we saw how the
+<code class="language-plaintext highlighter-rouge">pull-local</code> command can be used to migrate content from the “build”
+repository (in <code class="language-plaintext highlighter-rouge">bare-user</code> mode) into an <code class="language-plaintext highlighter-rouge">archive</code> repository for
+serving to client systems.</p>
+
+<p>Following this section, we now have three repositories, let’s call
+them <code class="language-plaintext highlighter-rouge">repo-build</code>, <code class="language-plaintext highlighter-rouge">repo-dev</code>, and <code class="language-plaintext highlighter-rouge">repo-prod</code>. We’ve been pulling
+content from <code class="language-plaintext highlighter-rouge">repo-build</code> into <code class="language-plaintext highlighter-rouge">repo-dev</code> (which involves gzip
+compression among other things since it is a format change).</p>
+
+<p>When using <code class="language-plaintext highlighter-rouge">pull-local</code> to migrate content between two <code class="language-plaintext highlighter-rouge">archive</code>
+repositories, the binary content is taken unmodified. Let’s go ahead
+and generate a new commit in our prod repository:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>checksum=$(ostree --repo=repo-dev rev-parse exampleos/x86_64/stage-3-pass/standard`)
+ostree --repo=repo-prod pull-local repo-dev ${checksum}
+ostree --repo=repo-prod commit -b exampleos/x86_64/standard \
+ -s 'Release 1.2.3' --add-metadata-string=version=1.2.3 \
+ --tree=ref=${checksum}
+</code></pre></div></div>
+
+<p>There are a few things going on here. First, we found the latest
+commit checksum for the “stage-3 dev”, and told <code class="language-plaintext highlighter-rouge">pull-local</code> to copy
+it, without using the branch name. We do this because we don’t want
+to expose the <code class="language-plaintext highlighter-rouge">exampleos/x86_64/stage-3-pass/standard</code> branch name in
+our “prod” repository.</p>
+
+<p>Next, we generate a new commit in prod that’s referencing the exact
+binary content in dev. If the “dev” and “prod” repositories are on
+the same Unix filesystem, (like git) OSTree will make use of hard
+links to avoid copying any content at all - making the process very
+fast.</p>
+
+<p>Another interesting thing to notice here is that we’re adding an
+<code class="language-plaintext highlighter-rouge">version</code> metadata string to the commit. This is an optional
+piece of metadata, but we are encouraging its use in the OSTree
+ecosystem of tools. Commands like <code class="language-plaintext highlighter-rouge">ostree admin status</code> show it by
+default.</p>
+<h2 id="derived-data---static-deltas-and-the-summary-file">
+
+
+ <a href="#derived-data---static-deltas-and-the-summary-file" class="anchor-heading" aria-labelledby="derived-data---static-deltas-and-the-summary-file"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Derived data - static deltas and the summary file
+
+
+</h2>
+
+
+<p>As discussed in <a href="/ostree/formats/">Formats</a>, the <code class="language-plaintext highlighter-rouge">archive</code> repository we
+use for “prod” requires one HTTP fetch per client request by default.
+If we’re only performing a release e.g. once a week, it’s appropriate
+to use “static deltas” to speed up client updates.</p>
+
+<p>So once we’ve used the above command to pull content from <code class="language-plaintext highlighter-rouge">repo-dev</code>
+into <code class="language-plaintext highlighter-rouge">repo-prod</code>, let’s generate a delta against the previous commit:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo-prod static-delta generate exampleos/x86_64/standard
+</code></pre></div></div>
+
+<p>We may also want to support client systems upgrading from <em>two</em>
+commits previous.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo-prod static-delta generate --from=exampleos/x86_64/standard^^ --to=exampleos/x86_64/standard
+</code></pre></div></div>
+
+<p>Generating a full permutation of deltas across all prior versions can
+get expensive, and there is some support in the OSTree core for static
+deltas which “recurse” to a parent. This can help create a model
+where clients download a chain of deltas. Support for this is not
+fully implemented yet however.</p>
+
+<p>Regardless of whether or not you choose to generate static deltas,
+you should update the summary file:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo-prod summary -u
+</code></pre></div></div>
+
+<p>(Remember, the <code class="language-plaintext highlighter-rouge">summary</code> command cannot be run concurrently, so this
+ should be triggered serially by other jobs).</p>
+
+<p>There is some more information on the design of the summary file in
+<a href="/ostree/repo/">Repo</a>.</p>
+<h2 id="pruning-our-build-and-dev-repositories">
+
+
+ <a href="#pruning-our-build-and-dev-repositories" class="anchor-heading" aria-labelledby="pruning-our-build-and-dev-repositories"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Pruning our build and dev repositories
+
+
+</h2>
+
+
+<p>First, the OSTree author believes you should <em>not</em> use OSTree as a
+“primary content store”. The binaries in an OSTree repository should
+be derived from a git repository. Your build system should record
+proper metadata such as the configuration options used to generate the
+build, and you should be able to rebuild it if necessary. Art assets
+should be stored in a system that’s designed for that
+(e.g. <a href="https://git-lfs.github.com/">Git LFS</a>).</p>
+
+<p>Another way to say this is that five years down the line, we are
+unlikely to care about retaining the exact binaries from an OS build
+on Wednesday afternoon three years ago.</p>
+
+<p>We want to save space and prune our “dev” repository.</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ostree --repo=repo-dev prune --refs-only --keep-younger-than="6 months ago"
+</code></pre></div></div>
+
+<p>That will truncate the history older than 6 months. Deleted commits
+will have “tombstone markers” added so that you know they were
+explicitly deleted, but all content in them (that is not referenced by
+a still retained commit) will be garbage collected.</p>
+<h2 id="generating-scratch-deltas-for-efficient-initial-downloads">
+
+
+ <a href="#generating-scratch-deltas-for-efficient-initial-downloads" class="anchor-heading" aria-labelledby="generating-scratch-deltas-for-efficient-initial-downloads"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Generating “scratch” deltas for efficient initial downloads
+
+
+</h2>
+
+
+<p>In general, the happy path for OSTree downloads is via static deltas.
+If you are in a situation where you want to download an OSTree
+commit from an uninitialized repo (or one with unrelated history), you
+can generate “scratch” (aka <code class="language-plaintext highlighter-rouge">--empty</code> deltas) which bundle all
+objects for that commit.</p>
+
+<p>The tradeoff here is increasing server disk space in return
+for many fewer client HTTP requests.</p>
+
+<p>For example:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ostree --repo=/path/to/repo static-delta generate --empty --to=exampleos/x86_64/testing-devel
+$ ostree --repo=/path/to/repo summary -u
+</code></pre></div></div>
+
+<p>After that, clients fetching that commit will prefer fetching the “scratch” delta if they don’t have the original ref.</p>
+<h6 id="licensing-for-this-document">
+
+
+ <a href="#licensing-for-this-document" class="anchor-heading" aria-labelledby="licensing-for-this-document"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Licensing for this document:
+
+
+</h6>
+
+<p><code class="language-plaintext highlighter-rouge">SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)</code></p>
+
+
+
+
+
+
+
+ <hr>
+ <footer>
+
+
+ <p class="text-small text-grey-dk-100 mb-0">Copyright &copy; <a href="https://www.redhat.com">Red Hat, Inc.</a> and <a href="https://github.com/ostreedev">others</a>.</p>
+
+
+ <div class="d-flex mt-2">
+
+
+ <p class="text-small text-grey-dk-000 mb-0">
+ <a href="https://github.com/ostreedev/ostree/tree/main/docs/repository-management.md" id="edit-this-page">Edit this page on GitHub</a>
+ </p>
+
+ </div>
+
+ </footer>
+
+
+
+ </div>
+ </div>
+
+
+
+<div class="search-overlay"></div>
+
+
+ </div>
+
+
+</body>
+</html>
+