@@ -541,6 +541,10 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
541
541
$ originDir = rtrim ($ originDir , '/ \\' );
542
542
$ originDirLen = \strlen ($ originDir );
543
543
544
+ if (!$ this ->exists ($ originDir )) {
545
+ throw new IOException (sprintf ('The origin directory specified "%s" was not found. ' , $ originDir ), 0 , null , $ originDir );
546
+ }
547
+
544
548
// Iterate in destination folder to remove obsolete entries
545
549
if ($ this ->exists ($ targetDir ) && isset ($ options ['delete ' ]) && $ options ['delete ' ]) {
546
550
$ deleteIterator = $ iterator ;
@@ -564,39 +568,24 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
564
568
$ iterator = new \RecursiveIteratorIterator (new \RecursiveDirectoryIterator ($ originDir , $ flags ), \RecursiveIteratorIterator::SELF_FIRST );
565
569
}
566
570
567
- if ($ this ->exists ($ originDir )) {
568
- $ this ->mkdir ($ targetDir );
569
- }
571
+ $ this ->mkdir ($ targetDir );
572
+ $ targetDirInfo = new \SplFileInfo ($ targetDir );
570
573
571
574
foreach ($ iterator as $ file ) {
572
- if ($ file ->getPathName () === $ targetDir ) {
575
+ if ($ file ->getPathName () === $ targetDir || $ file -> getRealPath () === $ targetDir || 0 === strpos ( $ file -> getRealPath (), $ targetDirInfo -> getRealPath ()) ) {
573
576
continue ;
574
577
}
575
578
576
- if (false === strpos ($ file ->getPath (), $ originDir )) {
577
- throw new IOException (sprintf ('Unable to mirror "%s" directory. If the origin directory is relative, try using "realpath" before calling the mirror method. ' , $ originDir ), 0 , null , $ originDir );
578
- }
579
-
580
579
$ target = $ targetDir .substr ($ file ->getPathname (), $ originDirLen );
581
580
582
- if ($ copyOnWindows ) {
583
- if (is_file ($ file )) {
584
- $ this ->copy ($ file , $ target , isset ($ options ['override ' ]) ? $ options ['override ' ] : false );
585
- } elseif (is_dir ($ file )) {
586
- $ this ->mkdir ($ target );
587
- } else {
588
- throw new IOException (sprintf ('Unable to guess "%s" file type. ' , $ file ), 0 , null , $ file );
589
- }
581
+ if (!$ copyOnWindows && is_link ($ file )) {
582
+ $ this ->symlink ($ file ->getLinkTarget (), $ target );
583
+ } elseif (is_dir ($ file )) {
584
+ $ this ->mkdir ($ target );
585
+ } elseif (is_file ($ file )) {
586
+ $ this ->copy ($ file , $ target , isset ($ options ['override ' ]) ? $ options ['override ' ] : false );
590
587
} else {
591
- if (is_link ($ file )) {
592
- $ this ->symlink ($ file ->getLinkTarget (), $ target );
593
- } elseif (is_dir ($ file )) {
594
- $ this ->mkdir ($ target );
595
- } elseif (is_file ($ file )) {
596
- $ this ->copy ($ file , $ target , isset ($ options ['override ' ]) ? $ options ['override ' ] : false );
597
- } else {
598
- throw new IOException (sprintf ('Unable to guess "%s" file type. ' , $ file ), 0 , null , $ file );
599
- }
588
+ throw new IOException (sprintf ('Unable to guess "%s" file type. ' , $ file ), 0 , null , $ file );
600
589
}
601
590
}
602
591
}
0 commit comments