我跟随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桌面版上进行过测试
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的方式来进行检查。
您正在使用的构造函数只打算从dabatase中读出,而AFAIK从未经过过测试作为编写方式。如果您确实想使用存储库接口,则建议使用打开存储库,然后使用git_repository_set_odb()
设置odb。
关于mysql - libgit2-将树对象写入mysql odb后端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28978460/