File: modulemd-module-stream-v2-private.h

package info (click to toggle)
libmodulemd 2.15.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,180 kB
  • sloc: ansic: 37,927; python: 3,233; xml: 1,739; sh: 389; makefile: 42
file content (279 lines) | stat: -rw-r--r-- 8,698 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
/*
 * This file is part of libmodulemd
 * Copyright (C) 2018 Red Hat, Inc.
 *
 * Fedora-License-Identifier: MIT
 * SPDX-2.0-License-Identifier: MIT
 * SPDX-3.0-License-Identifier: MIT
 *
 * This program is free software.
 * For more information on the license, see COPYING.
 * For more information on free software, see <https://www.gnu.org/philosophy/free-sw.en.html>.
 */

#pragma once

#include "modulemd-module-stream.h"
#include "modulemd-module-stream-v2.h"
#include "modulemd-subdocument-info.h"
#include <glib-object.h>
#include <yaml.h>


G_BEGIN_DECLS


/**
 * MODULEMD_MODULE_STREAM_V2_MAXCONTEXTLEN:
 *
 * The ModuleStream v3 specification defines the maximum lenth of the context
 * field. Just before building, the v3 format is converted to v2 format.  But
 * if a scratch build was requested, an underscore with a decimal number (e.g.
 * "_1") is appended to the v2 context. Allow up to 99 scratch builds here.
 */
#define MODULEMD_MODULE_STREAM_V2_MAXCONTEXTLEN (MMD_MAXCONTEXTLEN + 3)


/**
 * SECTION: modulemd-module-stream-v2-private
 * @title: Modulemd.ModuleStreamV2 (Private)
 * @stability: private
 * @short_description: #ModulemdModuleStreamV2 methods that should only be
 * used by internal consumers.
 */


struct _ModulemdModuleStreamV2
{
  GObject parent_instance;

  /* Properties */
  ModulemdBuildopts *buildopts;
  gchar *community;
  gchar *description;
  gchar *documentation;
  gchar *summary;
  gchar *tracker;

  /* Internal Data Structures */
  GHashTable *module_components; /* <string, Modulemd.ComponentModule */
  GHashTable *rpm_components; /* <string, Modulemd.ComponentRpm> */

  GHashTable *content_licenses; /* string set */
  GHashTable *module_licenses; /* string set */

  GHashTable *profiles; /* <string, Modulemd.Profile> */

  GHashTable *rpm_api; /* string set */

  GHashTable *rpm_artifacts; /* string set */

  /*  < string, GHashTable <string, Modulemd.RpmMapEntry> > */
  GHashTable *rpm_artifact_map;

  GHashTable *rpm_filters; /* string set */

  GHashTable *demodularized_rpms; /* string set */

  GHashTable *servicelevels; /* <string, Modulemd.ServiceLevel */

  GPtrArray *dependencies; /* <Modulemd.Dependencies> */

  ModulemdObsoletes *obsoletes;

  GVariant *xmd;

  gboolean static_context;
};


/**
 * modulemd_module_stream_v2_parse_yaml:
 * @subdoc: (in): A #ModulemdSubdocumentInfo representing a stream v2
 * document.
 * @strict: (in): Whether the parser should return failure if it encounters an
 * unknown mapping key or if it should ignore it.
 * @only_packager: (in): Whether the parser should return failure if it
 * encounters a mapping key that is not intended for packager use. Ignored
 * if @strict is #FALSE.
 * @error: (out): A #GError that will return the reason for a parsing or
 * validation error.
 *
 * Returns: (transfer full): A newly-allocated #ModulemdModuleStreamV2 object
 * read from the YAML. NULL if a parse or validation error occurred and sets
 * @error appropriately.
 *
 * Since: 2.0
 */
ModulemdModuleStreamV2 *
modulemd_module_stream_v2_parse_yaml (ModulemdSubdocumentInfo *subdoc,
                                      gboolean strict,
                                      gboolean only_packager,
                                      GError **error);

/**
 * modulemd_module_stream_v2_emit_yaml:
 * @self: This #ModulemdModuleStreamV2 object.
 * @emitter: (inout): A libyaml emitter object positioned where the data
 * section of a #ModulemdModuleStreamV2 belongs in the YAML document.
 * @error: (out): A #GError that will return the reason for an emission or
 * validation error.
 *
 * Returns: TRUE if the stream was emitted successfully. FALSE and sets
 * @error appropriately if the YAML could not be emitted.
 *
 * Since: 2.0
 */
gboolean
modulemd_module_stream_v2_emit_yaml (ModulemdModuleStreamV2 *self,
                                     yaml_emitter_t *emitter,
                                     GError **error);

