@@ -305,7 +305,7 @@ public function pack($sourceFolder, $destinationFolder=".", $fileName=null, arra
305
305
$ includeMap = array ();
306
306
if ($ type == self ::TYPE_LIBRARY ) {
307
307
// Include all files and folders for the library
308
- $ properties ['appdir.includes ' ] = array_diff (scandir ($ sourceFolder ), array ('. ' ,'.. ' ,'deployment.properties ' ));
308
+ $ properties ['appdir.includes ' ] = array_diff (scandir ($ sourceFolder ), array ('. ' ,'.. ' ,'deployment.properties ' ));
309
309
$ appDir = '' ;
310
310
}
311
311
$ includeMap ['appdir ' ] = $ this ->getAppPaths ($ appDir , $ properties ['appdir.includes ' ]);
@@ -325,8 +325,22 @@ public function pack($sourceFolder, $destinationFolder=".", $fileName=null, arra
325
325
$ excludes = $ properties [$ type .'.excludes ' ];
326
326
}
327
327
328
+ $ excludedEndings = array ();
329
+ foreach ($ excludes as $ exclude ) {
330
+ $ exclude = trim ($ exclude );
331
+ $ exclude = rtrim ($ exclude , '/ ' ); # no trailing slashes
332
+ if (strlen ($ exclude ) == 0 ) {
333
+ continue ;
334
+ }
335
+ // We support **/<something> syntax. It means all entries ending with <something>
336
+ // will be excluded from the list of files
337
+ if (preg_match ("/^\*\*\/(.*?)$/ " , $ exclude , $ matches )) {
338
+ $ excludedEndings [$ matches [1 ]] = strlen ($ matches [1 ]);
339
+ }
340
+ }
341
+
328
342
foreach ($ paths as $ localPath => $ zpkPath ) {
329
- $ this ->addPathToZpk ($ zpk , $ sourceFolder , $ localPath , $ zpkPath , $ excludes );
343
+ $ this ->addPathToZpk ($ zpk , $ sourceFolder , $ localPath , $ zpkPath , $ excludes, $ excludedEndings );
330
344
}
331
345
}
332
346
@@ -445,12 +459,17 @@ protected function fixZipPath($path)
445
459
* @param string $directory
446
460
* @param string $baseDir
447
461
*/
448
- protected function addPathToZpk ($ zpk , $ sourceFolder , $ localPath , $ zpkPath , $ excludes = array ())
462
+ protected function addPathToZpk ($ zpk , $ sourceFolder , $ localPath , $ zpkPath , $ excludes = array (), $ excludedEndings = array () )
449
463
{
450
464
$ localPath = $ this ->normalizePath ($ localPath );
451
465
if (in_array ($ localPath , $ excludes )) {
452
466
return ;
453
467
}
468
+ foreach ($ excludedEndings as $ exclude => $ length ) {
469
+ if (substr ($ localPath , -$ length ) === $ exclude ) {
470
+ return ;
471
+ }
472
+ }
454
473
455
474
$ fullPath = $ sourceFolder .'/ ' .$ localPath ;
456
475
if (is_file ($ fullPath )) {
@@ -467,17 +486,26 @@ protected function addPathToZpk($zpk, $sourceFolder, $localPath, $zpkPath, $excl
467
486
468
487
// we are dealing with directories
469
488
$ entries = scandir ($ fullPath );
470
- if (count ($ entries ) <= 2 ) {
489
+ // filter entries
490
+ foreach ($ entries as $ idx => $ name ) {
491
+ if (in_array ($ name , array ('. ' ,'.. ' ))) {
492
+ unset($ entries [$ idx ]);
493
+ continue ;
494
+ }
495
+
496
+ foreach ($ excludedEndings as $ exclude => $ length ) {
497
+ if ($ name === $ exclude ) {
498
+ unset($ entries [$ idx ]);
499
+ }
500
+ }
501
+ }
502
+ if (count ($ entries ) == 0 ) {
471
503
$ zpk ->addEmptyDir ($ zpkPath );
472
504
return ;
473
505
}
474
506
475
507
foreach ($ entries as $ name ) {
476
- if (in_array ($ name , array ('. ' ,'.. ' ))) {
477
- continue ;
478
- }
479
-
480
- $ this ->addPathToZpk ($ zpk , $ sourceFolder , $ localPath .'/ ' .$ name , $ zpkPath .'/ ' .$ name , $ excludes );
508
+ $ this ->addPathToZpk ($ zpk , $ sourceFolder , $ localPath .'/ ' .$ name , $ zpkPath .'/ ' .$ name , $ excludes , $ excludedEndings );
481
509
}
482
510
}
483
511
0 commit comments