/**
* 更新到指定commit版本
*
* @param string $commit
* @return bool
*/
public function updateToVersion($task)
{
$copy = GlobalHelper::str2arr($task->file_list);
$fileAndVersion = [];
foreach ($copy as $file) {
$fileAndVersion[] = StringHelper::explode($file, " ", true, true);
}
$branch = $task->branch == 'trunk' ? $task->branch : ($this->getConfig()->repo_mode == Project::REPO_BRANCH ? 'branches/' : 'tags/') . $task->branch;
// 先更新
$versionSvnDir = sprintf('%s-svn', rtrim(Project::getDeployWorkspace($task->link_id), '/'));
$cmd[] = sprintf('cd %s ', $versionSvnDir);
$cmd[] = $this->_getSvnCmd(sprintf('svn checkout %s/%s .', $this->getConfig()->repo_url, $branch));
// 更新指定文件到指定版本,并复制到同步目录
foreach ($fileAndVersion as $assign) {
if (in_array($assign[0], ['.', '..'])) {
continue;
}
$cmd[] = $this->_getSvnCmd(sprintf('svn up %s %s', $assign[0], empty($assign[1]) ? '' : ' -r ' . $assign[1]));
// 多层目录需要先新建父目录,否则复制失败
if (strpos($assign[0], '/') !== false) {
$cmd[] = sprintf('mkdir -p %s/%s', Project::getDeployWorkspace($task->link_id), dirname($assign[0]));
}
$cmd[] = sprintf('cp -rf %s %s/%s', rtrim($assign[0], '/'), Project::getDeployWorkspace($task->link_id), dirname($assign[0]));
}
$command = join(' && ', $cmd);
return $this->runLocalCommand($command);
}