diff options
author | Colin Walters <walters@verbum.org> | 2014-03-17 19:21:39 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2014-03-19 09:49:55 -0400 |
commit | 9fed088d6e4851da182d903c178eecb7b9362092 (patch) | |
tree | a071bae53bdca37c831640e8e29c9b3effc4dd59 /src/libostree/ostree-deployment.c | |
parent | 606918e76339b6c62a06b04c6e8647345a24c692 (diff) | |
download | ostree-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.c | 27 |
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; } |