@@ -536,6 +536,10 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
536
536
$ originDir = rtrim ($ originDir , '/ \\' );
537
537
$ originDirLen = \strlen ($ originDir );
538
538
539
+ if (!$ this ->exists ($ originDir )) {
540
+ throw new IOException (sprintf ('The origin directory specified "%s" was not found. ' , $ originDir ), 0 , null , $ originDir );
541
+ }
542
+
539
543
// Iterate in destination folder to remove obsolete entries
540
544
if ($ this ->exists ($ targetDir ) && isset ($ options ['delete ' ]) && $ options ['delete ' ]) {
541
545
$ deleteIterator = $ iterator ;
@@ -562,35 +566,25 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
562
566
$ iterator = new \RecursiveIteratorIterator (new \RecursiveDirectoryIterator ($ originDir , $ flags ), \RecursiveIteratorIterator::SELF_FIRST );
563
567
}
564
568
565
- if ( $ this ->exists ( $ originDir )) {
566
- $ this -> mkdir ($ targetDir );
567
- }
569
+ $ this ->mkdir ( $ targetDir );
570
+ $ targetDirInfo = new \ SplFileInfo ($ targetDir );
571
+ $ regex = sprintf ( ' /^%s.*/ ' , str_replace ( ' / ' , ' \/ ' , $ targetDirInfo -> getRealPath () ? $ targetDirInfo -> getRealPath () : $ targetDir ));
568
572
569
573
foreach ($ iterator as $ file ) {
570
- if ($ file ->getPathName () === $ targetDir ) {
574
+ if ($ file ->getPathName () === $ targetDir || $ file -> getRealPath () === $ targetDirInfo -> getRealPath () || preg_match ( $ regex , $ file -> getRealPath ()) ) {
571
575
continue ;
572
576
}
573
577
574
578
$ target = $ targetDir .substr ($ file ->getPathname (), $ originDirLen );
575
579
576
- if ($ copyOnWindows ) {
577
- if (is_file ($ file )) {
578
- $ this ->copy ($ file , $ target , isset ($ options ['override ' ]) ? $ options ['override ' ] : false );
579
- } elseif (is_dir ($ file )) {
580
- $ this ->mkdir ($ target );
581
- } else {
582
- throw new IOException (sprintf ('Unable to guess "%s" file type. ' , $ file ), 0 , null , $ file );
583
- }
580
+ if (!$ copyOnWindows && is_link ($ file )) {
581
+ $ this ->symlink ($ file ->getLinkTarget (), $ target );
582
+ } elseif (is_dir ($ file )) {
583
+ $ this ->mkdir ($ target );
584
+ } elseif (is_file ($ file )) {
585
+ $ this ->copy ($ file , $ target , isset ($ options ['override ' ]) ? $ options ['override ' ] : false );
584
586
} else {
585
- if (is_link ($ file )) {
586
- $ this ->symlink ($ file ->getLinkTarget (), $ target );
587
- } elseif (is_dir ($ file )) {
588
- $ this ->mkdir ($ target );
589
- } elseif (is_file ($ file )) {
590
- $ this ->copy ($ file , $ target , isset ($ options ['override ' ]) ? $ options ['override ' ] : false );
591
- } else {
592
- throw new IOException (sprintf ('Unable to guess "%s" file type. ' , $ file ), 0 , null , $ file );
593
- }
587
+ throw new IOException (sprintf ('Unable to guess "%s" file type. ' , $ file ), 0 , null , $ file );
594
588
}
595
589
}
596
590
}
0 commit comments