documention for git_treebuilder_insert似乎意味着它并不关心被插入的对象是否有效:
没有尝试确保提供的oid指向对象数据库中的现有git对象,也没有尝试关于指向对象的类型的属性。
但是,当实际使用库创建树对象时,如果我尝试编写带有无效oid的条目,则此函数将返回失败。作为参考,这是代码:
if (filemode != GIT_FILEMODE_COMMIT &&
!git_object__is_valid(bld->repo, id, otype_from_mode(filemode)))
return tree_error("Failed to insert entry; invalid object specified", filename);
预期的行为,代码或文档是什么?
答案 0 :(得分:1)
文档已过时;代码表现如预期。 The change to validate object pointers是为了:
允许图书馆用户对其项目的安全性做出假设。创建悬挂并指向不存在的对象的东西通常是错误的。
改善创建引用和创建对象之间的一致性。现在他们都默认确认他们指向的东西存在。
如果你不想要这种行为,你可以通过调用来禁用它:
git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 0);