2015-04-23 75 views
1

我使用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 
+0

這是否僅在使用mysql對象db時發生?如果它發生在內置對象數據庫中,那麼mysql的任何細節都會影響libgit2正在執行的代碼,以及導致該問題的原因。 –

+0

嗨,卡洛斯,謝謝你的回覆。我調試到樹形結構代碼中,tree.c中存在錯誤:926,它正在獲取子樹。 這個問題與mysql後端mysql_stmt_fetch中的odb_read函數有關。我不確定它爲什麼有時會起作用,有時會拋出異常。我嘗試了'釋放'模式,沒有任何錯誤,所有的樹條目打印。 – jerry

回答