Skip to content

[libra] 为 init 命令添加 --template <PATH> 参数,支持自定义模板路径初始化 #1340

Description

@slow2342

[任务描述]
为 init 命令添加 --template 参数,用户可以指定一个本地模板目录,
在初始化仓库时,libra 会基于该模板目录下的结构和文件生成初始内容。
类似 Git 的 git init --template=<template-directory> 功能。

--template 的特点:

  1. 用户可自定义模板目录:模板中包含的配置文件、hooks、预设目录结构
    会被拷贝到初始化的 libra 仓库中。
  2. 如果未指定 --template,使用默认模板路径(libra 内置默认模板)。
  3. 模板目录下常见内容:
    • hooks/ (预设的 hook 脚本)
    • info/ (配置文件,如 exclude)
    • description (仓库描述文件)
    • 其他由用户定义的配置/文件

[实现方案]

  1. 在 InitArgs 结构体中添加 Option<String> 类型变量 template,通过 clap
    解析命令行参数 --template <PATH>
  2. 在 init 函数中增加模板路径解析逻辑:
    • 优先使用命令行传入的 template
    • 其次检查环境变量 LIBRA_TEMPLATE_DIR
    • 否则使用内置默认模板(原来的 include_str! 文件)
  3. 实现一个递归拷贝函数 copy_templates(src: &Path, dst: &Path)
    • 将模板目录的内容复制到目标仓库目录
    • 遇到同名文件时保留已有文件,不覆盖
  4. 修改原来的 init 文件生成逻辑:
    • 当使用模板目录时,调用 copy_templates 复制模板
    • 如果没有模板,则回退到现有内置模板逻辑
  5. 编写测试样例:
    • 使用临时生成的模板目录,指定 --template <临时路径>,验证初始化后的仓库包含模板中的所有文件和目录;
    • 不指定 --template 时,验证初始化结果使用内置默认模板,行为与原来的逻辑一致;
    • 错误情况测试:传入不存在或不可访问的模板路径,应返回错误并提示用户。

Metadata

Metadata

Assignees

Labels

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions