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
@@ -7,18 +7,20 @@
7
7
 
8
8
  #include "common.h"
9
9
 
10
- #include "git2/object.h"
11
- #include "git2/sys/odb_backend.h"
12
- #include "git2/sys/mempack.h"
10
+ #include "buf.h"
13
11
  #include "futils.h"
14
12
  #include "hash.h"
15
13
  #include "odb.h"
16
14
  #include "array.h"
17
15
  #include "oidmap.h"
16
+ #include "pack-objects.h"
18
17
 
19
18
  #include "git2/odb_backend.h"
19
+ #include "git2/object.h"
20
20
  #include "git2/types.h"
21
21
  #include "git2/pack.h"
22
+ #include "git2/sys/odb_backend.h"
23
+ #include "git2/sys/mempack.h"
22
24
 
23
25
  struct memobject {
24
26
  git_oid oid;
@@ -100,7 +102,10 @@ static int impl__read_header(size_t *len_p, git_object_t *type_p, git_odb_backen
100
102
  return 0;
101
103
  }
102
104
 
103
- int git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_backend *_backend)
105
+ static int git_mempack__dump(
106
+ git_str *pack,
107
+ git_repository *repo,
108
+ git_odb_backend *_backend)
104
109
  {
105
110
  struct memory_packer_db *db = (struct memory_packer_db *)_backend;
106
111
  git_packbuilder *packbuilder;
@@ -120,13 +125,21 @@ int git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_backend *_back
120
125
  goto cleanup;
121
126
  }
122
127
 
123
- err = git_packbuilder_write_buf(pack, packbuilder);
128
+ err = git_packbuilder__write_buf(pack, packbuilder);
124
129
 
125
130
  cleanup:
126
131
  git_packbuilder_free(packbuilder);
127
132
  return err;
128
133
  }
129
134
 
135
+ int git_mempack_dump(
136
+ git_buf *pack,
137
+ git_repository *repo,
138
+ git_odb_backend *_backend)
139
+ {
140
+ GIT_BUF_WRAP_PRIVATE(pack, git_mempack__dump, repo, _backend);
141
+ }
142
+
130
143
  int git_mempack_reset(git_odb_backend *_backend)
