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
@@ -16,6 +16,7 @@
16
16
  #include "filter.h"
17
17
  #include "repository.h"
18
18
  #include "blob.h"
19
+ #include "oid.h"
19
20
 
20
21
  #include "git2/odb_backend.h"
21
22
  #include "git2/oid.h"
@@ -58,10 +59,7 @@ static int error_null_oid(int error, const char *message);
58
59
 
59
60
  static git_object_t odb_hardcoded_type(const git_oid *id)
60
61
  {
61
- static git_oid empty_tree = {{ 0x4b, 0x82, 0x5d, 0xc6, 0x42, 0xcb, 0x6e, 0xb9, 0xa0, 0x60,
62
- 0xe5, 0x4b, 0xf8, 0xd6, 0x92, 0x88, 0xfb, 0xee, 0x49, 0x04 }};
63
-
64
- if (!git_oid_cmp(id, &empty_tree))
62
+ if (!git_oid_cmp(id, &git_oid__empty_tree_sha1))
65
63
  return GIT_OBJECT_TREE;
66
64
 
67
65
  return GIT_OBJECT_INVALID;
@@ -107,11 +105,12 @@ int git_odb__format_object_header(
107
105
  return 0;
108
106
  }
109
107
 
110
- int git_odb__hashobj(git_oid *id, git_rawobj *obj)
108
+ int git_odb__hashobj(git_oid *id, git_rawobj *obj, git_oid_t oid_type)
111
109
  {
112
- git_buf_vec vec[2];
110
+ git_str_vec vec[2];
113
111
  char header[64];
114
112
  size_t hdrlen;
113
+ git_hash_algorithm_t algorithm;
115
114
  int error;
116
115
 
117
116
  GIT_ASSERT_ARG(id);
@@ -122,6 +121,11 @@ int git_odb__hashobj(git_oid *id, git_rawobj *obj)
122
121
  return -1;
123
122
  }
124
123
 
124
+ if (!(algorithm = git_oid_algorithm(oid_type))) {
125
+ git_error_set(GIT_ERROR_INVALID, "unknown oid type");
126
+ return -1;
127
+ }
128
+
125
129
  if (!obj->data && obj->len != 0) {
126
130
  git_error_set(GIT_ERROR_INVALID, "invalid object");
127
131
  return -1;
@@ -136,7 +140,11 @@ int git_odb__hashobj(git_oid *id, git_rawobj *obj)
136
140
  vec[1].data = obj->data;
137
141
  vec[1].len = obj->len;
138
142
 
139
- return git_hash_vec(id, vec, 2);
143
+ #ifdef GIT_EXPERIMENTAL_SHA256
144
+ id->type = oid_type;
145
+ #endif
146
+
147
+ return git_hash_vec(id->id, vec, 2, algorithm);
140
148
  }
141
149
 
142
150
 
@@ -197,24 +205,35 @@ void git_odb_object_free(git_odb_object *object)
197
205
  git_cached_obj_decref(object);
198
206
  }
199
207
 
200
- int git_odb__hashfd(git_oid *out, git_file fd, size_t size, git_object_t type)
208
+ int git_odb__hashfd(
209
+ git_oid *out,
210
+ git_file fd,
211
+ size_t size,
212
+ git_object_t object_type,
213
+ git_oid_t oid_type)
201
214
  {
202
215
  size_t hdr_len;
203
- char hdr[64], buffer[FILEIO_BUFSIZE];
216
+ char hdr[64], buffer[GIT_BUFSIZE_FILEIO];
204
217
  git_hash_ctx ctx;
218
+ git_hash_algorithm_t algorithm;
205
219
  ssize_t read_len = 0;
206
220
  int error = 0;
207
221
 
208
- if (!git_object_typeisloose(type)) {
222
+ if (!git_object_typeisloose(object_type)) {
209
223
  git_error_set(GIT_ERROR_INVALID, "invalid object type for hash");
210
224
  return -1;
211
225
  }
212
226
 
213
- if ((error = git_hash_ctx_init(&ctx)) < 0)
227
+ if (!(algorithm = git_oid_algorithm(oid_type))) {
228
+ git_error_set(GIT_ERROR_INVALID, "unknown oid type");
229
+ return -1;
230
+ }
231
+
232
+ if ((error = git_hash_ctx_init(&ctx, algorithm)) < 0)
214
233
  return error;
215
234
 
216
235
  if ((error = git_odb__format_object_header(&hdr_len, hdr,
217
- sizeof(hdr), size, type)) < 0)
236
+ sizeof(hdr), size, object_type)) < 0)
218
237
  goto done;
