rugged 1.3.2 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +7 -4
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_blame.c +2 -0
  7. data/ext/rugged/rugged_blob.c +3 -0
  8. data/ext/rugged/rugged_commit.c +1 -0
  9. data/ext/rugged/rugged_config.c +9 -2
  10. data/ext/rugged/rugged_diff.c +1 -0
  11. data/ext/rugged/rugged_index.c +2 -0
  12. data/ext/rugged/rugged_patch.c +1 -0
  13. data/ext/rugged/rugged_rebase.c +1 -0
  14. data/ext/rugged/rugged_reference.c +1 -0
  15. data/ext/rugged/rugged_remote.c +28 -10
  16. data/ext/rugged/rugged_repo.c +7 -9
  17. data/ext/rugged/rugged_revwalk.c +5 -1
  18. data/ext/rugged/rugged_settings.c +5 -0
  19. data/ext/rugged/rugged_submodule.c +1 -0
  20. data/ext/rugged/rugged_tag.c +1 -0
  21. data/ext/rugged/rugged_tree.c +4 -0
  22. data/lib/rugged/index.rb +1 -1
  23. data/lib/rugged/tree.rb +5 -1
  24. data/lib/rugged/version.rb +1 -1
  25. data/vendor/libgit2/CMakeLists.txt +132 -288
  26. data/vendor/libgit2/COPYING +106 -19
  27. data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
  28. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  29. data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
  30. data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
  31. data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
  32. data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
  33. data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
  34. data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
  35. data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
  36. data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
  37. data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
  38. data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
  39. data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
  40. data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
  41. data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
  42. data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
  43. data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
  44. data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
  45. data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
  46. data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
  47. data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
  48. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
  49. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
  50. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
  51. data/vendor/libgit2/cmake/SelectHashes.cmake +91 -53
  52. data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
  53. data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
  54. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
  55. data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
  56. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
  57. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
  58. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
  59. data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
  60. data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
  61. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
  62. data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
  63. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
  64. data/vendor/libgit2/deps/zlib/adler32.c +7 -0
  65. data/vendor/libgit2/deps/zlib/crc32.c +975 -288
  66. data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
  67. data/vendor/libgit2/deps/zlib/deflate.c +83 -31
  68. data/vendor/libgit2/deps/zlib/deflate.h +12 -15
  69. data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
  70. data/vendor/libgit2/deps/zlib/infback.c +2 -1
  71. data/vendor/libgit2/deps/zlib/inffast.c +14 -14
  72. data/vendor/libgit2/deps/zlib/inflate.c +39 -8
  73. data/vendor/libgit2/deps/zlib/inflate.h +3 -2
  74. data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
  75. data/vendor/libgit2/deps/zlib/trees.c +27 -48
  76. data/vendor/libgit2/deps/zlib/zlib.h +126 -100
  77. data/vendor/libgit2/deps/zlib/zutil.c +2 -2
  78. data/vendor/libgit2/deps/zlib/zutil.h +12 -9
  79. data/vendor/libgit2/include/git2/apply.h +16 -2
  80. data/vendor/libgit2/include/git2/attr.h +11 -2
  81. data/vendor/libgit2/include/git2/blame.h +4 -1
  82. data/vendor/libgit2/include/git2/blob.h +14 -1
  83. data/vendor/libgit2/include/git2/branch.h +4 -2
  84. data/vendor/libgit2/include/git2/buffer.h +18 -78
  85. data/vendor/libgit2/include/git2/cert.h +2 -2
  86. data/vendor/libgit2/include/git2/checkout.h +5 -2
  87. data/vendor/libgit2/include/git2/clone.h +3 -3
  88. data/vendor/libgit2/include/git2/commit.h +2 -0
  89. data/vendor/libgit2/include/git2/common.h +28 -7
  90. data/vendor/libgit2/include/git2/config.h +25 -9
  91. data/vendor/libgit2/include/git2/credential.h +2 -1
  92. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  93. data/vendor/libgit2/include/git2/deprecated.h +9 -1
  94. data/vendor/libgit2/include/git2/describe.h +7 -2
  95. data/vendor/libgit2/include/git2/diff.h +18 -10
  96. data/vendor/libgit2/include/git2/email.h +1 -1
  97. data/vendor/libgit2/include/git2/errors.h +17 -3
  98. data/vendor/libgit2/include/git2/experimental.h +20 -0
  99. data/vendor/libgit2/include/git2/filter.h +7 -2
  100. data/vendor/libgit2/include/git2/graph.h +1 -0
  101. data/vendor/libgit2/include/git2/ignore.h +1 -1
  102. data/vendor/libgit2/include/git2/index.h +11 -5
  103. data/vendor/libgit2/include/git2/indexer.h +48 -0
  104. data/vendor/libgit2/include/git2/merge.h +24 -4
  105. data/vendor/libgit2/include/git2/message.h +2 -0
  106. data/vendor/libgit2/include/git2/object.h +49 -0
  107. data/vendor/libgit2/include/git2/odb.h +94 -13
  108. data/vendor/libgit2/include/git2/odb_backend.h +107 -19
  109. data/vendor/libgit2/include/git2/oid.h +115 -15
  110. data/vendor/libgit2/include/git2/pack.h +24 -8
  111. data/vendor/libgit2/include/git2/patch.h +8 -0
  112. data/vendor/libgit2/include/git2/pathspec.h +1 -1
  113. data/vendor/libgit2/include/git2/proxy.h +1 -1
  114. data/vendor/libgit2/include/git2/rebase.h +9 -1
  115. data/vendor/libgit2/include/git2/refdb.h +3 -0
  116. data/vendor/libgit2/include/git2/reflog.h +1 -1
  117. data/vendor/libgit2/include/git2/refs.h +2 -2
  118. data/vendor/libgit2/include/git2/remote.h +184 -37
  119. data/vendor/libgit2/include/git2/repository.h +34 -10
  120. data/vendor/libgit2/include/git2/reset.h +2 -2
  121. data/vendor/libgit2/include/git2/revparse.h +1 -1
  122. data/vendor/libgit2/include/git2/revwalk.h +4 -1
  123. data/vendor/libgit2/include/git2/signature.h +1 -1
  124. data/vendor/libgit2/include/git2/stash.h +61 -7
  125. data/vendor/libgit2/include/git2/status.h +14 -5
  126. data/vendor/libgit2/include/git2/strarray.h +0 -13
  127. data/vendor/libgit2/include/git2/submodule.h +7 -2
  128. data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
  129. data/vendor/libgit2/include/git2/sys/odb_backend.h +3 -6
  130. data/vendor/libgit2/include/git2/sys/remote.h +46 -0
  131. data/vendor/libgit2/include/git2/sys/stream.h +1 -1
  132. data/vendor/libgit2/include/git2/sys/transport.h +46 -39
  133. data/vendor/libgit2/include/git2/tag.h +1 -0
  134. data/vendor/libgit2/include/git2/tree.h +4 -3
  135. data/vendor/libgit2/include/git2/types.h +7 -7
  136. data/vendor/libgit2/include/git2/version.h +27 -6
  137. data/vendor/libgit2/include/git2/worktree.h +12 -2
  138. data/vendor/libgit2/include/git2.h +1 -0
  139. data/vendor/libgit2/src/CMakeLists.txt +177 -419
  140. data/vendor/libgit2/src/README.md +12 -0
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +57 -0
  142. data/vendor/libgit2/src/cli/README.md +26 -0
  143. data/vendor/libgit2/src/cli/cli.h +20 -0
  144. data/vendor/libgit2/src/cli/cmd.c +21 -0
  145. data/vendor/libgit2/src/cli/cmd.h +33 -0
  146. data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
  147. data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +154 -0
  149. data/vendor/libgit2/src/cli/cmd_help.c +86 -0
  150. data/vendor/libgit2/src/cli/error.h +51 -0
  151. data/vendor/libgit2/src/cli/main.c +106 -0
  152. data/vendor/libgit2/src/cli/opt.c +669 -0
  153. data/vendor/libgit2/src/cli/opt.h +349 -0
  154. data/vendor/libgit2/src/cli/opt_usage.c +194 -0
  155. data/vendor/libgit2/src/cli/opt_usage.h +35 -0
  156. data/vendor/libgit2/src/cli/progress.c +345 -0
  157. data/vendor/libgit2/src/cli/progress.h +117 -0
  158. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  159. data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
  160. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  161. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  162. data/vendor/libgit2/src/libgit2/CMakeLists.txt +141 -0
  163. data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +1 -1
  164. data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
  165. data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +18 -18
  166. data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
  167. data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +18 -18
  168. data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +18 -18
  169. data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +4 -4
  170. data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +18 -13
  171. data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +2 -0
  172. data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -1
  173. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
  174. data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
  175. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
  176. data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +15 -3
  177. data/vendor/libgit2/src/libgit2/buf.c +126 -0
  178. data/vendor/libgit2/src/libgit2/buf.h +50 -0
  179. data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +74 -68
  180. data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +13 -13
  181. data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +96 -67
  182. data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +178 -73
  183. data/vendor/libgit2/src/libgit2/commit.h +87 -0
  184. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +122 -89
  185. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +14 -4
  186. data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +7 -4
  187. data/vendor/libgit2/src/libgit2/common.h +55 -0
  188. data/vendor/libgit2/src/{config.c → libgit2/config.c} +101 -69
  189. data/vendor/libgit2/src/{config.h → libgit2/config.h} +15 -2
  190. data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +105 -93
  191. data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +9 -9
  192. data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +27 -23
  193. data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
  194. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +35 -27
  195. data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +30 -9
  196. data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +2 -4
  197. data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +34 -36
  198. data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +3 -3
  199. data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +44 -26
  200. data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +47 -18
  201. data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
  202. data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +112 -100
  203. data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
  204. data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
  205. data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +13 -8
  206. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
  207. data/vendor/libgit2/src/{email.c → libgit2/email.c} +55 -39
  208. data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
  209. data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +18 -18
  210. data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
  211. data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
  212. data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +72 -27
  213. data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -1
  214. data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +23 -23
  215. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +127 -53
  216. data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
  217. data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
  218. data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +35 -34
  219. data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
  220. data/vendor/libgit2/src/{index.c → libgit2/index.c} +91 -90
  221. data/vendor/libgit2/src/{index.h → libgit2/index.h} +6 -3
  222. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +173 -92
  223. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +71 -61
  224. data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +5 -5
  225. data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +46 -11
  226. data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +38 -36
  227. data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +30 -30
  228. data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
  229. data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +2 -2
  230. data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -3
  231. data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
  232. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +112 -92
  233. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +5 -4
  234. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +15 -12
  235. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +5 -2
  236. data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +1 -2
  237. data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +1 -1
  238. data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +25 -34
  239. data/vendor/libgit2/src/{object.c → libgit2/object.c} +135 -30
  240. data/vendor/libgit2/src/{object.h → libgit2/object.h} +12 -3
  241. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +228 -81
  242. data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
  243. data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
  244. data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +18 -5
  245. data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +137 -85
  246. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +136 -90
  247. data/vendor/libgit2/src/libgit2/oid.h +273 -0
  248. data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
  249. data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +56 -30
  250. data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +11 -6
  251. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +114 -84
  252. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +31 -16
  253. data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +4 -3
  254. data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
  255. data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +1 -0
  256. data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +27 -11
  257. data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
  258. data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +29 -29
  259. data/vendor/libgit2/src/libgit2/path.c +375 -0
  260. data/vendor/libgit2/src/libgit2/path.h +68 -0
  261. data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +6 -6
  262. data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
  263. data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
  264. data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
  265. data/vendor/libgit2/src/{push.c → libgit2/push.c} +43 -38
  266. data/vendor/libgit2/src/{push.h → libgit2/push.h} +4 -16
  267. data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
  268. data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
  269. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +119 -107
  270. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +506 -197
  271. data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +7 -5
  272. data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +1 -2
  273. data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +34 -32
  274. data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +2 -2
  275. data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +32 -37
  276. data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +5 -2
  277. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +718 -420
  278. data/vendor/libgit2/src/libgit2/remote.h +100 -0
  279. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +629 -386
  280. data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +20 -9
  281. data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
  282. data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +14 -14
  283. data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +71 -42
  284. data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +12 -8
  285. data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +12 -6
  286. data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -1
  287. data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +235 -61
  288. data/vendor/libgit2/src/{status.c → libgit2/status.c} +4 -1
  289. data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
  290. data/vendor/libgit2/src/libgit2/strarray.h +25 -0
  291. data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +8 -6
  292. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +1 -1
  293. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +7 -3
  294. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +3 -3
  295. data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +4 -1
  296. data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +177 -161
  297. data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +1 -1
  298. data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
  299. data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +53 -18
  300. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +73 -42
  301. data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
  302. data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +3 -3
  303. data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +2 -2
  304. data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
  305. data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
  306. data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +1 -1
  307. data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +1 -1
  308. data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +10 -10
  309. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
  310. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +2 -3
  311. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +12 -13
  312. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +10 -10
  313. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -1
  314. data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +9 -11
  315. data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +41 -20
  316. data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +2 -3
  317. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +75 -66
  318. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
  319. data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +138 -116
  320. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +92 -133
  321. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +35 -32
  322. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +177 -65
  323. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +97 -49
  324. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +365 -198
  325. data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +58 -59
  326. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +8 -8
  327. data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +2 -2
  328. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +93 -83
  329. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +4 -4
  330. data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +121 -94
  331. data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
  332. data/vendor/libgit2/src/libgit2/xdiff/git-xdiff.h +53 -0
  333. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +15 -15
  334. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +134 -108
  335. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +23 -7
  336. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +87 -78
  337. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +1 -12
  338. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +104 -117
  339. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +6 -17
  340. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +15 -20
  341. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +18 -7
  342. data/vendor/libgit2/src/util/CMakeLists.txt +80 -0
  343. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
  344. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  345. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  346. data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
  347. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  348. data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +1 -1
  349. data/vendor/libgit2/src/{date.c → util/date.c} +14 -20
  350. data/vendor/libgit2/src/util/date.h +33 -0
  351. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +29 -29
  352. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +2 -2
  353. data/vendor/libgit2/src/{path.c → util/fs_path.c} +453 -647
  354. data/vendor/libgit2/src/{path.h → util/fs_path.h} +221 -188
  355. data/vendor/libgit2/src/{futils.c → util/futils.c} +135 -90
  356. data/vendor/libgit2/src/{futils.h → util/futils.h} +28 -15
  357. data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +15 -1
  358. data/vendor/libgit2/src/{common.h → util/git2_util.h} +20 -59
  359. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  360. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  361. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
  362. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  363. data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
  364. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  365. data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
  366. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  367. data/vendor/libgit2/src/util/hash/openssl.c +195 -0
  368. data/vendor/libgit2/src/util/hash/openssl.h +45 -0
  369. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
  370. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  371. data/vendor/libgit2/src/util/hash/sha.h +70 -0
  372. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
  373. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  374. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  375. data/vendor/libgit2/src/util/hash.c +158 -0
  376. data/vendor/libgit2/src/util/hash.h +61 -0
  377. data/vendor/libgit2/src/{khash.h → util/khash.h} +1 -1
  378. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  379. data/vendor/libgit2/src/util/net.c +1003 -0
  380. data/vendor/libgit2/src/{net.h → util/net.h} +18 -4
  381. data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
  382. data/vendor/libgit2/src/{posix.c → util/posix.c} +3 -3
  383. data/vendor/libgit2/src/{posix.h → util/posix.h} +4 -1
  384. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +2 -2
  385. data/vendor/libgit2/src/util/rand.c +234 -0
  386. data/vendor/libgit2/src/util/rand.h +37 -0
  387. data/vendor/libgit2/src/{regexp.c → util/regexp.c} +4 -4
  388. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  389. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  390. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  391. data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +1 -1
  392. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +2 -2
  393. data/vendor/libgit2/src/{buffer.c → util/str.c} +157 -151
  394. data/vendor/libgit2/src/util/str.h +357 -0
  395. data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
  396. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  397. data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
  398. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  399. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
  400. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -4
  401. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -3
  402. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  403. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  404. data/vendor/libgit2/src/{util.c → util/util.c} +15 -15
  405. data/vendor/libgit2/src/{util.h → util/util.h} +4 -29
  406. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  407. data/vendor/libgit2/src/{vector.h → util/vector.h} +2 -2
  408. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  409. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  410. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  411. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  412. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +140 -9
  413. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
  414. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
  415. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +12 -28
  416. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  417. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  418. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  419. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
  420. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
  421. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
  422. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
  423. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  424. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  425. data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
  426. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
  427. metadata +402 -356
  428. data/vendor/libgit2/src/buffer.h +0 -374
  429. data/vendor/libgit2/src/commit.h +0 -46
  430. data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
  431. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  432. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  433. data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
  434. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  435. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  436. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  437. data/vendor/libgit2/src/hash/sha1.h +0 -38
  438. data/vendor/libgit2/src/hash.c +0 -110
  439. data/vendor/libgit2/src/hash.h +0 -46
  440. data/vendor/libgit2/src/message.h +0 -17
  441. data/vendor/libgit2/src/net.c +0 -540
  442. data/vendor/libgit2/src/oid.h +0 -51
  443. data/vendor/libgit2/src/remote.h +0 -55
  444. data/vendor/libgit2/src/sysdir.c +0 -347
  445. data/vendor/libgit2/src/win32/findfile.c +0 -230
  446. data/vendor/libgit2/src/win32/findfile.h +0 -19
  447. /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  448. /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  449. /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
  450. /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
  451. /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  452. /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
  453. /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
  454. /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
  455. /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
  456. /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
  457. /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
  458. /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
  459. /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
  460. /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
  461. /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  462. /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
  463. /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  464. /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  465. /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  466. /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
  467. /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  468. /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  469. /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
  470. /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  471. /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
  472. /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
  473. /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  474. /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
  475. /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
  476. /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  477. /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
  478. /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  479. /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  480. /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  481. /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  482. /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
  483. /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
  484. /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
  485. /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
  486. /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
  487. /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
  488. /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  489. /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  490. /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  491. /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  492. /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
  493. /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
  494. /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  495. /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  496. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  497. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
  498. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  499. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  500. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  501. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  502. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
  503. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
  504. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  505. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
  506. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  507. /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
  508. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
  509. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
  510. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  511. /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
  512. /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  513. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
  514. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
  515. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
  516. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
  517. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
  518. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
  519. /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
  520. /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
  521. /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
  522. /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
  523. /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
  524. /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  525. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  526. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  527. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  528. /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
  529. /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
  530. /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  531. /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
  532. /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  533. /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  534. /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  535. /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
  536. /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  537. /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  538. /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
  539. /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  540. /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  541. /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  542. /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  543. /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
  544. /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  545. /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  546. /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
  547. /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
