159 lines
5.4 KiB
Markdown
159 lines
5.4 KiB
Markdown
# 任务16:文件集合处理器
|
||
|
||
## 任务描述
|
||
实现文件集合处理器,用于处理配置中定义的文件集合,包括文件复制、权限设置、过滤、转换等功能。文件集合处理器将确保应用程序的文件能够正确地包含在安装包中,并具有适当的权限和属性。
|
||
|
||
## 实现步骤
|
||
|
||
1. 定义文件集合处理器接口:
|
||
- 在`internal/builder/files`包中创建`processor.go`文件
|
||
- 定义FileCollectionProcessor接口:
|
||
```go
|
||
type FileCollectionProcessor interface {
|
||
// Process 处理文件集合
|
||
Process(config *config.Config, target config.Target, outputDir string) error
|
||
|
||
// GetProcessedFiles 获取处理后的文件列表
|
||
GetProcessedFiles() []ProcessedFile
|
||
|
||
// GetErrors 获取处理过程中的错误
|
||
GetErrors() []error
|
||
}
|
||
```
|
||
- 定义ProcessedFile结构体:
|
||
```go
|
||
type ProcessedFile struct {
|
||
SourcePath string // 源文件路径
|
||
DestinationPath string // 目标文件路径
|
||
Permissions string // 文件权限
|
||
Owner string // 文件所有者
|
||
Group string // 文件组
|
||
Attributes map[string]string // 文件属性
|
||
IsDirectory bool // 是否为目录
|
||
IsSymlink bool // 是否为符号链接
|
||
SymlinkTarget string // 符号链接目标
|
||
}
|
||
```
|
||
|
||
2. 创建默认文件集合处理器:
|
||
- 创建`default_processor.go`文件
|
||
- 定义DefaultFileCollectionProcessor结构体,实现FileCollectionProcessor接口:
|
||
```go
|
||
type DefaultFileCollectionProcessor struct {
|
||
platformAdapter platform.PlatformAdapter
|
||
resourceMgr resource.ResourceManager
|
||
logger log.Logger
|
||
processedFiles []ProcessedFile
|
||
errors []error
|
||
}
|
||
```
|
||
- 实现构造函数:
|
||
```go
|
||
func NewDefaultFileCollectionProcessor(platformAdapter platform.PlatformAdapter, resourceMgr resource.ResourceManager, logger log.Logger) *DefaultFileCollectionProcessor {
|
||
return &DefaultFileCollectionProcessor{
|
||
platformAdapter: platformAdapter,
|
||
resourceMgr: resourceMgr,
|
||
logger: logger,
|
||
processedFiles: make([]ProcessedFile, 0),
|
||
errors: make([]error, 0),
|
||
}
|
||
}
|
||
```
|
||
|
||
3. 实现文件集合处理:
|
||
- 实现Process方法,处理文件集合
|
||
- 遍历配置中的文件集合
|
||
- 处理每个文件集合的源和目标
|
||
- 应用包含和排除规则
|
||
- 处理文件权限和属性
|
||
|
||
4. 实现文件复制功能:
|
||
- 创建copyFiles方法,复制文件到目标目录
|
||
- 处理文件和目录的复制
|
||
- 保留文件元数据
|
||
- 处理符号链接
|
||
|
||
5. 实现文件过滤功能:
|
||
- 创建filterFiles方法,根据规则过滤文件
|
||
- 支持glob模式匹配
|
||
- 支持正则表达式匹配
|
||
- 处理包含和排除规则的优先级
|
||
|
||
6. 实现文件转换功能:
|
||
- 创建transformFiles方法,转换文件内容
|
||
- 支持变量替换
|
||
- 支持模板处理
|
||
- 支持自定义转换器
|
||
|
||
7. 实现权限和属性设置:
|
||
- 创建setPermissionsAndAttributes方法,设置文件权限和属性
|
||
- 处理不同平台的权限模型
|
||
- 设置文件所有者和组
|
||
- 设置文件属性(如只读、隐藏等)
|
||
|
||
8. 实现错误处理和报告:
|
||
- 收集处理过程中的错误
|
||
- 提供详细的错误信息
|
||
- 支持错误级别和严重性
|
||
|
||
## 单元测试要求
|
||
|
||
1. 测试文件集合处理:
|
||
- 验证Process方法
|
||
- 测试文件集合遍历
|
||
- 测试源和目标处理
|
||
- 测试包含和排除规则
|
||
|
||
2. 测试文件复制功能:
|
||
- 验证文件复制
|
||
- 测试目录复制
|
||
- 测试元数据保留
|
||
- 测试符号链接处理
|
||
|
||
3. 测试文件过滤功能:
|
||
- 验证glob模式匹配
|
||
- 测试正则表达式匹配
|
||
- 测试包含和排除规则
|
||
- 测试规则优先级
|
||
|
||
4. 测试文件转换功能:
|
||
- 验证变量替换
|
||
- 测试模板处理
|
||
- 测试自定义转换器
|
||
|
||
5. 测试权限和属性设置:
|
||
- 验证权限设置
|
||
- 测试所有者和组设置
|
||
- 测试文件属性设置
|
||
- 测试不同平台的处理
|
||
|
||
6. 测试错误处理和报告:
|
||
- 验证错误收集
|
||
- 测试错误信息详细程度
|
||
- 测试错误级别和严重性
|
||
|
||
## 依赖关系
|
||
|
||
- 依赖任务01(项目初始化)
|
||
- 依赖任务02(日志系统实现)
|
||
- 依赖任务03(错误处理框架)
|
||
- 依赖任务04(资源管理器实现)
|
||
- 依赖任务05(配置模型定义)
|
||
- 依赖任务09(平台适配接口定义)
|
||
- 依赖任务10(Windows平台适配器)和任务11(Linux平台适配器)
|
||
- 被任务12(MSI包构建器)、任务13(DEB包构建器)、任务14(RPM包构建器)和任务15(ZIP包构建器)依赖
|
||
|
||
## 完成标准
|
||
|
||
1. FileCollectionProcessor接口已定义并文档完善
|
||
2. DefaultFileCollectionProcessor实现了所有接口方法
|
||
3. 文件集合处理功能正常工作
|
||
4. 文件复制功能正常工作
|
||
5. 文件过滤功能正常工作
|
||
6. 文件转换功能正常工作
|
||
7. 权限和属性设置功能正常工作
|
||
8. 错误处理和报告功能正常工作
|
||
9. 所有单元测试通过
|
||
10. 代码符合项目的Go语言开发规范
|
||
11. 处理器能够处理各种文件集合场景
|
||
12. 支持所有需求文档中的文件处理相关功能 |