219
238
 
220
239
  if ((error = git_hash_update(&ctx, hdr, hdr_len)) < 0)
@@ -237,7 +256,11 @@ int git_odb__hashfd(git_oid *out, git_file fd, size_t size, git_object_t type)
237
256
  goto done;
238
257
  }
239
258
 
240
- error = git_hash_final(out, &ctx);
259
+ error = git_hash_final(out->id, &ctx);
260
+
261
+ #ifdef GIT_EXPERIMENTAL_SHA256
262
+ out->type = oid_type;
263
+ #endif
241
264
 
242
265
  done:
243
266
  git_hash_ctx_cleanup(&ctx);
@@ -245,39 +268,44 @@ done:
245
268
  }
246
269
 
247
270
  int git_odb__hashfd_filtered(
248
- git_oid *out, git_file fd, size_t size, git_object_t type, git_filter_list *fl)
271
+ git_oid *out,
272
+ git_file fd,
273
+ size_t size,
274
+ git_object_t object_type,
275
+ git_oid_t oid_type,
276
+ git_filter_list *fl)
249
277
  {
250
278
  int error;
251
- git_buf raw = GIT_BUF_INIT;
279
+ git_str raw = GIT_STR_INIT;
252
280
 
253
281
  if (!fl)
254
- return git_odb__hashfd(out, fd, size, type);
282
+ return git_odb__hashfd(out, fd, size, object_type, oid_type);
255
283
 
256
284
  /* size of data is used in header, so we have to read the whole file
257
285
  * into memory to apply filters before beginning to calculate the hash
258
286
  */
259
287
 
260
288
  if (!(error = git_futils_readbuffer_fd(&raw, fd, size))) {
261
- git_buf post = GIT_BUF_INIT;
289
+ git_str post = GIT_STR_INIT;
262
290
 
263
291
  error = git_filter_list__convert_buf(&post, fl, &raw);
264
292
 
265
293
  if (!error)
266
- error = git_odb_hash(out, post.ptr, post.size, type);
294
+ error = git_odb__hash(out, post.ptr, post.size, object_type, oid_type);
267
295
 
268
- git_buf_dispose(&post);
296
+ git_str_dispose(&post);
269
297
  }
270
298
 
271
299
  return error;
272
300
  }
273
301
 
274
- int git_odb__hashlink(git_oid *out, const char *path)
302
+ int git_odb__hashlink(git_oid *out, const char *path, git_oid_t oid_type)
275
303
  {
276
304
  struct stat st;
277
305
  int size;
278
306
  int result;
279
307
 
280
- if (git_path_lstat(path, &st) < 0)
308
+ if (git_fs_path_lstat(path, &st) < 0)
281
309
  return -1;
282
310
 
283
311
  if (!git__is_int(st.st_size) || (int)st.st_size < 0) {
@@ -305,20 +333,24 @@ int git_odb__hashlink(git_oid *out, const char *path)
305
333
  GIT_ASSERT(read_len <= size);
306
334
  link_data[read_len] = '\0';
307
335
 
308
- result = git_odb_hash(out, link_data, read_len, GIT_OBJECT_BLOB);
336
+ result = git_odb__hash(out, link_data, read_len, GIT_OBJECT_BLOB, oid_type);
309
337
  git__free(link_data);
310
338
  } else {
311
339
  int fd = git_futils_open_ro(path);
312
340
  if (fd < 0)
313
341
  return -1;
314
- result = git_odb__hashfd(out, fd, size, GIT_OBJECT_BLOB);
342
+ result = git_odb__hashfd(out, fd, size, GIT_OBJECT_BLOB, oid_type);
315
343
  p_close(fd);
316
344
  }
317
345
 
318
346
  return result;
319
347
  }
320
348
 
321
- int git_odb_hashfile(git_oid *out, const char *path, git_object_t type)
349
+ int git_odb__hashfile(
350
+ git_oid *out,
351
+ const char *path,
352
+ git_object_t object_type,
353
+ git_oid_t oid_type)
322
354
  {
323
355
  uint64_t size;
324
356
  int fd, error = 0;
@@ -335,14 +367,38 @@ int git_odb_hashfile(git_oid *out, const char *path, git_object_t type)
335
367
  goto done;
336
368
  }