@@ -8,6 +8,7 @@
8
8
  #include "commit_graph.h"
9
9
 
10
10
  #include "array.h"
11
+ #include "buf.h"
11
12
  #include "filebuf.h"
12
13
  #include "futils.h"
13
14
  #include "hash.h"
@@ -137,19 +138,19 @@ static int commit_graph_parse_oid_lookup(
137
138
  struct git_commit_graph_chunk *chunk_oid_lookup)
138
139
  {
139
140
  uint32_t i;
140
- git_oid *oid, *prev_oid, zero_oid = {{0}};
141
+ unsigned char *oid, *prev_oid, zero_oid[GIT_OID_SHA1_SIZE] = {0};
141
142
 
142
143
  if (chunk_oid_lookup->offset == 0)
143
144
  return commit_graph_error("missing OID Lookup chunk");
144
145
  if (chunk_oid_lookup->length == 0)
145
146
  return commit_graph_error("empty OID Lookup chunk");
146
- if (chunk_oid_lookup->length != file->num_commits * GIT_OID_RAWSZ)
147
+ if (chunk_oid_lookup->length != file->num_commits * GIT_OID_SHA1_SIZE)
147
148
  return commit_graph_error("OID Lookup chunk has wrong length");
148
149
 
149
- file->oid_lookup = oid = (git_oid *)(data + chunk_oid_lookup->offset);
150
- prev_oid = &zero_oid;
151
- for (i = 0; i < file->num_commits; ++i, ++oid) {
152
- if (git_oid_cmp(prev_oid, oid) >= 0)
150
+ file->oid_lookup = oid = (unsigned char *)(data + chunk_oid_lookup->offset);
151
+ prev_oid = zero_oid;
152
+ for (i = 0; i < file->num_commits; ++i, oid += GIT_OID_SHA1_SIZE) {
153
+ if (git_oid_raw_cmp(prev_oid, oid, GIT_OID_SHA1_SIZE) >= 0)
153
154
  return commit_graph_error("OID Lookup index is non-monotonic");
154
155
  prev_oid = oid;
155
156
  }
@@ -166,7 +167,7 @@ static int commit_graph_parse_commit_data(
166
167
  return commit_graph_error("missing Commit Data chunk");
167
168
  if (chunk_commit_data->length == 0)
168
169
  return commit_graph_error("empty Commit Data chunk");
169
- if (chunk_commit_data->length != file->num_commits * (GIT_OID_RAWSZ + 16))
170
+ if (chunk_commit_data->length != file->num_commits * (GIT_OID_SHA1_SIZE + 16))
170
171
  return commit_graph_error("Commit Data chunk has wrong length");
171
172
 
172
173
  file->commit_data = data + chunk_commit_data->offset;
@@ -199,8 +200,8 @@ int git_commit_graph_file_parse(
199
200
  const unsigned char *chunk_hdr;
200
201
  struct git_commit_graph_chunk *last_chunk;
201
202
  uint32_t i;
202
- off64_t last_chunk_offset, chunk_offset, trailer_offset;
203
- git_oid cgraph_checksum = {{0}};
203
+ uint64_t last_chunk_offset, chunk_offset, trailer_offset;
204
+ size_t checksum_size;
204
205
  int error;
205
206
  struct git_commit_graph_chunk chunk_oid_fanout = {0}, chunk_oid_lookup = {0},
206
207
  chunk_commit_data = {0}, chunk_extra_edge_list = {0},
@@ -208,7 +209,7 @@ int git_commit_graph_file_parse(
208
209
 
209
210
  GIT_ASSERT_ARG(file);
210
211
 
211
- if (size < sizeof(struct git_commit_graph_header) + GIT_OID_RAWSZ)
212
+ if (size < sizeof(struct git_commit_graph_header) + GIT_OID_SHA1_SIZE)
212
213
  return commit_graph_error("commit-graph is too short");
213
214
 
214
215
  hdr = ((struct git_commit_graph_header *)data);
@@ -225,21 +226,18 @@ int git_commit_graph_file_parse(
225
226
  * headers, and a special zero chunk.
226
227
  */
227
228
  last_chunk_offset = sizeof(struct git_commit_graph_header) + (1 + hdr->chunks) * 12;
228
- trailer_offset = size - GIT_OID_RAWSZ;
229
+ trailer_offset = size - GIT_OID_SHA1_SIZE;
230
+ checksum_size = GIT_HASH_SHA1_SIZE;
231
+
229
232
  if (trailer_offset < last_chunk_offset)
230
233
  return commit_graph_error("wrong commit-graph size");
231
- git_oid_cpy(&file->checksum, (git_oid *)(data + trailer_offset));
232
-
233
- if (git_hash_buf(&cgraph_checksum, data, (size_t)trailer_offset) < 0)
234
- return commit_graph_error("could not calculate signature");
235
- if (!git_oid_equal(&cgraph_checksum, &file->checksum))
236
- return commit_graph_error("index signature mismatch");
234
+ memcpy(file->checksum, (data + trailer_offset), checksum_size);
237
235
 
238
236
  chunk_hdr = data + sizeof(struct git_commit_graph_header);
239
237
  last_chunk = NULL;
240
238
  for (i = 0; i < hdr->chunks; ++i, chunk_hdr += 12) {
241
- chunk_offset = ((off64_t)ntohl(*((uint32_t *)(chunk_hdr + 4)))) << 32
242
- | ((off64_t)ntohl(*((uint32_t *)(chunk_hdr + 8))));
239
+ chunk_offset = ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 4)))) << 32
240
+ | ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 8))));
243
241
  if (chunk_offset < last_chunk_offset)
