elviss před 2 roky
rodič
revize
79ffc98a29
3 změnil soubory, kde provedl 74 přidání a 62 odebrání
  1. 6 3
      src/HelperClass.php
  2. 68 50
      src/PackageClass.php
  3. 0 9
      src/Utility.php

+ 6 - 3
src/HelperClass.php

@@ -11,8 +11,11 @@ class HelperClass
 {
     public static function postUpdate(Event $event)
     {
-        $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');
-		PackageClass::postUpdate($vendorDir);
+		$composer = $event->getComposer();
+        $vendorDir = $composer->getConfig()->get('vendor-dir');
+		$rootPkg  = $composer->getPackage();
+		$vendorPkgs = $composer->getRepositoryManager()->getLocalRepository()->getPackages();
+		PackageClass::postUpdate($vendorDir,$rootPkg,$vendorPkgs);
 		print("---postUpdate finished---");
     }
 
@@ -24,7 +27,7 @@ class HelperClass
     }
 
     public static function postPackageInstall(PackageEvent $event)
-    {      
+    {
     }
 
     public static function postPackageUpdate(PackageEvent $event)

+ 68 - 50
src/PackageClass.php

@@ -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));
-	}
 }

+ 0 - 9
src/Utility.php

@@ -126,15 +126,6 @@ function loadRepoConfigs($vendorDir,$repoNames){
 	return $configs;
 }
 
-//获取部署日志文件
-function getLogPath($distributeDir){
-	return pathJoin($distributeDir,'log.txt');
-}
-//获取部署配置文件
-function getConfigPath($distributeDir){
-	return pathJoin($distributeDir,'config.json')
-}
-
 //解析部署配置文件
 function loadConfig($cfgPath){
 	if(! file_exists($cfgPath) ){