337
369
 
338
- error = git_odb__hashfd(out, fd, (size_t)size, type);
370
+ error = git_odb__hashfd(out, fd, (size_t)size, object_type, oid_type);
339
371
 
340
372
  done:
341
373
  p_close(fd);
342
374
  return error;
343
375
  }
344
376
 
345
- int git_odb_hash(git_oid *id, const void *data, size_t len, git_object_t type)
377
+ #ifdef GIT_EXPERIMENTAL_SHA256
378
+ int git_odb_hashfile(
379
+ git_oid *out,
380
+ const char *path,
381
+ git_object_t object_type,
382
+ git_oid_t oid_type)
383
+ {
384
+ return git_odb__hashfile(out, path, object_type, oid_type);
385
+ }
386
+ #else
387
+ int git_odb_hashfile(
388
+ git_oid *out,
389
+ const char *path,
390
+ git_object_t object_type)
391
+ {
392
+ return git_odb__hashfile(out, path, object_type, GIT_OID_SHA1);
393
+ }
394
+ #endif
395
+
396
+ int git_odb__hash(
397
+ git_oid *id,
398
+ const void *data,
399
+ size_t len,
400
+ git_object_t object_type,
401
+ git_oid_t oid_type)
346
402
  {
347
403
  git_rawobj raw;
348
404
 
@@ -350,10 +406,31 @@ int git_odb_hash(git_oid *id, const void *data, size_t len, git_object_t type)
350
406
 
351
407
  raw.data = (void *)data;
352
408
  raw.len = len;
353
- raw.type = type;
409
+ raw.type = object_type;
410
+
411
+ return git_odb__hashobj(id, &raw, oid_type);
412
+ }
354
413
 
355
- return git_odb__hashobj(id, &raw);
414
+ #ifdef GIT_EXPERIMENTAL_SHA256
415
+ int git_odb_hash(
416
+ git_oid *out,
417
+ const void *data,
418
+ size_t len,
419
+ git_object_t object_type,
420
+ git_oid_t oid_type)
421
+ {
422
+ return git_odb__hash(out, data, len, object_type, oid_type);
423
+ }
424
+ #else
425
+ int git_odb_hash(
426
+ git_oid *out,
427
+ const void *data,
428
+ size_t len,
429
+ git_object_t type)
430
+ {
431
+ return git_odb__hash(out, data, len, type, GIT_OID_SHA1);
356
432
  }
433
+ #endif
357
434
 
358
435
  /**
359
436
  * FAKE WSTREAM
@@ -444,11 +521,28 @@ static int backend_sort_cmp(const void *a, const void *b)
444
521
  return (backend_b->priority - backend_a->priority);
445
522
  }
446
523
 
447
- int git_odb_new(git_odb **out)
524
+ static void normalize_options(
525
+ git_odb_options *opts,
526
+ const git_odb_options *given_opts)
527
+ {
528
+ git_odb_options init = GIT_ODB_OPTIONS_INIT;
529
+
530
+ if (given_opts)
531
+ memcpy(opts, given_opts, sizeof(git_odb_options));
532
+ else
533
+ memcpy(opts, &init, sizeof(git_odb_options));
534
+
535
+ if (!opts->oid_type)
536
+ opts->oid_type = GIT_OID_DEFAULT;
537
+ }
538
+
539
+ int git_odb__new(git_odb **out, const git_odb_options *opts)
448
540
  {
449
541
  git_odb *db = git__calloc(1, sizeof(*db));
450
542
  GIT_ERROR_CHECK_ALLOC(db);
451
543
 
544
+ normalize_options(&db->options, opts);
545
+
452
546
  if (git_mutex_init(&db->lock) < 0) {
453
547
  git__free(db);
454
548
  return -1;
@@ -470,6 +564,18 @@ int git_odb_new(git_odb **out)
470
564
  return 0;
471
565
  }
472
566
 
567
+ #ifdef GIT_EXPERIMENTAL_SHA256
568
+ int git_odb_new(git_odb **out, const git_odb_options *opts)
569
+ {
570
+ return git_odb__new(out, opts);
571
+ }
572
+ #else
573
+ int git_odb_new(git_odb **out)
574
+ {
575
+ return git_odb__new(out, NULL);
576
+ }
577
+ #endif
578
+
473
579
  static int add_backend_internal(
474
580
  git_odb *odb, git_odb_backend *backend,
475
581
  int priority, bool is_alternate, ino_t disk_inode)
@@ -577,6 +683,8 @@ int git_odb__add_default_backends(
577
683
  struct stat st;
578
684
  ino_t inode;
579
685
  git_odb_backend *loose, *packed;
686
+ git_odb_backend_loose_options loose_opts = GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT;
687
+ git_odb_backend_pack_options pack_opts = GIT_ODB_BACKEND_PACK_OPTIONS_INIT;
580
688
 
581
689
  /* TODO: inodes are not really relevant on Win32, so we need to find
582
690
  * a cross-platform workaround for this */
