Skip to content

Commit 30e2541

Browse files
committed
Use UpgradeHelper during upgrades
This code injects UpgradeHelper into the Module and ModuleStream documents to be used within ModuleStream.stream_expansion_helper(). Signed-off-by: Stephen Gallagher <[email protected]>
1 parent 9c79d66 commit 30e2541

File tree

10 files changed

+330
-32
lines changed

10 files changed

+330
-32
lines changed

bindings/python/gi/overrides/Modulemd.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,19 @@ def python_to_variant(obj):
9898

9999
if float(Modulemd._version) >= 2:
100100

101+
if hasattr(Modulemd.ModuleIndex, "add_known_stream"):
102+
103+
class ModuleIndex(Modulemd.ModuleIndex):
104+
def set_known_streams(self, known_streams):
105+
for module, streams in known_streams.items():
106+
for stream in streams:
107+
super(ModuleIndex, self).add_known_stream(
108+
module, stream
109+
)
110+
111+
ModuleIndex = override(ModuleIndex)
112+
__all__.append(ModuleIndex)
113+
101114
if hasattr(Modulemd, "ModuleStreamV3"):
102115

103116
class ModuleStreamV3(Modulemd.ModuleStreamV3):

modulemd/include/modulemd-2.0/modulemd-module-index.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,4 +637,34 @@ modulemd_module_index_upgrade_defaults (ModulemdModuleIndex *self,
637637
ModulemdDefaultsVersionEnum mdversion,
638638
GError **error);
639639

640+
641+
/**
642+
* modulemd_module_index_add_known_stream:
643+
* @self: This #ModulemdModuleIndex object.
644+
* @module_name: (in): The name of the known module being added.
645+
* @stream_name: (in): The name of the known module stream being added.
646+
*
647+
* This function adds a `module:stream` entry to the #ModulemdModuleIndex.
648+
* It will be used if and when libmodulemd needs to upgrade a
649+
* #ModulemdModuleStreamV2 object to a #ModulemdModuleStreamV3 object if it
650+
* encounters a module dependency that is specified as either `[ ]`
651+
* (all streams) or `[ -streamname ]` (all but some exclusions).
652+
*
653+
* When using the python bindings, a simplified way to set these values is to
654+
* call:
655+
*
656+
* |[<!-- language="Python" -->
657+
* idx = Modulemd.ModuleIndex.new()
658+
* idx.set_known_streams({"module_name": ["stream1", "stream2"]})
659+
* ]|
660+
661+
*
662+
* Since: 2.10
663+
*/
664+
void
665+
modulemd_module_index_add_known_stream (ModulemdModuleIndex *self,
666+
const gchar *module_name,
667+
const gchar *stream_name);
668+
669+
640670
G_END_DECLS

modulemd/include/private/modulemd-module-private.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "modulemd-module.h"
2020
#include "modulemd-translation.h"
2121
#include "modulemd-obsoletes.h"
22+
#include "private/modulemd-upgrade-helper.h"
2223

2324

2425
G_BEGIN_DECLS
@@ -174,4 +175,22 @@ modulemd_module_upgrade_streams (ModulemdModule *self,
174175
ModulemdModuleStreamVersionEnum mdversion,
175176
GError **error);
176177

178+
/**
179+
* modulemd_module_associate_upgrade_helper:
180+
* @self: This #ModulemdModule object.
181+
* @upgrade_helper: (in)(transfer none): a #ModulemdUpgradeHelper to associate
182+
* with this module.
183+
*
184+
* Associates a #ModulemdUpgradeHelper, usually from a #ModulemdModuleIndex,
185+
* with this module to help with upgrades between #ModuleStreamV2 and
186+
* #ModuleStreamV3. This function will take a reference on the one passed in,
187+
* so modifications to the @upgrade_helper will affect subsequent changes to
188+
* this #ModulemdModule.
189+
*
190+
* Since: 2.10
191+
*/
192+
void
193+
modulemd_module_associate_upgrade_helper (
194+
ModulemdModule *self, ModulemdUpgradeHelper *upgrade_helper);
195+
177196
G_END_DECLS

modulemd/include/private/modulemd-module-stream-private.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "private/modulemd-module-stream-v1-private.h"
2121
#include "private/modulemd-module-stream-v2-private.h"
2222
#include "private/modulemd-module-stream-v3-private.h"
23+
#include "private/modulemd-upgrade-helper.h"
2324
#include "private/modulemd-yaml.h"
2425
#include <glib-object.h>
2526

