Skip to content

[libra] 为 log 命令添加 --oneline 参数,实现单行简洁格式显示提交历史 #1227

Description

@zh66778

[任务描述]
为 log 命令添加 --oneline 参数。Git 的 --oneline 参数是 --pretty=oneline --abbrev-commit 的简写形式,用于以简洁的单行格式显示提交历史。

--oneline 模式的特点:

  1. 单行显示:每个提交只占一行,便于快速浏览提交历史
  2. 缩短的提交哈希:显示前7个字符的提交哈希,而不是完整的40个字符
  3. 简化的提交信息:只显示提交消息的第一行(标题行)
  4. 无作者信息:不显示作者姓名、邮箱和时间戳
  5. 紧凑格式:格式为 <短哈希> <提交消息第一行>

当前 libra log 输出格式:
commit f2a238924e89ca1d4947662928218a06d39068c3 (HEAD -> main)
Author: John Doe john@example.com
Add a new feature

实现 --oneline 后的输出格式:
libra log --oneline
f2a2389 Add a new feature
16b36c6 Fix a bug in the feature
23ad9ad Add the initial code base

[实现方案]

  1. 扩展 LogArgs 结构体:在 libra/src/command/log.rs 中的 LogArgs 结构体添加 oneline 字段,使用 clap#[clap(long)] 属性解析 --oneline 参数。

  2. 修改输出逻辑:在 execute 函数中根据 args.oneline 的值选择输出格式:
    如果 onelinetrue,使用简洁的单行格式
    如果 onelinefalse,保持当前的详细格式不变

  3. 实现哈希缩短功能:将完整的提交哈希(40字符)截取为前7个字符,使用 commit.id.to_string()[..7] 的方式实现。

  4. 提取提交消息首行:使用现有的 parse_commit_msg 函数获取提交消息的第一行,去除多余的换行符和空白字符。

  5. 格式化输出字符串:将缩短的哈希和提交消息第一行组合成 "{short_hash} {first_line}" 的格式。

  6. 兼容性考虑:确保新参数与现有的 -n/--number 参数能够正常配合使用,即 libra log --oneline -n 5 应该输出最近5条提交的单行格式。

  7. 编写测试用例:在 libra/tests/command/log_test.rs 中添加测试函数:
    测试 --oneline 参数的基本功能
    测试输出格式是否符合预期(7字符哈希 + 空格 + 消息首行)
    测试与 -n 参数的组合使用
    验证输出行数与输入提交数量一致

  8. 更新文档:在 aria/contents/docs/libra/command/log/index.mdx 中添加 --oneline 参数的说明和使用示例。

Metadata

Metadata

Assignees

Labels

librapre-taskR2CN 实习项目测试任务

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions