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
@@ -42,20 +42,22 @@ struct git_indexer {
42
42
  have_delta :1,
43
43
  do_fsync :1,
44
44
  do_verify :1;
45
+ git_oid_t oid_type;
45
46
  struct git_pack_header hdr;
46
47
  struct git_pack_file *pack;
47
48
  unsigned int mode;
48
49
  off64_t off;
49
50
  off64_t entry_start;
50
51
  git_object_t entry_type;
51
- git_buf entry_data;
52
+ git_str entry_data;
52
53
  git_packfile_stream stream;
53
54
  size_t nr_objects;
54
55
  git_vector objects;
55
56
  git_vector deltas;
56
57
  unsigned int fanout[256];
57
58
  git_hash_ctx hash_ctx;
58
- git_oid hash;
59
+ unsigned char checksum[GIT_HASH_MAX_SIZE];
60
+ char name[(GIT_HASH_MAX_SIZE * 2) + 1];
59
61
  git_indexer_progress_cb progress_cb;
60
62
  void *progress_payload;
61
63
  char objbuf[8*1024];
@@ -67,7 +69,7 @@ struct git_indexer {
67
69
  git_odb *odb;
68
70
 
69
71
  /* Fields for calculating the packfile trailer (hash of everything before it) */
70
- char inbuf[GIT_OID_RAWSZ];
72
+ char inbuf[GIT_HASH_MAX_SIZE];
71
73
  size_t inbuf_len;
72
74
  git_hash_ctx trailer;
73
75
  };
@@ -76,9 +78,16 @@ struct delta_info {
76
78
  off64_t delta_off;
77
79
  };
78
80
 
81
+ #ifndef GIT_DEPRECATE_HARD
79
82
  const git_oid *git_indexer_hash(const git_indexer *idx)
80
83
  {
81
- return &idx->hash;
84
+ return (git_oid *)idx->checksum;
85
+ }
86
+ #endif
87
+
88
+ const char *git_indexer_name(const git_indexer *idx)
89
+ {
90
+ return idx->name;
82
91
  }
83
92
 
84
93
  static int parse_header(struct git_pack_header *hdr, struct git_pack_file *pack)
@@ -128,17 +137,33 @@ int git_indexer_init_options(git_indexer_options *opts, unsigned int version)
128
137
  }
129
138
  #endif
130
139
 
