From 1afb96918b96e5c2b219188cf2930223a241a83e Mon Sep 17 00:00:00 2001 From: chai2010 Date: Sat, 13 Aug 2022 22:51:06 +0800 Subject: [PATCH] =?UTF-8?q?config:=20=E6=94=AF=E6=8C=81=20vfs=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/config/config.go | 2 ++ internal/config/manifest.go | 58 +++++++++---------------------------- 2 files changed, 15 insertions(+), 45 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index be1b866..9430158 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -3,6 +3,7 @@ package config import ( + "io/fs" "os" "runtime" ) @@ -15,6 +16,7 @@ type StdSizes struct { // 通用配置信息 type Config struct { + VFS fs.FS // 虚拟文件系统, 为空时从本地文件系统读取 WaRoot string // 凹 程序根目录, src 目录下是包代码 WaArch string // 目标 CPU WaOS string // 目标 OS diff --git a/internal/config/manifest.go b/internal/config/manifest.go index 433b256..74ba05c 100644 --- a/internal/config/manifest.go +++ b/internal/config/manifest.go @@ -55,70 +55,38 @@ func (p *Manifest) Clone() *Manifest { } // 加载 WaModFile 文件 -func LoadManifest(appPath string) (*Manifest, error) { - workDir := appPath - if workDir == "" { - wd, err := os.Getwd() - if err != nil { - return nil, fmt.Errorf("loader.LoadManifest: workDir is empty") - } - workDir = wd +// 如果 vfs 为空则从本地文件系统读取 +func LoadManifest(vfs fs.FS, appPath string) (p *Manifest, err error) { + if appPath == "" { + return nil, fmt.Errorf("loader.LoadManifest: appPath is empty") } // 查找 WaModFile 路径 - kManifestPath, err := findManifestPath(nil, workDir) + kManifestPath, err := findManifestPath(vfs, appPath) if err != nil { return nil, fmt.Errorf("loader.LoadManifest: find '%s' failed : %w", WaModFile, err) } // 读取 WaModFile 文件 - data, err := os.ReadFile(kManifestPath) + var data []byte + if vfs != nil { + data, err = fs.ReadFile(vfs, kManifestPath) + } else { + data, err = os.ReadFile(kManifestPath) + } if err != nil { return nil, fmt.Errorf("loader.LoadManifest: read %s failed: %w", kManifestPath, err) } // 解码 JSON - p := new(Manifest) + p = new(Manifest) if err := json.Unmarshal(data, &p.Pkg); err != nil { return nil, fmt.Errorf("loader.LoadManifest: json.Unmarshal %s failed: %w", kManifestPath, err) } // 当前 app 默认目录 p.Root = filepath.Dir(kManifestPath) - p.MainPkg, _ = filepath.Rel(p.Root, workDir) - - if p.MainPkg == "" || p.MainPkg == "." { - p.MainPkg = p.Pkg.Pkgpath - } - - return p, nil -} - -// 从 vfs 加载 WaModFile 文件 -func LoadManifestVFS(vfs fs.FS, appPath string) (*Manifest, error) { - workDir := appPath - - // 查找 WaModFile 路径 - kManifestPath, err := findManifestPath(vfs, workDir) - if err != nil { - return nil, fmt.Errorf("loader.LoadManifestVFS: find '%s' failed : %w", WaModFile, err) - } - - // 读取 WaModFile 文件 - data, err := fs.ReadFile(vfs, kManifestPath) - if err != nil { - return nil, fmt.Errorf("loader.LoadManifestVFS: read %s failed: %w", kManifestPath, err) - } - - // 解码 JSON - p := new(Manifest) - if err := json.Unmarshal(data, &p.Pkg); err != nil { - return nil, fmt.Errorf("loader.LoadManifestVFS: json.Unmarshal %s failed: %w", kManifestPath, err) - } - - // 当前 app 默认目录 - p.Root = filepath.Dir(kManifestPath) - p.MainPkg, _ = filepath.Rel(p.Root, workDir) + p.MainPkg, _ = filepath.Rel(p.Root, appPath) if p.MainPkg == "" || p.MainPkg == "." { p.MainPkg = p.Pkg.Pkgpath -- GitLab