installerbuilder/tasks/task16-文件集合处理器.md

5.4 KiB
Raw Permalink Blame History

任务16文件集合处理器

任务描述

实现文件集合处理器,用于处理配置中定义的文件集合,包括文件复制、权限设置、过滤、转换等功能。文件集合处理器将确保应用程序的文件能够正确地包含在安装包中,并具有适当的权限和属性。

实现步骤

  1. 定义文件集合处理器接口:

    • internal/builder/files包中创建processor.go文件
    • 定义FileCollectionProcessor接口
      type FileCollectionProcessor interface {
          // Process 处理文件集合
          Process(config *config.Config, target config.Target, outputDir string) error
      
          // GetProcessedFiles 获取处理后的文件列表
          GetProcessedFiles() []ProcessedFile
      
          // GetErrors 获取处理过程中的错误
          GetErrors() []error
      }
      
    • 定义ProcessedFile结构体
      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接口
      type DefaultFileCollectionProcessor struct {
          platformAdapter platform.PlatformAdapter
          resourceMgr     resource.ResourceManager
          logger          log.Logger
          processedFiles  []ProcessedFile
          errors          []error
      }
      
    • 实现构造函数:
      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平台适配接口定义
  • 依赖任务10Windows平台适配器和任务11Linux平台适配器
  • 被任务12MSI包构建器、任务13DEB包构建器、任务14RPM包构建器和任务15ZIP包构建器依赖

完成标准

  1. FileCollectionProcessor接口已定义并文档完善
  2. DefaultFileCollectionProcessor实现了所有接口方法
  3. 文件集合处理功能正常工作
  4. 文件复制功能正常工作
  5. 文件过滤功能正常工作
  6. 文件转换功能正常工作
  7. 权限和属性设置功能正常工作
  8. 错误处理和报告功能正常工作
  9. 所有单元测试通过
  10. 代码符合项目的Go语言开发规范
  11. 处理器能够处理各种文件集合场景
  12. 支持所有需求文档中的文件处理相关功能