mirror of
https://github.com/ostreedev/ostree.git
synced 2025-01-10 05:18:30 +03:00
libostree: Add ostree_repo_pull_with_options()
We potentially need a lot of argument types for pull. Rather than have a C function with tons of arguments, let's use a GVariant a{sv} as a handy extensible (and immutable) bag of properties. This is prepratory work for adding an option to pull to traverse history. https://bugzilla.gnome.org/show_bug.cgi?id=737844
This commit is contained in:
parent
fb3ad0037f
commit
64dec0add8
@ -1198,11 +1198,7 @@ ostree_repo_pull (OstreeRepo *self,
|
||||
return ostree_repo_pull_one_dir (self, remote_name, NULL, refs_to_fetch, flags, progress, cancellable, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* ostree_repo_pull_one_dir:
|
||||
*
|
||||
* Like ostree_repo_pull(), but supports pulling only a subpath.
|
||||
*/
|
||||
/* Documented in ostree-repo.c */
|
||||
gboolean
|
||||
ostree_repo_pull_one_dir (OstreeRepo *self,
|
||||
const char *remote_name,
|
||||
@ -1212,6 +1208,31 @@ ostree_repo_pull_one_dir (OstreeRepo *self,
|
||||
OstreeAsyncProgress *progress,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
GVariantBuilder builder;
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
|
||||
|
||||
if (dir_to_pull)
|
||||
g_variant_builder_add (&builder, "{s@v}", "subdir",
|
||||
g_variant_new_variant (g_variant_new_string (dir_to_pull)));
|
||||
g_variant_builder_add (&builder, "{s@v}", "flags",
|
||||
g_variant_new_variant (g_variant_new_int32 (flags)));
|
||||
if (refs_to_fetch)
|
||||
g_variant_builder_add (&builder, "{s@v}", "refs",
|
||||
g_variant_new_variant (g_variant_new_strv ((const char *const*) refs_to_fetch, -1)));
|
||||
|
||||
return ostree_repo_pull_with_options (self, remote_name, g_variant_builder_end (&builder),
|
||||
progress, cancellable, error);
|
||||
}
|
||||
|
||||
/* Documented in ostree-repo.c */
|
||||
gboolean
|
||||
ostree_repo_pull_with_options (OstreeRepo *self,
|
||||
const char *remote_name,
|
||||
GVariant *options,
|
||||
OstreeAsyncProgress *progress,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
GHashTableIter hash_iter;
|
||||
@ -1232,13 +1253,28 @@ ostree_repo_pull_one_dir (OstreeRepo *self,
|
||||
GKeyFile *config = NULL;
|
||||
GKeyFile *remote_config = NULL;
|
||||
char **configured_branches = NULL;
|
||||
gboolean is_mirror = (flags & OSTREE_REPO_PULL_FLAGS_MIRROR) > 0;
|
||||
guint64 bytes_transferred;
|
||||
guint64 end_time;
|
||||
OstreeRepoPullFlags flags;
|
||||
const char *dir_to_pull = NULL;
|
||||
char **refs_to_fetch = NULL;
|
||||
gboolean is_mirror;
|
||||
|
||||
if (options)
|
||||
{
|
||||
int flags_i;
|
||||
(void) g_variant_lookup (options, "refs", "^a&s", &refs_to_fetch);
|
||||
(void) g_variant_lookup (options, "flags", "i", &flags_i);
|
||||
/* Reduce risk of issues if enum happens to be 64 bit for some reason */
|
||||
flags = flags_i;
|
||||
(void) g_variant_lookup (options, "subdir", "&s", &dir_to_pull);
|
||||
}
|
||||
|
||||
if (dir_to_pull)
|
||||
g_return_val_if_fail (dir_to_pull[0] == '/', FALSE);
|
||||
|
||||
is_mirror = (flags & OSTREE_REPO_PULL_FLAGS_MIRROR) > 0;
|
||||
|
||||
pull_data->async_error = error;
|
||||
pull_data->main_context = g_main_context_ref_thread_default ();
|
||||
pull_data->loop = g_main_loop_new (pull_data->main_context, FALSE);
|
||||
@ -1651,8 +1687,7 @@ ostree_repo_pull_one_dir (OstreeRepo *self,
|
||||
|
||||
ret = TRUE;
|
||||
out:
|
||||
if (pull_data->main_context)
|
||||
g_main_context_unref (pull_data->main_context);
|
||||
g_main_context_unref (pull_data->main_context);
|
||||
if (pull_data->loop)
|
||||
g_main_loop_unref (pull_data->loop);
|
||||
g_strfreev (configured_branches);
|
||||
|
@ -2163,6 +2163,64 @@ ostree_repo_pull (OstreeRepo *self,
|
||||
"This version of ostree was built without libsoup, and cannot fetch over HTTP");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ostree_repo_pull_one_dir:
|
||||
* @self: Repo
|
||||
* @remote_name: Name of remote
|
||||
* @dir_to_pull: Subdirectory path
|
||||
* @refs_to_fetch: (array zero-terminated=1) (element-type utf8) (allow-none): Optional list of refs; if %NULL, fetch all configured refs
|
||||
* @flags: Options controlling fetch behavior
|
||||
* @progress: (allow-none): Progress
|
||||
* @cancellable: Cancellable
|
||||
* @error: Error
|
||||
*
|
||||
* This is similar to ostree_repo_pull(), but only fetches a single
|
||||
* subpath.
|
||||
*/
|
||||
gboolean
|
||||
ostree_repo_pull_one_dir (OstreeRepo *self,
|
||||
const char *remote_name,
|
||||
char **refs_to_fetch,
|
||||
OstreeRepoPullFlags flags,
|
||||
OstreeAsyncProgress *progress,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
"This version of ostree was built without libsoup, and cannot fetch over HTTP");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ostree_repo_pull_with_options:
|
||||
* @self: Repo
|
||||
* @remote_name: Name of remote
|
||||
* @options: A GVariant a{sv} with an extensible set of flags.
|
||||
* @progress: (allow-none): Progress
|
||||
* @cancellable: Cancellable
|
||||
* @error: Error
|
||||
*
|
||||
* Like ostree_repo_pull(), but supports an extensible set of flags.
|
||||
* The following are currently defined:
|
||||
*
|
||||
* * subdir (s): Pull just this subdirectory
|
||||
* * flags (i): An instance of #OstreeRepoPullFlags
|
||||
* * refs: (as): Array of string refs
|
||||
*/
|
||||
gboolean
|
||||
ostree_repo_pull_with_options (OstreeRepo *self,
|
||||
const char *remote_name,
|
||||
GVariant *options,
|
||||
OstreeAsyncProgress *progress,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
"This version of ostree was built without libsoup, and cannot fetch over HTTP");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -560,6 +560,13 @@ ostree_repo_pull_one_dir (OstreeRepo *self,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
gboolean ostree_repo_pull_with_options (OstreeRepo *self,
|
||||
const char *remote_name,
|
||||
GVariant *options,
|
||||
OstreeAsyncProgress *progress,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
gboolean ostree_repo_sign_commit (OstreeRepo *self,
|
||||
const gchar *commit_checksum,
|
||||
const gchar *key_id,
|
||||
|
Loading…
Reference in New Issue
Block a user