|
@@ -0,0 +1,112 @@
|
|
|
+<?php
|
|
|
+namespace DistributeHelper;
|
|
|
+error_reporting(E_ALL & ~E_NOTICE);
|
|
|
+include "Utility.php";
|
|
|
+
|
|
|
+class PackageClass
|
|
|
+{
|
|
|
+ private static $config;
|
|
|
+ public static function index($vendorDir, $repoName)
|
|
|
+ {
|
|
|
+ //读取配置信息
|
|
|
+ $config = include "Config.php";
|
|
|
+
|
|
|
+ //获取当前包信息
|
|
|
+ $packageInfo = self::getPackageInfo($config,$vendorDir, $repoName);
|
|
|
+
|
|
|
+ //下载当前包的文件
|
|
|
+ $packageFiles = getPackageFiles($packageInfo['configPath']);
|
|
|
+ self::fetchFiles($packageInfo,$packageFiles['files']);
|
|
|
+
|
|
|
+ //下载当前包的bin文件
|
|
|
+ self::fetchBinFiles($packageInfo,$packageFiles['bin-files']);
|
|
|
+ }
|
|
|
+ public static function setDevMode($devMode){
|
|
|
+ }
|
|
|
+ //获取包相关信息
|
|
|
+ private static function getPackageInfo($config,$vendorDir, $repoName){
|
|
|
+ if($repoName == ""){ //最上层包的信息
|
|
|
+ $packageDir = dirname($vendorDir);
|
|
|
+ $json = file_get_contents($packageDir . '/composer.json');
|
|
|
+ $data = json_decode($json, true);
|
|
|
+ $repoName = $data["name"];
|
|
|
+ }
|
|
|
+ else{ //其他依赖包的信息
|
|
|
+ $packageDir = $vendorDir . '/' . $repoName;
|
|
|
+ }
|
|
|
+ $cacheDir = dirname($vendorDir) . '/.cache/' . $repoName;
|
|
|
+
|
|
|
+ //获取最上层包配置的 bin-dir
|
|
|
+ $cfgPath = dirname($vendorDir)."/composer.json";
|
|
|
+ $binDir = getBinDir($cfgPath);
|
|
|
+
|
|
|
+ //
|
|
|
+ return array(
|
|
|
+ "repoName" => $repoName,
|
|
|
+ "packageDir" => $packageDir,
|
|
|
+ "configPath" => $packageDir."/composer.json",
|
|
|
+ "cacheDir" => $cacheDir,
|
|
|
+ "binDir" => $binDir,
|
|
|
+ "ossUrl" => $config['OSS_URL'],
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ //下载包文件
|
|
|
+ private static function fetchFiles($packageInfo,$files){
|
|
|
+ $cacheDir = $packageInfo['cacheDir'];
|
|
|
+ $repoName = $packageInfo['repoName'];
|
|
|
+ $packageDir = $packageInfo['packageDir'];
|
|
|
+ $ossUrl = $packageInfo['ossUrl'];
|
|
|
+ if(! $files)
|
|
|
+ return;
|
|
|
+
|
|
|
+ foreach($files as $fileName){
|
|
|
+ printf("[%s] fetching file -- %s\n",$repoName,$fileName);
|
|
|
+
|
|
|
+ //下载文件到缓存区
|
|
|
+ $filePath = downloadToDir($ossUrl,$repoName,$fileName,$cacheDir);
|
|
|
+ if(! $filePath ){
|
|
|
+ printf("[%s] fetch file failed -- %s\n",$repoName,$fileName);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 解压文件
|
|
|
+ if( isZipFile($fileName) ){
|
|
|
+ if(! unzipFile($filePath,$packageDir)) {
|
|
|
+ printf("[%s] unzip file failed -- %s\n ",$repoName,$fileName);
|
|
|
+ unlink($filePath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //下载包bin文件
|
|
|
+ private static function fetchBinFiles($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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|