@@ -155,8 +155,8 @@ typedef struct
155
155
{
156
156
RpmOstreeContext *corectx;
157
157
GFile *treefile_path;
158
- GHashTable *metadata;
159
- GHashTable *detached_metadata;
158
+ GVariantDict *metadata;
159
+ GVariantDict *detached_metadata;
160
160
gboolean failed;
161
161
GLnxTmpDir workdir_tmp;
162
162
int workdir_dfd;
@@ -181,7 +181,8 @@ rpm_ostree_tree_compose_context_free (RpmOstreeTreeComposeContext *ctx)
181
181
{
182
182
g_clear_object (&ctx->corectx );
183
183
g_clear_object (&ctx->treefile_path );
184
- g_clear_pointer (&ctx->metadata , g_hash_table_unref);
184
+ g_clear_pointer (&ctx->metadata , g_variant_dict_unref);
185
+ g_clear_pointer (&ctx->detached_metadata , g_variant_dict_unref);
185
186
ctx->treefile_rs .~optional ();
186
187
/* Only close workdir_dfd if it's not owned by the tmpdir */
187
188
if (!ctx->workdir_tmp .initialized )
@@ -515,17 +516,17 @@ install_packages (RpmOstreeTreeComposeContext *self, gboolean *out_unmodified,
515
516
}
516
517
517
518
static gboolean
518
- parse_metadata_keyvalue_strings (char **strings, GHashTable *metadata_hash, GError **error)
519
+ parse_metadata_keyvalue_strings (char **strings, GVariantDict *metadata_hash, GError **error)
519
520
{
520
521
for (char **iter = strings; *iter; iter++)
521
522
{
522
523
const char *s = *iter;
523
524
const char *eq = strchr (s, ' =' );
524
525
if (!eq)
525
526
return glnx_throw (error, " Missing '=' in KEY=VALUE metadata '%s'" , s);
527
+ g_autofree char *k = g_strndup (s, eq - s);
526
528
527
- g_hash_table_insert (metadata_hash, g_strndup (s, eq - s),
528
- g_variant_ref_sink (g_variant_new_string (eq + 1 )));
529
+ g_variant_dict_insert (metadata_hash, k, " s" , eq + 1 );
529
530
}
530
531
531
532
return TRUE ;
@@ -762,10 +763,8 @@ rpm_ostree_compose_context_new (const char *treefile_pathstr, const char *basear
762
763
763
764
self->treefile = json_node_get_object (self->treefile_rootval );
764
765
765
- self->metadata
766
- = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
767
- self->detached_metadata
768
- = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
766
+ self->metadata = g_variant_dict_new (NULL );
767
+ self->detached_metadata = g_variant_dict_new (NULL );
769
768
770
769
/* metadata from the treefile itself has the lowest priority */
771
770
JsonNode *add_commit_metadata_node
@@ -805,8 +804,8 @@ rpm_ostree_compose_context_new (const char *treefile_pathstr, const char *basear
805
804
{
806
805
g_variant_builder_add (&builder, " s" , s.c_str ());
807
806
}
808
- g_hash_table_insert (self->metadata , g_strdup ( " ostree.container-cmd" ) ,
809
- g_variant_ref_sink ( g_variant_builder_end (&builder) ));
807
+ g_variant_dict_insert_value (self->metadata , " ostree.container-cmd" ,
808
+ g_variant_builder_end (&builder));
810
809
}
811
810
812
811
auto layers = (*self->treefile_rs )->get_all_ostree_layers ();
@@ -836,8 +835,7 @@ inject_advisories (RpmOstreeTreeComposeContext *self, GCancellable *cancellable,
836
835
g_autoptr (GVariant) advisories = rpmostree_advisories_variant (yum_sack, pkgs);
837
836
838
837
if (advisories && g_variant_n_children (advisories) > 0 )
839
- g_hash_table_insert (self->metadata , g_strdup (" rpmostree.advisories" ),
840
- g_steal_pointer (&advisories));
838
+ g_variant_dict_insert_value (self->metadata , " rpmostree.advisories" , advisories);
841
839
842
840
return TRUE ;
843
841
}
@@ -918,7 +916,7 @@ impl_install_tree (RpmOstreeTreeComposeContext *self, gboolean *out_changed,
918
916
rust::String next_version;
919
917
if (json_object_has_member (self->treefile , " automatic-version-prefix" ) &&
920
918
/* let --add-metadata-string=version=... take precedence */
921
- !g_hash_table_contains (self->metadata , OSTREE_COMMIT_META_KEY_VERSION))
919
+ !g_variant_dict_contains (self->metadata , OSTREE_COMMIT_META_KEY_VERSION))
922
920
{
923
921
CXX_TRY_VAR (ver_prefix, (*self->treefile_rs )->require_automatic_version_prefix (), error);
924
922
auto ver_suffix = (*self->treefile_rs )->get_automatic_version_suffix ();
@@ -941,17 +939,15 @@ impl_install_tree (RpmOstreeTreeComposeContext *self, gboolean *out_changed,
941
939
last_version ?: " " ),
942
940
error);
943
941
next_version = std::move (next_versionv);
944
- g_hash_table_insert (self->metadata , g_strdup ( OSTREE_COMMIT_META_KEY_VERSION) ,
945
- g_variant_ref_sink ( g_variant_new_string ( next_version.c_str ()) ));
942
+ g_variant_dict_insert (self->metadata , OSTREE_COMMIT_META_KEY_VERSION, " s " ,
943
+ next_version.c_str ());
946
944
}
947
945
else
948
946
{
949
- gpointer vp = g_hash_table_lookup (self->metadata , OSTREE_COMMIT_META_KEY_VERSION);
950
- auto v = static_cast <GVariant *> (vp);
951
- if (v)
947
+ const char *version = NULL ;
948
+ if (g_variant_dict_lookup (self->metadata , " &s" , OSTREE_COMMIT_META_KEY_VERSION, &version))
952
949
{
953
- g_assert (g_variant_is_of_type (v, G_VARIANT_TYPE_STRING));
954
- next_version = rust::String (static_cast <char *> (g_variant_dup_string (v, NULL )));
950
+ next_version = rust::String (version);
955
951
}
956
952
}
957
953
@@ -991,24 +987,26 @@ impl_install_tree (RpmOstreeTreeComposeContext *self, gboolean *out_changed,
991
987
= (*self->treefile_rs )->get_repo_metadata_target ();
992
988
if (repomd_target == rpmostreecxx::RepoMetadataTarget::Inline)
993
989
{
994
- if (!g_hash_table_contains (self->metadata , " rpmostree.rpmmd-repos" ))
990
+ if (!g_variant_dict_contains (self->metadata , " rpmostree.rpmmd-repos" ))
995
991
{
996
- g_hash_table_insert (self->metadata , g_strdup (" rpmostree.rpmmd-repos" ),
997
- rpmostree_context_get_rpmmd_repo_commit_metadata (self->corectx ));
992
+ g_autoptr (GVariant) meta
993
+ = rpmostree_context_get_rpmmd_repo_commit_metadata (self->corectx );
994
+ g_variant_dict_insert_value (self->metadata , " rpmostree.rpmmd-repos" , meta);
998
995
}
999
996
}
1000
997
else if (repomd_target == rpmostreecxx::RepoMetadataTarget::Detached)
1001
998
{
1002
- if (!g_hash_table_contains (self->detached_metadata , " rpmostree.rpmmd-repos" ))
999
+ if (!g_variant_dict_contains (self->detached_metadata , " rpmostree.rpmmd-repos" ))
1003
1000
{
1004
- g_hash_table_insert (self->detached_metadata , g_strdup (" rpmostree.rpmmd-repos" ),
1005
- rpmostree_context_get_rpmmd_repo_commit_metadata (self->corectx ));
1001
+ g_autoptr (GVariant) meta
1002
+ = rpmostree_context_get_rpmmd_repo_commit_metadata (self->corectx );
1003
+ g_variant_dict_insert_value (self->detached_metadata , " rpmostree.rpmmd-repos" , meta);
1006
1004
}
1007
1005
}
1008
1006
else
1009
1007
{
1010
- g_hash_table_remove (self->metadata , " rpmostree.rpmmd-repos" );
1011
- g_hash_table_remove (self->detached_metadata , " rpmostree.rpmmd-repos" );
1008
+ g_variant_dict_remove (self->metadata , " rpmostree.rpmmd-repos" );
1009
+ g_variant_dict_remove (self->detached_metadata , " rpmostree.rpmmd-repos" );
1012
1010
}
1013
1011
1014
1012
if (!inject_advisories (self, cancellable, error))
@@ -1057,8 +1055,7 @@ impl_install_tree (RpmOstreeTreeComposeContext *self, gboolean *out_changed,
1057
1055
}
1058
1056
1059
1057
/* Insert our input hash */
1060
- g_hash_table_replace (self->metadata , g_strdup (" rpmostree.inputhash" ),
1061
- g_variant_ref_sink (g_variant_new_string (new_inputhash)));
1058
+ g_variant_dict_insert (self->metadata , " rpmostree.inputhash" , " s" , new_inputhash);
1062
1059
1063
1060
*out_changed = TRUE ;
1064
1061
return TRUE ;
@@ -1120,8 +1117,7 @@ impl_commit_tree (RpmOstreeTreeComposeContext *self, GCancellable *cancellable,
1120
1117
GVariant *v = json_gvariant_deserialize (initramfs_args, " as" , error);
1121
1118
if (!v)
1122
1119
return FALSE ;
1123
- g_hash_table_insert (self->metadata , g_strdup (" rpmostree.initramfs-args" ),
1124
- g_variant_ref_sink (v));
1120
+ g_variant_dict_insert_value (self->metadata , " rpmostree.initramfs-args" , v);
1125
1121
}
1126
1122
1127
1123
/* Convert metadata hash tables to GVariants */
0 commit comments