Content-addressed object store

Content-addressed object store — A git-like storage system for operating system binaries

Synopsis

enum                OstreeRepoMode;
OstreeRepo *        ostree_repo_new                     (GFile *path);
gboolean            ostree_repo_check                   (OstreeRepo *self,
                                                         GError **error);
GFile *             ostree_repo_get_path                (OstreeRepo *self);
OstreeRepoMode      ostree_repo_get_mode                (OstreeRepo *self);
gboolean            ostree_repo_mode_from_string        (const char *mode,
                                                         OstreeRepoMode *out_mode,
                                                         GError **error);
GKeyFile *          ostree_repo_get_config              (OstreeRepo *self);
GKeyFile *          ostree_repo_copy_config             (OstreeRepo *self);
OstreeRepo *        ostree_repo_get_parent              (OstreeRepo *self);
gboolean            ostree_repo_write_config            (OstreeRepo *self,
                                                         GKeyFile *new_config,
                                                         GError **error);
gboolean            ostree_repo_prepare_transaction     (OstreeRepo *self,
                                                         gboolean enable_commit_hardlink_scan,
                                                         gboolean *out_transaction_resume,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_commit_transaction      (OstreeRepo *self,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_commit_transaction_with_stats
                                                        (OstreeRepo *self,
                                                         guint *out_metadata_objects_total,
                                                         guint *out_metadata_objects_written,
                                                         guint *out_content_objects_total,
                                                         guint *out_content_objects_written,
                                                         guint64 *out_content_bytes_written,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_abort_transaction       (OstreeRepo *self,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_has_object              (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *checksum,
                                                         gboolean *out_have_object,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_stage_metadata          (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *expected_checksum,
                                                         GVariant *object,
                                                         guchar **out_csum,
                                                         GCancellable *cancellable,
                                                         GError **error);
void                ostree_repo_stage_metadata_async    (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *expected_checksum,
                                                         GVariant *object,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
gboolean            ostree_repo_stage_metadata_finish   (OstreeRepo *self,
                                                         GAsyncResult *result,
                                                         guchar **out_csum,
                                                         GError **error);
gboolean            ostree_repo_stage_metadata_trusted  (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *checksum,
                                                         GVariant *variant,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_stage_content           (OstreeRepo *self,
                                                         const char *expected_checksum,
                                                         GInputStream *object_input,
                                                         guint64 length,
                                                         guchar **out_csum,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_stage_content_trusted   (OstreeRepo *self,
                                                         const char *checksum,
                                                         GInputStream *object_input,
                                                         guint64 length,
                                                         GCancellable *cancellable,
                                                         GError **error);
void                ostree_repo_stage_content_async     (OstreeRepo *self,
                                                         const char *expected_checksum,
                                                         GInputStream *object,
                                                         guint64 length,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
gboolean            ostree_repo_stage_content_finish    (OstreeRepo *self,
                                                         GAsyncResult *result,
                                                         guchar **out_csum,
                                                         GError **error);
gboolean            ostree_repo_resolve_rev             (OstreeRepo *self,
                                                         const char *refspec,
                                                         gboolean allow_noent,
                                                         char **out_rev,
                                                         GError **error);
gboolean            ostree_repo_write_ref               (OstreeRepo *self,
                                                         const char *remote,
                                                         const char *name,
                                                         const char *rev,
                                                         GError **error);
gboolean            ostree_repo_write_refspec           (OstreeRepo *self,
                                                         const char *refspec,
                                                         const char *rev,
                                                         GError **error);
gboolean            ostree_repo_list_refs               (OstreeRepo *repo,
                                                         const char *refspec_prefix,
                                                         GHashTable **out_all_refs,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_load_variant_c          (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const guchar *csum,
                                                         GVariant **out_variant,
                                                         GError **error);
gboolean            ostree_repo_load_variant            (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         GVariant **out_variant,
                                                         GError **error);
gboolean            ostree_repo_load_variant_if_exists  (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         GVariant **out_variant,
                                                         GError **error);
gboolean            ostree_repo_load_file               (OstreeRepo *self,
                                                         const char *checksum,
                                                         GInputStream **out_input,
                                                         GFileInfo **out_file_info,
                                                         GVariant **out_xattrs,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_load_object_stream      (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *checksum,
                                                         GInputStream **out_input,
                                                         guint64 *out_size,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_query_object_storage_size
                                                        (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         gsize *out_size,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_delete_object           (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         GCancellable *cancellable,
                                                         GError **error);
enum                OstreeRepoCommitFilterResult;
OstreeRepoCommitFilterResult (*OstreeRepoCommitFilter)  (OstreeRepo *repo,
                                                         const char *path,
                                                         GFileInfo *file_info,
                                                         gpointer user_data);
                    OstreeRepoCommitModifier;
OstreeRepoCommitModifier * ostree_repo_commit_modifier_new
                                                        (void);
OstreeRepoCommitModifier * ostree_repo_commit_modifier_ref
                                                        (OstreeRepoCommitModifier *modifier);
void                ostree_repo_commit_modifier_unref   (OstreeRepoCommitModifier *modifier);
gboolean            ostree_repo_stage_directory_to_mtree
                                                        (OstreeRepo *self,
                                                         GFile *dir,
                                                         OstreeMutableTree *mtree,
                                                         OstreeRepoCommitModifier *modifier,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_stage_archive_to_mtree  (OstreeRepo *self,
                                                         GFile *archive,
                                                         OstreeMutableTree *tree,
                                                         OstreeRepoCommitModifier *modifier,
                                                         gboolean autocreate_parents,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_stage_mtree             (OstreeRepo *self,
                                                         OstreeMutableTree *mtree,
                                                         char **out_contents_checksum,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_stage_commit            (OstreeRepo *self,
                                                         const char *branch,
                                                         const char *parent,
                                                         const char *subject,
                                                         const char *body,
                                                         const char *root_contents_checksum,
                                                         const char *root_metadata_checksum,
                                                         char **out_commit,
                                                         GCancellable *cancellable,
                                                         GError **error);
enum                OstreeRepoCheckoutMode;
enum                OstreeRepoCheckoutOverwriteMode;
void                ostree_repo_checkout_tree_async     (OstreeRepo *self,
                                                         OstreeRepoCheckoutMode mode,
                                                         OstreeRepoCheckoutOverwriteMode overwrite_mode,
                                                         GFile *destination,
                                                         OstreeRepoFile *source,
                                                         GFileInfo *source_info,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
gboolean            ostree_repo_checkout_tree_finish    (OstreeRepo *self,
                                                         GAsyncResult *result,
                                                         GError **error);
gboolean            ostree_repo_checkout_gc             (OstreeRepo *self,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_read_commit             (OstreeRepo *self,
                                                         const char *rev,
                                                         GFile **out_root,
                                                         GCancellable *cancellable,
                                                         GError **error);
enum                OstreeRepoListObjectsFlags;
#define             OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE
gboolean            ostree_repo_list_objects            (OstreeRepo *self,
                                                         OstreeRepoListObjectsFlags flags,
                                                         GHashTable **out_objects,
                                                         GCancellable *cancellable,
                                                         GError **error);
GHashTable *        ostree_repo_traverse_new_reachable  (void);
gboolean            ostree_repo_traverse_dirtree        (OstreeRepo *repo,
                                                         const char *commit_checksum,
                                                         GHashTable *inout_reachable,
                                                         GCancellable *cancellable,
                                                         GError **error);
gboolean            ostree_repo_traverse_commit         (OstreeRepo *repo,
                                                         const char *commit_checksum,
                                                         int maxdepth,
                                                         GHashTable *inout_reachable,
                                                         GCancellable *cancellable,
                                                         GError **error);
enum                OstreeRepoPruneFlags;
gboolean            ostree_repo_prune                   (OstreeRepo *repo,
                                                         OstreeRepoPruneFlags flags,
                                                         gint depth,
                                                         gint *out_objects_total,
                                                         gint *out_objects_pruned,
                                                         guint64 *out_pruned_object_size_total,
                                                         GCancellable *cancellable,
                                                         GError **error);
enum                OstreeRepoPullFlags;
gboolean            ostree_repo_pull                    (OstreeRepo *self,
                                                         const char *remote_name,
                                                         char **refs_to_fetch,
                                                         OstreeRepoPullFlags flags,
                                                         GCancellable *cancellable,
                                                         GError **error);

Description

The OstreeRepo is like git, a content-addressed object store. Unlike git, it records uid, gid, and extended attributes.

There are two possible "modes" for an OstreeRepo; OSTREE_REPO_MODE_BARE is very simple - content files are represented exactly as they are, and checkouts are just hardlinks. A OSTREE_REPO_MODE_ARCHIVE_Z2 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.

To store content in the repo, first start a transaction with ostree_repo_prepare_transaction(). Then create a OstreeMutableTree, and apply functions such as ostree_repo_stage_directory_to_mtree() to traverse a physical filesystem and stage content, possibly multiple times.

Once the OstreeMutableTree is complete, stage all of its metadata with ostree_repo_stage_mtree(), and finally create a commit with ostree_repo_stage_commit().

Details

enum OstreeRepoMode

typedef enum {
  OSTREE_REPO_MODE_BARE,
  OSTREE_REPO_MODE_ARCHIVE_Z2
} OstreeRepoMode;

See the documentation of OstreeRepo for more information about the possible modes.

OSTREE_REPO_MODE_BARE

Files are stored as themselves; can only be written as root

OSTREE_REPO_MODE_ARCHIVE_Z2

Files are compressed, should be owned by non-root. Can be served via HTTP

ostree_repo_new ()

OstreeRepo *        ostree_repo_new                     (GFile *path);

ostree_repo_check ()

gboolean            ostree_repo_check                   (OstreeRepo *self,
                                                         GError **error);

ostree_repo_get_path ()

GFile *             ostree_repo_get_path                (OstreeRepo *self);

Returns :

Path to repo. [transfer none]

ostree_repo_get_mode ()

OstreeRepoMode      ostree_repo_get_mode                (OstreeRepo *self);

ostree_repo_mode_from_string ()

gboolean            ostree_repo_mode_from_string        (const char *mode,
                                                         OstreeRepoMode *out_mode,
                                                         GError **error);

ostree_repo_get_config ()

GKeyFile *          ostree_repo_get_config              (OstreeRepo *self);

Returns :

The repository configuration; do not modify. [transfer none]

ostree_repo_copy_config ()

GKeyFile *          ostree_repo_copy_config             (OstreeRepo *self);

Returns :

A newly-allocated copy of the repository config. [transfer full]

ostree_repo_get_parent ()

OstreeRepo *        ostree_repo_get_parent              (OstreeRepo *self);

Before this function can be used, ostree_repo_init() must have been called.

self :

Repo

Returns :

Parent repository, or NULL if none. [transfer none]

ostree_repo_write_config ()

gboolean            ostree_repo_write_config            (OstreeRepo *self,
                                                         GKeyFile *new_config,
                                                         GError **error);

Save new_config in place of this repository's config file. Note that new_config should not be modified after - this function simply adds a reference.

self :

Repo

new_config :

Overwrite the config file with this data. Do not change later!

error :

a GError

ostree_repo_prepare_transaction ()

gboolean            ostree_repo_prepare_transaction     (OstreeRepo *self,
                                                         gboolean enable_commit_hardlink_scan,
                                                         gboolean *out_transaction_resume,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_commit_transaction ()

gboolean            ostree_repo_commit_transaction      (OstreeRepo *self,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_commit_transaction_with_stats ()

gboolean            ostree_repo_commit_transaction_with_stats
                                                        (OstreeRepo *self,
                                                         guint *out_metadata_objects_total,
                                                         guint *out_metadata_objects_written,
                                                         guint *out_content_objects_total,
                                                         guint *out_content_objects_written,
                                                         guint64 *out_content_bytes_written,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_abort_transaction ()

gboolean            ostree_repo_abort_transaction       (OstreeRepo *self,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_has_object ()

gboolean            ostree_repo_has_object              (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *checksum,
                                                         gboolean *out_have_object,
                                                         GCancellable *cancellable,
                                                         GError **error);

Set out_have_object to TRUE if self contains the given object; FALSE otherwise.

self :

Repo

objtype :

Object type

checksum :

ASCII SHA256 checksum

out_have_object :

TRUE if repository contains object. [out]

cancellable :

Cancellable

error :

Error

Returns :

FALSE if an unexpected error occurred, TRUE otherwise

ostree_repo_stage_metadata ()

gboolean            ostree_repo_stage_metadata          (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *expected_checksum,
                                                         GVariant *object,
                                                         guchar **out_csum,
                                                         GCancellable *cancellable,
                                                         GError **error);

Store the metadata object variant. Return the checksum as out_csum.

If expected_checksum is not NULL, verify it against the computed checksum.

self :

Repo

objtype :

Object type

expected_checksum :

If provided, validate content against this checksum. [allow-none]

object :

Metadata

out_csum :

Binary checksum. [out][array fixed-size=32][allow-none]

cancellable :

Cancellable

error :

Error

ostree_repo_stage_metadata_async ()

void                ostree_repo_stage_metadata_async    (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *expected_checksum,
                                                         GVariant *object,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);

Asynchronously store the metadata object variant. If provided, the checksum expected_checksum will be verified.

self :

Repo

objtype :

Object type

expected_checksum :

If provided, validate content against this checksum. [allow-none]

object :

Metadata

cancellable :

Cancellable

callback :

Invoked when metadata is staged

user_data :

Data for callback

ostree_repo_stage_metadata_finish ()

gboolean            ostree_repo_stage_metadata_finish   (OstreeRepo *self,
                                                         GAsyncResult *result,
                                                         guchar **out_csum,
                                                         GError **error);

ostree_repo_stage_metadata_trusted ()

gboolean            ostree_repo_stage_metadata_trusted  (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *checksum,
                                                         GVariant *variant,
                                                         GCancellable *cancellable,
                                                         GError **error);

Store the metadata object variant; the provided checksum is trusted.

self :

Repo

objtype :

Object type

checksum :

Store object with this ASCII SHA256 checksum

variant :

Metadata object

cancellable :

Cancellable

error :

Error

ostree_repo_stage_content ()

gboolean            ostree_repo_stage_content           (OstreeRepo *self,
                                                         const char *expected_checksum,
                                                         GInputStream *object_input,
                                                         guint64 length,
                                                         guchar **out_csum,
                                                         GCancellable *cancellable,
                                                         GError **error);

Store the content object streamed as object_input, with total length length. The actual checksum will be returned as out_csum.

self :

Repo

expected_checksum :

If provided, validate content against this checksum. [allow-none]

object_input :

Content object stream

length :

Length of object_input

out_csum :

Binary checksum. [out][array fixed-size=32][allow-none]

cancellable :

Cancellable

error :

Error

ostree_repo_stage_content_trusted ()

gboolean            ostree_repo_stage_content_trusted   (OstreeRepo *self,
                                                         const char *checksum,
                                                         GInputStream *object_input,
                                                         guint64 length,
                                                         GCancellable *cancellable,
                                                         GError **error);

Store the content object streamed as object_input, with total length length. The given checksum will be treated as trusted.

This function should be used when importing file objects from local disk, for example.

self :

Repo

checksum :

Store content using this ASCII SHA256 checksum

object_input :

Content stream

length :

Length of object_input

cancellable :

Cancellable

error :

Data for callback

ostree_repo_stage_content_async ()

void                ostree_repo_stage_content_async     (OstreeRepo *self,
                                                         const char *expected_checksum,
                                                         GInputStream *object,
                                                         guint64 length,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);

Asynchronously store the content object object. If provided, the checksum expected_checksum will be verified.

self :

Repo

expected_checksum :

If provided, validate content against this checksum. [allow-none]

object :

Input

length :

Length of object

cancellable :

Cancellable

callback :

Invoked when content is staged

user_data :

User data for callback

ostree_repo_stage_content_finish ()

gboolean            ostree_repo_stage_content_finish    (OstreeRepo *self,
                                                         GAsyncResult *result,
                                                         guchar **out_csum,
                                                         GError **error);

Completes an invocation of ostree_repo_stage_content_async().

self :

a OstreeRepo

result :

a GAsyncResult

out_csum :

A binary SHA256 checksum of the content object. [out][transfer full]

error :

a GError

ostree_repo_resolve_rev ()

gboolean            ostree_repo_resolve_rev             (OstreeRepo *self,
                                                         const char *refspec,
                                                         gboolean allow_noent,
                                                         char **out_rev,
                                                         GError **error);

Look up the given refspec, returning the checksum it references in the parameter out_rev.

self :

Repo

refspec :

A refspec

allow_noent :

Do not throw an error if refspec does not exist

out_rev :

A checksum,or NULL if allow_noent is true and it does not exist. [out][transfer full]

error :

Error

ostree_repo_write_ref ()

gboolean            ostree_repo_write_ref               (OstreeRepo *self,
                                                         const char *remote,
                                                         const char *name,
                                                         const char *rev,
                                                         GError **error);

ostree_repo_write_refspec ()

gboolean            ostree_repo_write_refspec           (OstreeRepo *self,
                                                         const char *refspec,
                                                         const char *rev,
                                                         GError **error);

ostree_repo_list_refs ()

gboolean            ostree_repo_list_refs               (OstreeRepo *repo,
                                                         const char *refspec_prefix,
                                                         GHashTable **out_all_refs,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_load_variant_c ()

gboolean            ostree_repo_load_variant_c          (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const guchar *csum,
                                                         GVariant **out_variant,
                                                         GError **error);

Load the metadata object csum of type objtype, storing the result in out_variant.

self :

Repo

objtype :

Expected object type

csum :

Binary checksum

out_variant :

(transfer full): Metadata object. [out]

error :

Error

ostree_repo_load_variant ()

gboolean            ostree_repo_load_variant            (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         GVariant **out_variant,
                                                         GError **error);

Load the metadata object sha256 of type objtype, storing the result in out_variant.

self :

Repo

objtype :

Expected object type

sha256 :

Checksum string

out_variant :

(transfer full): Metadata object. [out]

error :

Error

ostree_repo_load_variant_if_exists ()

gboolean            ostree_repo_load_variant_if_exists  (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         GVariant **out_variant,
                                                         GError **error);

Attempt to load the metadata object sha256 of type objtype if it exists, storing the result in out_variant. If it doesn't exist, NULL is returned.

self :

Repo

objtype :

Object type

sha256 :

ASCII checksum

out_variant :

Metadata. [out][transfer full]

error :

Error

ostree_repo_load_file ()

gboolean            ostree_repo_load_file               (OstreeRepo *self,
                                                         const char *checksum,
                                                         GInputStream **out_input,
                                                         GFileInfo **out_file_info,
                                                         GVariant **out_xattrs,
                                                         GCancellable *cancellable,
                                                         GError **error);

Load content object, decomposing it into three parts: the actual content (for regular files), the metadata, and extended attributes.

self :

Repo

checksum :

ASCII SHA256 checksum

out_input :

File content. [out][allow-none]

out_file_info :

File information. [out][allow-none]

out_xattrs :

Extended attributes. [out][allow-none]

cancellable :

Cancellable

error :

Error

ostree_repo_load_object_stream ()

gboolean            ostree_repo_load_object_stream      (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *checksum,
                                                         GInputStream **out_input,
                                                         guint64 *out_size,
                                                         GCancellable *cancellable,
                                                         GError **error);

Load object as a stream; useful when copying objects between repositories.

self :

Repo

objtype :

Object type

checksum :

ASCII SHA256 checksum

out_input :

Stream for object. [out]

out_size :

Length of out_input. [out]

cancellable :

Cancellable

error :

Error

ostree_repo_query_object_storage_size ()

gboolean            ostree_repo_query_object_storage_size
                                                        (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         gsize *out_size,
                                                         GCancellable *cancellable,
                                                         GError **error);

Return the size in bytes of object with checksum sha256, after any compression has been applied.

self :

Repo

objtype :

Object type

sha256 :

Checksum

out_size :

Size in bytes object occupies physically. [out]

cancellable :

Cancellable

error :

Error

ostree_repo_delete_object ()

gboolean            ostree_repo_delete_object           (OstreeRepo *self,
                                                         OstreeObjectType objtype,
                                                         const char *sha256,
                                                         GCancellable *cancellable,
                                                         GError **error);

Remove the object of type objtype with checksum sha256 from the repository. An error of type G_IO_ERROR_NOT_FOUND is thrown if the object does not exist.

self :

Repo

objtype :

Object type

sha256 :

Checksum

cancellable :

Cancellable

error :

Error

enum OstreeRepoCommitFilterResult

typedef enum {
  OSTREE_REPO_COMMIT_FILTER_ALLOW,
  OSTREE_REPO_COMMIT_FILTER_SKIP
} OstreeRepoCommitFilterResult;

OSTREE_REPO_COMMIT_FILTER_ALLOW

Do commit this object

OSTREE_REPO_COMMIT_FILTER_SKIP

Ignore this object

OstreeRepoCommitFilter ()

OstreeRepoCommitFilterResult (*OstreeRepoCommitFilter)  (OstreeRepo *repo,
                                                         const char *path,
                                                         GFileInfo *file_info,
                                                         gpointer user_data);

repo :

Repo

path :

Path to file

file_info :

File information

user_data :

User data

Returns :

OstreeRepoCommitFilterResult saying whether or not to commit this file

OstreeRepoCommitModifier

typedef struct {
  volatile gint refcount;

  guint reserved_flags : 31;
  guint skip_xattrs : 1;

  OstreeRepoCommitFilter filter;
  gpointer user_data;

  gpointer reserved[3];
} OstreeRepoCommitModifier;

A structure allowing control over commits.


ostree_repo_commit_modifier_new ()

OstreeRepoCommitModifier * ostree_repo_commit_modifier_new
                                                        (void);

Returns :

A new commit modifier. [transfer full]

ostree_repo_commit_modifier_ref ()

OstreeRepoCommitModifier * ostree_repo_commit_modifier_ref
                                                        (OstreeRepoCommitModifier *modifier);

ostree_repo_commit_modifier_unref ()

void                ostree_repo_commit_modifier_unref   (OstreeRepoCommitModifier *modifier);

ostree_repo_stage_directory_to_mtree ()

gboolean            ostree_repo_stage_directory_to_mtree
                                                        (OstreeRepo *self,
                                                         GFile *dir,
                                                         OstreeMutableTree *mtree,
                                                         OstreeRepoCommitModifier *modifier,
                                                         GCancellable *cancellable,
                                                         GError **error);

Store objects for dir and all children into the repository self, overlaying the resulting filesystem hierarchy into mtree.

self :

Repo

dir :

Path to a directory

mtree :

Overlay directory contents into this tree

modifier :

Optional modifier. [allow-none]

cancellable :

Cancellable

error :

Error

ostree_repo_stage_archive_to_mtree ()

gboolean            ostree_repo_stage_archive_to_mtree  (OstreeRepo *self,
                                                         GFile *archive,
                                                         OstreeMutableTree *tree,
                                                         OstreeRepoCommitModifier *modifier,
                                                         gboolean autocreate_parents,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_stage_mtree ()

gboolean            ostree_repo_stage_mtree             (OstreeRepo *self,
                                                         OstreeMutableTree *mtree,
                                                         char **out_contents_checksum,
                                                         GCancellable *cancellable,
                                                         GError **error);

Write all metadata objects for mtree to repo; the resulting out_contents_checksum contains the checksum for the OSTREE_OBJECT_TYPE_DIR_TREE object.

self :

Repo

mtree :

Mutable tree

out_contents_checksum :

Return location for ASCII checksum. [out]

cancellable :

Cancellable

error :

Error

ostree_repo_stage_commit ()

gboolean            ostree_repo_stage_commit            (OstreeRepo *self,
                                                         const char *branch,
                                                         const char *parent,
                                                         const char *subject,
                                                         const char *body,
                                                         const char *root_contents_checksum,
                                                         const char *root_metadata_checksum,
                                                         char **out_commit,
                                                         GCancellable *cancellable,
                                                         GError **error);

Write a commit metadata object, referencing root_contents_checksum and root_metadata_checksum.

self :

Repo

branch :

Name of ref

parent :

ASCII SHA256 checksum for parent, or NULL for none. [allow-none]

subject :

Subject

body :

Body

root_contents_checksum :

ASCII SHA256 checksum for OSTREE_OBJECT_TYPE_DIR_TREE

root_metadata_checksum :

ASCII SHA256 checksum for OSTREE_OBJECT_TYPE_DIR_META

out_commit :

Resulting ASCII SHA256 checksum for commit. [out]

cancellable :

Cancellable

error :

Error

enum OstreeRepoCheckoutMode

typedef enum {
  OSTREE_REPO_CHECKOUT_MODE_NONE = 0,
  OSTREE_REPO_CHECKOUT_MODE_USER = 1
} OstreeRepoCheckoutMode;

OSTREE_REPO_CHECKOUT_MODE_NONE

No special options

OSTREE_REPO_CHECKOUT_MODE_USER

Ignore uid/gid of files

enum OstreeRepoCheckoutOverwriteMode

typedef enum {
  OSTREE_REPO_CHECKOUT_OVERWRITE_NONE = 0,
  OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES = 1
} OstreeRepoCheckoutOverwriteMode;

OSTREE_REPO_CHECKOUT_OVERWRITE_NONE

No special options

OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES

When layering checkouts, overwrite earlier files, but keep earlier directories

ostree_repo_checkout_tree_async ()

void                ostree_repo_checkout_tree_async     (OstreeRepo *self,
                                                         OstreeRepoCheckoutMode mode,
                                                         OstreeRepoCheckoutOverwriteMode overwrite_mode,
                                                         GFile *destination,
                                                         OstreeRepoFile *source,
                                                         GFileInfo *source_info,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);

ostree_repo_checkout_tree_finish ()

gboolean            ostree_repo_checkout_tree_finish    (OstreeRepo *self,
                                                         GAsyncResult *result,
                                                         GError **error);

ostree_repo_checkout_gc ()

gboolean            ostree_repo_checkout_gc             (OstreeRepo *self,
                                                         GCancellable *cancellable,
                                                         GError **error);

Call this after finishing a succession of checkout operations; it will delete any currently-unused uncompressed objects from the cache.

self :

Repo

cancellable :

Cancellable

error :

Error

ostree_repo_read_commit ()

gboolean            ostree_repo_read_commit             (OstreeRepo *self,
                                                         const char *rev,
                                                         GFile **out_root,
                                                         GCancellable *cancellable,
                                                         GError **error);

Load the content for rev into out_root.

self :

Repo

rev :

Revision (ref or ASCII checksum)

out_root :

An OstreeRepoFile corresponding to the root. [out]

cancellable :

Cancellable

error :

Error

enum OstreeRepoListObjectsFlags

typedef enum {
  OSTREE_REPO_LIST_OBJECTS_LOOSE = (1 << 0),
  OSTREE_REPO_LIST_OBJECTS_PACKED = (1 << 1),
  OSTREE_REPO_LIST_OBJECTS_ALL = (1 << 2)
} OstreeRepoListObjectsFlags;

OSTREE_REPO_LIST_OBJECTS_LOOSE

List only loose (plain file) objects

OSTREE_REPO_LIST_OBJECTS_PACKED

List only packed (compacted into blobs) objects

OSTREE_REPO_LIST_OBJECTS_ALL

List all objects

OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE

#define OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE (G_VARIANT_TYPE ("(bas)")

b - TRUE if object is available "loose" as - List of pack file checksums in which this object appears


ostree_repo_list_objects ()

gboolean            ostree_repo_list_objects            (OstreeRepo *self,
                                                         OstreeRepoListObjectsFlags flags,
                                                         GHashTable **out_objects,
                                                         GCancellable *cancellable,
                                                         GError **error);

This function synchronously enumerates all objects in the repository, returning data in out_objects. out_objects maps from keys returned by ostree_object_name_serialize() to GVariant values of type OSTREE_REPO_LIST_OBJECTS_VARIANT_TYPE.

self :

Repo

flags :

Flags controlling enumeration

out_objects :

Map of serialized object name to variant data. [out]

cancellable :

Cancellable

error :

Error

Returns :

TRUE on success, FALSE on error, and error will be set

ostree_repo_traverse_new_reachable ()

GHashTable *        ostree_repo_traverse_new_reachable  (void);

This hash table is a set of GVariant which can be accessed via ostree_object_name_deserialize().

Returns :

A new hash table. [transfer full][element-type GVariant GVariant]

ostree_repo_traverse_dirtree ()

gboolean            ostree_repo_traverse_dirtree        (OstreeRepo *repo,
                                                         const char *commit_checksum,
                                                         GHashTable *inout_reachable,
                                                         GCancellable *cancellable,
                                                         GError **error);

ostree_repo_traverse_commit ()

gboolean            ostree_repo_traverse_commit         (OstreeRepo *repo,
                                                         const char *commit_checksum,
                                                         int maxdepth,
                                                         GHashTable *inout_reachable,
                                                         GCancellable *cancellable,
                                                         GError **error);

enum OstreeRepoPruneFlags

typedef enum {
  OSTREE_REPO_PRUNE_FLAGS_NONE,
  OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE,
  OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY
} OstreeRepoPruneFlags;

OSTREE_REPO_PRUNE_FLAGS_NONE

No special options for pruning

OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE

Don't actually delete objects

OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY

Do not traverse individual commit objects, only follow refs

ostree_repo_prune ()

gboolean            ostree_repo_prune                   (OstreeRepo *repo,
                                                         OstreeRepoPruneFlags flags,
                                                         gint depth,
                                                         gint *out_objects_total,
                                                         gint *out_objects_pruned,
                                                         guint64 *out_pruned_object_size_total,
                                                         GCancellable *cancellable,
                                                         GError **error);

enum OstreeRepoPullFlags

typedef enum {
  OSTREE_REPO_PULL_FLAGS_NONE,
  OSTREE_REPO_PULL_FLAGS_RELATED
} OstreeRepoPullFlags;

OSTREE_REPO_PULL_FLAGS_NONE

No special options for pull

OSTREE_REPO_PULL_FLAGS_RELATED

Fetch objects referred to by each commit

ostree_repo_pull ()

gboolean            ostree_repo_pull                    (OstreeRepo *self,
                                                         const char *remote_name,
                                                         char **refs_to_fetch,
                                                         OstreeRepoPullFlags flags,
                                                         GCancellable *cancellable,
                                                         GError **error);

Connect to the remote repository, fetching the specified set of refs refs_to_fetch. For each ref that is changed, download the commit, all metadata, and all content objects, storing them safely on disk in self.

self :

Repo

remote_name :

Name of remote

refs_to_fetch :

Optional list of refs; if NULL, fetch all configured refs. [array zero-terminated=1][element-type utf8][allow-none]

flags :

Options controlling fetch behavior

cancellable :

Cancellable

error :

Error