【发布时间】:2015-06-19 20:16:07
【问题描述】:
我在使用 bitbucket 私有存储库时遇到了一些问题...所以我在项目根目录的 composer.json 中添加了类似的内容:
"require": {
"php" : ">=5.4.0",
...,
"author/my-package": "0.2"
},
"repositories": [
{
"type": "vcs",
"url": "ssh://hg@bitbucket.org/author/my-package"
}
...
]
所以在composer.phar update 之后它会在vendor 中创建repo 目录...但是在私有存储库中的新提交和项目根目录中的composer.phar 更新后它不会拉最后一个变更集...在第一个存储库导入时
结论
在 composer.phar 调试之后,我了解到如果包版本没有更改,它不会更新(拉取)最后一个变更集。
我创建了一个脚本,它会在每次运行作曲家更新后更新我的每个存储库。信息在这里https://getcomposer.org/doc/articles/scripts.md
<?php
namespace ComposerScript;
use Composer\Repository\RepositoryManager;
use Composer\Script\Event;
use Composer\Repository\PackageRepository;
use Composer\Package\CompletePackage;
use Composer\Util\ProcessExecutor;
class EventListener
{
/**
* @var ProcessExecutor
*/
protected static $processExecutor;
protected static $command = 'hg pull -u';
public static function getProcessExecutor()
{
if (self::$processExecutor == null) {
self::$processExecutor = new ProcessExecutor();
}
return self::$processExecutor;
}
public static function postUpdateCmd(Event $event)
{
$composer = $event->getComposer();
/** @var RepositoryManager $repositoryManager */
$repositoryManager = $composer->getRepositoryManager();
$cwd = getcwd();
foreach ($repositoryManager->getRepositories() as $repository) {
if ($repository instanceof PackageRepository) {
foreach ($repository->getPackages() as $package) {
/** @var CompletePackage $package */
$vendorName = explode('/', $package->getName())[0];
$repositoryPath = $cwd . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package->getName();
if ($package->getSourceType() == 'hg' && $vendorName == 'myvendor' && is_dir($repositoryPath)) {
echo PHP_EOL . "Trying to execute '".self::$command."' in '".$repositoryPath . "'" . PHP_EOL;
$exitCode = self::getProcessExecutor()->execute(self::$command, $output, $repositoryPath);
if ($exitCode !== 0) {
echo "Unable to execute '" . self::$command . "' command in '" . $repositoryPath . "' dir" .
PHP_EOL .
"Message: " .
PHP_EOL .
$output;
} else {
echo 'Success';
}
}
}
echo PHP_EOL;
}
}
}
}
并在 composer.json 中添加了几行
"autoload" : {
"psr-0": {
"ComposerScript\\EventListener" : ""
}
},
"scripts" : {
"post-update-cmd" : [
"ComposerScript\\EventListener::postUpdateCmd"
]
}
【问题讨论】:
标签: mercurial zend-framework2 repository composer-php bitbucket