elviss 2 年之前
父节点
当前提交
bb5a472696
共有 2 个文件被更改,包括 53 次插入5 次删除
  1. 30 4
      src/PackageClass.php
  2. 23 1
      src/Utility.php

+ 30 - 4
src/PackageClass.php

@@ -208,7 +208,7 @@ class PackageClass
 			$packageInfo = self::getPackageInfo($vendorDir,$repoDir,$pkg);
 			
 			//执行当前依赖包的script文件
-			if(! self::runScriptFiles($packageInfo) ){
+			if(! self::runPackageScriptFiles($packageInfo) ){
 				self::setProgressFailed('RUN_SCRIPT_FILES_FAILED');
 				return false;
 			}
@@ -401,18 +401,44 @@ class PackageClass
 	}
 	
 	//运行脚本文件
-	private static function runScriptFiles($packageInfo)
+	private static function runPackageScriptFiles($packageInfo)
 	{
 		$toolDir = $packageInfo['toolDir'];
 		$cacheDir = $packageInfo['cacheDir'];
 		$repoName = $packageInfo['repoName'];
+		$repoDir = $packageInfo['repoDir'];
 		$version = $packageInfo['version'];
 		$vendorDir = $packageInfo['vendorDir'];
 		$ossHost = $packageInfo['ossHost'];
 		
+		$fileMacros = array(
+			'{vendor}' => $vendorDir,
+			'{current}' => $repoDir,
+		);
 		$scriptFiles = $packageInfo['helper']['script-files'] ? : array();	
-		foreach($scriptFiles as $fileInfo){
-			$fileName = $fileInfo['name'];
+		foreach($scriptFiles as $info){
+			$name = $info['name'];
+			$type = $info['type'];
+			if($type == 'txt'){
+				$filePath = pathJoin($vendorDir,$name);
+				if(! self::runScriptFile($filePath,$fileMacros) ){
+					logError('failed to run script file',$filePath);
+					return false;
+				}
+			}
+		}
+		return true; 
+	}
+	private static function runScriptFile($filePath,$fileMacros){
+		$fileLines = readFileLines($filePath);
+		foreach($fileLine as $fileLines){
+			$cmd = replaceTextMacro($fileLine,$fileMacros);
+			logInfo("start to run script file cmd --",$cmd);
+			system($cmd, $ret);
+			if ($ret != 0) {
+				logError("failed to run script file cmd --",$cmd);
+				return false;
+			}
 		}
 		return true;
 	}

+ 23 - 1
src/Utility.php

@@ -193,7 +193,7 @@ function filedirCopy(string $sourcePath, string $targetPath){
 	}
 }
 
-//替换文件中的宏变量
+//替换文件中的宏变量,并写入文件
 function replaceFileMacro(string $filePath,string $targetPath,array $macros){
 	$content = file_get_contents($filePath);
 	foreach($macros as $key=>$value){
@@ -206,6 +206,28 @@ function replaceFileMacro(string $filePath,string $targetPath,array $macros){
 	return file_put_contents($targetPath,$content);
 }
 
+//替换文件中的宏变量,并返回文本
+function replaceTextMacro(string $text,array $macros){
+	$content = $text;
+	foreach($macros as $key=>$value){
+		$content = str_replace($key,$value,$content);
+	}
+	return $content;
+}
+//读取文件每一行
+function readFileLines(string $filePath){
+	$fp = fopen($filePath,"r");
+	if(!$fp){
+		return false;
+	}
+	$lines = [];
+	while($line = fgets($fp) ){
+		$line = trim($line);
+		array_push($lines,$line);
+	}
+	fclose($fp);
+	return $lines;
+}
 //枚举子目录
 function scanSubDir($dir,$exclude_names = array()){
 	$filelist = scandir($dir);