blob: 028f4cd02a95fd3e2ec7d25810daa2bc41f0dabe [file] [log] [blame]
/**
* Provides record classes describing the elements of <a
* href="https://ostreedev.github.io/ostree/">OSTree</a> repositories and factory methods to create
* {@link eu.mulk.jgvariant.core.Decoder} instances for them.
*
* <h2>OStree repository structure</h2>
*
* <p>An OSTree repository has the following layout:
*
* <table>
* <caption>OSTree repository layout</caption>
*
* <tr>
* <td>{@code config}</td>
* <td>
* <p>
* A plain text file that contains various settings. Among other things, this defines
* the <a href="https://ostreedev.github.io/ostree/formats/#the-archive-format">archive
* format</a> of the repository and whether files are compressed ({@code mode=archive-z2})
* or plain ({@code mode=bare}, {@code mode=bare-user}).
* </p>
* </td>
* </tr>
*
* <tr>
* <td>{@code summary}</td>
* <td>
* <p>
* A {@link eu.mulk.jgvariant.ostree.Summary} object containing information on what is
* available under {@code refs/}, {@code deltas/}, and {@code delta-indexes/}.
* </p>
*
* <p>This file may or may not exist and, if it exists, may or may not be up to date.</p>
* </td>
* </tr>
*
* <tr>
* <td>{@code refs/heads/{name...}}</td>
* <td>Plain-text files containing {@link eu.mulk.jgvariant.ostree.Checksum}s in hex format
* (see {@link eu.mulk.jgvariant.ostree.Checksum#ofHex}) referring to
* {@link eu.mulk.jgvariant.ostree.Commit} objects. See below for the layout of the
* {@code objects/} directory that this refers to.</td>
* </tr>
*
* <tr>
* <td>{@code objects/{checksumHead}/{checksumRest}.{fileExtension}}</td>
* <td>
* <p>
* Objects of various types as described by {@link eu.mulk.jgvariant.ostree.ObjectType}
* and keyed by {@link eu.mulk.jgvariant.ostree.Checksum}.
* </p>
*
* <p>
* Among other things, this is where you find {@link eu.mulk.jgvariant.ostree.Commit}
* ({@code .commit)}, {@link eu.mulk.jgvariant.ostree.DirTree} ({@code .dirtree}),
* and {@link eu.mulk.jgvariant.ostree.DirMeta} ({@code .dirmeta}) objects as well as
* plain ({@code .file}) or compressed files ({@code .filez}).
* </p>
*
* <p>
* Static delta information is not stored here, but in the {@code deltas/} and
* {@code delta-indexes/} directories (if available).
* </p>
*
* <p>
* The individual parts of the file path are defined as follows:
* </p>
*
* <dl>
* <dt>{@code {checksumHead}}
* <dd>
* the first two characters of {@link eu.mulk.jgvariant.ostree.Checksum#hex()}
* <dt>{@code {checksumRest}}
* <dd>
* the substring of {@link eu.mulk.jgvariant.ostree.Checksum#hex()} starting from the
* 3rd character
* <dt>{@code {fileExtension}}
* <dd>
* the {@link eu.mulk.jgvariant.ostree.ObjectType#fileExtension()} of the object type
* </dl>
* </td>
* </tr>
*
* <tr id="delta-superblock">
* <td>{@code deltas/{targetChecksumMbase64Head}/{targetChecksumMbase64Rest}/superblock}</td>
* <td>
* <p>
* A {@link eu.mulk.jgvariant.ostree.DeltaSuperblock} to get from nothing (an empty commit)
* to the commit named by the checksum encoded in the path.
* </p>
*
* <p>
* The individual parts of the file path are defined as follows:
* </p>
*
* <dl>
* <dt>{@code {checksumHead}}
* <dd>
* the first two characters of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()}
* <dt>{@code {checksumRest}}
* <dd>
* the substring of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()} starting
* from the 3rd character
* </dl>
* </td>
* </tr>
*
* <tr>
* <td>{@code deltas/{targetChecksumMbase64Head}/{targetChecksumMbase64Rest}/{digit...}}</td>
* <td>
* <p>
* A {@link eu.mulk.jgvariant.ostree.DeltaPartPayload} belonging to a delta that goes from
* nothing (an empty commit) to the commit named by the checksum encoded in the path.
* </p>
*
* <p>
* The individual parts of the file path are defined as follows:
* </p>
*
* <dl>
* <dt>{@code {checksumHead}}
* <dd>
* the first two characters of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()}
* <dt>{@code {checksumRest}}
* <dd>
* the substring of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()} starting
* from the 3rd character
* </dl>
* </td>
* </tr>
*
* <tr>
* <td>{@code deltas/{sourceChecksumMbase64Head}/{sourceChecksumMbase64Rest}-{targetChecksumMbase64}/superblock}</td>
* <td>
* <p>
* A {@link eu.mulk.jgvariant.ostree.DeltaSuperblock} to get from the source commit
* referenced by the first checksum encoded in the path to the target commit referenced
* in the second checksum encoded in the path.
* </p>
*
* <p>
* The individual parts of the file path are defined as follows:
* </p>
*
* <dl>
* <dt>{@code {checksumHead}}
* <dd>
* the first two characters of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()}
* <dt>{@code {checksumRest}}
* <dd>
* the substring of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()} starting
* from the 3rd character
* </dl>
* </td>
* </tr>
*
* <tr>
* <td>{@code deltas/{sourceChecksumMbase64Head}/{sourceChecksumMbase64Rest}-{targetChecksumMbase64}/{digit...}}</td>
* <td>
* <p>
* A {@link eu.mulk.jgvariant.ostree.DeltaPartPayload} belonging to a delta that goes from
* the source commit referenced by the first checksum encoded in the path to the target
* commit referenced in the second checksum encoded in the path.
* </p>
*
* <p>
* The individual parts of the file path are defined as follows:
* </p>
*
* <dl>
* <dt>{@code {checksumHead}}
* <dd>
* the first two characters of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()}
* <dt>{@code {checksumRest}}
* <dd>
* the substring of {@link eu.mulk.jgvariant.ostree.Checksum#modifiedBase64()} starting
* from the 3rd character
* </dl>
* </td>
* </tr>
* </table>
*/
@API(status = Status.EXPERIMENTAL)
package eu.mulk.jgvariant.ostree;
import org.apiguardian.api.API;
import org.apiguardian.api.API.Status;