elviss 2 жил өмнө
parent
commit
52532baee0

+ 0 - 4
src/Config.php

@@ -1,4 +0,0 @@
-<?php
-return array(
-	'OSS_URL' => "http://192.168.3.10:8992/",
-);

+ 3 - 3
src/HelperClass.php

@@ -14,7 +14,7 @@ class HelperClass
         $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');
 		$devMode = (getenv("COMPOSER_DEV_MODE") == "1");
 		PackageClass::setDevMode($devMode);
-		PackageClass::index($vendorDir, "");
+		PackageClass::postUpdate($vendorDir, "");
 		print("---postUpdate finished---");
     }
 
@@ -30,7 +30,7 @@ class HelperClass
 		$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');
 		$package = $event->getOperation()->getPackage();
 		PackageClass::setDevMode( $event->isDevMode() );
-		PackageClass::index($vendorDir, $package->getName());
+		PackageClass::postPackageInstall($vendorDir, $package->getName());
     }
 
     public static function postPackageUpdate(PackageEvent $event)
@@ -38,7 +38,7 @@ class HelperClass
 		$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');
 		$package = $event->getOperation()->getPackage();
 		PackageClass::setDevMode( $event->isDevMode() );
-		PackageClass::index($vendorDir, $package->getName());
+		PackageClass::postPackageUpdate($vendorDir, $package->getName());
     }
 	
 }

+ 71 - 11
src/PackageClass.php

@@ -5,21 +5,53 @@ include "Utility.php";
 
 class PackageClass
 {
-	private static $config;
-	public static function index($vendorDir, $repoName)
-	{
-		//读取配置信息
-		$config = parseDistributeConfig();
+	//当所有包都安装完毕后
+	public static function postUpdate($vendorDir, $repoName){
+		//获取配置信息
+		$cfgPath = getDistributeConfigPath($vendorDir);
+		$config = loadDistributeConfig($cfgPath);
+		if(!$config){
+			printf("Failed to load distribute config -- %s\n",$cfgPath);
+			exit();
+		}
+		
+		//获取当前包信息
+		$packageInfo = self::getPackageInfo($config,$vendorDir, $repoName);
+		
+		//下载当前包的add文件
+		$packageFiles = getPackageFiles($packageInfo['configPath']);
+        self::fetchAddFiles($packageInfo,$packageFiles['add-files']);
+		
+		//下载当前包的bin文件
+		self::fetchBinFiles($packageInfo,$packageFiles['bin-files']);
+
+		//下载当前包的copy文件
+		self::fetchCopyFiles($packageInfo,$packageFiles['copy-files']);
+	}
+	//当某个依赖包安装完毕后
+	public static function postPackageInstall($vendorDir, $repoName){
+		//获取配置信息
+		$cfgPath = getDistributeConfigPath($vendorDir);
+		$config = loadDistributeConfig($cfgPath);
+		if(!$config){
+			printf("Failed to load distribute config -- %s\n",$cfgPath);
+			exit();
+		}
 		
 		//获取当前包信息
 		$packageInfo = self::getPackageInfo($config,$vendorDir, $repoName);
 		
-		//下载当前包的文件
+		//下载当前包的add文件
 		$packageFiles = getPackageFiles($packageInfo['configPath']);
-        self::fetchFiles($packageInfo,$packageFiles['files']);
+        self::fetchAddFiles($packageInfo,$packageFiles['add-files']);
 		
 		//下载当前包的bin文件
 		self::fetchBinFiles($packageInfo,$packageFiles['bin-files']);
+
+		//下载当前包的copy文件
+		self::fetchCopyFiles($packageInfo,$packageFiles['copy-files']);
+	}
+	public static function postPackageUpdate($vendorDir, $repoName){
 	}
 	public static function setDevMode($devMode){
 	}
@@ -34,7 +66,7 @@ class PackageClass
 		else{ //其他依赖包的信息
 			$packageDir = $vendorDir . '/' . $repoName;
 		}
-		$cacheDir = dirname($vendorDir) . '/.cache/' . $repoName;
+		$cacheDir = pathJoin($config['cache-dir'],$repoName);
 		
 		//获取最上层包配置的 bin-dir
 		$cfgPath = dirname($vendorDir)."/composer.json";
@@ -47,12 +79,12 @@ class PackageClass
 			"configPath" => $packageDir."/composer.json",
 			"cacheDir" => $cacheDir,
 			"binDir" => $binDir,
-			"ossUrl" => $config['OSS_URL'],
+			"ossHost" => $config['oss-host'],
 		);
 	}
 	
