Skip to content

[libra] 为libra log 添加 -p 参数,可以用于查看指定文件的提交历史 #1197

Description

@fate352

[具体描述]
为 libra log 命令添加 -p 参数,以支持输出每次提交对应的 diff 补丁信息,行为应尽量与 git log -p 一致。

该功能的目标是:在查看提交历史时,如果用户添加了 -p 参数,则在每条提交记录后输出其与上一次提交之间的内容差异(补丁格式,统一 diff 输出)。这将有助于用户快速理解每次变更的实际内容。

-p 参数功能说明:
无 -p:仅展示提交历史(如提交哈希、作者、时间、提交信息等)。

含 -p:在上述基础上追加每个提交的 diff 补丁信息。

支持文件路径限定(如 libra log -p path/to/file.rs),只输出该文件的历史差异。

[实现方案]
1.定义 LogArgs 结构体用于解析 log 命令的参数,在结构体中添加 bool 类型变量 patch 表示 -p 参数,并添加可选的 path 字段用于指定文件路径;

2.在 log 命令主函数中,若检测到 patch 参数为 true,则调用 generate_diff 函数计算当前提交与其父提交之间的差异;若指定了文件路径,则仅对该文件进行 diff 计算;

3.实现 generate_diff 函数,用于加载提交对应的快照树并进行内容比对,输出标准的 Git 风格统一 diff(unified diff)格式;

4.使用现有 diff 库(如 similar 或 diffy)实现文本行差异分析,生成补丁内容;

5.编写测试样例,验证 libra log -p 与 libra log -p 的输出是否包含正确的 diff 补丁信息,通过对初始化仓库、修改文件并提交后的结果进行断言判断是否符合预期。

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