/**
  * @param string $source
  * @param string $destination
  */
 public function install($source, $destination)
 {
     $iterator = $this->getIterator($source, RecursiveIteratorIterator::SELF_FIRST);
     foreach ($iterator as $item) {
         $destinationFile = sprintf("%s/%s", $destination, $iterator->getSubPathName());
         $filePath = $iterator->getSubPathName();
         if ($this->exclude->exclude($filePath)) {
             continue;
         }
         if ($item->isDir()) {
             if (!file_exists($destinationFile)) {
                 mkdir($destinationFile);
             }
             continue;
         }
         copy($item, $destinationFile);
         $this->gitIgnore->addEntry('/' . $iterator->getSubPathName());
     }
 }
 /**
  * @param string $source
  * @param string $destination
  */
 public function install($source, $destination)
 {
     $iterator = $this->getIterator($source, RecursiveIteratorIterator::SELF_FIRST);
     foreach ($iterator as $item) {
         $destinationFile = sprintf("%s/%s", $destination, $iterator->getSubPathName());
         $filePath = $iterator->getSubPathName();
         if ($this->exclude->exclude($filePath)) {
             continue;
         }
         if ($item->isDir()) {
             $fileExists = file_exists($destinationFile);
             if (!$fileExists && is_link($destinationFile)) {
                 throw new \RuntimeException(sprintf('File: "%s" appears to be a broken symlink referencing: "%s"', $destinationFile, readlink($destinationFile)));
             }
             if (!$fileExists) {
                 mkdir($destinationFile);
             }
             continue;
         }
         copy($item, $destinationFile);
         $this->gitIgnore->addEntry('/' . $iterator->getSubPathName());
     }
 }
 public function testAddEntryDoesNotAddFileOrDirectoryIfItIsInsideAnIgnoredDirectory()
 {
     $ignoreDirs = array("dir1", "dir2/lol/");
     $gitIgnore = new GitIgnore($this->gitIgnoreFile, $ignoreDirs);
     $gitIgnore->addEntry("dir1/file1.txt");
     $gitIgnore->addEntry("dir2/lol/file2.txt");
     $gitIgnore->addEntry("dir2/file3.txt");
     $expected = array('dir1', 'dir2/lol/', 'dir2/file3.txt');
     $this->assertEquals($expected, $gitIgnore->getEntries());
 }