jerry
jerry

Reputation: 1261

libgit2 - git_tree_walk didn't iterate all entries

I'm using libgit2 v0.22.2, I put a directory of files into git repo, the odb&refdb is backed by mysql database. The blob,tree,commit object can be found in odb. Trees were written to odb using git_tree_builder and below tree structure table.

When I tried tree walk function to print directory structure, only several entries printed.

code:

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

output:

entry: .gitattributes
entry: .gitignore
entry: .npmignore
entry: CMakeLists.txt
entry: LICENSE
entry: README.md
entry: cmake

root tree '19ee624b3c2983ca0a09b7435dccdaae76a16cad' content:

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

From the raw root tree content, we can see there're other entries, but they're not printed in the tree walk call back. Also, the tree walk didn't recursively print the sub trees like cmake

Please advise, thanks!

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 structure:

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

Upvotes: 1

Views: 430

Answers (1)

jerry
jerry

Reputation: 1261

the issue is with mysql backend, mysql_stmt_fetch in the odb_read function mysql_stmt_fetch throw exception in debug mode, while in release mode, it's working fine, and all entries in the tree printed

logged a new question to tag: mysql to track the issue

mysql C API - mysql_stmt_fetch throw exception: access violation write at 0x00000008

Upvotes: 0

Related Questions