@@ -519,4 +520,23 @@ modulemd_module_stream_clear_autogen_module_name (ModulemdModuleStream *self);
519520
void
520521
modulemd_module_stream_clear_autogen_stream_name (ModulemdModuleStream *self);
521522

523+
524+
/**
525+
* modulemd_module_stream_associate_upgrade_helper:
526+
* @self: This #ModulemdModuleStream object.
527+
* @upgrade_helper: (in)(transfer none): a #ModulemdUpgradeHelper to associate
528+
* with this module.
529+
*
530+
* Associates a #ModulemdUpgradeHelper, usually from a #ModulemdModuleIndex,
531+
* with this stream to help with upgrades between #ModuleStreamV2 and
532+
* #ModuleStreamV3. This function will take a reference on the one passed in,
533+
* so modifications to the @upgrade_helper will affect subsequent changes to
534+
* this #ModulemdModuleStream.
535+
*
536+
* Since: 2.10
537+
*/
538+
void
539+
modulemd_module_stream_associate_upgrade_helper (
540+
ModulemdModuleStream *self, ModulemdUpgradeHelper *upgrade_helper);
541+
522542
G_END_DECLS

modulemd/include/private/modulemd-upgrade-helper.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,20 @@ GStrv
9595
modulemd_upgrade_helper_get_known_streams_as_strv (ModulemdUpgradeHelper *self,
9696
const gchar *module_name);
9797

98+
99+
/**
100+
* modulemd_upgrade_helper_get_known_streams_as_array:
101+
* @self: (in): This #ModulemdUpgradeHelper
102+
* @module_name: (in): The name of the module to return a list of known streams
103+
* for.
104+
*
105+
* Returns: (transfer container): A list of known streams to provide clues to
106+
* the stream upgrade process.
107+
*
108+
* Since: 2.10
109+
*/
110+
GPtrArray *
111+
modulemd_upgrade_helper_get_known_streams_as_array (
112+
ModulemdUpgradeHelper *self, const gchar *module_name);
113+
98114
G_END_DECLS

modulemd/modulemd-module-index.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include "private/modulemd-subdocument-info-private.h"
4040
#include "private/modulemd-translation-private.h"
4141
#include "private/modulemd-obsoletes-private.h"
42+
#include "private/modulemd-upgrade-helper.h"
4243
#include "private/modulemd-util.h"
4344
#include "private/modulemd-yaml.h"
4445

@@ -54,6 +55,8 @@ struct _ModulemdModuleIndex
5455

5556
ModulemdDefaultsVersionEnum defaults_mdversion;
5657
ModulemdModuleStreamVersionEnum stream_mdversion;
58+
59+
ModulemdUpgradeHelper *helper;
5760
};
5861

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

7477
g_clear_pointer (&self->modules, g_hash_table_unref);
78+
g_clear_object (&self->helper);
7579

7680
G_OBJECT_CLASS (modulemd_module_index_parent_class)->finalize (object);
7781
}
@@ -119,6 +123,7 @@ modulemd_module_index_init (ModulemdModuleIndex *self)
119123
self->modules =
120124
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
121125
self->stream_mdversion = modulemd_get_default_stream_mdversion ();
126+
self->helper = modulemd_upgrade_helper_new ();
122127
}
123128

124129

@@ -129,6 +134,7 @@ get_or_create_module (ModulemdModuleIndex *self, const gchar *module_name)
129134
if (module == NULL)
130135
{
131136
module = modulemd_module_new (module_name);
137+
modulemd_module_associate_upgrade_helper (module, self->helper);
132138
g_hash_table_insert (self->modules, g_strdup (module_name), module);
133139
}
134140
return module;
@@ -1222,6 +1228,16 @@ modulemd_module_index_remove_module (ModulemdModuleIndex *self,
12221228
}
12231229

12241230

1231+
void
1232+
modulemd_module_index_add_known_stream (ModulemdModuleIndex *self,
1233+
const gchar *module_name,
1234+
const gchar *stream_name)
1235+
{
1236+
return modulemd_upgrade_helper_add_known_stream (
1237+
self->helper, module_name, stream_name);
1238+
}
1239+
1240+
12251241
gboolean
12261242
modulemd_module_index_add_module_stream (ModulemdModuleIndex *self,
12271243
ModulemdModuleStream *stream,

0 commit comments

Comments
 (0)