MujicaUI

Git · #307

CommitGraph 浅色主题渲染快照
浅色 · 渲染快照
CommitGraph 深色主题渲染快照
深色 · 渲染快照

307 CommitGraph 提交图谱

用途

按从新到旧的顺序显示提交,左侧绘制泳道、分支与合并线;只构建可见行,可承载十万级提交。

最小示例

var state git.CommitGraphState
commits := []git.Commit{
	{Hash: "c3", Parents: []string{"c2", "b1"}, Subject: "Merge branch", Refs: []string{"main"}},
	{Hash: "b1", Parents: []string{"c1"}, Subject: "Feature"},
	{Hash: "c2", Parents: []string{"c1"}, Subject: "Fix"},
	{Hash: "c1", Subject: "Initial commit"},
}
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	git.CommitGraph(c, &state, commits, git.CommitGraphOptions{}).Element.Height(240)
}
ui.Render(view, 400, 300, 1)

签名:func CommitGraph(c *ui.Context, s *CommitGraphState, commits []Commit, opts CommitGraphOptions) GitListResult

参数

Commit

字段类型默认值含义
Hashstring必填提交哈希;为空时 panic。
Parents[]stringnil父提交;两个以上为合并提交。
Authorstring""作者。
Whentime.Time零值提交时间。
Subjectstring""提交标题。
Refs[]stringnil指向该提交的分支与标签。

CommitGraphOptions

字段类型默认值含义
TimeFormatstring"2006-01-02 15:04"时间格式。
MaxLanesint0(即 8)图谱最多显示的泳道数,超出部分裁剪;为负 panic。
StatusDataStatusDataReady加载、追加、失败状态。
Errorstring""失败说明。

CommitGraphState.List 保存选择(Selected() 返回哈希)。泳道布局在提交切片或长度变化时计算一次,不在每帧计算。提交须按子提交在前的拓扑顺序给出。给返回的 Element 一个高度。

状态

  • 普通提交为实心圆点,合并提交为空心菱形,形状区分而不只靠颜色。
  • 泳道颜色取自 AccentText、Info、Success、Warning、Danger、TextMuted,按位置区分。
  • 选中行:Selection 背景与对勾。

事件

  • Changed() 选择变化;Submitted() 双击或 Enter 打开提交。

键盘操作

  • Tab 进入列表;↑/↓、Home/End 移动选择;输入标题开头字母跳转;Enter 打开。

限制

  • 原地修改提交切片而不改变其地址与长度时,布局不会重算;请传入新切片。
  • 泳道数超过 MaxLanes 时,右侧泳道被裁剪。