gpt4 book ai didi

mysql - libgit2 - 将树对象写入 mysql odb 后端

转载 作者:行者123 更新时间:2023-11-30 22:48:07 31 4
gpt4 key购买 nike

我关注了libgit2-backend为 libgit2 ODB 后端创建 mysql 后端的项目。

创建 blob 对象并将其放入 mysql 支持的 ODB 中相当容易,我正在使用 git_blob_create_frombuffer

但是当涉及到像树这样的其他 ODB 对象时,就很难了。

据我从 libgit2 文档 101 示例和 API 引用中了解到,您可以使用 treebuilder 或 index 编写树,但这两种方法都需要路径。由于存储库是使用 git_repository_wrap_odb 创建的假存储库

我试过使用像“README.md”这样的相对路径来构建树或索引,然后使用 git_treebuilder_write 或 git_index_write_tree_to,但都在路径验证时失败。

我想知道将树对象写入 mysql odb 后端的选项。

提前致谢!

示例代码:

git_odb_backend_mysql(odb_backend,"localhost", "git2", "git2", "git2", 0, NULL, 0);

git_odb_new(&odb_backend->odb);
git_repository_wrap_odb(&repo, odb_backend->odb);
git_odb_add_backend(odb_backend->odb, odb_backend, 1);

git_blob_create_frombuffer(&oid, repo, str, strlen(str));

git_treebuilder_new(&bld, repo, NULL);
git_treebuilder_insert(NULL, bld, "README.md", &oid, 0100644);
git_treebuilder_write(&treeoid, repo, bld);

这是在 windows 7 32 位、visual studio 2013 express for desktop edition 上测试的

Libgit2 版本:0.22.1

我将我的测试代码放入 libgit2_clar

str被写入mysql:

select  lower(hex(oid)),type, size, convert(uncompress(data) using utf8)
from git2_odb;

oid type size data
5dd01c177f5d7d1be5346a5bc18a569a7410c2ef 3 13 Hello, world!

调用 git_treebuilder_insert 时出现错误

错误信息:libgit2_clar.exe 中 0x013A56A1 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。

Visual Studio 调试在 libgit2/src/win32/path_w32.c,第 196 行停止

  if (path__is_absolute(src)) {

最佳答案

由于您遇到段错误/AV,这是 libgit2 中某处的错误。这最有可能来自于路径验证,以确保没有插入危险或无效的路径。此 NULL 值的可能来源是存储库的路径,因为它被用作确定最终路径是否会尝试写入任何检查它的 gitdir 的方法。

您使用的构造函数仅用于读取数据数据库,而 AFAIK 从未作为一种写入方式进行过测试。我建议使用打开一个存储库然后使用 git_repository_set_odb() 设置 odb 如果你确实想使用存储库接口(interface)来做某事。

关于mysql - libgit2 - 将树对象写入 mysql odb 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28978460/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com