-	//下载包文件
-	private static function fetchFiles($packageInfo,$files){
+	//下载包add文件
+	private static function fetchAddFiles($packageInfo,$files){
 		$cacheDir = $packageInfo['cacheDir'];
 		$repoName = $packageInfo['repoName'];
 		$packageDir = $packageInfo['packageDir'];
@@ -109,4 +141,32 @@ class PackageClass
 		}
 	}
 	
+	//下载包copy文件
+	private static function fetchCopyFiles($packageInfo,$binFiles){
+		$cacheDir = $packageInfo['cacheDir'];
+		$repoName = $packageInfo['repoName'];
+		$binDir = $packageInfo['binDir'];
+		$ossUrl = $packageInfo['ossUrl'];
+		if(! $binDir)
+			return;
+		if(! $binFiles)
+			return;
+		foreach($binFiles as $fileName){
+			printf("[%s] fetching binfile -- %s\n",$repoName,$fileName);
+			//下载文件到缓存区
+			$filePath = downloadToDir($ossUrl,$repoName,$fileName,$cacheDir);
+			if(! $filePath ){
+				printf("[%s] fetch binfile failed -- %s\n",$repoName,$fileName);
+				continue;
+			}
+
+			// 解压文件
+			if( isZipFile($fileName) ){
+				if(! unzipFile($filePath,$binDir)) {
+					printf("[%s] unzip binfile failed -- %s\n ",$repoName,$fileName);
+					unlink($filePath);
+				}
+			}
+		}
+	}
 }

+ 6 - 19
src/Utility.php

@@ -54,8 +54,9 @@ function getDistributeConfigPath($vendorDir){
 	return pathJoin(dirname($vendorDir),'.distribute/config.json')
 }
 //解析部署配置文件
-function parseDistributeConfig(){
-	
+function loadDistributeConfig($cfgPath){
+	$data = json_decode(file_get_contents($cfgPath), true);
+	return $data;
 }
 
 //多线程下载文件
@@ -105,24 +106,10 @@ function unzipFile($zipFile, $targetDir){
 	return false;
 }
 
-//过滤得到一个最终文件列表
-function filterFiles($files){
-	if(!is_array($files) )
-		return array();
-	if( isAssocArray($files) ){
-
-		$osname = getOsName();
-		return $files[$osname] ? : array();
-	}
-	else{
-		return $files;
-	}
-}
-
 //获取最上层包配置的bin-dir路径
 function  getBinDir($cfgPath) {
 	$data = json_decode(file_get_contents($cfgPath), true);
-	$binDir = $data["composer-helper"]["bin-dir"];
+	$binDir = $data["distribute-helper"]["bin-dir"];
 	if(! $binDir){
 		return "";
 	}
@@ -150,7 +137,7 @@ function getPackageFiles($cfgPath)
 	
 	//过滤并组合得到待下载文件列表
 	return array(
-		'files'=>filterFiles($data["composer-helper"]["files"]),
-		'bin-files'=>filterFiles($data["composer-helper"]["bin-files"])
+		'files'=>filterFiles($data["distribute-helper"]["files"]),
+		'bin-files'=>filterFiles($data["distribute-helper"]["bin-files"])
 	);
 }