logo
1
1
WeChat Login

git2go v35.1.2-cnb API 测试项目

本项目是 cnb.cool/cnb/git2go v35(v35.1.2-cnb 版本)的全量 API 接口测试验证项目

项目目的

  • cnb.cool/cnb/git2go/v35 的所有导出 API 进行逐一测试
  • 验证每个接口的正确性和完整性
  • 同时覆盖**裸仓库(bare repository)标准仓库(standard repository)**场景
  • 验证已弃用接口的向后兼容性
  • 输出完整的文档记录,方便后续检查、验证和完善

前置条件

1. Go 环境

需要 Go 1.18 或更高版本。

2. libgit2 静态库

本项目需要 libgit2 v1.9 静态库。构建步骤:

# 安装依赖 (macOS) brew install cmake pkg-config openssl libssh2 # 克隆 git2go 源码并构建静态库 git clone https://cnb.cool/cnb/git2go.git /tmp/git2go-build cd /tmp/git2go-build git checkout v35.1.2-cnb git submodule update --init make install-static

运行测试

# 下载 Go 依赖 make deps # 运行所有测试(静态链接,推荐) make test-static # 详细输出 make test-static-verbose # 运行指定测试 make test-run RUN=TestBlobCreateFromBuffer # 生成覆盖率报告 make test-coverage

测试模块列表

测试文件模块说明
testutil_test.go辅助工具测试仓库创建、公共断言函数
settings_test.go全局设置SearchPath、MwindowSize、Caching 等
repository_test.go仓库操作Init、Open、Clone、属性查询
blob_test.goBlob 对象创建、读取、二进制检测
commit_test.goCommit 对象创建、修改、签名、属性
tree_test.goTree 对象遍历、TreeBuilder
tag_test.goTag 对象创建、列表、遍历
branch_test.go分支操作创建、迭代、上游设置
reference_test.go引用操作CRUD、迭代、解析
config_test.go配置操作读写、迭代
index_test.go索引操作添加、冲突、读写树
diff_test.go差异操作TreeToTree、ForEach、Stats
apply_test.go应用操作ApplyDiff、ApplyToTree
blame_test.goBlame 操作文件追溯
merge_test.go合并操作Merge、MergeBase、MergeCommits
rebase_test.go变基操作InitRebase、Next、Commit
remote_test.go远程操作创建、查找、Refspec
checkout_test.go检出操作Head、Index、Tree 检出
cherrypick_test.go挑选操作Cherrypick、CherrypickCommit
revert_test.go回退操作Revert、RevertCommit
reset_test.go重置操作Soft/Mixed/Hard Reset
stash_test.go暂存操作Save、Apply、Pop、Drop
note_test.go注释操作Create、Read、Remove
odb_test.go对象数据库Read、Write、Stream
mempack_test.go内存包Dump、ObjectCount
packbuilder_test.go包构建Insert、Write
indexer_test.go索引器Write、Commit
walk_test.goRevWalk 遍历Push、Hide、Sorting
revparse_test.go版本解析Single、Ext、Full
object_test.goObject 操作Lookup、Peel、类型转换
oid_test.goOid 操作创建、比较、字符串化
signature_test.go签名操作DefaultSignature、Offset
describe_test.go描述操作Describe、Format
status_test.go状态查询StatusFile、StatusList
submodule_test.go子模块操作Add、Lookup、Update
ignore_test.go忽略规则AddRules、IsPathIgnored
refspec_test.goRefspec 解析Src、Dst、Transform
credential_test.go凭证操作各类凭证创建
features_test.go特性检查Features 位标志
message_test.go消息操作MessageTrailers
graph_test.go图操作AheadBehind、DescendantOf
deprecated_test.go已弃用接口向后兼容性验证
transport_test.go传输层Transport 注册
patch_test.go补丁操作PatchFromBuffers

测试仓库说明

测试使用两种类型的 Git 仓库:

  • 标准仓库createTestRepo):包含工作目录,用于测试工作区操作(checkout、status、stash 等)
  • 裸仓库createBareTestRepo):无工作目录,用于测试纯 Git 对象操作(odb、packbuilder 等)

所有测试仓库在运行时自动生成到临时目录,测试结束后自动清理。

API 覆盖率

详见 API_COVERAGE.md 文档,记录了每个导出 API 的测试状态。

当前统计:227 PASS, 12 SKIP, 0 FAIL

已知问题

libgit2 v1.9.x macOS ARM64 SIGBUS Bug

影响范围: 所有涉及 xdiff 的 API(12 个测试被 Skip)

现象: git_patch_from_diffgit_diff_get_statsgit_diff_foreachgit_diff_to_bufgit_patch_from_buffersgit_blame_file 在 macOS ARM64 上触发 SIGBUS (PC=0x12)。

排查结论:

  1. 该问题在 libgit2 原生 C 测试套件中同样复现,非 git2go 绑定问题
  2. 崩溃发生在 git_patch_generated_from_diffpatch_generated_createoutput->diff_cb(output, patch) 调用 xdiff 时
  3. 在 libgit2 v1.9.0 和 v1.9.2 上均复现
  4. NumDeltas()Delta()FindSimilar(nil) 等不涉及 xdiff 的 API 正常工作
  5. 纯 C 程序静态链接 libgit2.a 同样崩溃,排除 CGo/Go runtime 的影响

受影响的测试: TestDiffStats, TestDiffForEach, TestDiffPatch, TestDiffToBuf, TestDiffBlobs, TestApplyDiff, TestApplyToTree, TestBlameFile, TestBlameHunkByLine, TestBlameMultipleCommits, TestPatchFromDiff, TestPatchFromBuffers

建议: 等待 libgit2 上游修复 xdiff 在 ARM64 上的兼容性问题后,取消这些测试的 Skip 即可运行。

技术栈

  • 语言:Go 1.18+
  • 被测库cnb.cool/cnb/git2go/v35 v35.1.2-cnb
  • 对应 libgit2 版本:v1.9
  • 测试框架:Go 标准 testing
  • 编译标志-tags static(静态链接 libgit2)

许可证

MIT License

About

git2go v35 cnb 版本测试用例及测试报告

Language
Go98.4%
Makefile1.6%