lib/remote: Add getter/setter for collection IDs

This isn’t really used internally, but will be used by gnome-software
for when it configures new flatpak remotes.

This is new public API, but is only declared if compiling with
--enable-p2p.

Includes some basic smoketests.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
tingping/wmclass
Philip Withnall 2017-08-07 14:58:24 +01:00 committed by Alexander Larsson
parent e5e52b4b79
commit 642a5a81a1
6 changed files with 93 additions and 1 deletions

View File

@ -7774,6 +7774,19 @@ get_group (const char *remote_name)
return g_strdup_printf ("remote \"%s\"", remote_name);
}
char *
flatpak_dir_get_remote_collection_id (FlatpakDir *self,
const char *remote_name)
{
GKeyFile *config = ostree_repo_get_config (self->repo);
g_autofree char *group = get_group (remote_name);
if (config)
return g_key_file_get_string (config, group, "collection-id", NULL);
return NULL;
}
char *
flatpak_dir_get_remote_title (FlatpakDir *self,
const char *remote_name)

View File

@ -533,6 +533,8 @@ gboolean flatpak_dir_remove_remote (FlatpakDir *self,
GError **error);
char *flatpak_dir_get_remote_title (FlatpakDir *self,
const char *remote_name);
char *flatpak_dir_get_remote_collection_id (FlatpakDir *self,
const char *remote_name);
char *flatpak_dir_get_remote_main_ref (FlatpakDir *self,
const char *remote_name);
gboolean flatpak_dir_get_remote_oci (FlatpakDir *self,

View File

@ -86,6 +86,7 @@ struct _FlatpakRemotePrivate
FlatpakDir *dir;
char *local_url;
char *local_collection_id;
char *local_title;
char *local_default_branch;
gboolean local_gpg_verify;
@ -96,6 +97,7 @@ struct _FlatpakRemotePrivate
FlatpakRemoteType type;
guint local_url_set : 1;
guint local_collection_id_set : 1;
guint local_title_set : 1;
guint local_default_branch_set : 1;
guint local_gpg_verify_set : 1;
@ -129,6 +131,7 @@ flatpak_remote_finalize (GObject *object)
g_bytes_unref (priv->local_gpg_key);
g_free (priv->local_url);
g_free (priv->local_collection_id);
g_free (priv->local_title);
g_free (priv->local_default_branch);
@ -343,6 +346,52 @@ flatpak_remote_set_url (FlatpakRemote *self,
priv->local_url_set = TRUE;
}
#ifdef FLATPAK_ENABLE_P2P
/**
* flatpak_remote_get_collection_id:
* @self: a #FlatpakRemote
*
* Returns the repository collection ID of this remote, if set.
*
* Returns: (transfer full) (nullable): the collection ID, or %NULL if unset
*/
char *
flatpak_remote_get_collection_id (FlatpakRemote *self)
{
FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self);
if (priv->local_collection_id_set)
return g_strdup (priv->local_collection_id);
if (priv->dir)
return flatpak_dir_get_remote_collection_id (priv->dir, priv->name);
return NULL;
}
/**
* flatpak_remote_set_collection_id:
* @self: a #FlatpakRemote
* @collection_id: The new collection ID
*
* Sets the repository collection ID of this remote.
*
* Note: This is a local modification of this object, you must commit changes
* using flatpak_installation_modify_remote() for the changes to take
* effect.
*/
void
flatpak_remote_set_collection_id (FlatpakRemote *self,
const char *collection_id)
{
FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self);
g_free (priv->local_collection_id);
priv->local_collection_id = g_strdup (collection_id);
priv->local_collection_id_set = TRUE;
}
#endif /* FLATPAK_ENABLE_P2P */
/**
* flatpak_remote_get_title:
* @self: a #FlatpakRemote
@ -763,6 +812,9 @@ flatpak_remote_commit (FlatpakRemote *self,
if (priv->local_url_set)
g_key_file_set_string (config, group, "url", priv->local_url);
if (priv->local_collection_id_set)
g_key_file_set_string (config, group, "collection-id", priv->local_collection_id);
if (priv->local_title_set)
g_key_file_set_string (config, group, "xa.title", priv->local_title);

View File

@ -74,6 +74,11 @@ FLATPAK_EXTERN GFile * flatpak_remote_get_appstream_timestamp (FlatpakRemo
FLATPAK_EXTERN char * flatpak_remote_get_url (FlatpakRemote *self);
FLATPAK_EXTERN void flatpak_remote_set_url (FlatpakRemote *self,
const char *url);
#ifdef FLATPAK_ENABLE_P2P
FLATPAK_EXTERN char * flatpak_remote_get_collection_id (FlatpakRemote *self);
FLATPAK_EXTERN void flatpak_remote_set_collection_id (FlatpakRemote *self,
const char *collection_id);
#endif /* FLATPAK_ENABLE_P2P */
FLATPAK_EXTERN char * flatpak_remote_get_title (FlatpakRemote *self);
FLATPAK_EXTERN void flatpak_remote_set_title (FlatpakRemote *self,
const char *title);

View File

@ -357,10 +357,17 @@ main (int argc, char *argv[])
{
FlatpakRemote *remote = g_ptr_array_index (remotes, i);
g_autoptr(GPtrArray) refs = NULL;
g_print ("\nRemote: %s %d %s %s %s %d %d %s\n",
const char *collection_id = NULL;
#ifdef FLATPAK_ENABLE_P2P
collection_id = flatpak_remote_get_collection_id (remote);
#endif /* !FLATPAK_ENABLE_P2P */
g_print ("\nRemote: %s %d %s %s %s %s %d %d %s\n",
flatpak_remote_get_name (remote),
flatpak_remote_get_prio (remote),
flatpak_remote_get_url (remote),
collection_id,
flatpak_remote_get_title (remote),
flatpak_remote_get_default_branch (remote),
flatpak_remote_get_gpg_verify (remote),

View File

@ -12,6 +12,9 @@ static char *flatpak_installationsdir;
static char *gpg_homedir;
static char *gpg_args;
static char *repo_url;
#ifdef FLATPAK_ENABLE_P2P
static char *repo_collection_id;
#endif /* FLATPAK_ENABLE_P2P */
int httpd_pid = -1;
static const char *gpg_id = "7B0961FD";
@ -251,6 +254,10 @@ test_remote_by_name (void)
g_assert_false (flatpak_remote_get_disabled (remote));
g_assert_true (flatpak_remote_get_gpg_verify (remote));
g_assert_cmpint (flatpak_remote_get_prio (remote), ==, 1);
#ifdef FLATPAK_ENABLE_P2P
g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, repo_collection_id);
#endif /* FLATPAK_ENABLE_P2P */
}
static void
@ -267,6 +274,12 @@ test_remote (void)
remote = flatpak_installation_get_remote_by_name (inst, repo_name, NULL, &error);
g_assert_no_error (error);
#ifdef FLATPAK_ENABLE_P2P
g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, NULL);
flatpak_remote_set_collection_id (remote, "org.example.CollectionID");
g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, "org.example.CollectionID");
#endif /* FLATPAK_ENABLE_P2P */
g_assert_cmpstr (flatpak_remote_get_title (remote), ==, NULL);
flatpak_remote_set_title (remote, "Test Repo");
g_assert_cmpstr (flatpak_remote_get_title (remote), ==, "Test Repo");