244
242
  return commit_graph_error("chunks are non-monotonic");
245
243
  if (chunk_offset >= trailer_offset)
@@ -308,12 +306,12 @@ int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir,
308
306
  cgraph = git__calloc(1, sizeof(git_commit_graph));
309
307
  GIT_ERROR_CHECK_ALLOC(cgraph);
310
308
 
311
- error = git_buf_joinpath(&cgraph->filename, objects_dir, "info/commit-graph");
309
+ error = git_str_joinpath(&cgraph->filename, objects_dir, "info/commit-graph");
312
310
  if (error < 0)
313
311
  goto error;
314
312
 
315
313
  if (open_file) {
316
- error = git_commit_graph_file_open(&cgraph->file, git_buf_cstr(&cgraph->filename));
314
+ error = git_commit_graph_file_open(&cgraph->file, git_str_cstr(&cgraph->filename));
317
315
  if (error < 0)
318
316
  goto error;
319
317
  cgraph->checked = 1;
@@ -327,9 +325,29 @@ error:
327
325
  return error;
328
326
  }
329
327
 
328
+ int git_commit_graph_validate(git_commit_graph *cgraph) {
329
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
330
+ size_t checksum_size = GIT_HASH_SHA1_SIZE;
331
+ size_t trailer_offset = cgraph->file->graph_map.len - checksum_size;
332
+
333
+ if (cgraph->file->graph_map.len < checksum_size)
334
+ return commit_graph_error("map length too small");
335
+
336
+ if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset, GIT_HASH_ALGORITHM_SHA1) < 0)
337
+ return commit_graph_error("could not calculate signature");
338
+ if (memcmp(checksum, cgraph->file->checksum, checksum_size) != 0)
339
+ return commit_graph_error("index signature mismatch");
340
+
341
+ return 0;
342
+ }
343
+
330
344
  int git_commit_graph_open(git_commit_graph **cgraph_out, const char *objects_dir)
