37
37
* $pkgxml->generate('package.xml');
38
38
*
39
39
*/
40
- class PackageConfigReader
41
- implements LoggableInterface
40
+ class PackageConfigReader
41
+ implements LoggableInterface
42
42
{
43
43
public $ config ;
44
44
@@ -76,7 +76,7 @@ function read($file)
76
76
77
77
$ ini = null ;
78
78
try {
79
- $ ini = parse_ini_file ( $ file , true );
79
+ $ ini = $ this -> parseFile ( $ file );
80
80
}
81
81
catch ( Exception $ e ) {
82
82
throw new Exception ( "Package.ini: $ file syntax error: " . $ e ->getMessage () );
@@ -166,29 +166,29 @@ function read($file)
166
166
$ requires = $ config ->get ('require ' );
167
167
if ( ! $ requires ) {
168
168
169
- // use default core dependency
169
+ // use default core dependency
170
170
$ logger ->info2 ("* required section is not defined. use php 5.3 and pearinstaller 1.4 by default. " ,1 );
171
171
$ pkginfo ->deps [] = array (
172
172
'type ' => 'core ' ,
173
173
'name ' => 'php ' ,
174
174
'version ' => array ( 'min ' => '5.3 ' ),
175
175
);
176
- $ pkginfo ->deps [] = array (
176
+ $ pkginfo ->deps [] = array (
177
177
'type ' => 'core ' ,
178
178
'name ' => 'pearinstaller ' ,
179
179
'version ' => array ( 'min ' => '1.4 ' ),
180
180
);
181
181
}
182
182
183
183
if ( $ requires ) {
184
- foreach ( $ requires as $ key => $ value )
184
+ foreach ( $ requires as $ key => $ value )
185
185
{
186
186
$ type = $ this ->detectDependencyType ( $ key , $ value );
187
187
switch ($ type ) {
188
188
189
189
case 'core ' :
190
190
$ version = SpecUtils::parseVersion ( $ value );
191
- $ pkginfo ->deps [] = array (
191
+ $ pkginfo ->deps [] = array (
192
192
'type ' => 'core ' ,
193
193
'name ' => $ key ,
194
194
'version ' => $ version , /* [ min => , max => ] */
@@ -242,7 +242,7 @@ function detectDependencyType($key,$value = null)
242
242
elseif ( preg_match ('/^ext(?:ension)?\/\w+/ ' ,$ key ) ) {
243
243
return 'extension ' ;
244
244
245
- }
245
+ }
246
246
// todo: check if there is a resource for this.
247
247
else {
248
248
// otherwisze it's a package
@@ -257,15 +257,15 @@ function detectDependencyType($key,$value = null)
257
257
function parseDependency ($ key ,$ value )
258
258
{
259
259
// format: {channel host}/{package name} = {version expression}
260
- if ( preg_match ('/^([a-zA-Z0-9.-]+)\/(\w+)$/ ' , $ key , $ regs ) )
260
+ if ( preg_match ('/^([a-zA-Z0-9.-]+)\/(\w+)$/ ' , $ key , $ regs ) )
261
261
{
262
262
if ( $ value != 'conflict ' )
263
263
{
264
264
return array (
265
265
'type ' => 'pear ' ,
266
266
'name ' => $ regs [2 ],
267
267
'version ' => SpecUtils::parseVersion ($ value ),
268
- 'resource ' => array (
268
+ 'resource ' => array (
269
269
'type ' => 'channel ' ,
270
270
'channel ' => $ regs [1 ],
271
271
)
@@ -276,7 +276,7 @@ function parseDependency($key,$value)
276
276
'type ' => 'pear ' ,
277
277
'name ' => $ regs [2 ],
278
278
'conflict ' => 1 ,
279
- 'resource ' => array (
279
+ 'resource ' => array (
280
280
'type ' => 'channel ' ,
281
281
'channel ' => $ regs [1 ],
282
282
)
@@ -291,7 +291,7 @@ function parseDependency($key,$value)
291
291
'version ' => SpecUtils::parseVersion ($ value ),
292
292
);
293
293
}
294
- elseif ( preg_match ('/^(\w+)$/ ' ,$ key ,$ regs ) )
294
+ elseif ( preg_match ('/^(\w+)$/ ' ,$ key ,$ regs ) )
295
295
{
296
296
// PEAR package with URI format
297
297
if ( preg_match ('/^https?:\/\// ' ,$ value ) ) {
@@ -317,6 +317,32 @@ public function getResources()
317
317
{
318
318
}
319
319
320
+ private function parseFile ($ file )
321
+ {
322
+ $ ini = parse_ini_file ($ file , true );
323
+ if (isset ($ ini ['structure ' ])) {
324
+ $ ini ['structure ' ] = $ this ->parseCommaSeparatedListValue ($ ini ['structure ' ]);
325
+ }
326
+
327
+ return $ ini ;
328
+ }
329
+
330
+ private function parseCommaSeparatedListValue (array $ entry )
331
+ {
332
+ foreach ($ entry as $ key => $ value ) {
333
+ if (false !== strpos ($ value , ', ' )) {
334
+ $ list = explode (', ' , $ value );
335
+ foreach ($ list as $ item ) {
336
+ $ parsedStructure [$ key ][] = trim ($ item );
337
+ }
338
+ } else {
339
+ $ parsedStructure [$ key ][] = $ value ;
340
+ }
341
+ }
342
+
343
+ return $ parsedStructure ;
344
+ }
345
+
320
346
}
321
347
322
348
0 commit comments