131
- int git_indexer_new(
132
- git_indexer **out,
133
- const char *prefix,
134
- unsigned int mode,
135
- git_odb *odb,
136
- git_indexer_options *in_opts)
140
+ GIT_INLINE(git_hash_algorithm_t) indexer_hash_algorithm(git_indexer *idx)
141
+ {
142
+ switch (idx->oid_type) {
143
+ case GIT_OID_SHA1:
144
+ return GIT_HASH_ALGORITHM_SHA1;
145
+ #ifdef GIT_EXPERIMENTAL_SHA256
146
+ case GIT_OID_SHA256:
147
+ return GIT_HASH_ALGORITHM_SHA256;
148
+ #endif
149
+ }
150
+
151
+ return GIT_HASH_ALGORITHM_NONE;
152
+ }
153
+
154
+ static int indexer_new(
155
+ git_indexer **out,
156
+ const char *prefix,
157
+ git_oid_t oid_type,
158
+ unsigned int mode,
159
+ git_odb *odb,
160
+ git_indexer_options *in_opts)
137
161
  {
138
162
  git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
139
163
  git_indexer *idx;
140
- git_buf path = GIT_BUF_INIT, tmp_path = GIT_BUF_INIT;
164
+ git_str path = GIT_STR_INIT, tmp_path = GIT_STR_INIT;
141
165
  static const char suff[] = "/pack";
166
+ git_hash_algorithm_t checksum_type;
142
167
  int error, fd = -1;
143
168
 
144
169
  if (in_opts)
@@ -146,14 +171,17 @@ int git_indexer_new(
146
171
 
147
172
  idx = git__calloc(1, sizeof(git_indexer));
148
173
  GIT_ERROR_CHECK_ALLOC(idx);
174
+ idx->oid_type = oid_type;
149
175
  idx->odb = odb;
150
176
  idx->progress_cb = opts.progress_cb;
151
177
  idx->progress_payload = opts.progress_cb_payload;
152
178
  idx->mode = mode ? mode : GIT_PACK_FILE_MODE;
153
- git_buf_init(&idx->entry_data, 0);
179
+ git_str_init(&idx->entry_data, 0);
180
+
181
+ checksum_type = indexer_hash_algorithm(idx);
154
182
 
155
- if ((error = git_hash_ctx_init(&idx->hash_ctx)) < 0 ||
156
- (error = git_hash_ctx_init(&idx->trailer)) < 0 ||
183
+ if ((error = git_hash_ctx_init(&idx->hash_ctx, checksum_type)) < 0 ||
184
+ (error = git_hash_ctx_init(&idx->trailer, checksum_type)) < 0 ||
157
185
  (error = git_oidmap_new(&idx->expected_oids)) < 0)
158
186
  goto cleanup;
159
187
 
@@ -162,17 +190,17 @@ int git_indexer_new(
162
190
  if (git_repository__fsync_gitdir)
163
191
  idx->do_fsync = 1;
164
192
 
165
- error = git_buf_joinpath(&path, prefix, suff);
193
+ error = git_str_joinpath(&path, prefix, suff);
166
194
  if (error < 0)
167
195
  goto cleanup;
168
196
 
169
- fd = git_futils_mktmp(&tmp_path, git_buf_cstr(&path), idx->mode);
170
- git_buf_dispose(&path);
197
+ fd = git_futils_mktmp(&tmp_path, git_str_cstr(&path), idx->mode);
198
+ git_str_dispose(&path);
171
199
  if (fd < 0)
172
200
  goto cleanup;
173
201
 
174
- error = git_packfile_alloc(&idx->pack, git_buf_cstr(&tmp_path));
175
- git_buf_dispose(&tmp_path);
202
+ error = git_packfile_alloc(&idx->pack, git_str_cstr(&tmp_path), oid_type);
203
+ git_str_dispose(&tmp_path);
176
204
 
177
205
  if (error < 0)
178
206
  goto cleanup;
@@ -188,18 +216,45 @@ cleanup:
188
216
  if (fd != -1)
189
217
  p_close(fd);
190
218
 
191
- if (git_buf_len(&tmp_path) > 0)
192
- p_unlink(git_buf_cstr(&tmp_path));
219
+ if (git_str_len(&tmp_path) > 0)
220
+ p_unlink(git_str_cstr(&tmp_path));
193
221
 
194
222
  if (idx->pack != NULL)
195
223
  p_unlink(idx->pack->pack_name);
196
224
 
197
- git_buf_dispose(&path);
198
- git_buf_dispose(&tmp_path);
225
+ git_str_dispose(&path);
226
+ git_str_dispose(&tmp_path);
199
227
  git__free(idx);
200
228
  return -1;
201
229
  }
202
230
 
231
+ #ifdef GIT_EXPERIMENTAL_SHA256
232
+ int git_indexer_new(
233
+ git_indexer **out,
234
+ const char *prefix,
235
+ git_oid_t oid_type,
236
+ git_indexer_options *opts)
237
+ {
238
+ return indexer_new(
239
+ out,
240
+ prefix,
241
+ oid_type,
242
+ opts ? opts->mode : 0,
243
+ opts ? opts->odb : NULL,
244
+ opts);
245
+ }
246
+ #else
247
+ int git_indexer_new(
248
+ git_indexer **out,
249
+ const char *prefix,
250
+ unsigned int mode,
251
+ git_odb *odb,
252
+ git_indexer_options *opts)
253
+ {
254
+ return indexer_new(out, prefix, GIT_OID_SHA1, mode, odb, opts);
255
+ }
256
+ #endif
257
+
203
258
  void git_indexer__set_fsync(git_indexer *idx, int do_fsync)
204
259
  {
205
260
  idx->do_fsync = !!do_fsync;
@@ -245,7 +300,7 @@ static int hash_object_stream(git_indexer*idx, git_packfile_stream *stream)
245
300
  break;
246
301
 
247
302
  if (idx->do_verify)
248
- git_buf_put(&idx->entry_data, idx->objbuf, read);
303
+ git_str_put(&idx->entry_data, idx->objbuf, read);
249
304
 
250
305
  git_hash_update(&idx->hash_ctx, idx->objbuf, read);
251
306
  } while (read > 0);
@@ -264,7 +319,7 @@ static int advance_delta_offset(git_indexer *idx, git_object_t type)
264
319
  GIT_ASSERT_ARG(type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA);
265
320
 
266
321
  if (type == GIT_OBJECT_REF_DELTA) {
267
- idx->off += GIT_OID_RAWSZ;
322
+ idx->off += git_oid_size(idx->oid_type);
268
323
  } else {
269
324
  off64_t base_off;
270
325
  int error = get_delta_base(&base_off, idx->pack, &w, &idx->off, type, idx->entry_start);
@@ -340,7 +395,7 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
340
395
  {
341
396
  git_object *object;
342
397
  git_oid *expected;
343
- int error;
398
+ int error = 0;
344
399
 
345
400
  if (obj->type != GIT_OBJECT_BLOB &&
346
401
  obj->type != GIT_OBJECT_TREE &&
@@ -348,8 +403,14 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
348
403
  obj->type != GIT_OBJECT_TAG)
349
404
  return 0;
350
405
 
351
- if ((error = git_object__from_raw(&object, obj->data, obj->len, obj->type)) < 0)
406
+ if (git_object__from_raw(&object, obj->data, obj->len, obj->type, idx->oid_type) < 0) {
407
+ /*
408
+ * parse_raw returns EINVALID on invalid data; downgrade
409
+ * that to a normal -1 error code.
410
+ */
411
+ error = -1;
352
412
  goto out;
413
+ }
353
414
 
354
415
  if ((expected = git_oidmap_get(idx->expected_oids, &object->cached.oid)) != NULL) {
355
416
  git_oidmap_delete(idx->expected_oids, &object->cached.oid);
@@ -371,7 +432,7 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
371
432
  size_t i;
372
433
 
373
434
  git_array_foreach(tree->entries, i, entry)
374
- if (add_expected_oid(idx, entry->oid) < 0)
435
+ if (add_expected_oid(idx, &entry->oid) < 0)
375
436
  goto out;
376
437
 
377
438
  break;
@@ -426,10 +487,15 @@ static int store_object(git_indexer *idx)
426
487
  pentry = git__calloc(1, sizeof(struct git_pack_entry));
427
488
  GIT_ERROR_CHECK_ALLOC(pentry);
428
489
 
429
- if (git_hash_final(&oid, &idx->hash_ctx)) {
490
+ if (git_hash_final(oid.id, &idx->hash_ctx)) {
430
491
  git__free(pentry);
431
492
  goto on_error;
432
493
  }
494
+
495
+ #ifdef GIT_EXPERIMENTAL_SHA256
496
+ oid.type = idx->oid_type;
497
+ #endif
498
+
433
499
  entry_size = idx->off - entry_start;
434
500
  if (entry_start > UINT31_MAX) {
435
501
  entry->offset = UINT32_MAX;
@@ -449,16 +515,16 @@ static int store_object(git_indexer *idx)
449
515
  goto on_error;
450
516
  }
451
517
 
452
- git_oid_cpy(&pentry->sha1, &oid);
518
+ git_oid_cpy(&pentry->id, &oid);
453
519
  pentry->offset = entry_start;
454
520
 
455
- if (git_oidmap_exists(idx->pack->idx_cache, &pentry->sha1)) {
456
- git_error_set(GIT_ERROR_INDEXER, "duplicate object %s found in pack", git_oid_tostr_s(&pentry->sha1));
521
+ if (git_oidmap_exists(idx->pack->idx_cache, &pentry->id)) {
522
+ git_error_set(GIT_ERROR_INDEXER, "duplicate object %s found in pack", git_oid_tostr_s(&pentry->id));
457
523
  git__free(pentry);
458
524
  goto on_error;
459
525
  }
460
526
 
461
- if ((error = git_oidmap_set(idx->pack->idx_cache, &pentry->sha1, pentry)) < 0) {
527
+ if ((error = git_oidmap_set(idx->pack->idx_cache, &pentry->id, pentry)) < 0) {
462
528
  git__free(pentry);
463
529
  git_error_set_oom();
464
530
  goto on_error;
@@ -503,8 +569,8 @@ static int save_entry(git_indexer *idx, struct entry *entry, struct git_pack_ent
503
569
 
504
570
  pentry->offset = entry_start;
505
571
 
506
- if (git_oidmap_exists(idx->pack->idx_cache, &pentry->sha1) ||
507
- git_oidmap_set(idx->pack->idx_cache, &pentry->sha1, pentry) < 0) {
572
+ if (git_oidmap_exists(idx->pack->idx_cache, &pentry->id) ||
573
+ git_oidmap_set(idx->pack->idx_cache, &pentry->id, pentry) < 0) {
508
574
  git_error_set(GIT_ERROR_INDEXER, "cannot insert object into pack");
509
575
  return -1;
510
576
  }
@@ -530,7 +596,7 @@ static int hash_and_save(git_indexer *idx, git_rawobj *obj, off64_t entry_start)
530
596
  entry = git__calloc(1, sizeof(*entry));
531
597
  GIT_ERROR_CHECK_ALLOC(entry);
532
598
 
533
- if (git_odb__hashobj(&oid, obj) < 0) {
599
+ if (git_odb__hashobj(&oid, obj, idx->oid_type) < 0) {
534
600
  git_error_set(GIT_ERROR_INDEXER, "failed to hash object");
535
601
  goto on_error;
536
602
  }
@@ -538,7 +604,7 @@ static int hash_and_save(git_indexer *idx, git_rawobj *obj, off64_t entry_start)
538
604
  pentry = git__calloc(1, sizeof(struct git_pack_entry));
539
605
  GIT_ERROR_CHECK_ALLOC(pentry);
540
606
 
541
- git_oid_cpy(&pentry->sha1, &oid);
607
+ git_oid_cpy(&pentry->id, &oid);
542
608
  git_oid_cpy(&entry->oid, &oid);
543
609
  entry->crc = crc32(0L, Z_NULL, 0);
544
610
 
@@ -564,34 +630,38 @@ static int do_progress_callback(git_indexer *idx, git_indexer_progress *stats)
564
630
  return 0;
565
631
  }
566
632
 
567
- /* Hash everything but the last 20B of input */
633
+ /* Hash everything but the checksum trailer */
568
634
  static void hash_partially(git_indexer *idx, const uint8_t *data, size_t size)
569
635
  {
570
636
  size_t to_expell, to_keep;
637
+ size_t oid_size = git_oid_size(idx->oid_type);
571
638
 
572
639
  if (size == 0)
573
640
  return;
574
641
 
575
- /* Easy case, dump the buffer and the data minus the last 20 bytes */
576
- if (size >= GIT_OID_RAWSZ) {
642
+ /*
643
+ * Easy case, dump the buffer and the data minus the trailing
644
+ * checksum (SHA1 or SHA256).
645
+ */
646
+ if (size >= oid_size) {
577
647
  git_hash_update(&idx->trailer, idx->inbuf, idx->inbuf_len);
578
- git_hash_update(&idx->trailer, data, size - GIT_OID_RAWSZ);
648
+ git_hash_update(&idx->trailer, data, size - oid_size);
579
649
 
580
- data += size - GIT_OID_RAWSZ;
581
- memcpy(idx->inbuf, data, GIT_OID_RAWSZ);
582
- idx->inbuf_len = GIT_OID_RAWSZ;
650
+ data += size - oid_size;
651
+ memcpy(idx->inbuf, data, oid_size);
652
+ idx->inbuf_len = oid_size;
583
653
  return;
584
654
  }
585
655
 
586
656
  /* We can just append */
587
- if (idx->inbuf_len + size <= GIT_OID_RAWSZ) {
657
+ if (idx->inbuf_len + size <= oid_size) {
588
658
  memcpy(idx->inbuf + idx->inbuf_len, data, size);
589
659
  idx->inbuf_len += size;
590
660
  return;
591
661
  }
592
662
 
593
663
  /* We need to partially drain the buffer and then append */
594
- to_keep = GIT_OID_RAWSZ - size;
664
+ to_keep = oid_size - size;
595
665
  to_expell = idx->inbuf_len - to_keep;
596
666
 
597
667
  git_hash_update(&idx->trailer, idx->inbuf, to_expell);
@@ -710,12 +780,14 @@ static int read_stream_object(git_indexer *idx, git_indexer_progress *stats)
710
780
  {
711
781
  git_packfile_stream *stream = &idx->stream;
712
782
  off64_t entry_start = idx->off;
713
- size_t entry_size;
783
+ size_t oid_size, entry_size;
714
784
  git_object_t type;
715
785
  git_mwindow *w = NULL;
716
786
  int error;
717
787
 
718
- if (idx->pack->mwf.size <= idx->off + 20)
788
+ oid_size = git_oid_size(idx->oid_type);
789
+
790
+ if (idx->pack->mwf.size <= idx->off + (long long)oid_size)
719
791
  return GIT_EBUFS;
720
792
 
721
793
  if (!idx->have_stream) {
@@ -730,7 +802,7 @@ static int read_stream_object(git_indexer *idx, git_indexer_progress *stats)
730
802
  git_mwindow_close(&w);
731
803
  idx->entry_start = entry_start;
732
804
  git_hash_init(&idx->hash_ctx);
733
- git_buf_clear(&idx->entry_data);
805
+ git_str_clear(&idx->entry_data);
734
806
 
735
807
  if (type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA) {
736
808
  error = advance_delta_offset(idx, type);
@@ -876,7 +948,7 @@ on_error:
876
948
  return error;
877
949
  }
878
950
 
879
- static int index_path(git_buf *path, git_indexer *idx, const char *suffix)
951
+ static int index_path(git_str *path, git_indexer *idx, const char *suffix)
880
952
  {
881
953
  const char prefix[] = "pack-";
882
954
  size_t slash = (size_t)path->size;
@@ -885,17 +957,16 @@ static int index_path(git_buf *path, git_indexer *idx, const char *suffix)
885
957
  while (slash > 0 && path->ptr[slash - 1] != '/')
886
958
  slash--;
887
959
 
888
- if (git_buf_grow(path, slash + 1 + strlen(prefix) +
889
- GIT_OID_HEXSZ + strlen(suffix) + 1) < 0)
960
+ if (git_str_grow(path, slash + 1 + strlen(prefix) +
961
+ git_oid_hexsize(idx->oid_type) + strlen(suffix) + 1) < 0)
890
962
  return -1;
891
963
 
892
- git_buf_truncate(path, slash);
893
- git_buf_puts(path, prefix);
894
- git_oid_fmt(path->ptr + git_buf_len(path), &idx->hash);
895
- path->size += GIT_OID_HEXSZ;
896
- git_buf_puts(path, suffix);
964
+ git_str_truncate(path, slash);
965
+ git_str_puts(path, prefix);
966
+ git_str_puts(path, idx->name);
967
+ git_str_puts(path, suffix);
897
968
 
898
- return git_buf_oom(path) ? -1 : 0;
969
+ return git_str_oom(path) ? -1 : 0;
899
970
  }
900
971
 
901
972
  /**
@@ -904,7 +975,7 @@ static int index_path(git_buf *path, git_indexer *idx, const char *suffix)
904
975
  */
905
976
  static int seek_back_trailer(git_indexer *idx)
906
977
  {
907
- idx->pack->mwf.size -= GIT_OID_RAWSZ;
978
+ idx->pack->mwf.size -= git_oid_size(idx->oid_type);
908
979
  return git_mwindow_free_all(&idx->pack->mwf);
909
980
  }
910
981
 
@@ -913,14 +984,17 @@ static int inject_object(git_indexer *idx, git_oid *id)
913
984
  git_odb_object *obj = NULL;
914
985
  struct entry *entry = NULL;
915
986
  struct git_pack_entry *pentry = NULL;
916
- git_oid foo = {{0}};
987
+ unsigned char empty_checksum[GIT_HASH_MAX_SIZE] = {0};
917
988
  unsigned char hdr[64];
918
- git_buf buf = GIT_BUF_INIT;
989
+ git_str buf = GIT_STR_INIT;
919
990
  off64_t entry_start;
920
991
  const void *data;
921
992
  size_t len, hdr_len;
993
+ size_t checksum_size;
922
994
  int error;
923
995
 
996
+ checksum_size = git_hash_size(indexer_hash_algorithm(idx));
997
+
924
998
  if ((error = seek_back_trailer(idx)) < 0)
925
999
  goto cleanup;
926
1000
 
@@ -956,19 +1030,19 @@ static int inject_object(git_indexer *idx, git_oid *id)
956
1030
 
957
1031
  idx->pack->mwf.size += buf.size;
958
1032
  entry->crc = htonl(crc32(entry->crc, (unsigned char *)buf.ptr, (uInt)buf.size));
959
- git_buf_dispose(&buf);
1033
+ git_str_dispose(&buf);
960
1034
 
961
1035
  /* Write a fake trailer so the pack functions play ball */
962
1036
 
963
- if ((error = append_to_pack(idx, &foo, GIT_OID_RAWSZ)) < 0)
1037
+ if ((error = append_to_pack(idx, empty_checksum, checksum_size)) < 0)
964
1038
  goto cleanup;
965
1039
 
966
- idx->pack->mwf.size += GIT_OID_RAWSZ;
1040
+ idx->pack->mwf.size += git_oid_size(idx->oid_type);
967
1041
 
968
1042
  pentry = git__calloc(1, sizeof(struct git_pack_entry));
969
1043
  GIT_ERROR_CHECK_ALLOC(pentry);
970
1044
 
971
- git_oid_cpy(&pentry->sha1, id);
1045
+ git_oid_cpy(&pentry->id, id);
972
1046
  git_oid_cpy(&entry->oid, id);
973
1047
  idx->off = entry_start + hdr_len + len;
974
1048
 
@@ -1026,13 +1100,13 @@ static int fix_thin_pack(git_indexer *idx, git_indexer_progress *stats)
1026
1100
  }
1027
1101
 
1028
1102
  /* curpos now points to the base information, which is an OID */
1029
- base_info = git_mwindow_open(&idx->pack->mwf, &w, curpos, GIT_OID_RAWSZ, &left);
1103
+ base_info = git_mwindow_open(&idx->pack->mwf, &w, curpos, git_oid_size(idx->oid_type), &left);
1030
1104
  if (base_info == NULL) {
1031
1105
  git_error_set(GIT_ERROR_INDEXER, "failed to map delta information");
1032
1106
  return -1;
1033
1107
  }
1034
1108
 
1035
- git_oid_fromraw(&base, base_info);
1109
+ git_oid__fromraw(&base, base_info, idx->oid_type);
1036
1110
  git_mwindow_close(&w);
1037
1111
 
1038
1112
  if (has_entry(idx, &base))
@@ -1117,7 +1191,7 @@ static int update_header_and_rehash(git_indexer *idx, git_indexer_progress *stat
1117
1191
  git_hash_init(&idx->trailer);
1118
1192
 
1119
1193
 
1120
- /* Update the header to include the numer of local objects we injected */
1194
+ /* Update the header to include the number of local objects we injected */
1121
1195
  idx->hdr.hdr_entries = htonl(stats->total_objects + stats->local_objects);
1122
1196
  if (write_at(idx, &idx->hdr, 0, sizeof(struct git_pack_header)) < 0)
1123
1197
  return -1;
@@ -1152,39 +1226,44 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
1152
1226
  unsigned int i, long_offsets = 0, left;
1153
1227
  int error;
1154
1228
  struct git_pack_idx_header hdr;
1155
- git_buf filename = GIT_BUF_INIT;
1229
+ git_str filename = GIT_STR_INIT;
1156
1230
  struct entry *entry;
1157
- git_oid trailer_hash, file_hash;
1231
+ unsigned char checksum[GIT_HASH_MAX_SIZE];
1158
1232
  git_filebuf index_file = {0};
1159
1233
  void *packfile_trailer;
1234
+ size_t checksum_size;
1235
+ bool mismatch;
1160
1236
 
1161
1237
  if (!idx->parsed_header) {
1162
1238
  git_error_set(GIT_ERROR_INDEXER, "incomplete pack header");
1163
1239
  return -1;
1164
1240
  }
1165
1241
 
1242
+ checksum_size = git_hash_size(indexer_hash_algorithm(idx));
1243
+ GIT_ASSERT(checksum_size);
1244
+
1166
1245
  /* Test for this before resolve_deltas(), as it plays with idx->off */
1167
- if (idx->off + 20 < idx->pack->mwf.size) {
1246
+ if (idx->off + (ssize_t)checksum_size < idx->pack->mwf.size) {
1168
1247
  git_error_set(GIT_ERROR_INDEXER, "unexpected data at the end of the pack");
1169
1248
  return -1;
1170
1249
  }
1171
- if (idx->off + 20 > idx->pack->mwf.size) {
1250
+ if (idx->off + (ssize_t)checksum_size > idx->pack->mwf.size) {
1172
1251
  git_error_set(GIT_ERROR_INDEXER, "missing trailer at the end of the pack");
1173
1252
  return -1;
1174
1253
  }
1175
1254
 
1176
- packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size - GIT_OID_RAWSZ, GIT_OID_RAWSZ, &left);
1255
+ packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size - checksum_size, checksum_size, &left);
1177
1256
  if (packfile_trailer == NULL) {
1178
1257
  git_mwindow_close(&w);
1179
1258
  goto on_error;
1180
1259
  }
1181
1260
 
1182
1261
  /* Compare the packfile trailer as it was sent to us and what we calculated */
1183
- git_oid_fromraw(&file_hash, packfile_trailer);
1262
+ git_hash_final(checksum, &idx->trailer);
1263
+ mismatch = !!memcmp(checksum, packfile_trailer, checksum_size);
1184
1264
  git_mwindow_close(&w);
1185
1265
 
1186
- git_hash_final(&trailer_hash, &idx->trailer);
1187
- if (git_oid_cmp(&file_hash, &trailer_hash)) {
1266
+ if (mismatch) {
1188
1267
  git_error_set(GIT_ERROR_INDEXER, "packfile trailer mismatch");
1189
1268
  return -1;
1190
1269
  }
@@ -1204,8 +1283,8 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
1204
1283
  if (update_header_and_rehash(idx, stats) < 0)
1205
1284
  return -1;
1206
1285
 
1207
- git_hash_final(&trailer_hash, &idx->trailer);
1208
- write_at(idx, &trailer_hash, idx->pack->mwf.size - GIT_OID_RAWSZ, GIT_OID_RAWSZ);
1286
+ git_hash_final(checksum, &idx->trailer);
1287
+ write_at(idx, checksum, idx->pack->mwf.size - checksum_size, checksum_size);
1209
1288
  }
1210
1289
 
1211
1290
  /*
@@ -1224,12 +1303,14 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
1224
1303
 
1225
1304
  /* Use the trailer hash as the pack file name to ensure
1226
1305
  * files with different contents have different names */
1227
- git_oid_cpy(&idx->hash, &trailer_hash);
1306
+ memcpy(idx->checksum, checksum, checksum_size);
1307
+ if (git_hash_fmt(idx->name, checksum, checksum_size) < 0)
1308
+ return -1;
1228
1309
 
1229
- git_buf_sets(&filename, idx->pack->pack_name);
1230
- git_buf_shorten(&filename, strlen("pack"));
1231
- git_buf_puts(&filename, "idx");
1232
- if (git_buf_oom(&filename))
1310
+ git_str_sets(&filename, idx->pack->pack_name);
1311
+ git_str_shorten(&filename, strlen("pack"));
1312
+ git_str_puts(&filename, "idx");
1313
+ if (git_str_oom(&filename))
1233
1314
  return -1;
1234
1315
 
1235
1316
  if (git_filebuf_open(&index_file, filename.ptr,
@@ -1251,7 +1332,7 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
1251
1332
 
1252
1333
  /* Write out the object names (SHA-1 hashes) */
1253
1334
  git_vector_foreach(&idx->objects, i, entry) {
1254
- git_filebuf_write(&index_file, &entry->oid, sizeof(git_oid));
1335
+ git_filebuf_write(&index_file, &entry->oid.id, git_oid_size(idx->oid_type));
1255
1336
  }
1256
1337
 
1257
1338
  /* Write out the CRC32 values */
@@ -1285,14 +1366,14 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
1285
1366
  }
1286
1367
 
1287
1368
  /* Write out the packfile trailer to the index */
1288
- if (git_filebuf_write(&index_file, &trailer_hash, GIT_OID_RAWSZ) < 0)
1369
+ if (git_filebuf_write(&index_file, checksum, checksum_size) < 0)
1289
1370
  goto on_error;
1290
1371
 
1291
1372
  /* Write out the hash of the idx */
1292
- if (git_filebuf_hash(&trailer_hash, &index_file) < 0)
1373
+ if (git_filebuf_hash(checksum, &index_file) < 0)
1293
1374
  goto on_error;
1294
1375
 
1295
- git_filebuf_write(&index_file, &trailer_hash, sizeof(git_oid));
1376
+ git_filebuf_write(&index_file, checksum, checksum_size);
1296
1377
 
1297
1378
  /* Figure out what the final name should be */
1298
1379
  if (index_path(&filename, idx, ".idx") < 0)
@@ -1336,23 +1417,23 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
1336
1417
  goto on_error;
1337
1418
 
1338
1419
  /* And don't forget to rename the packfile to its new place. */
1339
- if (p_rename(idx->pack->pack_name, git_buf_cstr(&filename)) < 0)
1420
+ if (p_rename(idx->pack->pack_name, git_str_cstr(&filename)) < 0)
1340
1421
  goto on_error;
1341
1422
 
1342
1423
  /* And fsync the parent directory if we're asked to. */
1343
1424
  if (idx->do_fsync &&
1344
- git_futils_fsync_parent(git_buf_cstr(&filename)) < 0)
1425
+ git_futils_fsync_parent(git_str_cstr(&filename)) < 0)
1345
1426
  goto on_error;
1346
1427
 
1347
1428
  idx->pack_committed = 1;
1348
1429
 
1349
- git_buf_dispose(&filename);
1430
+ git_str_dispose(&filename);
1350
1431
  return 0;
1351
1432
 
1352
1433
  on_error:
1353
1434
  git_mwindow_free_all(&idx->pack->mwf);
1354
1435
  git_filebuf_cleanup(&index_file);
1355
- git_buf_dispose(&filename);
1436
+ git_str_dispose(&filename);
1356
1437
  return -1;
1357
1438
  }
1358
1439
 
@@ -1389,7 +1470,7 @@ void git_indexer_free(git_indexer *idx)
1389
1470
 
1390
1471
  git_hash_ctx_cleanup(&idx->trailer);
1391
1472
  git_hash_ctx_cleanup(&idx->hash_ctx);
1392
- git_buf_dispose(&idx->entry_data);
1473
+ git_str_dispose(&idx->entry_data);
1393
1474
  git_oidmap_free(idx->expected_oids);
1394
1475
  git__free(idx);
1395
1476
  }