331
345
  {
332
- return git_commit_graph_new(cgraph_out, objects_dir, true);
346
+ int error = git_commit_graph_new(cgraph_out, objects_dir, true);
347
+ if (!error) {
348
+ return git_commit_graph_validate(*cgraph_out);
349
+ }
350
+ return error;
333
351
  }
334
352
 
335
353
  int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path)
@@ -387,7 +405,7 @@ int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph
387
405
  cgraph->checked = 1;
388
406
 
389
407
  /* Best effort */
390
- error = git_commit_graph_file_open(&result, git_buf_cstr(&cgraph->filename));
408
+ error = git_commit_graph_file_open(&result, git_str_cstr(&cgraph->filename));
391
409
 
392
410
  if (error < 0)
393
411
  return error;
@@ -407,7 +425,7 @@ void git_commit_graph_refresh(git_commit_graph *cgraph)
407
425
  return;
408
426
 
409
427
  if (cgraph->file
410
- && git_commit_graph_file_needs_refresh(cgraph->file, git_buf_cstr(&cgraph->filename))) {
428
+ && git_commit_graph_file_needs_refresh(cgraph->file, git_str_cstr(&cgraph->filename))) {
411
429
  /* We just free the commit graph. The next time it is requested, it will be
412
430
  * re-loaded. */
413
431
  git_commit_graph_file_free(cgraph->file);
@@ -432,15 +450,15 @@ static int git_commit_graph_entry_get_byindex(
432
450
  return GIT_ENOTFOUND;
433
451
  }
434
452
 
435
- commit_data = file->commit_data + pos * (GIT_OID_RAWSZ + 4 * sizeof(uint32_t));
436
- git_oid_cpy(&e->tree_oid, (const git_oid *)commit_data);
437
- e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + GIT_OID_RAWSZ)));
453
+ commit_data = file->commit_data + pos * (GIT_OID_SHA1_SIZE + 4 * sizeof(uint32_t));
454
+ git_oid__fromraw(&e->tree_oid, commit_data, GIT_OID_SHA1);
455
+ e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE)));
438
456
  e->parent_indices[1] = ntohl(
439
- *((uint32_t *)(commit_data + GIT_OID_RAWSZ + sizeof(uint32_t))));
457
+ *((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + sizeof(uint32_t))));
440
458
  e->parent_count = (e->parent_indices[0] != GIT_COMMIT_GRAPH_MISSING_PARENT)
