lib/deploy: Clean up kargs override handling
authorJonathan Lebon <jonathan@jlebon.com>
Mon, 17 Aug 2020 13:48:09 +0000 (09:48 -0400)
committerJonathan Lebon <jonathan@jlebon.com>
Mon, 17 Aug 2020 13:48:57 +0000 (09:48 -0400)
Tighten up how we handle kargs here so it's more clear. When we call
`sysroot_finalize_deployment`, any karg overrides have already been set
on the bootconfig object of the deployment. So re-setting it here is
redundant and confusing.

src/libostree/ostree-sysroot-deploy.c

index cb593020876c7bc5515880f59136761de9c2fc67..89e3b8e83b4e084f51275c950718191d145d4d23 100644 (file)
@@ -2770,7 +2770,6 @@ get_var_dfd (OstreeSysroot      *self,
 static gboolean
 sysroot_finalize_deployment (OstreeSysroot     *self,
                              OstreeDeployment  *deployment,
-                             char             **override_kernel_argv,
                              OstreeDeployment  *merge_deployment,
                              GCancellable      *cancellable,
                              GError           **error)
@@ -2780,15 +2779,18 @@ sysroot_finalize_deployment (OstreeSysroot     *self,
   if (!glnx_opendirat (self->sysroot_fd, deployment_path, TRUE, &deployment_dfd, error))
     return FALSE;
 
-  /* Only use the merge if we didn't get an override */
-  if (!override_kernel_argv && merge_deployment)
+  OstreeBootconfigParser *bootconfig = ostree_deployment_get_bootconfig (deployment);
+
+  /* If the kargs weren't set yet, then just pick it up from the merge deployment. In the
+   * deploy path, overrides are set as part of sysroot_initialize_deployment(). In the
+   * finalize-staged path, they're set by OstreeSysroot when reading the staged GVariant. */
+  if (merge_deployment && ostree_bootconfig_parser_get (bootconfig, "options") == NULL)
     {
-      /* Override the bootloader arguments */
       OstreeBootconfigParser *merge_bootconfig = ostree_deployment_get_bootconfig (merge_deployment);
       if (merge_bootconfig)
         {
-          const char *opts = ostree_bootconfig_parser_get (merge_bootconfig, "options");
-          ostree_bootconfig_parser_set (ostree_deployment_get_bootconfig (deployment), "options", opts);
+          const char *kargs = ostree_bootconfig_parser_get (merge_bootconfig, "options");
+          ostree_bootconfig_parser_set (bootconfig, "options", kargs);
         }
 
     }
@@ -2882,8 +2884,7 @@ ostree_sysroot_deploy_tree (OstreeSysroot     *self,
                                       &deployment, cancellable, error))
     return FALSE;
 
-  if (!sysroot_finalize_deployment (self, deployment, override_kernel_argv,
-                                    provided_merge_deployment,
+  if (!sysroot_finalize_deployment (self, deployment, provided_merge_deployment,
                                     cancellable, error))
     return FALSE;
 
@@ -3149,8 +3150,6 @@ _ostree_sysroot_finalize_staged (OstreeSysroot *self,
                            ostree_deployment_get_csum (merge_deployment_stub),
                            ostree_deployment_get_deployserial (merge_deployment_stub));
     }
-  g_autofree char **kargs = NULL;
-  g_variant_lookup (self->staged_deployment_data, "kargs", "^a&s", &kargs);
 
   /* Unlink the staged state now; if we're interrupted in the middle,
    * we don't want e.g. deal with the partially written /etc merge.
@@ -3158,7 +3157,7 @@ _ostree_sysroot_finalize_staged (OstreeSysroot *self,
   if (!glnx_unlinkat (AT_FDCWD, _OSTREE_SYSROOT_RUNSTATE_STAGED, 0, error))
     return FALSE;
 
-  if (!sysroot_finalize_deployment (self, self->staged_deployment, kargs, merge_deployment,
+  if (!sysroot_finalize_deployment (self, self->staged_deployment, merge_deployment,
                                     cancellable, error))
     return FALSE;