我使用libgit2 v0.22.2,我把文件目錄放入git repo中,odb & refdb由mysql數據庫支持。 blob,樹,提交對象可以在odb中找到。樹使用git_tree_builder和樹結構表寫入odb。libgit2 - git_tree_walk沒有迭代所有條目
當我嘗試使用樹行走功能打印目錄結構時,只打印了幾個條目。
代碼:
int tree_walk_cb(const char *root, const git_tree_entry *entry, void *payload)
{
const char *name = git_tree_entry_name(entry);
git_otype type = git_tree_entry_type(entry);
printf("entry: %s \n", name);
return 0;
}
int git_mysql_tree_walk(git_mysql *mysql, git_repository *repo){
int error;
git_oid oid;
git_tree *tree = NULL;
git_oid_fromstr(&oid, "19ee624b3c2983ca0a09b7435dccdaae76a16cad");
error = git_tree_lookup(&tree, repo, &oid);
error = git_tree_walk(tree, GIT_TREEWALK_PRE, tree_walk_cb, NULL);
}
輸出:
entry: .gitattributes
entry: .gitignore
entry: .npmignore
entry: CMakeLists.txt
entry: LICENSE
entry: README.md
entry: cmake
根樹 '19ee624b3c2983ca0a09b7435dccdaae76a16cad' 內容:
100644 .gitattributes ��u����d��K��c=�{100644 .gitignore �$m������V-�)�k100644 .npmignore ө���u�Ƴ�&�Գ�
100644 CMakeLists.txt ��}���# �6/�?f�h{)�100644 LICENSE O6sa/���m�����-�OY100644 README.md A�/B�74wJa����:�rƄ�40000 cmake yi����^Z���[e�l!ğ�#40000 native ��<���Ξ�} X3� �ϙ100644 package.json M-Iő������J$��K40000 script ��L�� ��� �y��#���40000 test K�]�B�n��`�K�֒���I
從原始根樹的內容,我們可以看到還有一些其他條目,但它們不會在樹形漫步回調中打印出來。此外,樹行走沒有像cmake遞歸打印子樹
請指教,謝謝!
ODB:
oid type size data
0015cd404c7fa06de9194221e04712f9551146fe 2 115 ...
19ee624b3c2983ca0a09b7435dccdaae76a16cad 2 401 ...
1f6808ef9c0bcb443005acf4542bc1264a5e68f6 3 285 ...
1fe1a4246df70ba6b9a805be1fe7562d9429d46b 3 723 ...
33bbc64e87a5f1baa138d802664a07bf87b81de0 3 366 ...
34832d8c0636fa9a92dbae10f4add7fafe6fc7ab 3 1104 ...
377cc807899a648240718d824306deec8943ab5b 3 7221 ...
37fc4881eff286f264f91aedce13ae7790806061 3 493 ...
41842f42ac3734774a6192c9d7f03ad972c684fc 3 1186 ...
4b825dc642cb6eb9a060e54bf8d69288fbee4904 2 0
4d2d49c591fe1795cfcd1ba8159b4a249c94014b 3 759 ...
4f3673611b2f0e93cdcb6ddaf69499832da94f59 3 1102 ...
5828d750c46503ba9defd5ea37b0d3c46e37b334 3 160 ...
5ac1ceb34a87a8ea589e26a19796e2239cc2e6c5 3 1188 ...
5bc42581996460da22fe58af4537ff454f37fe57 3 14506 ...
5e5af8327eb6ea85d85ea94fd2f64c7317ff3867 1 167 ...
7969f8b194a15e5ae6fec35b65c26c21c49fee23 2 85 ...
7c57e957a1e4abf47cfd58d7fc695262ffbb5673 3 260 ...
7c75467b21b5a8f17a6e5e68c1d12782d39649aa 3 415 ...
801dc03cbabb148dce9ef37d2058339f20b4cf99 2 64 ...
8231cec56dca4ae528ee1253759b0a5cef17de0c 2 408 ...
86b5584b35bcf27022deb9fbf14f3f14f54c4b42 3 8643 ...
8ae61ae3a4cc2882cf1ec883cc4b7ef1d134428b 3 332 ...
8ba87598aa1ed8180bc064e5c84ba7e0633d8e7b 3 37 ...
96c19f76ef41203ddfacba2c2b5975152946aa41 3 1387 ...
aa01580037fd3823bc35c194ee33942f7033246d 2 73 ...
b2811f77461ebaa1314a5c05def22c4220899756 2 145 ...
c2cf7d99a81a9b2300e1362feb3f66cb687b29fa 3 2756 ...
c78274783836eeb8a861d91a03869aab7a58b289 3 385 ...
cd5750aa5dd2214a861900876a905f7bff171970 3 3084 ...
d2a71c98dab94e48e73a262a86e8e79eb7ffdb29 3 78 ...
d3a9ebb5e41ae1751f8314c6b3c12693d4b39b0a 3 225 ...
d64277adcb7d5a41f9088d380f2b498b09341ce9 3 578 ...
e006733c8da938b4401bab8727c301f96abbaf9c 3 335 ...
e271f1db33845ada20afa51a630d68ad0c34a4bf 3 1253 ...
f29ee0d06a2c57bad8406921c6b8dd85e6f29ccc 3 1568 ...
f2cf4cb0e1209cd9df09ad799e0bf5231addd1d0 2 32 ...
f7532185429bb09a7e7c132e21e50a7ea33b4f13 3 10152 ...
樹型結構:
tree dir entry type oid
19ee624b3c2983ca0a09b7435dccdaae76a16cad / .gitattributes BLOB 8ba87598aa1ed8180bc064e5c84ba7e0633d8e7b
19ee624b3c2983ca0a09b7435dccdaae76a16cad / .gitignore BLOB 1fe1a4246df70ba6b9a805be1fe7562d9429d46b
19ee624b3c2983ca0a09b7435dccdaae76a16cad / .npmignore BLOB d3a9ebb5e41ae1751f8314c6b3c12693d4b39b0a
19ee624b3c2983ca0a09b7435dccdaae76a16cad / CMakeLists.txt BLOB c2cf7d99a81a9b2300e1362feb3f66cb687b29fa
19ee624b3c2983ca0a09b7435dccdaae76a16cad / LICENSE BLOB 4f3673611b2f0e93cdcb6ddaf69499832da94f59
19ee624b3c2983ca0a09b7435dccdaae76a16cad / README.md BLOB 41842f42ac3734774a6192c9d7f03ad972c684fc
19ee624b3c2983ca0a09b7435dccdaae76a16cad / cmake TREE 7969f8b194a15e5ae6fec35b65c26c21c49fee23
19ee624b3c2983ca0a09b7435dccdaae76a16cad / native TREE 801dc03cbabb148dce9ef37d2058339f20b4cf99
19ee624b3c2983ca0a09b7435dccdaae76a16cad / package.json BLOB 4d2d49c591fe1795cfcd1ba8159b4a249c94014b
19ee624b3c2983ca0a09b7435dccdaae76a16cad / script TREE f2cf4cb0e1209cd9df09ad799e0bf5231addd1d0
19ee624b3c2983ca0a09b7435dccdaae76a16cad / test TREE 4b825dc642cb6eb9a060e54bf8d69288fbee4904
7969f8b194a15e5ae6fec35b65c26c21c49fee23 /cmake/ FindMysql.cmake BLOB 96c19f76ef41203ddfacba2c2b5975152946aa41
7969f8b194a15e5ae6fec35b65c26c21c49fee23 /cmake/ FindNode.cmake BLOB 5ac1ceb34a87a8ea589e26a19796e2239cc2e6c5
801dc03cbabb148dce9ef37d2058339f20b4cf99 /native/ addon TREE 0015cd404c7fa06de9194221e04712f9551146fe
801dc03cbabb148dce9ef37d2058339f20b4cf99 /native/ mysql TREE 8231cec56dca4ae528ee1253759b0a5cef17de0c
0015cd404c7fa06de9194221e04712f9551146fe /native/addon/ addon.cc BLOB 7c57e957a1e4abf47cfd58d7fc695262ffbb5673
0015cd404c7fa06de9194221e04712f9551146fe /native/addon/ git_mysql.cc BLOB 5bc42581996460da22fe58af4537ff454f37fe57
0015cd404c7fa06de9194221e04712f9551146fe /native/addon/ git_mysql.h BLOB 34832d8c0636fa9a92dbae10f4add7fafe6fc7ab
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_backend.c BLOB 377cc807899a648240718d824306deec8943ab5b
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_backend.h BLOB e271f1db33845ada20afa51a630d68ad0c34a4bf
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_index.c BLOB cd5750aa5dd2214a861900876a905f7bff171970
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_index.h BLOB 7c75467b21b5a8f17a6e5e68c1d12782d39649aa
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_odb.c BLOB f7532185429bb09a7e7c132e21e50a7ea33b4f13
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_odb.h BLOB c78274783836eeb8a861d91a03869aab7a58b289
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_refdb.c BLOB 86b5584b35bcf27022deb9fbf14f3f14f54c4b42
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_refdb.h BLOB 37fc4881eff286f264f91aedce13ae7790806061
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_repo.c BLOB f29ee0d06a2c57bad8406921c6b8dd85e6f29ccc
8231cec56dca4ae528ee1253759b0a5cef17de0c /native/mysql/ mysql_repo.h BLOB 1f6808ef9c0bcb443005acf4542bc1264a5e68f6
f2cf4cb0e1209cd9df09ad799e0bf5231addd1d0 /script/ mysql TREE b2811f77461ebaa1314a5c05def22c4220899756
b2811f77461ebaa1314a5c05def22c4220899756 /script/mysql/ index.sql BLOB d64277adcb7d5a41f9088d380f2b498b09341ce9
b2811f77461ebaa1314a5c05def22c4220899756 /script/mysql/ odb.sql BLOB 33bbc64e87a5f1baa138d802664a07bf87b81de0
b2811f77461ebaa1314a5c05def22c4220899756 /script/mysql/ refdb.sql BLOB e006733c8da938b4401bab8727c301f96abbaf9c
b2811f77461ebaa1314a5c05def22c4220899756 /script/mysql/ repo.sql BLOB 8ae61ae3a4cc2882cf1ec883cc4b7ef1d134428b
4b825dc642cb6eb9a060e54bf8d69288fbee4904 /test/ mocha.opts BLOB d2a71c98dab94e48e73a262a86e8e79eb7ffdb29
4b825dc642cb6eb9a060e54bf8d69288fbee4904 /test/ test.js BLOB 5828d750c46503ba9defd5ea37b0d3c46e37b334
這是否僅在使用mysql對象db時發生?如果它發生在內置對象數據庫中,那麼mysql的任何細節都會影響libgit2正在執行的代碼,以及導致該問題的原因。 –
嗨,卡洛斯,謝謝你的回覆。我調試到樹形結構代碼中,tree.c中存在錯誤:926,它正在獲取子樹。 這個問題與mysql後端mysql_stmt_fetch中的odb_read函數有關。我不確定它爲什麼有時會起作用,有時會拋出異常。我嘗試了'釋放'模式,沒有任何錯誤,所有的樹條目打印。 – jerry