441
459
  + (e->parent_indices[1] != GIT_COMMIT_GRAPH_MISSING_PARENT);
442
- e->generation = ntohl(*((uint32_t *)(commit_data + GIT_OID_RAWSZ + 2 * sizeof(uint32_t))));
443
- e->commit_time = ntohl(*((uint32_t *)(commit_data + GIT_OID_RAWSZ + 3 * sizeof(uint32_t))));
460
+ e->generation = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 2 * sizeof(uint32_t))));
461
+ e->commit_time = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 3 * sizeof(uint32_t))));
444
462
 
445
463
  e->commit_time |= (e->generation & UINT64_C(0x3)) << UINT64_C(32);
446
464
  e->generation >>= 2u;
@@ -466,7 +484,8 @@ static int git_commit_graph_entry_get_byindex(
466
484
  e->parent_count++;
467
485
  }
468
486
  }
469
- git_oid_cpy(&e->sha1, &file->oid_lookup[pos]);
487
+
488
+ git_oid__fromraw(&e->sha1, &file->oid_lookup[pos * GIT_OID_SHA1_SIZE], GIT_OID_SHA1);
470
489
  return 0;
471
490
  }
472
491
 
@@ -475,7 +494,8 @@ bool git_commit_graph_file_needs_refresh(const git_commit_graph_file *file, cons
475
494
  git_file fd = -1;
476
495
  struct stat st;
477
496
  ssize_t bytes_read;
478
- git_oid cgraph_checksum = {{0}};
497
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
498
+ size_t checksum_size = GIT_HASH_SHA1_SIZE;
479
499
 
480
500
  /* TODO: properly open the file without access time using O_NOATIME */
481
501
  fd = git_futils_open_ro(path);
@@ -493,12 +513,12 @@ bool git_commit_graph_file_needs_refresh(const git_commit_graph_file *file, cons
493
513
  return true;
494
514
  }
495
515
 
496
- bytes_read = p_pread(fd, cgraph_checksum.id, GIT_OID_RAWSZ, st.st_size - GIT_OID_RAWSZ);
516
+ bytes_read = p_pread(fd, checksum, checksum_size, st.st_size - checksum_size);
497
517
  p_close(fd);
498
- if (bytes_read != GIT_OID_RAWSZ)
518
+ if (bytes_read != (ssize_t)checksum_size)
499
519
  return true;
500
520
 
501
- return !git_oid_equal(&cgraph_checksum, &file->checksum);
521
+ return (memcmp(checksum, file->checksum, checksum_size) != 0);
502
522
  }
503
523
 
