Skip to content

Commit

Permalink
Use UpgradeHelper during upgrades
Browse files Browse the repository at this point in the history
This code injects UpgradeHelper into the Module and ModuleStream
documents to be used within ModuleStream.stream_expansion_helper().

Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
  • Loading branch information
sgallagher committed Nov 20, 2020
1 parent 9c79d66 commit 30e2541
Show file tree
Hide file tree
Showing 10 changed files with 330 additions and 32 deletions.
13 changes: 13 additions & 0 deletions bindings/python/gi/overrides/Modulemd.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,19 @@ def python_to_variant(obj):

if float(Modulemd._version) >= 2:

if hasattr(Modulemd.ModuleIndex, "add_known_stream"):

class ModuleIndex(Modulemd.ModuleIndex):
def set_known_streams(self, known_streams):
for module, streams in known_streams.items():
for stream in streams:
super(ModuleIndex, self).add_known_stream(
module, stream
)

ModuleIndex = override(ModuleIndex)
__all__.append(ModuleIndex)

if hasattr(Modulemd, "ModuleStreamV3"):

class ModuleStreamV3(Modulemd.ModuleStreamV3):
Expand Down
30 changes: 30 additions & 0 deletions modulemd/include/modulemd-2.0/modulemd-module-index.h
Original file line number Diff line number Diff line change
Expand Up @@ -637,4 +637,34 @@ modulemd_module_index_upgrade_defaults (ModulemdModuleIndex *self,
ModulemdDefaultsVersionEnum mdversion,
GError **error);


/**
* modulemd_module_index_add_known_stream:
* @self: This #ModulemdModuleIndex object.
* @module_name: (in): The name of the known module being added.
* @stream_name: (in): The name of the known module stream being added.
*
* This function adds a `module:stream` entry to the #ModulemdModuleIndex.
* It will be used if and when libmodulemd needs to upgrade a
* #ModulemdModuleStreamV2 object to a #ModulemdModuleStreamV3 object if it
* encounters a module dependency that is specified as either `[ ]`
* (all streams) or `[ -streamname ]` (all but some exclusions).
*
* When using the python bindings, a simplified way to set these values is to
* call:
*
* |[<!-- language="Python" -->
* idx = Modulemd.ModuleIndex.new()
* idx.set_known_streams({"module_name": ["stream1", "stream2"]})
* ]|
*
* Since: 2.10
*/
void
modulemd_module_index_add_known_stream (ModulemdModuleIndex *self,
const gchar *module_name,
const gchar *stream_name);


G_END_DECLS
19 changes: 19 additions & 0 deletions modulemd/include/private/modulemd-module-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "modulemd-module.h"
#include "modulemd-translation.h"
#include "modulemd-obsoletes.h"
#include "private/modulemd-upgrade-helper.h"


G_BEGIN_DECLS
Expand Down Expand Up @@ -174,4 +175,22 @@ modulemd_module_upgrade_streams (ModulemdModule *self,
ModulemdModuleStreamVersionEnum mdversion,
GError **error);

/**
* modulemd_module_associate_upgrade_helper:
* @self: This #ModulemdModule object.
* @upgrade_helper: (in)(transfer none): a #ModulemdUpgradeHelper to associate
* with this module.
*
* Associates a #ModulemdUpgradeHelper, usually from a #ModulemdModuleIndex,
* with this module to help with upgrades between #ModuleStreamV2 and
* #ModuleStreamV3. This function will take a reference on the one passed in,
* so modifications to the @upgrade_helper will affect subsequent changes to
* this #ModulemdModule.
*
* Since: 2.10
*/
void
modulemd_module_associate_upgrade_helper (
ModulemdModule *self, ModulemdUpgradeHelper *upgrade_helper);

G_END_DECLS
20 changes: 20 additions & 0 deletions modulemd/include/private/modulemd-module-stream-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "private/modulemd-module-stream-v1-private.h"
#include "private/modulemd-module-stream-v2-private.h"
#include "private/modulemd-module-stream-v3-private.h"
#include "private/modulemd-upgrade-helper.h"
#include "private/modulemd-yaml.h"
#include <glib-object.h>

