|
@@ -6,21 +6,26 @@ include "Utility.php";
|
|
|
class PackageClass
|
|
|
{
|
|
|
private static $config = null; //配置信息
|
|
|
- private static $repoNames = null; //所有包名
|
|
|
- private static $totalUseSpace = 0; //整体占用空间
|
|
|
//当所有包都安装完毕后
|
|
|
- public static function postUpdate($vendorDir){
|
|
|
- //初始化数据
|
|
|
- if(!self::initialize()){
|
|
|
- exit();
|
|
|
- }
|
|
|
+ public static function postUpdate($vendorDir,$rootPkg,$vendorPkgs){
|
|
|
+ //初始化
|
|
|
+ self::initialize();
|
|
|
+
|
|
|
+ //依赖库都已下载,默认给个10的进度
|
|
|
+ self::updateProgress(0,100);
|
|
|
|
|
|
- //逐个仓库操作
|
|
|
- self::updateProgress(0);
|
|
|
- foreach(self::$repoNames as $i=>$repoName){
|
|
|
+ //逐个依赖仓库操作
|
|
|
+ self::postUpdateVendorPkgs($vendorDir,$vendorPkgs);
|
|
|
+
|
|
|
+ //顶层仓库操作
|
|
|
+ self::postUpdateRootPkg($vendorDir,$rootPkg);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static function postUpdateVendorPkgs($vendorDir,$vendorPkgs){
|
|
|
+ foreach($vendorPkgs as $i=>$pkg){
|
|
|
//获取包信息
|
|
|
- $repoConfig = self::$repoConfigs[$repoName];
|
|
|
- $packageInfo = self::getPackageInfo($repoConfig);
|
|
|
+ $repoDir = pathJoin($vendorDir,$pkg->getName());
|
|
|
+ $packageInfo = self::getPackageInfo($vendorDir,$repoDir,$pkg);
|
|
|
|
|
|
//获取当前包的module文件
|
|
|
self::fetchModuleFiles($packageInfo);
|
|
@@ -30,25 +35,37 @@ class PackageClass
|
|
|
|
|
|
//获取当前包的config文件
|
|
|
self::fetchConfigFiles($packageInfo);
|
|
|
-
|
|
|
- //顶层包的额外工作
|
|
|
- if($repoName == "."){
|
|
|
- //注册全局路径
|
|
|
- self::registerPath($packageInfo);
|
|
|
- //注册自启动程序
|
|
|
- self::registerAutorun($packageInfo);
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
//更新部署进度
|
|
|
- $percent = intval(100.0 * ($i+1) / count(self::$repoNames));
|
|
|
- self::updateProgress($percent);
|
|
|
+ $percent = intval(100.0 * ($i+1) / count(vendorPkgs));
|
|
|
+ self::updateProgress(1,$percent);
|
|
|
}
|
|
|
- self::updateProgress(100);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+ private static function postUpdateRootPkg($vendorDir,$pkg){
|
|
|
+ //获取包信息
|
|
|
+ $repoDir = dirname($vendorDir);
|
|
|
+ $packageInfo = self::getPackageInfo($vendorDir,$repoDir,$pkg);
|
|
|
+
|
|
|
+ //获取当前包的module文件
|
|
|
+ self::fetchModuleFiles($packageInfo);
|
|
|
+
|
|
|
+ //获取当前包的common文件
|
|
|
+ self::fetchCommonFiles($packageInfo);
|
|
|
+
|
|
|
+ //获取当前包的config文件
|
|
|
+ self::fetchConfigFiles($packageInfo);
|
|
|
+
|
|
|
+ //注册全局路径
|
|
|
+ self::registerPath($packageInfo);
|
|
|
+
|
|
|
+ //注册自启动程序
|
|
|
+ self::registerAutorun($packageInfo);
|
|
|
+
|
|
|
+ //更新部署进度
|
|
|
+ self::updateProgress(2,100);
|
|
|
+ }
|
|
|
//初始化
|
|
|
- private static initialize($vendorDir){
|
|
|
+ private static function initialize($vendorDir){
|
|
|
//创建.distribute目录
|
|
|
$distributeDir = pathJoin(dirname($vendorDir),'.distribute');
|
|
|
if( !file_exists($distributeDir) ){
|
|
@@ -63,47 +80,51 @@ class PackageClass
|
|
|
|
|
|
//设置日志文件路径
|
|
|
if(! defined(LOG_PATH)){
|
|
|
- define('LOG_PATH',getLogPath($distributeDir))
|
|
|
+ $logPath = pathJoin($distributeDir,'log.txt');
|
|
|
+ define('LOG_PATH',getLogPath($logPath))
|
|
|
}
|
|
|
|
|
|
//获取部署配置信息
|
|
|
- $cfgPath = getConfigPath($distributeDir);
|
|
|
- $config = loadConfig($cfgPath);
|
|
|
- if(!$config){
|
|
|
- printf("Failed to load distribute config -- %s\n",$cfgPath);
|
|
|
- return false;
|
|
|
+ if(! self::$config){
|
|
|
+ $cfgPath = pathJoin($distributeDir,'config.json');
|
|
|
+ $config = loadConfig($cfgPath);
|
|
|
+ if(!$config){
|
|
|
+ printf("Failed to load distribute config -- %s\n",$cfgPath);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $config['progress.txt'] = pathJoin($distributeDir,'progress.txt');
|
|
|
+ self::$config = $config;
|
|
|
}
|
|
|
- $config['progress.txt'] = pathJoin($distributeDir,'progress.txt');
|
|
|
-
|
|
|
- self::$config = $config;
|
|
|
- //获取所有依赖仓库
|
|
|
- self::$repoNames = scanRepoNames($vendorDir);
|
|
|
-
|
|
|
- //获取所有依赖仓库的配置信息
|
|
|
- $repoConfigs = loadRepoConfigs($vendorDir,self::$repoNames);
|
|
|
-
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ private static function updateProgress($step,$progress){
|
|
|
+ file_put_contents(self::$config['progress.txt'],strval($progress));
|
|
|
+ }
|
|
|
|
|
|
//获取包相关信息
|
|
|
- private static function getPackageInfo($data){
|
|
|
+ private static function getPackageInfo($vendorDir,$repoDir,$pkg){
|
|
|
$config = self::$config;
|
|
|
+
|
|
|
+ $cfgPath = pathJoin($repoDir,'composer.json');
|
|
|
+ $data = json_decode(file_get_contents($cfgPath), true);
|
|
|
$moduleName = $data["distribute-helper"]["module-name"];
|
|
|
|
|
|
|
|
|
//获取安装目录
|
|
|
+ $rootDir = dirname($vendorDir);
|
|
|
$commonDir = pathJoin($rootDir,'common');
|
|
|
$configDir = pathJoin($rootDir,'config',$moduleName);
|
|
|
- $moduleDir = pathJoin($rootDir,'module',$moduleName . '-' . $data["version"]);
|
|
|
+ $moduleDir = pathJoin($rootDir,'module',$moduleName . '-' . $pkg->getPrettyVersion());
|
|
|
|
|
|
//获取缓存目录
|
|
|
- $cacheName = str_replace('/','-',$data["name"]) . '-' . $data["version"];
|
|
|
+ $cacheName = str_replace('/','-',$pkg->getName()) . '-' . $pkg->getPrettyVersion();
|
|
|
$cacheDir = pathJoin($config['cache-dir'],$cacheName);
|
|
|
|
|
|
//返回包的相关信息
|
|
|
return array(
|
|
|
- "repoName" => $data["name"],
|
|
|
- "version" => $data["version"],
|
|
|
+ "repoName" => $pkg->getName(),
|
|
|
+ "version" => $pkg->getPrettyVersion(),
|
|
|
"cacheDir" => $cacheDir,
|
|
|
"ossHost" => $config['oss-host'],
|
|
|
"moduleName" => $moduleName,
|
|
@@ -219,7 +240,4 @@ class PackageClass
|
|
|
private static function registerAutorun($packageInfo){
|
|
|
}
|
|
|
|
|
|
- private static function updateProgress($progress){
|
|
|
- file_put_contents(self::$config['progress.txt'],strval($progress));
|
|
|
- }
|
|
|
}
|