131
144
  {
132
145
  struct memory_packer_db *db = (struct memory_packer_db *)_backend;
@@ -26,6 +26,7 @@
26
26
 
27
27
  struct pack_backend {
28
28
  git_odb_backend parent;
29
+ git_odb_backend_pack_options opts;
29
30
  git_midx_file *midx;
30
31
  git_vector midx_packs;
31
32
  git_vector packs;
@@ -95,27 +96,27 @@ struct pack_writepack {
95
96
  * --------------------------------------------------
96
97
  *
97
98
  * # pack_backend__exists / pack_backend__exists_prefix
98
- * | Check if the given SHA1 oid (or a SHA1 oid prefix) exists in any of the
99
+ * | Check if the given oid (or an oid prefix) exists in any of the
99
100
  * | packs that have been loaded for our ODB.
100
101
  * |
101
102
  * |-# pack_entry_find / pack_entry_find_prefix
102
- * | If there is a multi-pack-index present, search the SHA1 oid in that
103
+ * | If there is a multi-pack-index present, search the oid in that
103
104
  * | index first. If it is not found there, iterate through all the unindexed
104
105
  * | packs that have been preloaded (starting by the pack where the latest
105
106
  * | object was found) to try to find the OID in one of them.
106
107
  * |
107
108
  * |-# git_midx_entry_find
108
- * | Search for the SHA1 oid in the multi-pack-index. See
109
+ * | Search for the oid in the multi-pack-index. See
109
110
  * | <https://github.com/git/git/blob/master/Documentation/technical/pack-format.txt>
110
111
  * | for specifics on the multi-pack-index format and how do we find
111
112
  * | entries in it.
112
113
  * |
113
114
  * |-# git_pack_entry_find
114
- * | Check the index of an individual unindexed pack to see if the SHA1
115
- * | OID can be found. If we can find the offset to that SHA1 inside of the
115
+ * | Check the index of an individual unindexed pack to see if the
116
+ * | OID can be found. If we can find the offset to that inside of the
116
117
  * | index, that means the object is contained inside of the packfile and
117
118
  * | we can stop searching. Before returning, we verify that the
118
- * | packfile behing the index we are searching still exists on disk.
119
+ * | packfile behind the index we are searching still exists on disk.
119
120
  * |
120
121
  * |-# pack_entry_find_offset
121
122
  * | Mmap the actual index file to disk if it hasn't been opened
@@ -141,13 +142,13 @@ struct pack_writepack {
141
142
  * --------------------------------------------------
142
143
  *
143
144
  * # pack_backend__read / pack_backend__read_prefix
144
- * | Check if the given SHA1 oid (or a SHA1 oid prefix) exists in any of the
145
+ * | Check if the given oid (or an oid prefix) exists in any of the
145
146
  * | packs that have been loaded for our ODB. If it does, open the packfile and
146
147
  * | read from it.
147
148
  * |
148
149
  * |-# git_packfile_unpack
149
150
  * Armed with a packfile and the offset within it, we can finally unpack
150
- * the object pointed at by the SHA1 oid. This involves mmapping part of
151
+ * the object pointed at by the oid. This involves mmapping part of
151
152
  * the `.pack` file, and uncompressing the object within it (if it is
152
153
  * stored in the undelfitied representation), or finding a base object and
153
154
  * applying some deltas to its uncompressed representation (if it is stored
@@ -166,7 +167,7 @@ struct pack_writepack {
166
167
 
167
168
  static int packfile_sort__cb(const void *a_, const void *b_);
168
169
 
169
- static int packfile_load__cb(void *_data, git_buf *path);
170
+ static int packfile_load__cb(void *_data, git_str *path);
170
171
 
171
172
  static int packfile_byname_search_cmp(const void *path, const void *pack_entry);
172
173
 
@@ -177,7 +178,7 @@ static int pack_entry_find(struct git_pack_entry *e,
177
178
  * a prefix of an identifier.
178
179
  * Sets GIT_EAMBIGUOUS if short oid is ambiguous.
179
180
  * This method assumes that len is between
180
- * GIT_OID_MINPREFIXLEN and GIT_OID_HEXSZ.
181
+ * GIT_OID_MINPREFIXLEN and the hexsize for the hash type.
181
182
  */
182
183
  static int pack_entry_find_prefix(
183
184
  struct git_pack_entry *e,
@@ -195,10 +196,10 @@ static int pack_entry_find_prefix(
195
196
 
196
197
  static int packfile_byname_search_cmp(const void *path_, const void *p_)
197
198
  {
198
- const git_buf *path = (const git_buf *)path_;
199
+ const git_str *path = (const git_str *)path_;
199
200
  const struct git_pack_file *p = (const struct git_pack_file *)p_;
200
201
 
201
- return strncmp(p->pack_name, git_buf_cstr(path), git_buf_len(path));
202
+ return strncmp(p->pack_name, git_str_cstr(path), git_str_len(path));
202
203
  }
203
204
 
204
205
  static int packfile_sort__cb(const void *a_, const void *b_)
@@ -231,27 +232,27 @@ static int packfile_sort__cb(const void *a_, const void *b_)
231
232
  }
232
233
 
233
234
 
234
- static int packfile_load__cb(void *data, git_buf *path)
235
+ static int packfile_load__cb(void *data, git_str *path)
235
236
  {
236
237
  struct pack_backend *backend = data;
237
238
  struct git_pack_file *pack;
238
- const char *path_str = git_buf_cstr(path);
239
- git_buf index_prefix = GIT_BUF_INIT;
240
- size_t cmp_len = git_buf_len(path);
239
+ const char *path_str = git_str_cstr(path);
240
+ git_str index_prefix = GIT_STR_INIT;
241
+ size_t cmp_len = git_str_len(path);
241
242
  int error;
242
243
 
243
244
  if (cmp_len <= strlen(".idx") || git__suffixcmp(path_str, ".idx") != 0)
244
245
  return 0; /* not an index */
245
246
 
246
247
  cmp_len -= strlen(".idx");
247
- git_buf_attach_notowned(&index_prefix, path_str, cmp_len);
248
+ git_str_attach_notowned(&index_prefix, path_str, cmp_len);
248
249
 
249
250
  if (git_vector_search2(NULL, &backend->midx_packs, packfile_byname_search_cmp, &index_prefix) == 0)
250
251
  return 0;
251
252
  if (git_vector_search2(NULL, &backend->packs, packfile_byname_search_cmp, &index_prefix) == 0)
252
253
  return 0;
253
254
 
254
- error = git_mwindow_get_pack(&pack, path->ptr);
255
+ error = git_mwindow_get_pack(&pack, path->ptr, backend->opts.oid_type);
255
256
 
256
257
  /* ignore missing .pack file as git does */
257
258
  if (error == GIT_ENOTFOUND) {
@@ -270,33 +271,34 @@ static int pack_entry_find(struct git_pack_entry *e, struct pack_backend *backen
270
271
  {
271
272
  struct git_pack_file *last_found = backend->last_found, *p;
272
273
  git_midx_entry midx_entry;
274
+ size_t oid_hexsize = git_oid_hexsize(backend->opts.oid_type);
273
275
  size_t i;
274
276
 
275
277
  if (backend->midx &&
276
- git_midx_entry_find(&midx_entry, backend->midx, oid, GIT_OID_HEXSZ) == 0 &&
278
+ git_midx_entry_find(&midx_entry, backend->midx, oid, oid_hexsize) == 0 &&
277
279
  midx_entry.pack_index < git_vector_length(&backend->midx_packs)) {
278
280
  e->offset = midx_entry.offset;
279
- git_oid_cpy(&e->sha1, &midx_entry.sha1);
281
+ git_oid_cpy(&e->id, &midx_entry.sha1);
280
282
  e->p = git_vector_get(&backend->midx_packs, midx_entry.pack_index);
281
283
  return 0;
282
284
  }
283
285
 
284
286
  if (last_found &&
285
- git_pack_entry_find(e, last_found, oid, GIT_OID_HEXSZ) == 0)
287
+ git_pack_entry_find(e, last_found, oid, oid_hexsize) == 0)
286
288
  return 0;
287
289
 
288
290
  git_vector_foreach(&backend->packs, i, p) {
289
291
  if (p == last_found)
290
292
  continue;
291
293
 
292
- if (git_pack_entry_find(e, p, oid, GIT_OID_HEXSZ) == 0) {
294
+ if (git_pack_entry_find(e, p, oid, oid_hexsize) == 0) {
293
295
  backend->last_found = p;
294
296
  return 0;
295
297
  }
296
298
  }
297
299
 
298
300
  return git_odb__error_notfound(
299
- "failed to find pack entry", oid, GIT_OID_HEXSZ);
301
+ "failed to find pack entry", oid, oid_hexsize);
300
302
  }
301
303
 
302
304
  static int pack_entry_find_prefix(
@@ -307,7 +309,7 @@ static int pack_entry_find_prefix(
307
309
  {
308
310
  int error;
309
311
  size_t i;
310
- git_oid found_full_oid = {{0}};
312
+ git_oid found_full_oid = GIT_OID_SHA1_ZERO;
311
313
  bool found = false;
312
314
  struct git_pack_file *last_found = backend->last_found, *p;
313
315
  git_midx_entry midx_entry;
@@ -318,9 +320,9 @@ static int pack_entry_find_prefix(
318
320
  return error;
319
321
  if (!error && midx_entry.pack_index < git_vector_length(&backend->midx_packs)) {
320
322
  e->offset = midx_entry.offset;
321
- git_oid_cpy(&e->sha1, &midx_entry.sha1);
323
+ git_oid_cpy(&e->id, &midx_entry.sha1);
322
324
  e->p = git_vector_get(&backend->midx_packs, midx_entry.pack_index);
323
- git_oid_cpy(&found_full_oid, &e->sha1);
325
+ git_oid_cpy(&found_full_oid, &e->id);
324
326
  found = true;
325
327
  }
326
328
  }
@@ -330,9 +332,9 @@ static int pack_entry_find_prefix(
330
332
  if (error == GIT_EAMBIGUOUS)
331
333
  return error;
332
334
  if (!error) {
333
- if (found && git_oid_cmp(&e->sha1, &found_full_oid))
335
+ if (found && git_oid_cmp(&e->id, &found_full_oid))
334
336
  return git_odb__error_ambiguous("found multiple pack entries");
335
- git_oid_cpy(&found_full_oid, &e->sha1);
337
+ git_oid_cpy(&found_full_oid, &e->id);
336
338
  found = true;
337
339
  }
338
340
  }
@@ -345,9 +347,9 @@ static int pack_entry_find_prefix(
345
347
  if (error == GIT_EAMBIGUOUS)
346
348
  return error;
347
349
  if (!error) {
348
- if (found && git_oid_cmp(&e->sha1, &found_full_oid))
350
+ if (found && git_oid_cmp(&e->id, &found_full_oid))
349
351
  return git_odb__error_ambiguous("found multiple pack entries");
350
- git_oid_cpy(&found_full_oid, &e->sha1);
352
+ git_oid_cpy(&found_full_oid, &e->id);
351
353
  found = true;
352
354
  backend->last_found = p;
353
355
  }
@@ -404,29 +406,32 @@ static int process_multi_pack_index_pack(
404
406
  int error;
405
407
  struct git_pack_file *pack;
406
408
  size_t found_position;
407
- git_buf pack_path = GIT_BUF_INIT, index_prefix = GIT_BUF_INIT;
409
+ git_str pack_path = GIT_STR_INIT, index_prefix = GIT_STR_INIT;
408
410
 
409
- error = git_buf_joinpath(&pack_path, backend->pack_folder, packfile_name);
411
+ error = git_str_joinpath(&pack_path, backend->pack_folder, packfile_name);
410
412
  if (error < 0)
411
413
  return error;
412
414
 
413
415
  /* This is ensured by midx_parse_packfile_name() */
414
- if (git_buf_len(&pack_path) <= strlen(".idx") || git__suffixcmp(git_buf_cstr(&pack_path), ".idx") != 0)
416
+ if (git_str_len(&pack_path) <= strlen(".idx") || git__suffixcmp(git_str_cstr(&pack_path), ".idx") != 0)
415
417
  return git_odb__error_notfound("midx file contained a non-index", NULL, 0);
416
418
 
417
- git_buf_attach_notowned(&index_prefix, git_buf_cstr(&pack_path), git_buf_len(&pack_path) - strlen(".idx"));
419
+ git_str_attach_notowned(&index_prefix, git_str_cstr(&pack_path), git_str_len(&pack_path) - strlen(".idx"));
418
420
 
419
421
  if (git_vector_search2(&found_position, &backend->packs, packfile_byname_search_cmp, &index_prefix) == 0) {
420
422
  /* Pack was found in the packs list. Moving it to the midx_packs list. */
421
- git_buf_dispose(&pack_path);
423
+ git_str_dispose(&pack_path);
422
424
  git_vector_set(NULL, &backend->midx_packs, i, git_vector_get(&backend->packs, found_position));
423
425
  git_vector_remove(&backend->packs, found_position);
424
426
  return 0;
425
427
  }
426
428
 
427
429
  /* Pack was not found. Allocate a new one. */
428
- error = git_mwindow_get_pack(&pack, git_buf_cstr(&pack_path));
429
- git_buf_dispose(&pack_path);
430
+ error = git_mwindow_get_pack(
431
+ &pack,
432
+ git_str_cstr(&pack_path),
433
+ backend->opts.oid_type);
434
+ git_str_dispose(&pack_path);
430
435
  if (error < 0)
431
436
  return error;
432
437
 
@@ -442,11 +447,11 @@ static int process_multi_pack_index_pack(
442
447
  static int refresh_multi_pack_index(struct pack_backend *backend)
443
448
  {
444
449
  int error;
445
- git_buf midx_path = GIT_BUF_INIT;
450
+ git_str midx_path = GIT_STR_INIT;
446
451
  const char *packfile_name;
447
452
  size_t i;
448
453
 
449
- error = git_buf_joinpath(&midx_path, backend->pack_folder, "multi-pack-index");
454
+ error = git_str_joinpath(&midx_path, backend->pack_folder, "multi-pack-index");
450
455
  if (error < 0)
451
456
  return error;
452
457
 
@@ -457,19 +462,19 @@ static int refresh_multi_pack_index(struct pack_backend *backend)
457
462
  * refreshing the new multi-pack-index fails, or the file is deleted.
458
463
  */
459
464
  if (backend->midx) {
460
- if (!git_midx_needs_refresh(backend->midx, git_buf_cstr(&midx_path))) {
461
- git_buf_dispose(&midx_path);
465
+ if (!git_midx_needs_refresh(backend->midx, git_str_cstr(&midx_path))) {
466
+ git_str_dispose(&midx_path);
462
467
  return 0;
463
468
  }
464
469
  error = remove_multi_pack_index(backend);
465
470
  if (error < 0) {
466
- git_buf_dispose(&midx_path);
471
+ git_str_dispose(&midx_path);
467
472
  return error;
468
473
  }
469
474
  }
470
475
 
471
- error = git_midx_open(&backend->midx, git_buf_cstr(&midx_path));
472
- git_buf_dispose(&midx_path);
476
+ error = git_midx_open(&backend->midx, git_str_cstr(&midx_path));
477
+ git_str_dispose(&midx_path);
473
478
  if (error < 0)
474
479
  return error;
475
480
 
@@ -505,7 +510,7 @@ static int pack_backend__refresh(git_odb_backend *backend_)
505
510
  {
506
511
  int error;
507
512
  struct stat st;
508
- git_buf path = GIT_BUF_INIT;
513
+ git_str path = GIT_STR_INIT;
509
514
  struct pack_backend *backend = (struct pack_backend *)backend_;
510
515
 
511
516
  if (backend->pack_folder == NULL)
@@ -523,10 +528,10 @@ static int pack_backend__refresh(git_odb_backend *backend_)
523
528
  }
524
529
 
525
530
  /* reload all packs */
526
- git_buf_sets(&path, backend->pack_folder);
527
- error = git_path_direach(&path, 0, packfile_load__cb, backend);
531
+ git_str_sets(&path, backend->pack_folder);
532
+ error = git_fs_path_direach(&path, 0, packfile_load__cb, backend);
528
533
 
529
- git_buf_dispose(&path);
534
+ git_str_dispose(&path);
530
535
  git_vector_sort(&backend->packs);
531
536
 
532
537
  return error;
@@ -596,32 +601,33 @@ static int pack_backend__read_prefix(
596
601
  void **buffer_p,
597
602
  size_t *len_p,
598
603
  git_object_t *type_p,
599
- git_odb_backend *backend,
604
+ git_odb_backend *_backend,
600
605
  const git_oid *short_oid,
601
606
  size_t len)
602
607
  {
608
+ struct pack_backend *backend = (struct pack_backend *)_backend;
603
609
  int error = 0;
604
610
 
605
611
  if (len < GIT_OID_MINPREFIXLEN)
606
612
  error = git_odb__error_ambiguous("prefix length too short");
607
613
 
608
- else if (len >= GIT_OID_HEXSZ) {
614
+ else if (len >= git_oid_hexsize(backend->opts.oid_type)) {
609
615
  /* We can fall back to regular read method */
610
- error = pack_backend__read(buffer_p, len_p, type_p, backend, short_oid);
616
+ error = pack_backend__read(buffer_p, len_p, type_p, _backend, short_oid);
611
617
  if (!error)
612
618
  git_oid_cpy(out_oid, short_oid);
613
619
  } else {
614
620
  struct git_pack_entry e;
615
621
  git_rawobj raw = {NULL};
616
622
 
617
- if ((error = pack_entry_find_prefix(
618
- &e, (struct pack_backend *)backend, short_oid, len)) == 0 &&
619
- (error = git_packfile_unpack(&raw, e.p, &e.offset)) == 0)
623
+ if ((error = pack_entry_find_prefix(&e,
624
+ backend, short_oid, len)) == 0 &&
625
+ (error = git_packfile_unpack(&raw, e.p, &e.offset)) == 0)
620
626
  {
621
627
  *buffer_p = raw.data;
622
628
  *len_p = raw.len;
623
629
  *type_p = raw.type;
624
- git_oid_cpy(out_oid, &e.sha1);
630
+ git_oid_cpy(out_oid, &e.id);
625
631
  }
626
632
  }
627
633
 
@@ -642,7 +648,7 @@ static int pack_backend__exists_prefix(
642
648
  struct git_pack_entry e = {0};
643
649
 
644
650
  error = pack_entry_find_prefix(&e, pb, short_id, len);
645
- git_oid_cpy(out, &e.sha1);
651
+ git_oid_cpy(out, &e.id);
646
652
  return error;
647
653
  }
648
654
 
@@ -712,6 +718,7 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
712
718
  git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
713
719
  struct pack_backend *backend;
714
720
  struct pack_writepack *writepack;
721
+ int error;
715
722
 
716
723
  GIT_ASSERT_ARG(out);
717
724
  GIT_ASSERT_ARG(_backend);
@@ -726,11 +733,20 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
726
733
  writepack = git__calloc(1, sizeof(struct pack_writepack));
727
734
  GIT_ERROR_CHECK_ALLOC(writepack);
728
735
 
729
- if (git_indexer_new(&writepack->indexer,
730
- backend->pack_folder, 0, odb, &opts) < 0) {
731
- git__free(writepack);
736
+ #ifdef GIT_EXPERIMENTAL_SHA256
737
+ opts.odb = odb;
738
+
739
+ error = git_indexer_new(&writepack->indexer,
740
+ backend->pack_folder,
741
+ backend->opts.oid_type,
742
+ &opts);
743
+ #else
744
+ error = git_indexer_new(&writepack->indexer,
745
+ backend->pack_folder, 0, odb, &opts);
746
+ #endif
747
+
748
+ if (error < 0)
732
749
  return -1;
733
- }
734
750
 
735
751
  writepack->parent.backend = _backend;
736
752
  writepack->parent.append = pack_backend__writepack_append;
@@ -743,21 +759,21 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
743
759
  }
744
760
 
745
761
  static int get_idx_path(
746
- git_buf *idx_path,
762
+ git_str *idx_path,
747
763
  struct pack_backend *backend,
748
764
  struct git_pack_file *p)
749
765
  {
750
766
  size_t path_len;
751
767
  int error;
752
768
 
753
- error = git_path_prettify(idx_path, p->pack_name, backend->pack_folder);
769
+ error = git_fs_path_prettify(idx_path, p->pack_name, backend->pack_folder);
754
770
  if (error < 0)
755
771
  return error;
756
- path_len = git_buf_len(idx_path);
757
- if (path_len <= strlen(".pack") || git__suffixcmp(git_buf_cstr(idx_path), ".pack") != 0)
772
+ path_len = git_str_len(idx_path);
773
+ if (path_len <= strlen(".pack") || git__suffixcmp(git_str_cstr(idx_path), ".pack") != 0)
758
774
  return git_odb__error_notfound("packfile does not end in .pack", NULL, 0);
759
775
  path_len -= strlen(".pack");
760
- error = git_buf_splice(idx_path, path_len, strlen(".pack"), ".idx", strlen(".idx"));
776
+ error = git_str_splice(idx_path, path_len, strlen(".pack"), ".idx", strlen(".idx"));
761
777
  if (error < 0)
762
778
  return error;
763
779
 
@@ -781,22 +797,22 @@ static int pack_backend__writemidx(git_odb_backend *_backend)
781
797
  return error;
782
798
 
783
799
  git_vector_foreach(&backend->midx_packs, i, p) {
784
- git_buf idx_path = GIT_BUF_INIT;
800
+ git_str idx_path = GIT_STR_INIT;
785
801
  error = get_idx_path(&idx_path, backend, p);
786
802
  if (error < 0)
787
803
  goto cleanup;
788
- error = git_midx_writer_add(w, git_buf_cstr(&idx_path));
789
- git_buf_dispose(&idx_path);
804
+ error = git_midx_writer_add(w, git_str_cstr(&idx_path));
805
+ git_str_dispose(&idx_path);
790
806
  if (error < 0)
791
807
  goto cleanup;
792
808
  }
793
809
  git_vector_foreach(&backend->packs, i, p) {
794
- git_buf idx_path = GIT_BUF_INIT;
810
+ git_str idx_path = GIT_STR_INIT;
795
811
  error = get_idx_path(&idx_path, backend, p);
796
812
  if (error < 0)
797
813
  goto cleanup;
798
- error = git_midx_writer_add(w, git_buf_cstr(&idx_path));
799
- git_buf_dispose(&idx_path);
814
+ error = git_midx_writer_add(w, git_str_cstr(&idx_path));
815
+ git_str_dispose(&idx_path);
800
816
  if (error < 0)
801
817
  goto cleanup;
802
818
  }
@@ -840,7 +856,10 @@ static void pack_backend__free(git_odb_backend *_backend)
840
856
  git__free(backend);
841
857
  }
842
858
 
843
- static int pack_backend__alloc(struct pack_backend **out, size_t initial_size)
859
+ static int pack_backend__alloc(
860
+ struct pack_backend **out,
861
+ size_t initial_size,
862
+ const git_odb_backend_pack_options *opts)
844
863
  {
845
864
  struct pack_backend *backend = git__calloc(1, sizeof(struct pack_backend));
846
865
  GIT_ERROR_CHECK_ALLOC(backend);
@@ -849,12 +868,19 @@ static int pack_backend__alloc(struct pack_backend **out, size_t initial_size)
849
868
  git__free(backend);
850
869
  return -1;
851
870
  }
871
+
852
872
  if (git_vector_init(&backend->packs, initial_size, packfile_sort__cb) < 0) {
853
873
  git_vector_free(&backend->midx_packs);
854
874
  git__free(backend);
855
875
  return -1;
856
876
  }
857
877
 
878
+ if (opts)
879
+ memcpy(&backend->opts, opts, sizeof(git_odb_backend_pack_options));
880
+
881
+ if (!backend->opts.oid_type)
882
+ backend->opts.oid_type = GIT_OID_DEFAULT;
883
+
858
884
  backend->parent.version = GIT_ODB_BACKEND_VERSION;
859
885
 
860
886
  backend->parent.read = &pack_backend__read;
@@ -873,17 +899,31 @@ static int pack_backend__alloc(struct pack_backend **out, size_t initial_size)
873
899
  return 0;
874
900
  }
875
901
 
876
- int git_odb_backend_one_pack(git_odb_backend **backend_out, const char *idx)
902
+ #ifdef GIT_EXPERIMENTAL_SHA256
903
+ int git_odb_backend_one_pack(
904
+ git_odb_backend **backend_out,
905
+ const char *idx,
906
+ const git_odb_backend_pack_options *opts)
907
+ #else
908
+ int git_odb_backend_one_pack(
909
+ git_odb_backend **backend_out,
910
+ const char *idx)
911
+ #endif
877
912
  {
878
913
  struct pack_backend *backend = NULL;
879
914
  struct git_pack_file *packfile = NULL;
880
915
 
881
- if (pack_backend__alloc(&backend, 1) < 0)
916
+ #ifndef GIT_EXPERIMENTAL_SHA256
917
+ git_odb_backend_pack_options *opts = NULL;
918
+ #endif
919
+
920
+ git_oid_t oid_type = opts ? opts->oid_type : 0;
921
+
922
+ if (pack_backend__alloc(&backend, 1, opts) < 0)
882
923
  return -1;
883
924
 
884
- if (git_mwindow_get_pack(&packfile, idx) < 0 ||
885
- git_vector_insert(&backend->packs, packfile) < 0)
886
- {
925
+ if (git_mwindow_get_pack(&packfile, idx, oid_type) < 0 ||
926
+ git_vector_insert(&backend->packs, packfile) < 0) {
887
927
  pack_backend__free((git_odb_backend *)backend);
888
928
  return -1;
889
929
  }
@@ -892,19 +932,31 @@ int git_odb_backend_one_pack(git_odb_backend **backend_out, const char *idx)
892
932
  return 0;
893
933
  }
894
934
 
895
- int git_odb_backend_pack(git_odb_backend **backend_out, const char *objects_dir)
935
+ #ifdef GIT_EXPERIMENTAL_SHA256
936
+ int git_odb_backend_pack(
937
+ git_odb_backend **backend_out,
938
+ const char *objects_dir,
939
+ const git_odb_backend_pack_options *opts)
940
+ #else
941
+ int git_odb_backend_pack(
942
+ git_odb_backend **backend_out,
943
+ const char *objects_dir)
944
+ #endif
896
945
  {
897
946
  int error = 0;
898
947
  struct pack_backend *backend = NULL;
899
- git_buf path = GIT_BUF_INIT;
948
+ git_str path = GIT_STR_INIT;
949
+
950
+ #ifndef GIT_EXPERIMENTAL_SHA256
951
+ git_odb_backend_pack_options *opts = NULL;
952
+ #endif
900
953
 
901
- if (pack_backend__alloc(&backend, 8) < 0)
954
+ if (pack_backend__alloc(&backend, 8, opts) < 0)
902
955
  return -1;
903
956
 
904
- if (!(error = git_buf_joinpath(&path, objects_dir, "pack")) &&
905
- git_path_isdir(git_buf_cstr(&path)))
906
- {
907
- backend->pack_folder = git_buf_detach(&path);
957
+ if (!(error = git_str_joinpath(&path, objects_dir, "pack")) &&
958
+ git_fs_path_isdir(git_str_cstr(&path))) {
959
+ backend->pack_folder = git_str_detach(&path);
908
960
  error = pack_backend__refresh((git_odb_backend *)backend);
909
961
  }
910
962
 
@@ -915,7 +967,7 @@ int git_odb_backend_pack(git_odb_backend **backend_out, const char *objects_dir)
915
967
 
916
968
  *backend_out = (git_odb_backend *)backend;
917
969
 
918
- git_buf_dispose(&path);
970
+ git_str_dispose(&path);
919
971
 
920
972
  return error;
921
973
  }