solar for xp中的sync-vendor命令

上次和@life讨论关于solar xp的事情,目前solar xp处于测试阶段,你可以在论坛中下载symlink.php及unlinkvendor.php两个文件覆盖 solar-system-1.1.1-win-0.2中相应的两个文件,下载请点这里

在XP中只能使用copy的方式来同步文件,不过现在的版本仅当使用unlink-vendor命令时才会触发同步事件,把include/Vendor目录中的文件同步到/source/vendor/Vendor中。这种做法同时也会删除include/Vendor目录,且没有考虑/include/Test/Vendor等三个目录,也给solar xp用户带了很大的不便。所以现在考虑增加一个命令sync-vendor,这个命令只在windows xp, 2000或2003不技持Symlink的系统上使用,如果在windows vista或7中使用会提示“this command is only for windows below vista”。

昨天晚上做了一个测试,代码如下:

$vendor = 'Acme';
$system = 'D:\\xampp\htdocs\solarlatest';
$script = 'acme';

// D:\xampp\htdocs\solarlatest\include\Acme\App\{$controller}\Public
$dir = $system."\docroot\public\\$vendor\App";

// D:\xampp\htdocs\solarlatest\include\{$vendor}\Controller\Bread\Public
$dir_bread = $system."\docroot\public\\$vendor\Controller\Bread";
$dir_include_bread = $system."\include\\$vendor\Controller\Bread\Public";
echo $dir_include_bread." <= ".$dir_bread;

echo "\n";

// D:\xampp\htdocs\solarlatest\include\{$vendor}\Controller\Page\Public
$dir_page= $system."\docroot\public\\$vendor\Controller\Page";
$dir_include_page = $system."\include\\$vendor\Controller\Page\Public";
echo $dir_include_page." <= ".$dir_bread;

echo "\n";

// D:\xampp\htdocs\solarlatest\include\Fixture\\$vendor => D:\xampp\htdocs\solarlatest\source\\$script\\tests\Fixture
// D:\xampp\htdocs\solarlatest\include\Mock\\$vendor => D:\xampp\htdocs\solarlatest\source\\$script\\tests\Mock
// D:\xampp\htdocs\solarlatest\include\Test\\$vendor => d:\xampp\htdocs\solarlatest\source\\$script\\tests\Test
$dir_fixture = $system."\include\Fixture\\$vendor";
$dir_source_fixture = $system.'\source\\'.$script.'\tests\Fixture';
echo $dir_source_fixture. " <= " . $dir_fixture;

echo "\n";

$dir_mock = $system."\include\Mock\\$vendor";
$dir_source_mock = $system.'\source\\'.$script.'\tests\Mock';
echo $dir_source_mock. " <= " . $dir_mock;

echo "\n";

$dir_test = $system."\include\Test\\$vendor";
$dir_source_test = $system.'\source\\'.$script.'\tests\Test';
echo $dir_source_test. " <= " . $dir_test;

echo "\n";

$dir_iterator = new DirectoryIterator($dir);

foreach ($dir_iterator as $fileinfo) {
    if(!$fileinfo->isDot()){
        echo $system.'\include\\'.$vendor.'\App\\'.$fileinfo->getFilename().'\\Public'." <= ";
        echo $fileinfo->getPathname() . "\n";
    }
}
---------- Debug PHP 5.3.1 ----------
D:\xampp\htdocs\solarlatest\include\Acme\Controller\Bread\Public <= D:\xampp\htdocs\solarlatest\docroot\public\Acme\Controller\Bread
D:\xampp\htdocs\solarlatest\include\Acme\Controller\Page\Public <= D:\xampp\htdocs\solarlatest\docroot\public\Acme\Controller\Bread
D:\xampp\htdocs\solarlatest\source\acme\tests\Fixture <= D:\xampp\htdocs\solarlatest\include\Fixture\Acme
D:\xampp\htdocs\solarlatest\source\acme\tests\Mock <= D:\xampp\htdocs\solarlatest\include\Mock\Acme
D:\xampp\htdocs\solarlatest\source\acme\tests\Test <= D:\xampp\htdocs\solarlatest\include\Test\Acme
D:\xampp\htdocs\solarlatest\include\Acme\App\Admin\Public <= D:\xampp\htdocs\solarlatest\docroot\public\Acme\App\Admin
D:\xampp\htdocs\solarlatest\include\Acme\App\Blog\Public <= D:\xampp\htdocs\solarlatest\docroot\public\Acme\App\Blog
D:\xampp\htdocs\solarlatest\include\Acme\App\Rss\Public <= D:\xampp\htdocs\solarlatest\docroot\public\Acme\App\Rss
D:\xampp\htdocs\solarlatest\include\Acme\App\Tom\Public <= D:\xampp\htdocs\solarlatest\docroot\public\Acme\App\Tom

Output completed (1 sec consumed) - Normal Termination