diff options
author | Colin Walters <walters@verbum.org> | 2018-04-13 08:56:28 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-04-13 15:26:29 +0000 |
commit | a2dc73198203ca61be997ba67d8edecce3520bba (patch) | |
tree | 00ac6c008d1c550b54bdc6b438ca14f39b6b78ac /src/libostree/ostree-sysroot.c | |
parent | efdaf1495b5f8e8953f0d5174a478028639b9dac (diff) | |
download | ostree-a2dc73198203ca61be997ba67d8edecce3520bba.tar.gz |
sysroot: Clean up origin loading function
In prep for staging work, where we'll need to load the origin
for the staged deployment too.
The function was previously trying to avoid operating on an
instantiated deployment, but the data we need is in the deployment
object at that point.
Closes: #1538
Approved by: jlebon
Diffstat (limited to 'src/libostree/ostree-sysroot.c')
-rw-r--r-- | src/libostree/ostree-sysroot.c | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c index f4a8eade..51d51340 100644 --- a/src/libostree/ostree-sysroot.c +++ b/src/libostree/ostree-sysroot.c @@ -527,32 +527,30 @@ read_current_bootversion (OstreeSysroot *self, } static gboolean -parse_origin (OstreeSysroot *self, - int deployment_dfd, - const char *deployment_name, - GKeyFile **out_origin, - GCancellable *cancellable, - GError **error) +load_origin (OstreeSysroot *self, + OstreeDeployment *deployment, + GCancellable *cancellable, + GError **error) { - g_autofree char *origin_path = g_strconcat ("../", deployment_name, ".origin", NULL); - g_autoptr(GKeyFile) ret_origin = g_key_file_new (); + g_autofree char *origin_path = ostree_deployment_get_origin_relpath (deployment); - struct stat stbuf; - if (!glnx_fstatat_allow_noent (deployment_dfd, origin_path, &stbuf, 0, error)) + glnx_autofd int fd = -1; + if (!ot_openat_ignore_enoent (self->sysroot_fd, origin_path, &fd, error)) return FALSE; - if (errno == 0) + if (fd >= 0) { g_autofree char *origin_contents = - glnx_file_get_contents_utf8_at (deployment_dfd, origin_path, - NULL, cancellable, error); + glnx_fd_readall_utf8 (fd, NULL, cancellable, error); if (!origin_contents) return FALSE; - if (!g_key_file_load_from_data (ret_origin, origin_contents, -1, 0, error)) + g_autoptr(GKeyFile) origin = g_key_file_new (); + if (!g_key_file_load_from_data (origin, origin_contents, -1, 0, error)) return glnx_prefix_error (error, "Parsing %s", origin_path); + + ostree_deployment_set_origin (deployment, origin); } - ot_transfer_out_value(out_origin, &ret_origin); return TRUE; } @@ -656,16 +654,11 @@ parse_deployment (OstreeSysroot *self, stbuf.st_ino == self->root_inode); } - g_autoptr(GKeyFile) origin = NULL; - if (!parse_origin (self, deployment_dfd, deploy_basename, &origin, - cancellable, error)) - return FALSE; - g_autoptr(OstreeDeployment) ret_deployment = ostree_deployment_new (-1, osname, treecsum, deployserial, bootcsum, treebootserial); - if (origin) - ostree_deployment_set_origin (ret_deployment, origin); + if (!load_origin (self, ret_deployment, cancellable, error)) + return FALSE; ret_deployment->unlocked = OSTREE_DEPLOYMENT_UNLOCKED_NONE; g_autofree char *unlocked_development_path = @@ -675,8 +668,9 @@ parse_deployment (OstreeSysroot *self, ret_deployment->unlocked = OSTREE_DEPLOYMENT_UNLOCKED_DEVELOPMENT; else { - g_autofree char *existing_unlocked_state = - g_key_file_get_string (origin, "origin", "unlocked", NULL); + GKeyFile *origin = ostree_deployment_get_origin (ret_deployment); + g_autofree char *existing_unlocked_state = origin ? + g_key_file_get_string (origin, "origin", "unlocked", NULL) : NULL; if (g_strcmp0 (existing_unlocked_state, "hotfix") == 0) { |