shenshihai 2 年 前
コミット
70c0f849c7
1 ファイル変更53 行追加4 行削除
  1. 53 4
      src/PackageClass.php

+ 53 - 4
src/PackageClass.php

@@ -23,7 +23,6 @@ class PackageClass
 			self::setProgressFailed('INITIALIZE_FAILED');
 			return false;
 		}
-		logInfo("distribute mode: ",self::$config['distribute-mode']);
 	
 		//预先系统准备操作
 		if(! self::prepare($vendorDir,$rootPkg) ){
@@ -32,12 +31,27 @@ class PackageClass
 		}
 	
 		//分发模式
-		if( self::$config['distribute-mode'] == 'install'){
+		$dist_mode = self::$config['distribute-mode'];
+		logInfo("distribute mode: ",$dist_mode);
+		if( $dist_mode == 'install'){ //在线安装
 			self::install($vendorDir,$rootPkg,$vendorPkgs);
 		}
-		else{
+		elseif( $dist_mode == 'upgrade'){ //在线升级
 			self::upgrade($vendorDir,$rootPkg,$vendorPkgs);
 		}
+		elseif( $dist_mode == 'offpkg'){ //生成离线包
+			self::offpkg($vendorDir,$rootPkg,$vendorPkgs);
+		}
+		elseif( $dist_mode == 'offinst'){ //离线安装
+			self::offinst($vendorDir,$rootPkg,$vendorPkgs);
+		}
+		elseif( $dist_mode == 'offupgd'){ //离线升级
+			self::offupgd($vendorDir,$rootPkg,$vendorPkgs);
+		}
+		else{
+			self::setProgressFailed('INVALID_DIST_MODE');
+			return false;
+		}
 		return true;
 	}
 	
@@ -93,6 +107,32 @@ class PackageClass
 		
 		return true;
 	}
+	private static function offpkg($vendorDir,$rootPkg,$vendorPkgs){
+		//依赖库都已下载,默认先给个进度
+		self::setProgressStep1(100);
+		
+		//逐个依赖仓库操作
+		if(! self::postUpdateVendorPkgs($vendorDir,$vendorPkgs) ){
+			return false;
+		}
+		
+		//顶层仓库操作
+		if(! self::postUpdateRootPkg($vendorDir,$rootPkg) ){
+			return false;
+		}
+		
+		//全部操作完毕
+		self::setProgressOK(true);
+		
+		return true;
+	}	
+	
+	private static function offinst($vendorDir,$rootPkg,$vendorPkgs){
+		return true;
+	}
+	private static function offupgd($vendorDir,$rootPkg,$vendorPkgs){
+		return true;
+	}
 	/*
 	private static function createModuleIni($vendorDir,$vendorPkgs)
 	{
@@ -316,7 +356,7 @@ class PackageClass
 		
 		
 		//获取缓存目录
-		$cacheDir = pathJoin(CACHE_DIR,str_replace('/','-',$pkg->getName()));
+		$cacheDir = pathJoin(CACHE_DIR,str_replace('/','-',$repoName));
 		
 		//返回包的相关信息
 		return array(
@@ -355,6 +395,15 @@ class PackageClass
 				return false;
 			}
 			logInfo("succeeded to fetch module file --",$repoName,$fileName);
+			
+			//当前是生成离线包模式,同时拷贝到离线包目录
+			if(self::$config['offpkg-dir']){
+				$targetPath = pathJoin(self::$config['offpkg-dir'],str_replace('/','-',$repoName),$fileName);
+				if(! fileCopy($filePath,$targetPath) ){
+					logError($repoName,"offpkg file copy failed",$filePath,'-->',$targetPath);
+					return false;
+				}
+			}
 
 			// 解压文件
 			if( isZipFile($fileName) ){