为什么git_treebuilder_insert会因无效对象而失败?

时间:2017-12-30 19:21:42

标签: libgit2

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);

预期的行为,代码或文档是什么?

1 个答案:

答案 0 :(得分:1)

文档已过时;代码表现如预期。 The change to validate object pointers是为了:

  • 允许图书馆用户对其项目的安全性做出假设。创建悬挂并指向不存在的对象的东西通常是错误的。

  • 改善创建引用和创建对象之间的一致性。现在他们都默认确认他们指向的东西存在。

如果你想要这种行为,你可以通过调用来禁用它:

git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 0);