summaryrefslogtreecommitdiff
path: root/src/libostree/ostree-deployment.c
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2014-03-17 19:21:39 -0400
committerColin Walters <walters@verbum.org>2014-03-19 09:49:55 -0400
commit9fed088d6e4851da182d903c178eecb7b9362092 (patch)
treea071bae53bdca37c831640e8e29c9b3effc4dd59 /src/libostree/ostree-deployment.c
parent606918e76339b6c62a06b04c6e8647345a24c692 (diff)
downloadostree-9fed088d6e4851da182d903c178eecb7b9362092.tar.gz
libostree: Fix ostree_deployment_clone() to also clone bootconfig
This way one can easily mutate it for a new deployment list.
Diffstat (limited to 'src/libostree/ostree-deployment.c')
-rw-r--r--src/libostree/ostree-deployment.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/libostree/ostree-deployment.c b/src/libostree/ostree-deployment.c
index a555e056..4533715c 100644
--- a/src/libostree/ostree-deployment.c
+++ b/src/libostree/ostree-deployment.c
@@ -138,11 +138,30 @@ ostree_deployment_set_origin (OstreeDeployment *self, GKeyFile *origin)
OstreeDeployment *
ostree_deployment_clone (OstreeDeployment *self)
{
+ gs_unref_object OstreeBootconfigParser *new_bootconfig = NULL;
+ GKeyFile *new_origin = NULL;
OstreeDeployment *ret = ostree_deployment_new (self->index, self->osname, self->csum,
- self->deployserial,
- self->bootcsum, self->bootserial);
- ostree_deployment_set_bootconfig (ret, self->bootconfig);
- ostree_deployment_set_origin (ret, self->origin);
+ self->deployserial,
+ self->bootcsum, self->bootserial);
+
+ new_bootconfig = ostree_bootconfig_parser_clone (self->bootconfig);
+ ostree_deployment_set_bootconfig (ret, new_bootconfig);
+
+ if (self->origin)
+ {
+ gs_free char *data = NULL;
+ gsize len;
+ gboolean success;
+
+ data = g_key_file_to_data (self->origin, &len, NULL);
+ g_assert (data);
+
+ new_origin = g_key_file_new ();
+ success = g_key_file_load_from_data (new_origin, data, len, 0, NULL);
+ g_assert (success);
+
+ ostree_deployment_set_origin (ret, new_origin);
+ }
return ret;
}