504
524
  int git_commit_graph_entry_find(
@@ -509,7 +529,7 @@ int git_commit_graph_entry_find(
509
529
  {
510
530
  int pos, found = 0;
511
531
  uint32_t hi, lo;
512
- const git_oid *current = NULL;
532
+ const unsigned char *current = NULL;
513
533
 
514
534
  GIT_ASSERT_ARG(e);
515
535
  GIT_ASSERT_ARG(file);
@@ -518,31 +538,30 @@ int git_commit_graph_entry_find(
518
538
  hi = ntohl(file->oid_fanout[(int)short_oid->id[0]]);
519
539
  lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(file->oid_fanout[(int)short_oid->id[0] - 1]));
520
540
 
521
- pos = git_pack__lookup_sha1(file->oid_lookup, GIT_OID_RAWSZ, lo, hi, short_oid->id);
541
+ pos = git_pack__lookup_id(file->oid_lookup, GIT_OID_SHA1_SIZE, lo, hi, short_oid->id, GIT_OID_SHA1);
522
542
 
523
543
  if (pos >= 0) {
524
544
  /* An object matching exactly the oid was found */
525
545
  found = 1;
526
- current = file->oid_lookup + pos;
546
+ current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
527
547
  } else {
528
548
  /* No object was found */
529
549
  /* pos refers to the object with the "closest" oid to short_oid */
530
550
  pos = -1 - pos;
531
551
  if (pos < (int)file->num_commits) {
532
- current = file->oid_lookup + pos;
552
+ current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
533
553
 
534
- if (!git_oid_ncmp(short_oid, current, len))
554
+ if (!git_oid_raw_ncmp(short_oid->id, current, len))
535
555
  found = 1;
536
556
  }
537
557
  }
538
558
 
539
- if (found && len != GIT_OID_HEXSZ && pos + 1 < (int)file->num_commits) {
559
+ if (found && len != GIT_OID_SHA1_HEXSIZE && pos + 1 < (int)file->num_commits) {
540
560
  /* Check for ambiguousity */
541
- const git_oid *next = current + 1;
561
+ const unsigned char *next = current + GIT_OID_SHA1_SIZE;
542
562
 
543
- if (!git_oid_ncmp(short_oid, next, len)) {
563
+ if (!git_oid_raw_ncmp(short_oid->id, next, len))
544
564
  found = 2;
545
- }
546
565
  }
547
566
 
548
567
  if (!found)
@@ -597,7 +616,7 @@ void git_commit_graph_free(git_commit_graph *cgraph)
597
616
  if (!cgraph)
598
617
  return;
599
618
 
600
- git_buf_dispose(&cgraph->filename);
619
+ git_str_dispose(&cgraph->filename);
601
620
  git_commit_graph_file_free(cgraph->file);
602
621
  git__free(cgraph);
603
622
  }
@@ -623,13 +642,13 @@ int git_commit_graph_writer_new(git_commit_graph_writer **out, const char *objec
623
642
  git_commit_graph_writer *w = git__calloc(1, sizeof(git_commit_graph_writer));
624
643
  GIT_ERROR_CHECK_ALLOC(w);
625
644
 
626
- if (git_buf_sets(&w->objects_info_dir, objects_info_dir) < 0) {
645
+ if (git_str_sets(&w->objects_info_dir, objects_info_dir) < 0) {
627
646
  git__free(w);
628
647
  return -1;
629
648
  }
630
649
 
631
650
  if (git_vector_init(&w->commits, 0, packed_commit__cmp) < 0) {
632
- git_buf_dispose(&w->objects_info_dir);
651
+ git_str_dispose(&w->objects_info_dir);
633
652
  git__free(w);
634
653
  return -1;
635
654
  }
@@ -649,7 +668,7 @@ void git_commit_graph_writer_free(git_commit_graph_writer *w)
649
668
  git_vector_foreach (&w->commits, i, packed_commit)
650
669
  packed_commit_free(packed_commit);
651
670
  git_vector_free(&w->commits);
652
- git_buf_dispose(&w->objects_info_dir);
671
+ git_str_dispose(&w->objects_info_dir);
653
672
  git__free(w);
654
673
  }
655
674
 
@@ -707,7 +726,8 @@ int git_commit_graph_writer_add_index_file(
707
726
  if (error < 0)
708
727
  goto cleanup;
709
728
 
710
- error = git_mwindow_get_pack(&p, idx_path);
729
+ /* TODO: SHA256 */
730
+ error = git_mwindow_get_pack(&p, idx_path, 0);
711
731
  if (error < 0)
712
732
  goto cleanup;
713
733
 
@@ -753,7 +773,7 @@ enum generation_number_commit_state {
753
773
  GENERATION_NUMBER_COMMIT_STATE_UNVISITED = 0,
754
774
  GENERATION_NUMBER_COMMIT_STATE_ADDED = 1,
755
775
  GENERATION_NUMBER_COMMIT_STATE_EXPANDED = 2,
756
- GENERATION_NUMBER_COMMIT_STATE_VISITED = 3,
776
+ GENERATION_NUMBER_COMMIT_STATE_VISITED = 3
757
777
  };
758
778
 
759
779
  static int compute_generation_numbers(git_vector *commits)
@@ -931,8 +951,8 @@ static int write_chunk_header(
931
951
 
932
952
  static int commit_graph_write_buf(const char *buf, size_t size, void *data)
933
953
  {
934
- git_buf *b = (git_buf *)data;
935
- return git_buf_put(b, buf, size);
954
+ git_str *b = (git_str *)data;
955
+ return git_str_put(b, buf, size);
936
956
  }
937
957
 
938
958
  struct commit_graph_write_hash_context {
@@ -971,9 +991,10 @@ static int commit_graph_write(
971
991
  uint32_t extra_edge_list_count;
972
992
  uint32_t oid_fanout[256];
973
993
  off64_t offset;
974
- git_buf oid_lookup = GIT_BUF_INIT, commit_data = GIT_BUF_INIT,
975
- extra_edge_list = GIT_BUF_INIT;
976
- git_oid cgraph_checksum = {{0}};
994
+ git_str oid_lookup = GIT_STR_INIT, commit_data = GIT_STR_INIT,
995
+ extra_edge_list = GIT_STR_INIT;
996
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
997
+ size_t checksum_size;
977
998
  git_hash_ctx ctx;
978
999
  struct commit_graph_write_hash_context hash_cb_data = {0};
979
1000
 
@@ -986,7 +1007,8 @@ static int commit_graph_write(
986
1007
  hash_cb_data.cb_data = cb_data;
987
1008
  hash_cb_data.ctx = &ctx;
988
1009
 
989
- error = git_hash_ctx_init(&ctx);
1010
+ checksum_size = GIT_HASH_SHA1_SIZE;
1011
+ error = git_hash_ctx_init(&ctx, GIT_HASH_ALGORITHM_SHA1);
990
1012
  if (error < 0)
991
1013
  return error;
992
1014
  cb_data = &hash_cb_data;
@@ -1011,8 +1033,10 @@ static int commit_graph_write(
1011
1033
 
1012
1034
  /* Fill the OID Lookup table. */
1013
1035
  git_vector_foreach (&w->commits, i, packed_commit) {
1014
- error = git_buf_put(&oid_lookup,
1015
- (const char *)&packed_commit->sha1, sizeof(git_oid));
1036
+ error = git_str_put(&oid_lookup,
1037
+ (const char *)&packed_commit->sha1.id,
1038
+ GIT_OID_SHA1_SIZE);
1039
+
1016
1040
  if (error < 0)
1017
1041
  goto cleanup;
1018
1042
  }
@@ -1026,9 +1050,10 @@ static int commit_graph_write(
1026
1050
  size_t *packed_index;
1027
1051
  unsigned int parentcount = (unsigned int)git_array_size(packed_commit->parents);
1028
1052
 
1029
- error = git_buf_put(&commit_data,
1030
- (const char *)&packed_commit->tree_oid,
1031
- sizeof(git_oid));
1053
+ error = git_str_put(&commit_data,
1054
+ (const char *)&packed_commit->tree_oid.id,
1055
+ GIT_OID_SHA1_SIZE);
1056
+
1032
1057
  if (error < 0)
1033
1058
  goto cleanup;
1034
1059
 
@@ -1038,7 +1063,7 @@ static int commit_graph_write(
1038
1063
  packed_index = git_array_get(packed_commit->parent_indices, 0);
1039
1064
  word = htonl((uint32_t)*packed_index);
1040
1065
  }
1041
- error = git_buf_put(&commit_data, (const char *)&word, sizeof(word));
1066
+ error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
1042
1067
  if (error < 0)
1043
1068
  goto cleanup;
1044
1069
 
@@ -1050,7 +1075,7 @@ static int commit_graph_write(
1050
1075
  } else {
1051
1076
  word = htonl(0x80000000u | extra_edge_list_count);
1052
1077
  }
1053
- error = git_buf_put(&commit_data, (const char *)&word, sizeof(word));
1078
+ error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
1054
1079
  if (error < 0)
1055
1080
  goto cleanup;
1056
1081
 
@@ -1061,7 +1086,7 @@ static int commit_graph_write(
1061
1086
  packed_commit->parent_indices, parent_i);
1062
1087
  word = htonl((uint32_t)(*packed_index | (parent_i + 1 == parentcount ? 0x80000000u : 0)));
1063
1088
 
1064
- error = git_buf_put(&extra_edge_list,
1089
+ error = git_str_put(&extra_edge_list,
1065
1090
  (const char *)&word,
1066
1091
  sizeof(word));
1067
1092
  if (error < 0)
@@ -1074,19 +1099,19 @@ static int commit_graph_write(
1074
1099
  commit_time = (uint64_t)packed_commit->commit_time;
1075
1100
  if (generation > GIT_COMMIT_GRAPH_GENERATION_NUMBER_MAX)
1076
1101
  generation = GIT_COMMIT_GRAPH_GENERATION_NUMBER_MAX;
1077
- word = ntohl((uint32_t)((generation << 2) | ((commit_time >> 32ull) & 0x3ull)));
1078
- error = git_buf_put(&commit_data, (const char *)&word, sizeof(word));
1102
+ word = ntohl((uint32_t)((generation << 2) | (((uint32_t)(commit_time >> 32)) & 0x3) ));
1103
+ error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
1079
1104
  if (error < 0)
1080
1105
  goto cleanup;
1081
- word = ntohl((uint32_t)(commit_time & 0xffffffffull));
1082
- error = git_buf_put(&commit_data, (const char *)&word, sizeof(word));
1106
+ word = ntohl((uint32_t)(commit_time & 0xfffffffful));
1107
+ error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
1083
1108
  if (error < 0)
1084
1109
  goto cleanup;
1085
1110
  }
1086
1111
 
1087
1112
  /* Write the header. */
1088
1113
  hdr.chunks = 3;
1089
- if (git_buf_len(&extra_edge_list) > 0)
1114
+ if (git_str_len(&extra_edge_list) > 0)
1090
1115
  hdr.chunks++;
1091
1116
  error = write_cb((const char *)&hdr, sizeof(hdr), cb_data);
1092
1117
  if (error < 0)
@@ -1101,17 +1126,17 @@ static int commit_graph_write(
1101
1126
  error = write_chunk_header(COMMIT_GRAPH_OID_LOOKUP_ID, offset, write_cb, cb_data);
1102
1127
  if (error < 0)
1103
1128
  goto cleanup;
1104
- offset += git_buf_len(&oid_lookup);
1129
+ offset += git_str_len(&oid_lookup);
1105
1130
  error = write_chunk_header(COMMIT_GRAPH_COMMIT_DATA_ID, offset, write_cb, cb_data);
1106
1131
  if (error < 0)
1107
1132
  goto cleanup;
1108
- offset += git_buf_len(&commit_data);
1109
- if (git_buf_len(&extra_edge_list) > 0) {
1133
+ offset += git_str_len(&commit_data);
1134
+ if (git_str_len(&extra_edge_list) > 0) {
1110
1135
  error = write_chunk_header(
1111
1136
  COMMIT_GRAPH_EXTRA_EDGE_LIST_ID, offset, write_cb, cb_data);
1112
1137
  if (error < 0)
1113
1138
  goto cleanup;
1114
- offset += git_buf_len(&extra_edge_list);
1139
+ offset += git_str_len(&extra_edge_list);
1115
1140
  }
1116
1141
  error = write_chunk_header(0, offset, write_cb, cb_data);
1117
1142
  if (error < 0)
@@ -1121,28 +1146,28 @@ static int commit_graph_write(
1121
1146
  error = write_cb((const char *)oid_fanout, sizeof(oid_fanout), cb_data);
1122
1147
  if (error < 0)
1123
1148
  goto cleanup;
1124
- error = write_cb(git_buf_cstr(&oid_lookup), git_buf_len(&oid_lookup), cb_data);
1149
+ error = write_cb(git_str_cstr(&oid_lookup), git_str_len(&oid_lookup), cb_data);
1125
1150
  if (error < 0)
1126
1151
  goto cleanup;
1127
- error = write_cb(git_buf_cstr(&commit_data), git_buf_len(&commit_data), cb_data);
1152
+ error = write_cb(git_str_cstr(&commit_data), git_str_len(&commit_data), cb_data);
1128
1153
  if (error < 0)
1129
1154
  goto cleanup;
1130
- error = write_cb(git_buf_cstr(&extra_edge_list), git_buf_len(&extra_edge_list), cb_data);
1155
+ error = write_cb(git_str_cstr(&extra_edge_list), git_str_len(&extra_edge_list), cb_data);
1131
1156
  if (error < 0)
1132
1157
  goto cleanup;
1133
1158
 
1134
1159
  /* Finalize the checksum and write the trailer. */
1135
- error = git_hash_final(&cgraph_checksum, &ctx);
1160
+ error = git_hash_final(checksum, &ctx);
1136
1161
  if (error < 0)
1137
1162
  goto cleanup;
1138
- error = write_cb((const char *)&cgraph_checksum, sizeof(cgraph_checksum), cb_data);
1163
+ error = write_cb((char *)checksum, checksum_size, cb_data);
1139
1164
  if (error < 0)
1140
1165
  goto cleanup;
1141
1166
 
1142
1167
  cleanup:
1143
- git_buf_dispose(&oid_lookup);
1144
- git_buf_dispose(&commit_data);
1145
- git_buf_dispose(&extra_edge_list);
1168
+ git_str_dispose(&oid_lookup);
1169
+ git_str_dispose(&commit_data);
1170
+ git_str_dispose(&extra_edge_list);
1146
1171
  git_hash_ctx_cleanup(&ctx);
1147
1172
  return error;
1148
1173
  }
@@ -1171,21 +1196,21 @@ int git_commit_graph_writer_commit(
1171
1196
  {
1172
1197
  int error;
1173
1198
  int filebuf_flags = GIT_FILEBUF_DO_NOT_BUFFER;
1174
- git_buf commit_graph_path = GIT_BUF_INIT;
1199
+ git_str commit_graph_path = GIT_STR_INIT;
1175
1200
  git_filebuf output = GIT_FILEBUF_INIT;
1176
1201
 
1177
1202
  /* TODO: support options and fill in defaults. */
1178
1203
  GIT_UNUSED(opts);
1179
1204
 
1180
- error = git_buf_joinpath(
1181
- &commit_graph_path, git_buf_cstr(&w->objects_info_dir), "commit-graph");
1205
+ error = git_str_joinpath(
1206
+ &commit_graph_path, git_str_cstr(&w->objects_info_dir), "commit-graph");
1182
1207
  if (error < 0)
1183
1208
  return error;
1184
1209
 
1185
1210
  if (git_repository__fsync_gitdir)
1186
1211
  filebuf_flags |= GIT_FILEBUF_FSYNC;
1187
- error = git_filebuf_open(&output, git_buf_cstr(&commit_graph_path), filebuf_flags, 0644);
1188
- git_buf_dispose(&commit_graph_path);
1212
+ error = git_filebuf_open(&output, git_str_cstr(&commit_graph_path), filebuf_flags, 0644);
1213
+ git_str_dispose(&commit_graph_path);
1189
1214
  if (error < 0)
1190
1215
  return error;
1191
1216
 
@@ -1199,9 +1224,17 @@ int git_commit_graph_writer_commit(
1199
1224
  }
1200
1225
 
1201
1226
  int git_commit_graph_writer_dump(
1202
- git_buf *cgraph,
1203
- git_commit_graph_writer *w,
1204
- git_commit_graph_writer_options *opts)
1227
+ git_buf *cgraph,
1228
+ git_commit_graph_writer *w,
1229
+ git_commit_graph_writer_options *opts)
1230
+ {
1231
+ GIT_BUF_WRAP_PRIVATE(cgraph, git_commit_graph__writer_dump, w, opts);
1232
+ }
1233
+
1234
+ int git_commit_graph__writer_dump(
1235
+ git_str *cgraph,
1236
+ git_commit_graph_writer *w,
1237
+ git_commit_graph_writer_options *opts)
1205
1238
  {
1206
1239
  /* TODO: support options. */
1207
1240
  GIT_UNUSED(opts);
@@ -15,6 +15,8 @@
15
15
 
16
16
  #include "map.h"
17
17
  #include "vector.h"
18
+ #include "oid.h"
19
+ #include "hash.h"
18
20
 
19
21
  /**
20
22
  * A commit-graph file.
@@ -34,7 +36,7 @@ typedef struct git_commit_graph_file {
34
36
  uint32_t num_commits;
35
37
 
36
38
  /* The OID Lookup table. */
37
- git_oid *oid_lookup;
39
+ unsigned char *oid_lookup;
38
40
 
39
41
  /*
40
42
  * The Commit Data table. Each entry contains the OID of the commit followed
@@ -55,7 +57,7 @@ typedef struct git_commit_graph_file {
55
57
  size_t num_extra_edge_list;
56
58
 
57
59
  /* The trailer of the file. Contains the SHA1-checksum of the whole file. */
58
- git_oid checksum;
60
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
59
61
  } git_commit_graph_file;
60
62
 
61
63
  /**
@@ -92,7 +94,7 @@ typedef struct git_commit_graph_entry {
92
94
  /* A wrapper for git_commit_graph_file to enable lazy loading in the ODB. */
93
95
  struct git_commit_graph {
94
96
  /* The path to the commit-graph file. Something like ".git/objects/info/commit-graph". */
95
- git_buf filename;
97
+ git_str filename;
96
98
 
97
99
  /* The underlying commit-graph file. */
98
100
  git_commit_graph_file *file;
@@ -104,6 +106,9 @@ struct git_commit_graph {
104
106
  /** Create a new commit-graph, optionally opening the underlying file. */
105
107
  int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file);
106
108
 
109
+ /** Validate the checksum of a commit graph */
110
+ int git_commit_graph_validate(git_commit_graph *cgraph);
111
+
107
112
  /** Open and validate a commit-graph file. */
108
113
  int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path);
109
114
 
@@ -127,12 +132,17 @@ struct git_commit_graph_writer {
127
132
  * The path of the `objects/info` directory where the `commit-graph` will be
128
133
  * stored.
129
134
  */
130
- git_buf objects_info_dir;
135
+ git_str objects_info_dir;
131
136
 
132
137
  /* The list of packed commits. */
133
138
  git_vector commits;
134
139
  };
135
140
 
141
+ int git_commit_graph__writer_dump(
142
+ git_str *cgraph,
143
+ git_commit_graph_writer *w,
144
+ git_commit_graph_writer_options *opts);
145
+
136
146
  /*
137
147
  * Returns whether the git_commit_graph_file needs to be reloaded since the
138
148
  * contents of the commit-graph file have changed on disk.
@@ -124,16 +124,19 @@ static int commit_quick_parse(
124
124
  {
125
125
  git_oid *parent_oid;
126
126
  git_commit *commit;
127
- int error;
127
+ git_commit__parse_options parse_opts = {
128
+ GIT_OID_SHA1,
129
+ GIT_COMMIT_PARSE_QUICK
130
+ };
128
131
  size_t i;
129
132
 
130
133
  commit = git__calloc(1, sizeof(*commit));
131
134
  GIT_ERROR_CHECK_ALLOC(commit);
132
135
  commit->object.repo = walk->repo;
133
136
 
134
- if ((error = git_commit__parse_ext(commit, obj, GIT_COMMIT_PARSE_QUICK)) < 0) {
137
+ if (git_commit__parse_ext(commit, obj, &parse_opts) < 0) {
135
138
  git__free(commit);
136
- return error;
139
+ return -1;
137
140
  }
138
141
 
139
142
  if (!git__is_uint16(git_array_size(commit->parent_ids))) {
@@ -173,7 +176,7 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
173
176
  if (cgraph_file) {
174
177
  git_commit_graph_entry e;
175
178
 
176
- error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid, GIT_OID_RAWSZ);
179
+ error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid, GIT_OID_SHA1_SIZE);
177
180
  if (error == 0 && git__is_uint16(e.parent_count)) {
178
181
  size_t i;
179
182
  commit->generation = (uint32_t)e.generation;
@@ -0,0 +1,55 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_common_h__
8
+ #define INCLUDE_common_h__
9
+
10
+ #include "git2_util.h"
11
+ #include "errors.h"
12
+
13
+ /*
14
+ * Include the declarations for deprecated functions; this ensures
15
+ * that they're decorated with the proper extern/visibility attributes.
16
+ */
17
+ #include "git2/deprecated.h"
18
+
19
+ #include "posix.h"
20
+
21
+ /**
22
+ * Initialize a structure with a version.
23
+ */
24
+ GIT_INLINE(void) git__init_structure(void *structure, size_t len, unsigned int version)
25
+ {
26
+ memset(structure, 0, len);
27
+ *((int*)structure) = version;
28
+ }
29
+ #define GIT_INIT_STRUCTURE(S,V) git__init_structure(S, sizeof(*S), V)
30
+
31
+ #define GIT_INIT_STRUCTURE_FROM_TEMPLATE(PTR,VERSION,TYPE,TPL) do { \
32
+ TYPE _tmpl = TPL; \
33
+ GIT_ERROR_CHECK_VERSION(&(VERSION), _tmpl.version, #TYPE); \
34
+ memcpy((PTR), &_tmpl, sizeof(_tmpl)); } while (0)
35
+
36
+ /**
37
+ * Check a versioned structure for validity
38
+ */
39
+ GIT_INLINE(int) git_error__check_version(const void *structure, unsigned int expected_max, const char *name)
40
+ {
41
+ unsigned int actual;
42
+
43
+ if (!structure)
44
+ return 0;
45
+
46
+ actual = *(const unsigned int*)structure;
47
+ if (actual > 0 && actual <= expected_max)
48
+ return 0;
49
+
50
+ git_error_set(GIT_ERROR_INVALID, "invalid version %d on %s", actual, name);
51
+ return -1;
52
+ }
53
+ #define GIT_ERROR_CHECK_VERSION(S,V,N) if (git_error__check_version(S,V,N) < 0) return -1
54
+
55
+ #endif