@@ -611,14 +719,29 @@ int git_odb__add_default_backends(
611
719
  git_mutex_unlock(&db->lock);
612
720
  #endif
613
721
 
722
+ if (db->do_fsync)
723
+ loose_opts.flags |= GIT_ODB_BACKEND_LOOSE_FSYNC;
724
+
725
+ loose_opts.oid_type = db->options.oid_type;
726
+ pack_opts.oid_type = db->options.oid_type;
727
+
614
728
  /* add the loose object backend */
615
- if (git_odb_backend_loose(&loose, objects_dir, -1, db->do_fsync, 0, 0) < 0 ||
729
+ if (git_odb__backend_loose(&loose, objects_dir, &loose_opts) < 0 ||
616
730
  add_backend_internal(db, loose, git_odb__loose_priority, as_alternates, inode) < 0)
617
731
  return -1;
618
732
 
619
733
  /* add the packed file backend */
620
- if (git_odb_backend_pack(&packed, objects_dir) < 0 ||
621
- add_backend_internal(db, packed, git_odb__packed_priority, as_alternates, inode) < 0)
734
+ #ifdef GIT_EXPERIMENTAL_SHA256
735
+ if (git_odb_backend_pack(&packed, objects_dir, &pack_opts) < 0)
736
+ return -1;
737
+ #else
738
+ GIT_UNUSED(pack_opts);
739
+
740
+ if (git_odb_backend_pack(&packed, objects_dir) < 0)
741
+ return -1;
742
+ #endif
743
+
744
+ if (add_backend_internal(db, packed, git_odb__packed_priority, as_alternates, inode) < 0)
622
745
  return -1;
623
746
 
624
747
  if (git_mutex_lock(&db->lock) < 0) {
@@ -636,8 +759,8 @@ int git_odb__add_default_backends(
636
759
 
637
760
  static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_depth)
638
761
  {
639
- git_buf alternates_path = GIT_BUF_INIT;
640
- git_buf alternates_buf = GIT_BUF_INIT;
762
+ git_str alternates_path = GIT_STR_INIT;
763
+ git_str alternates_buf = GIT_STR_INIT;
641
764
  char *buffer;
642
765
  const char *alternate;
643
766
  int result = 0;
@@ -646,16 +769,16 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
646
769
  if (alternate_depth > GIT_ALTERNATES_MAX_DEPTH)
647
770
  return 0;
648
771
 
649
- if (git_buf_joinpath(&alternates_path, objects_dir, GIT_ALTERNATES_FILE) < 0)
772
+ if (git_str_joinpath(&alternates_path, objects_dir, GIT_ALTERNATES_FILE) < 0)
650
773
  return -1;
651
774
 
652
- if (git_path_exists(alternates_path.ptr) == false) {
653
- git_buf_dispose(&alternates_path);
775
+ if (git_fs_path_exists(alternates_path.ptr) == false) {
776
+ git_str_dispose(&alternates_path);
654
777
  return 0;
655
778
  }
656
779
 
657
780
  if (git_futils_readbuffer(&alternates_buf, alternates_path.ptr) < 0) {
658
- git_buf_dispose(&alternates_path);
781
+ git_str_dispose(&alternates_path);
659
782
  return -1;
660
783
  }
661
784
 
@@ -672,17 +795,17 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
672
795
  * the current repository.
673
796
  */
674
797
  if (*alternate == '.' && !alternate_depth) {
675
- if ((result = git_buf_joinpath(&alternates_path, objects_dir, alternate)) < 0)
798
+ if ((result = git_str_joinpath(&alternates_path, objects_dir, alternate)) < 0)
676
799
  break;
677
- alternate = git_buf_cstr(&alternates_path);
800
+ alternate = git_str_cstr(&alternates_path);
678
801
  }
679
802
 
680
803
  if ((result = git_odb__add_default_backends(odb, alternate, true, alternate_depth + 1)) < 0)
681
804
  break;
682
805
  }
683
806
 
684
- git_buf_dispose(&alternates_path);
685
- git_buf_dispose(&alternates_buf);
807
+ git_str_dispose(&alternates_path);
808
+ git_str_dispose(&alternates_buf);
686
809
 
687
810
  return result;
688
811
  }
@@ -709,7 +832,10 @@ int git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph)
709
832
  return error;
710
833
  }
711
834
 
712
- int git_odb_open(git_odb **out, const char *objects_dir)
835
+ int git_odb__open(
836
+ git_odb **out,
837
+ const char *objects_dir,
838
+ const git_odb_options *opts)
713
839
  {
714
840
  git_odb *db;
715
841
 
@@ -718,7 +844,7 @@ int git_odb_open(git_odb **out, const char *objects_dir)
718
844
 
719
845
  *out = NULL;
720
846
 
721
- if (git_odb_new(&db) < 0)
847
+ if (git_odb__new(&db, opts) < 0)
722
848
  return -1;
723
849
 
724
850
  if (git_odb__add_default_backends(db, objects_dir, 0, 0) < 0) {
@@ -882,6 +1008,11 @@ int git_odb__freshen(git_odb *db, const git_oid *id)
882
1008
  }
883
1009
 
884
1010
  int git_odb_exists(git_odb *db, const git_oid *id)
1011
+ {
1012
+ return git_odb_exists_ext(db, id, 0);
1013
+ }
1014
+
1015
+ int git_odb_exists_ext(git_odb *db, const git_oid *id, unsigned int flags)
885
1016
  {
886
1017
  git_odb_object *object;
887
1018
 
@@ -899,7 +1030,7 @@ int git_odb_exists(git_odb *db, const git_oid *id)
899
1030
  if (odb_exists_1(db, id, false))
900
1031
  return 1;
901
1032
 
902
- if (!git_odb_refresh(db))
1033
+ if (!(flags & GIT_ODB_LOOKUP_NO_REFRESH) && !git_odb_refresh(db))
903
1034
  return odb_exists_1(db, id, true);
904
1035
 
905
1036
  /* Failed to refresh, hence not found */
@@ -911,7 +1042,7 @@ static int odb_exists_prefix_1(git_oid *out, git_odb *db,
911
1042
  {
912
1043
  size_t i;
913
1044
  int error = GIT_ENOTFOUND, num_found = 0;
914
- git_oid last_found = {{0}}, found;
1045
+ git_oid last_found = GIT_OID_NONE, found;
915
1046
 
916
1047
  if ((error = git_mutex_lock(&db->lock)) < 0) {
917
1048
  git_error_set(GIT_ERROR_ODB, "failed to acquire the odb lock");
@@ -962,7 +1093,7 @@ int git_odb_exists_prefix(
962
1093
  git_oid *out, git_odb *db, const git_oid *short_id, size_t len)
963
1094
  {
964
1095
  int error;
965
- git_oid key = {{0}};
1096
+ git_oid key = GIT_OID_NONE;
966
1097
 
967
1098
  GIT_ASSERT_ARG(db);
968
1099
  GIT_ASSERT_ARG(short_id);
@@ -970,7 +1101,7 @@ int git_odb_exists_prefix(
970
1101
  if (len < GIT_OID_MINPREFIXLEN)
971
1102
  return git_odb__error_ambiguous("prefix length too short");
972
1103
 
973
- if (len >= GIT_OID_HEXSZ) {
1104
+ if (len >= git_oid_hexsize(db->options.oid_type)) {
974
1105
  if (git_odb_exists(db, short_id)) {
975
1106
  if (out)
976
1107
  git_oid_cpy(out, short_id);
@@ -999,11 +1130,13 @@ int git_odb_expand_ids(
999
1130
  git_odb_expand_id *ids,
1000
1131
  size_t count)
1001
1132
  {
1002
- size_t i;
1133
+ size_t hex_size, i;
1003
1134
 
1004
1135
  GIT_ASSERT_ARG(db);
1005
1136
  GIT_ASSERT_ARG(ids);
1006
1137
 
1138
+ hex_size = git_oid_hexsize(db->options.oid_type);
1139
+
1007
1140
  for (i = 0; i < count; i++) {
1008
1141
  git_odb_expand_id *query = &ids[i];
1009
1142
  int error = GIT_EAMBIGUOUS;
@@ -1012,13 +1145,13 @@ int git_odb_expand_ids(
1012
1145
  query->type = GIT_OBJECT_ANY;
1013
1146
 
1014
1147
  /* if we have a short OID, expand it first */
1015
- if (query->length >= GIT_OID_MINPREFIXLEN && query->length < GIT_OID_HEXSZ) {
1148
+ if (query->length >= GIT_OID_MINPREFIXLEN && query->length < hex_size) {
1016
1149
  git_oid actual_id;
1017
1150
 
1018
1151
  error = odb_exists_prefix_1(&actual_id, db, &query->id, query->length, false);
1019
1152
  if (!error) {
1020
1153
  git_oid_cpy(&query->id, &actual_id);
1021
- query->length = GIT_OID_HEXSZ;
1154
+ query->length = (unsigned short)hex_size;
1022
1155
  }
1023
1156
  }
1024
1157
 
@@ -1026,7 +1159,7 @@ int git_odb_expand_ids(
1026
1159
  * now we ought to have a 40-char OID, either because we've expanded it
1027
1160
  * or because the user passed a full OID. Ensure its type is right.
1028
1161
  */
1029
- if (query->length >= GIT_OID_HEXSZ) {
1162
+ if (query->length >= hex_size) {
1030
1163
  git_object_t actual_type;
1031
1164
 
1032
1165
  error = odb_otype_fast(&actual_type, db, &query->id);
@@ -1046,7 +1179,7 @@ int git_odb_expand_ids(
1046
1179
  /* the object is missing or ambiguous */
1047
1180
  case GIT_ENOTFOUND:
1048
1181
  case GIT_EAMBIGUOUS:
1049
- memset(&query->id, 0, sizeof(git_oid));
1182
+ git_oid_clear(&query->id, db->options.oid_type);
1050
1183
  query->length = 0;
1051
1184
  query->type = 0;
1052
1185
  break;
@@ -1064,7 +1197,7 @@ int git_odb_expand_ids(
1064
1197
  int git_odb_read_header(size_t *len_p, git_object_t *type_p, git_odb *db, const git_oid *id)
1065
1198
  {
1066
1199
  int error;
1067
- git_odb_object *object;
1200
+ git_odb_object *object = NULL;
1068
1201
 
1069
1202
  error = git_odb__read_header_or_object(&object, len_p, type_p, db, id);
1070
1203
 
@@ -1154,7 +1287,7 @@ int git_odb__read_header_or_object(
1154
1287
  error = odb_read_header_1(len_p, type_p, db, id, true);
1155
1288
 
1156
1289
  if (error == GIT_ENOTFOUND)
1157
- return git_odb__error_notfound("cannot read header for", id, GIT_OID_HEXSZ);
1290
+ return git_odb__error_notfound("cannot read header for", id, git_oid_hexsize(db->options.oid_type));
1158
1291
 
1159
1292
  /* we found the header; return early */
1160
1293
  if (!error)
@@ -1176,8 +1309,11 @@ int git_odb__read_header_or_object(
1176
1309
  return error;
1177
1310
  }
1178
1311
 
1179
- static int odb_read_1(git_odb_object **out, git_odb *db, const git_oid *id,
1180
- bool only_refreshed)
1312
+ static int odb_read_1(
1313
+ git_odb_object **out,
1314
+ git_odb *db,
1315
+ const git_oid *id,
1316
+ bool only_refreshed)
1181
1317
  {
1182
1318
  size_t i;
1183
1319
  git_rawobj raw;
@@ -1221,7 +1357,7 @@ static int odb_read_1(git_odb_object **out, git_odb *db, const git_oid *id,
1221
1357
  return GIT_ENOTFOUND;
1222
1358
 
1223
1359
  if (git_odb__strict_hash_verification) {
1224
- if ((error = git_odb_hash(&hashed, raw.data, raw.len, raw.type)) < 0)
1360
+ if ((error = git_odb__hash(&hashed, raw.data, raw.len, raw.type, db->options.oid_type)) < 0)
1225
1361
  goto out;
1226
1362
 
1227
1363
  if (!git_oid_equal(id, &hashed)) {
@@ -1265,7 +1401,7 @@ int git_odb_read(git_odb_object **out, git_odb *db, const git_oid *id)
1265
1401
  error = odb_read_1(out, db, id, true);
1266
1402
 
1267
1403
  if (error == GIT_ENOTFOUND)
1268
- return git_odb__error_notfound("no match for id", id, GIT_OID_HEXSZ);
1404
+ return git_odb__error_notfound("no match for id", id, git_oid_hexsize(git_oid_type(id)));
1269
1405
 
1270
1406
  return error;
1271
1407
  }
@@ -1302,7 +1438,7 @@ static int read_prefix_1(git_odb_object **out, git_odb *db,
1302
1438
  {
1303
1439
  size_t i;
1304
1440
  int error = 0;
1305
- git_oid found_full_oid = {{0}};
1441
+ git_oid found_full_oid = GIT_OID_NONE;
1306
1442
  git_rawobj raw = {0};
1307
1443
  void *data = NULL;
1308
1444
  bool found = false;
@@ -1337,15 +1473,15 @@ static int read_prefix_1(git_odb_object **out, git_odb *db,
1337
1473
  data = raw.data;
1338
1474
 
1339
1475
  if (found && git_oid__cmp(&full_oid, &found_full_oid)) {
1340
- git_buf buf = GIT_BUF_INIT;
1476
+ git_str buf = GIT_STR_INIT;
1341
1477
 
1342
- git_buf_printf(&buf, "multiple matches for prefix: %s",
1478
+ git_str_printf(&buf, "multiple matches for prefix: %s",
1343
1479
  git_oid_tostr_s(&full_oid));
1344
- git_buf_printf(&buf, " %s",
1480
+ git_str_printf(&buf, " %s",
1345
1481
  git_oid_tostr_s(&found_full_oid));
1346
1482
 
1347
1483
  error = git_odb__error_ambiguous(buf.ptr);
1348
- git_buf_dispose(&buf);
1484
+ git_str_dispose(&buf);
1349
1485
  git_mutex_unlock(&db->lock);
1350
1486
  goto out;
1351
1487
  }
@@ -1362,7 +1498,7 @@ static int read_prefix_1(git_odb_object **out, git_odb *db,
1362
1498
  if (git_odb__strict_hash_verification) {
1363
1499
  git_oid hash;
1364
1500
 
1365
- if ((error = git_odb_hash(&hash, raw.data, raw.len, raw.type)) < 0)
1501
+ if ((error = git_odb__hash(&hash, raw.data, raw.len, raw.type, db->options.oid_type)) < 0)
1366
1502
  goto out;
1367
1503
 
1368
1504
  if (!git_oid_equal(&found_full_oid, &hash)) {
@@ -1388,19 +1524,22 @@ out:
1388
1524
  int git_odb_read_prefix(
1389
1525
  git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len)
1390
1526
  {
1391
- git_oid key = {{0}};
1527
+ git_oid key = GIT_OID_NONE;
1528
+ size_t hex_size;
1392
1529
  int error;
1393
1530
 
1394
1531
  GIT_ASSERT_ARG(out);
1395
1532
  GIT_ASSERT_ARG(db);
1396
1533
 
1534
+ hex_size = git_oid_hexsize(db->options.oid_type);
1535
+
1397
1536
  if (len < GIT_OID_MINPREFIXLEN)
1398
1537
  return git_odb__error_ambiguous("prefix length too short");
1399
1538
 
1400
- if (len > GIT_OID_HEXSZ)
1401
- len = GIT_OID_HEXSZ;
1539
+ if (len > hex_size)
1540
+ len = hex_size;
1402
1541
 
1403
- if (len == GIT_OID_HEXSZ) {
1542
+ if (len == hex_size) {
1404
1543
  *out = git_cache_get_raw(odb_cache(db), short_id);
1405
1544
  if (*out != NULL)
1406
1545
  return 0;
@@ -1460,7 +1599,7 @@ int git_odb_write(
1460
1599
  GIT_ASSERT_ARG(oid);
1461
1600
  GIT_ASSERT_ARG(db);
1462
1601
 
1463
- if ((error = git_odb_hash(oid, data, len, type)) < 0)
1602
+ if ((error = git_odb__hash(oid, data, len, type, db->options.oid_type)) < 0)
1464
1603
  return error;
1465
1604
 
1466
1605
  if (git_oid_is_zero(oid))
@@ -1496,10 +1635,10 @@ int git_odb_write(
1496
1635
  if ((error = git_odb_open_wstream(&stream, db, len, type)) != 0)
1497
1636
  return error;
1498
1637
 
1499
- stream->write(stream, data, len);
1500
- error = stream->finalize_write(stream, oid);
1501
- git_odb_stream_free(stream);
1638
+ if ((error = stream->write(stream, data, len)) == 0)
1639
+ error = stream->finalize_write(stream, oid);
1502
1640
 
1641
+ git_odb_stream_free(stream);
1503
1642
  return error;
1504
1643
  }
1505
1644
 
@@ -1561,10 +1700,13 @@ int git_odb_open_wstream(
1561
1700
  ctx = git__malloc(sizeof(git_hash_ctx));
1562
1701
  GIT_ERROR_CHECK_ALLOC(ctx);
1563
1702
 
1564
- if ((error = git_hash_ctx_init(ctx)) < 0 ||
1565
- (error = hash_header(ctx, size, type)) < 0)
1703
+ if ((error = git_hash_ctx_init(ctx, git_oid_algorithm(db->options.oid_type))) < 0 ||
1704
+ (error = hash_header(ctx, size, type)) < 0)
1566
1705
  goto done;
1567
1706
 
1707
+ #ifdef GIT_EXPERIMENTAL_SHA256
1708
+ (*stream)->oid_type = db->options.oid_type;
1709
+ #endif
1568
1710
  (*stream)->hash_ctx = ctx;
1569
1711
  (*stream)->declared_size = size;
1570
1712
  (*stream)->received_bytes = 0;
@@ -1607,7 +1749,11 @@ int git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stream)
1607
1749
  return git_odb_stream__invalid_length(stream,
1608
1750
  "stream_finalize_write()");
1609
1751
 
1610
- git_hash_final(out, stream->hash_ctx);
1752
+ git_hash_final(out->id, stream->hash_ctx);
1753
+
1754
+ #ifdef GIT_EXPERIMENTAL_SHA256
1755
+ out->type = stream->oid_type;
1756
+ #endif
1611
1757
 
1612
1758
  if (git_odb__freshen(stream->backend->odb, out))
1613
1759
  return 0;
@@ -1783,10 +1929,11 @@ int git_odb_refresh(struct git_odb *db)
1783
1929
 
1784
1930
  int git_odb__error_mismatch(const git_oid *expected, const git_oid *actual)
1785
1931
  {
1786
- char expected_oid[GIT_OID_HEXSZ + 1], actual_oid[GIT_OID_HEXSZ + 1];
1932
+ char expected_oid[GIT_OID_MAX_HEXSIZE + 1],
1933
+ actual_oid[GIT_OID_MAX_HEXSIZE + 1];
1787
1934
 
1788
- git_oid_tostr(expected_oid, sizeof(expected_oid), expected);
1789
- git_oid_tostr(actual_oid, sizeof(actual_oid), actual);
1935
+ git_oid_tostr(expected_oid, git_oid_hexsize(git_oid_type(expected)) + 1, expected);
1936
+ git_oid_tostr(actual_oid, git_oid_hexsize(git_oid_type(actual)) + 1, actual);
1790
1937
 
1791
1938
  git_error_set(GIT_ERROR_ODB, "object hash mismatch - expected %s but got %s",
1792
1939
  expected_oid, actual_oid);
@@ -1798,7 +1945,7 @@ int git_odb__error_notfound(
1798
1945
  const char *message, const git_oid *oid, size_t oid_len)
1799
1946
  {
1800
1947
  if (oid != NULL) {
1801
- char oid_str[GIT_OID_HEXSZ + 1];
1948
+ char oid_str[GIT_OID_MAX_HEXSIZE + 1];
1802
1949
  git_oid_tostr(oid_str, oid_len+1, oid);
1803
1950
  git_error_set(GIT_ERROR_ODB, "object not found - %s (%.*s)",
1804
1951
  message, (int) oid_len, oid_str);
@@ -1816,7 +1963,7 @@ static int error_null_oid(int error, const char *message)
1816
1963
 
1817
1964
  int git_odb__error_ambiguous(const char *message)
1818
1965
  {
1819
- git_error_set(GIT_ERROR_ODB, "ambiguous SHA1 prefix - %s", message);
1966
+ git_error_set(GIT_ERROR_ODB, "ambiguous OID prefix - %s", message);
1820
1967
  return GIT_EAMBIGUOUS;
1821
1968
  }
1822
1969