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

问题描述 投票:1回答:1

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

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

libgit2
1个回答
1
投票

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

  • 允许库用户对其项目的安全性做出假设。创建悬挂并指向不存在的对象的东西通常是错误的。
  • 提高创建引用和创建对象之间的一致性。现在,默认情况下,他们都会验证他们指向的东西是否存在。

如果您不想要此行为,可以通过调用以下方法禁用它:

git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 0);
© www.soinside.com 2019 - 2024. All rights reserved.