/**
 * modulemd_module_stream_v2_replace_content_licenses:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @set: (in): A #GHashTable set of licenses under which one or more of the
 * components of this module stream are distributed.
 *
 * Any existing content licenses associated with module stream @self are
 * removed and replaced by @set.
 *
 * Since: 2.0
 */
void
modulemd_module_stream_v2_replace_content_licenses (
  ModulemdModuleStreamV2 *self, GHashTable *set);

/**
 * modulemd_module_stream_v2_replace_module_licenses:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @set: (in): A #GHashTable set of licenses under which this module stream is
 * distributed.
 *
 * Any existing module licenses associated with module stream @self are removed
 * and replaced by @set.
 *
 * Since: 2.0
 */
void
modulemd_module_stream_v2_replace_module_licenses (
  ModulemdModuleStreamV2 *self, GHashTable *set);

/**
 * modulemd_module_stream_v2_replace_rpm_api:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @set: (in): A #GHashTable set of binary RPMs present in this module stream that is
 * considered stable public API.
 *
 * Any existing API RPMs associated with module stream @self are removed and
 * replaced by @set.
 *
 * Since: 2.0
 */
void
modulemd_module_stream_v2_replace_rpm_api (ModulemdModuleStreamV2 *self,
                                           GHashTable *set);

/**
 * modulemd_module_stream_v2_replace_rpm_artifacts:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @set: (in): A #GHashTable set of NEVRs of binary RPMs present in this module
 * stream.
 *
 * Any existing artifact RPMs associated with module stream @self are removed
 * and replaced by @set.
 *
 * Since: 2.0
 */
void
modulemd_module_stream_v2_replace_rpm_artifacts (ModulemdModuleStreamV2 *self,
                                                 GHashTable *set);

/**
 * modulemd_module_stream_v2_replace_rpm_filters:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @set: (in): A #GHashTable set of names of binary RPMs to filter out of this
 * module stream.
 *
 * Any existing filtered binary RPM names associated with module stream @self
 * are removed and replaced by @set.
 *
 * Since: 2.0
 */
void
modulemd_module_stream_v2_replace_rpm_filters (ModulemdModuleStreamV2 *self,
                                               GHashTable *set);

/**
 * modulemd_module_stream_v2_replace_demodularized_rpms:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @set: (in): A #GHashTable set of names of binary RPM packages to demodularize.
 *
 * Any existing demodularized binary RPM package names associated with module
 * stream @self are removed and replaced by @set.
 *
 * Since: 2.13
 */
void
modulemd_module_stream_v2_replace_demodularized_rpms (
  ModulemdModuleStreamV2 *self, GHashTable *set);

/**
 * modulemd_module_stream_v2_replace_dependencies:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @array: (in): A #GPtrArray of #ModulemdDependencies objects for this module
 * stream.
 *
 * Any existing dependencies associated with module stream @self are removed
 * and replaced by @array.
 *
 * Since: 2.0
 */
void
modulemd_module_stream_v2_replace_dependencies (ModulemdModuleStreamV2 *self,
                                                GPtrArray *array);


/**
 * modulemd_module_stream_v2_includes_nevra:
 * @self: This #ModulemdModuleStreamV2 object.
 * @nevra_pattern: (not nullable): A [glob](https://www.mankier.com/3/glob)
 * pattern to match against the NEVRA strings of the rpm artifacts in @self.
 *
 * Returns: TRUE if this stream includes at least one RPM artifact that
 * matches @nevra_pattern. FALSE otherwise.
 *
 * Since: 2.9
 */
gboolean
modulemd_module_stream_v2_includes_nevra (ModulemdModuleStreamV2 *self,
                                          const gchar *nevra_pattern);

/**
 * modulemd_module_stream_v2_associate_obsoletes:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 * @obsoletes: (in): The #ModulemdObsoletes information to associate with
 * this object.
 *
 * Since: 2.10
 */
void
modulemd_module_stream_v2_associate_obsoletes (ModulemdModuleStreamV2 *self,
                                               ModulemdObsoletes *obsoletes);

/**
 * modulemd_module_stream_v2_get_obsoletes:
 * @self: (in): This #ModulemdModuleStreamV2 object.
 *
 * Returns: (transfer none): The #ModulemdObsoletes information associated with this
 * object. This function doesn't resolve the reset attribute of obsoletes, this means
 * even if obsoletes associated with this stream has attribute reset set the obsoletes
 * object is still returned.
 *
 * Since: 2.10
 */
ModulemdObsoletes *
modulemd_module_stream_v2_get_obsoletes (ModulemdModuleStreamV2 *self);


G_END_DECLS