@@ -30,6 +30,8 @@ typedef struct _AppTransformGenerator
30
30
AppObjectGenerator super ;
31
31
const gchar * flavour ;
32
32
const gchar * filterx_app_variable ;
33
+ GList * included_transforms ;
34
+ GList * excluded_transforms ;
33
35
GString * block ;
34
36
} AppTransformGenerator ;
35
37
@@ -55,6 +57,24 @@ _parse_filterx_app_variable(AppTransformGenerator *self, CfgArgs *args, const gc
55
57
return TRUE;
56
58
}
57
59
60
+ static gboolean
61
+ _parse_include_transforms_arg (AppTransformGenerator * self , CfgArgs * args , const gchar * reference )
62
+ {
63
+ const gchar * v = cfg_args_get (args , "include-transforms" );
64
+ if (!v )
65
+ return TRUE;
66
+ return cfg_process_list_of_literals (v , & self -> included_transforms );
67
+ }
68
+
69
+ static gboolean
70
+ _parse_exclude_transforms_arg (AppTransformGenerator * self , CfgArgs * args , const gchar * reference )
71
+ {
72
+ const gchar * v = cfg_args_get (args , "exclude-transforms" );
73
+ if (!v )
74
+ return TRUE;
75
+ return cfg_process_list_of_literals (v , & self -> excluded_transforms );
76
+ }
77
+
58
78
static gboolean
59
79
app_transform_generator_parse_arguments (AppObjectGenerator * s , CfgArgs * args , const gchar * reference )
60
80
{
@@ -67,6 +87,12 @@ app_transform_generator_parse_arguments(AppObjectGenerator *s, CfgArgs *args, co
67
87
if (!_parse_filterx_app_variable (self , args , reference ))
68
88
return FALSE;
69
89
90
+ if (!_parse_include_transforms_arg (self , args , reference ))
91
+ return FALSE;
92
+
93
+ if (!_parse_exclude_transforms_arg (self , args , reference ))
94
+ return FALSE;
95
+
70
96
if (!app_object_generator_parse_arguments_method (& self -> super , args , reference ))
71
97
return FALSE;
72
98
@@ -78,12 +104,28 @@ _generate_steps(AppTransformGenerator *self, GList *steps)
78
104
{
79
105
for (GList * l = steps ; l ; l = l -> next )
80
106
{
81
- TransformationStep * step = l -> data ;
107
+ TransformStep * step = l -> data ;
82
108
g_string_append_printf (self -> block , " # step: %s" , step -> name );
83
109
g_string_append_printf (self -> block , " %s\n" , step -> expr );
84
110
}
85
111
}
86
112
113
+ static gboolean
114
+ _is_transform_included (AppTransformGenerator * self , const gchar * name )
115
+ {
116
+ if (!self -> included_transforms )
117
+ return TRUE;
118
+ return cfg_is_literal_in_list_of_literals (self -> included_transforms , name );
119
+ }
120
+
121
+ static gboolean
122
+ _is_transform_excluded (AppTransformGenerator * self , const gchar * name )
123
+ {
124
+ if (!self -> excluded_transforms )
125
+ return FALSE;
126
+ return cfg_is_literal_in_list_of_literals (self -> excluded_transforms , name );
127
+ }
128
+
87
129
static void
88
130
_generate_app_transform (Transformation * transformation , gpointer user_data )
89
131
{
@@ -101,11 +143,14 @@ _generate_app_transform(Transformation *transformation, gpointer user_data)
101
143
g_string_append_printf (self -> block , "\n#Start Application %s\n" , transformation -> super .name );
102
144
g_string_append_printf (self -> block , " if (%s == '%s') {\n" , self -> filterx_app_variable ,
103
145
transformation -> super .name );
104
- for (GList * l = transformation -> blocks ; l ; l = l -> next )
146
+ for (GList * l = transformation -> transforms ; l ; l = l -> next )
105
147
{
106
- TransformationBlock * block = l -> data ;
148
+ Transform * transform = l -> data ;
107
149
108
- _generate_steps (self , block -> steps );
150
+ if (!_is_transform_included (self , transform -> name ) || _is_transform_excluded (self , transform -> name ))
151
+ continue ;
152
+
153
+ _generate_steps (self , transform -> steps );
109
154
}
110
155
g_string_append (self -> block , " };\n" );
111
156
g_string_append_printf (self -> block , "\n#End Application %s\n" , transformation -> super .name );
@@ -127,6 +172,16 @@ app_transform_generate_config(AppObjectGenerator *s, GlobalConfig *cfg, GString
127
172
self -> block = NULL ;
128
173
}
129
174
175
+ static void
176
+ _free (CfgBlockGenerator * s )
177
+ {
178
+ AppTransformGenerator * self = (AppTransformGenerator * ) s ;
179
+
180
+ g_list_free_full (self -> included_transforms , g_free );
181
+ g_list_free_full (self -> excluded_transforms , g_free );
182
+ app_object_generator_free_method (s );
183
+ }
184
+
130
185
CfgBlockGenerator *
131
186
app_transform_generator_new (gint context , const gchar * name )
132
187
{
@@ -135,5 +190,6 @@ app_transform_generator_new(gint context, const gchar *name)
135
190
app_object_generator_init_instance (& self -> super , context , name );
136
191
self -> super .parse_arguments = app_transform_generator_parse_arguments ;
137
192
self -> super .generate_config = app_transform_generate_config ;
193
+ self -> super .super .free_fn = _free ;
138
194
return & self -> super .super ;
139
195
}
0 commit comments