[具体描述]
为 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 补丁信息,通过对初始化仓库、修改文件并提交后的结果进行断言判断是否符合预期。
[具体描述]
为 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 补丁信息,通过对初始化仓库、修改文件并提交后的结果进行断言判断是否符合预期。