summaryrefslogtreecommitdiff
path: root/src/libostree
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2021-09-08 09:27:26 -0400
committerGitHub <noreply@github.com>2021-09-08 09:27:26 -0400
commitce36e05d38ab8bf0f95ea103349d0814ad30e574 (patch)
tree5ff4412800fcb8de9b3c91b4991714201fc4fa37 /src/libostree
parent7e4c4f2a69baa184147128c00377135239dd1d84 (diff)
parent511c7a13eeae0161f16a11033eec36252c6390ae (diff)
downloadostree-ce36e05d38ab8bf0f95ea103349d0814ad30e574.tar.gz
Merge pull request #2434 from cgwalters/custom-remote
Add support for "custom remotes"
Diffstat (limited to 'src/libostree')
-rw-r--r--src/libostree/ostree-repo-pull.c15
-rw-r--r--src/libostree/ostree-repo.c30
2 files changed, 32 insertions, 13 deletions
diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c
index 388f782b..6bb040a4 100644
--- a/src/libostree/ostree-repo-pull.c
+++ b/src/libostree/ostree-repo-pull.c
@@ -3965,6 +3965,7 @@ ostree_repo_pull_with_options (OstreeRepo *self,
else
{
g_autofree char *unconfigured_state = NULL;
+ g_autofree char *custom_backend = NULL;
g_free (pull_data->remote_name);
pull_data->remote_name = g_strdup (remote_name_or_baseurl);
@@ -3996,6 +3997,20 @@ ostree_repo_pull_with_options (OstreeRepo *self,
"remote unconfigured-state: %s", unconfigured_state);
goto out;
}
+
+ if (!ostree_repo_get_remote_option (self, pull_data->remote_name,
+ "custom-backend", NULL,
+ &custom_backend,
+ error))
+ goto out;
+
+ if (custom_backend)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Cannot fetch via libostree - remote '%s' uses custom backend '%s'",
+ pull_data->remote_name, custom_backend);
+ goto out;
+ }
}
if (pull_data->remote_name && !(disable_sign_verify && disable_sign_verify_summary))
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 0ff2c53f..42d2b0e0 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -1589,7 +1589,6 @@ impl_repo_remote_add (OstreeRepo *self,
GError **error)
{
g_return_val_if_fail (name != NULL, FALSE);
- g_return_val_if_fail (url != NULL, FALSE);
g_return_val_if_fail (options == NULL || g_variant_is_of_type (options, G_VARIANT_TYPE ("a{sv}")), FALSE);
if (!ostree_validate_remote_name (name, error))
@@ -1637,10 +1636,13 @@ impl_repo_remote_add (OstreeRepo *self,
remote->file = g_file_get_child (etc_ostree_remotes_d, basename);
}
- if (g_str_has_prefix (url, "metalink="))
- g_key_file_set_string (remote->options, remote->group, "metalink", url + strlen ("metalink="));
- else
- g_key_file_set_string (remote->options, remote->group, "url", url);
+ if (url)
+ {
+ if (g_str_has_prefix (url, "metalink="))
+ g_key_file_set_string (remote->options, remote->group, "metalink", url + strlen ("metalink="));
+ else
+ g_key_file_set_string (remote->options, remote->group, "url", url);
+ }
if (options)
keyfile_set_from_vardict (remote->options, remote->group, options);
@@ -1676,7 +1678,7 @@ impl_repo_remote_add (OstreeRepo *self,
* ostree_repo_remote_add:
* @self: Repo
* @name: Name of remote
- * @url: URL for remote (if URL begins with metalink=, it will be used as such)
+ * @url: (allow-none): URL for remote (if URL begins with metalink=, it will be used as such)
* @options: (allow-none): GVariant of type a{sv}
* @cancellable: Cancellable
* @error: Error
@@ -1789,7 +1791,6 @@ impl_repo_remote_replace (OstreeRepo *self,
GError **error)
{
g_return_val_if_fail (name != NULL, FALSE);
- g_return_val_if_fail (url != NULL, FALSE);
g_return_val_if_fail (options == NULL || g_variant_is_of_type (options, G_VARIANT_TYPE ("a{sv}")), FALSE);
if (!ostree_validate_remote_name (name, error))
@@ -1815,11 +1816,14 @@ impl_repo_remote_replace (OstreeRepo *self,
if (!g_key_file_remove_group (remote->options, remote->group, error))
return FALSE;
- if (g_str_has_prefix (url, "metalink="))
- g_key_file_set_string (remote->options, remote->group, "metalink",
- url + strlen ("metalink="));
- else
- g_key_file_set_string (remote->options, remote->group, "url", url);
+ if (url)
+ {
+ if (g_str_has_prefix (url, "metalink="))
+ g_key_file_set_string (remote->options, remote->group, "metalink",
+ url + strlen ("metalink="));
+ else
+ g_key_file_set_string (remote->options, remote->group, "url", url);
+ }
if (options != NULL)
keyfile_set_from_vardict (remote->options, remote->group, options);
@@ -1866,7 +1870,7 @@ impl_repo_remote_replace (OstreeRepo *self,
* @sysroot: (allow-none): System root
* @changeop: Operation to perform
* @name: Name of remote
- * @url: URL for remote (if URL begins with metalink=, it will be used as such)
+ * @url: (allow-none): URL for remote (if URL begins with metalink=, it will be used as such)
* @options: (allow-none): GVariant of type a{sv}
* @cancellable: Cancellable
* @error: Error