Expand Down Expand Up @@ -519,4 +520,23 @@ modulemd_module_stream_clear_autogen_module_name (ModulemdModuleStream *self);
void
modulemd_module_stream_clear_autogen_stream_name (ModulemdModuleStream *self);


/**
* modulemd_module_stream_associate_upgrade_helper:
* @self: This #ModulemdModuleStream object.
* @upgrade_helper: (in)(transfer none): a #ModulemdUpgradeHelper to associate
* with this module.
*
* Associates a #ModulemdUpgradeHelper, usually from a #ModulemdModuleIndex,
* with this stream to help with upgrades between #ModuleStreamV2 and
* #ModuleStreamV3. This function will take a reference on the one passed in,
* so modifications to the @upgrade_helper will affect subsequent changes to
* this #ModulemdModuleStream.
*
* Since: 2.10
*/
void
modulemd_module_stream_associate_upgrade_helper (
ModulemdModuleStream *self, ModulemdUpgradeHelper *upgrade_helper);

G_END_DECLS
16 changes: 16 additions & 0 deletions modulemd/include/private/modulemd-upgrade-helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,20 @@ GStrv
modulemd_upgrade_helper_get_known_streams_as_strv (ModulemdUpgradeHelper *self,
const gchar *module_name);


/**
* modulemd_upgrade_helper_get_known_streams_as_array:
* @self: (in): This #ModulemdUpgradeHelper
* @module_name: (in): The name of the module to return a list of known streams
* for.
*
* Returns: (transfer container): A list of known streams to provide clues to
* the stream upgrade process.
*
* Since: 2.10
*/
GPtrArray *
modulemd_upgrade_helper_get_known_streams_as_array (
ModulemdUpgradeHelper *self, const gchar *module_name);

G_END_DECLS
16 changes: 16 additions & 0 deletions modulemd/modulemd-module-index.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "private/modulemd-subdocument-info-private.h"
#include "private/modulemd-translation-private.h"
#include "private/modulemd-obsoletes-private.h"
#include "private/modulemd-upgrade-helper.h"
#include "private/modulemd-util.h"
#include "private/modulemd-yaml.h"

Expand All @@ -54,6 +55,8 @@ struct _ModulemdModuleIndex

ModulemdDefaultsVersionEnum defaults_mdversion;
ModulemdModuleStreamVersionEnum stream_mdversion;

ModulemdUpgradeHelper *helper;
};

G_DEFINE_TYPE (ModulemdModuleIndex, modulemd_module_index, G_TYPE_OBJECT)
Expand All @@ -72,6 +75,7 @@ modulemd_module_index_finalize (GObject *object)
ModulemdModuleIndex *self = (ModulemdModuleIndex *)object;

g_clear_pointer (&self->modules, g_hash_table_unref);
g_clear_object (&self->helper);

G_OBJECT_CLASS (modulemd_module_index_parent_class)->finalize (object);
}
Expand Down Expand Up @@ -119,6 +123,7 @@ modulemd_module_index_init (ModulemdModuleIndex *self)
self->modules =
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
self->stream_mdversion = modulemd_get_default_stream_mdversion ();
self->helper = modulemd_upgrade_helper_new ();
}


Expand All @@ -129,6 +134,7 @@ get_or_create_module (ModulemdModuleIndex *self, const gchar *module_name)
if (module == NULL)
{
module = modulemd_module_new (module_name);
modulemd_module_associate_upgrade_helper (module, self->helper);
g_hash_table_insert (self->modules, g_strdup (module_name), module);
}
return module;
Expand Down Expand Up @@ -1222,6 +1228,16 @@ modulemd_module_index_remove_module (ModulemdModuleIndex *self,
}


void
modulemd_module_index_add_known_stream (ModulemdModuleIndex *self,
const gchar *module_name,
const gchar *stream_name)
{
return modulemd_upgrade_helper_add_known_stream (
self->helper, module_name, stream_name);
}


gboolean
modulemd_module_index_add_module_stream (ModulemdModuleIndex *self,
ModulemdModuleStream *stream,
Expand Down
Loading

0 comments on commit 30e2541

Please sign in to comment.