rugged 1.3.2 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +7 -4
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_blame.c +2 -0
  7. data/ext/rugged/rugged_blob.c +3 -0
  8. data/ext/rugged/rugged_commit.c +1 -0
  9. data/ext/rugged/rugged_config.c +9 -2
  10. data/ext/rugged/rugged_diff.c +1 -0
  11. data/ext/rugged/rugged_index.c +2 -0
  12. data/ext/rugged/rugged_patch.c +1 -0
  13. data/ext/rugged/rugged_rebase.c +1 -0
  14. data/ext/rugged/rugged_reference.c +1 -0
  15. data/ext/rugged/rugged_remote.c +28 -10
  16. data/ext/rugged/rugged_repo.c +7 -9
  17. data/ext/rugged/rugged_revwalk.c +5 -1
  18. data/ext/rugged/rugged_settings.c +5 -0
  19. data/ext/rugged/rugged_submodule.c +1 -0
  20. data/ext/rugged/rugged_tag.c +1 -0
  21. data/ext/rugged/rugged_tree.c +4 -0
  22. data/lib/rugged/index.rb +1 -1
  23. data/lib/rugged/tree.rb +5 -1
  24. data/lib/rugged/version.rb +1 -1
  25. data/vendor/libgit2/CMakeLists.txt +132 -288
  26. data/vendor/libgit2/COPYING +106 -19
  27. data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
  28. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  29. data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
  30. data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
  31. data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
  32. data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
  33. data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
  34. data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
  35. data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
  36. data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
  37. data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
  38. data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
  39. data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
  40. data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
  41. data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
  42. data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
  43. data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
  44. data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
  45. data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
  46. data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
  47. data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
  48. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
  49. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
  50. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
  51. data/vendor/libgit2/cmake/SelectHashes.cmake +91 -53
  52. data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
  53. data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
  54. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
  55. data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
  56. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
  57. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
  58. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
  59. data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
  60. data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
  61. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
  62. data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
  63. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
  64. data/vendor/libgit2/deps/zlib/adler32.c +7 -0
  65. data/vendor/libgit2/deps/zlib/crc32.c +975 -288
  66. data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
  67. data/vendor/libgit2/deps/zlib/deflate.c +83 -31
  68. data/vendor/libgit2/deps/zlib/deflate.h +12 -15
  69. data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
  70. data/vendor/libgit2/deps/zlib/infback.c +2 -1
  71. data/vendor/libgit2/deps/zlib/inffast.c +14 -14
  72. data/vendor/libgit2/deps/zlib/inflate.c +39 -8
  73. data/vendor/libgit2/deps/zlib/inflate.h +3 -2
  74. data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
  75. data/vendor/libgit2/deps/zlib/trees.c +27 -48
  76. data/vendor/libgit2/deps/zlib/zlib.h +126 -100
  77. data/vendor/libgit2/deps/zlib/zutil.c +2 -2
  78. data/vendor/libgit2/deps/zlib/zutil.h +12 -9
  79. data/vendor/libgit2/include/git2/apply.h +16 -2
  80. data/vendor/libgit2/include/git2/attr.h +11 -2
  81. data/vendor/libgit2/include/git2/blame.h +4 -1
  82. data/vendor/libgit2/include/git2/blob.h +14 -1
  83. data/vendor/libgit2/include/git2/branch.h +4 -2
  84. data/vendor/libgit2/include/git2/buffer.h +18 -78
  85. data/vendor/libgit2/include/git2/cert.h +2 -2
  86. data/vendor/libgit2/include/git2/checkout.h +5 -2
  87. data/vendor/libgit2/include/git2/clone.h +3 -3
  88. data/vendor/libgit2/include/git2/commit.h +2 -0
  89. data/vendor/libgit2/include/git2/common.h +28 -7
  90. data/vendor/libgit2/include/git2/config.h +25 -9
  91. data/vendor/libgit2/include/git2/credential.h +2 -1
  92. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  93. data/vendor/libgit2/include/git2/deprecated.h +9 -1
  94. data/vendor/libgit2/include/git2/describe.h +7 -2
  95. data/vendor/libgit2/include/git2/diff.h +18 -10
  96. data/vendor/libgit2/include/git2/email.h +1 -1
  97. data/vendor/libgit2/include/git2/errors.h +17 -3
  98. data/vendor/libgit2/include/git2/experimental.h +20 -0
  99. data/vendor/libgit2/include/git2/filter.h +7 -2
  100. data/vendor/libgit2/include/git2/graph.h +1 -0
  101. data/vendor/libgit2/include/git2/ignore.h +1 -1
  102. data/vendor/libgit2/include/git2/index.h +11 -5
  103. data/vendor/libgit2/include/git2/indexer.h +48 -0
  104. data/vendor/libgit2/include/git2/merge.h +24 -4
  105. data/vendor/libgit2/include/git2/message.h +2 -0
  106. data/vendor/libgit2/include/git2/object.h +49 -0
  107. data/vendor/libgit2/include/git2/odb.h +94 -13
  108. data/vendor/libgit2/include/git2/odb_backend.h +107 -19
  109. data/vendor/libgit2/include/git2/oid.h +115 -15
  110. data/vendor/libgit2/include/git2/pack.h +24 -8
  111. data/vendor/libgit2/include/git2/patch.h +8 -0
  112. data/vendor/libgit2/include/git2/pathspec.h +1 -1
  113. data/vendor/libgit2/include/git2/proxy.h +1 -1
  114. data/vendor/libgit2/include/git2/rebase.h +9 -1
  115. data/vendor/libgit2/include/git2/refdb.h +3 -0
  116. data/vendor/libgit2/include/git2/reflog.h +1 -1
  117. data/vendor/libgit2/include/git2/refs.h +2 -2
  118. data/vendor/libgit2/include/git2/remote.h +184 -37
  119. data/vendor/libgit2/include/git2/repository.h +34 -10
  120. data/vendor/libgit2/include/git2/reset.h +2 -2
  121. data/vendor/libgit2/include/git2/revparse.h +1 -1
  122. data/vendor/libgit2/include/git2/revwalk.h +4 -1
  123. data/vendor/libgit2/include/git2/signature.h +1 -1
  124. data/vendor/libgit2/include/git2/stash.h +61 -7
  125. data/vendor/libgit2/include/git2/status.h +14 -5
  126. data/vendor/libgit2/include/git2/strarray.h +0 -13
  127. data/vendor/libgit2/include/git2/submodule.h +7 -2
  128. data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
  129. data/vendor/libgit2/include/git2/sys/odb_backend.h +3 -6
  130. data/vendor/libgit2/include/git2/sys/remote.h +46 -0
  131. data/vendor/libgit2/include/git2/sys/stream.h +1 -1
  132. data/vendor/libgit2/include/git2/sys/transport.h +46 -39
  133. data/vendor/libgit2/include/git2/tag.h +1 -0
  134. data/vendor/libgit2/include/git2/tree.h +4 -3
  135. data/vendor/libgit2/include/git2/types.h +7 -7
  136. data/vendor/libgit2/include/git2/version.h +27 -6
  137. data/vendor/libgit2/include/git2/worktree.h +12 -2
  138. data/vendor/libgit2/include/git2.h +1 -0
  139. data/vendor/libgit2/src/CMakeLists.txt +177 -419
  140. data/vendor/libgit2/src/README.md +12 -0
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +57 -0
  142. data/vendor/libgit2/src/cli/README.md +26 -0
  143. data/vendor/libgit2/src/cli/cli.h +20 -0
  144. data/vendor/libgit2/src/cli/cmd.c +21 -0
  145. data/vendor/libgit2/src/cli/cmd.h +33 -0
  146. data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
  147. data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +154 -0
  149. data/vendor/libgit2/src/cli/cmd_help.c +86 -0
  150. data/vendor/libgit2/src/cli/error.h +51 -0
  151. data/vendor/libgit2/src/cli/main.c +106 -0
  152. data/vendor/libgit2/src/cli/opt.c +669 -0
  153. data/vendor/libgit2/src/cli/opt.h +349 -0
  154. data/vendor/libgit2/src/cli/opt_usage.c +194 -0
  155. data/vendor/libgit2/src/cli/opt_usage.h +35 -0
  156. data/vendor/libgit2/src/cli/progress.c +345 -0
  157. data/vendor/libgit2/src/cli/progress.h +117 -0
  158. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  159. data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
  160. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  161. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  162. data/vendor/libgit2/src/libgit2/CMakeLists.txt +141 -0
  163. data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +1 -1
  164. data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
  165. data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +18 -18
  166. data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
  167. data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +18 -18
  168. data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +18 -18
  169. data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +4 -4
  170. data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +18 -13
  171. data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +2 -0
  172. data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -1
  173. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
  174. data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
  175. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
  176. data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +15 -3
  177. data/vendor/libgit2/src/libgit2/buf.c +126 -0
  178. data/vendor/libgit2/src/libgit2/buf.h +50 -0
  179. data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +74 -68
  180. data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +13 -13
  181. data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +96 -67
  182. data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +178 -73
  183. data/vendor/libgit2/src/libgit2/commit.h +87 -0
  184. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +122 -89
  185. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +14 -4
  186. data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +7 -4
  187. data/vendor/libgit2/src/libgit2/common.h +55 -0
  188. data/vendor/libgit2/src/{config.c → libgit2/config.c} +101 -69
  189. data/vendor/libgit2/src/{config.h → libgit2/config.h} +15 -2
  190. data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +105 -93
  191. data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +9 -9
  192. data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +27 -23
  193. data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
  194. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +35 -27
  195. data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +30 -9
  196. data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +2 -4
  197. data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +34 -36
  198. data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +3 -3
  199. data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +44 -26
  200. data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +47 -18
  201. data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
  202. data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +112 -100
  203. data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
  204. data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
  205. data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +13 -8
  206. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
  207. data/vendor/libgit2/src/{email.c → libgit2/email.c} +55 -39
  208. data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
  209. data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +18 -18
  210. data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
  211. data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
  212. data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +72 -27
  213. data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -1
  214. data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +23 -23
  215. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +127 -53
  216. data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
  217. data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
  218. data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +35 -34
  219. data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
  220. data/vendor/libgit2/src/{index.c → libgit2/index.c} +91 -90
  221. data/vendor/libgit2/src/{index.h → libgit2/index.h} +6 -3
  222. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +173 -92
  223. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +71 -61
  224. data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +5 -5
  225. data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +46 -11
  226. data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +38 -36
  227. data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +30 -30
  228. data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
  229. data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +2 -2
  230. data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -3
  231. data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
  232. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +112 -92
  233. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +5 -4
  234. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +15 -12
  235. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +5 -2
  236. data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +1 -2
  237. data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +1 -1
  238. data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +25 -34
  239. data/vendor/libgit2/src/{object.c → libgit2/object.c} +135 -30
  240. data/vendor/libgit2/src/{object.h → libgit2/object.h} +12 -3
  241. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +228 -81
  242. data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
  243. data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
  244. data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +18 -5
  245. data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +137 -85
  246. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +136 -90
  247. data/vendor/libgit2/src/libgit2/oid.h +273 -0
  248. data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
  249. data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +56 -30
  250. data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +11 -6
  251. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +114 -84
  252. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +31 -16
  253. data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +4 -3
  254. data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
  255. data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +1 -0
  256. data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +27 -11
  257. data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
  258. data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +29 -29
  259. data/vendor/libgit2/src/libgit2/path.c +375 -0
  260. data/vendor/libgit2/src/libgit2/path.h +68 -0
  261. data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +6 -6
  262. data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
  263. data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
  264. data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
  265. data/vendor/libgit2/src/{push.c → libgit2/push.c} +43 -38
  266. data/vendor/libgit2/src/{push.h → libgit2/push.h} +4 -16
  267. data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
  268. data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
  269. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +119 -107
  270. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +506 -197
  271. data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +7 -5
  272. data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +1 -2
  273. data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +34 -32
  274. data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +2 -2
  275. data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +32 -37
  276. data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +5 -2
  277. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +718 -420
  278. data/vendor/libgit2/src/libgit2/remote.h +100 -0
  279. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +629 -386
  280. data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +20 -9
  281. data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
  282. data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +14 -14
  283. data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +71 -42
  284. data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +12 -8
  285. data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +12 -6
  286. data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -1
  287. data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +235 -61
  288. data/vendor/libgit2/src/{status.c → libgit2/status.c} +4 -1
  289. data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
  290. data/vendor/libgit2/src/libgit2/strarray.h +25 -0
  291. data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +8 -6
  292. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +1 -1
  293. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +7 -3
  294. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +3 -3
  295. data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +4 -1
  296. data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +177 -161
  297. data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +1 -1
  298. data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
  299. data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +53 -18
  300. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +73 -42
  301. data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
  302. data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +3 -3
  303. data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +2 -2
  304. data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
  305. data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
  306. data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +1 -1
  307. data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +1 -1
  308. data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +10 -10
  309. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
  310. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +2 -3
  311. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +12 -13
  312. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +10 -10
  313. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -1
  314. data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +9 -11
  315. data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +41 -20
  316. data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +2 -3
  317. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +75 -66
  318. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
  319. data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +138 -116
  320. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +92 -133
  321. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +35 -32
  322. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +177 -65
  323. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +97 -49
  324. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +365 -198
  325. data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +58 -59
  326. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +8 -8
  327. data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +2 -2
  328. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +93 -83
  329. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +4 -4
  330. data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +121 -94
  331. data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
  332. data/vendor/libgit2/src/libgit2/xdiff/git-xdiff.h +53 -0
  333. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +15 -15
  334. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +134 -108
  335. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +23 -7
  336. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +87 -78
  337. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +1 -12
  338. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +104 -117
  339. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +6 -17
  340. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +15 -20
  341. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +18 -7
  342. data/vendor/libgit2/src/util/CMakeLists.txt +80 -0
  343. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
  344. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  345. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  346. data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
  347. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  348. data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +1 -1
  349. data/vendor/libgit2/src/{date.c → util/date.c} +14 -20
  350. data/vendor/libgit2/src/util/date.h +33 -0
  351. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +29 -29
  352. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +2 -2
  353. data/vendor/libgit2/src/{path.c → util/fs_path.c} +453 -647
  354. data/vendor/libgit2/src/{path.h → util/fs_path.h} +221 -188
  355. data/vendor/libgit2/src/{futils.c → util/futils.c} +135 -90
  356. data/vendor/libgit2/src/{futils.h → util/futils.h} +28 -15
  357. data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +15 -1
  358. data/vendor/libgit2/src/{common.h → util/git2_util.h} +20 -59
  359. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  360. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  361. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
  362. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  363. data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
  364. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  365. data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
  366. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  367. data/vendor/libgit2/src/util/hash/openssl.c +195 -0
  368. data/vendor/libgit2/src/util/hash/openssl.h +45 -0
  369. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
  370. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  371. data/vendor/libgit2/src/util/hash/sha.h +70 -0
  372. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
  373. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  374. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  375. data/vendor/libgit2/src/util/hash.c +158 -0
  376. data/vendor/libgit2/src/util/hash.h +61 -0
  377. data/vendor/libgit2/src/{khash.h → util/khash.h} +1 -1
  378. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  379. data/vendor/libgit2/src/util/net.c +1003 -0
  380. data/vendor/libgit2/src/{net.h → util/net.h} +18 -4
  381. data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
  382. data/vendor/libgit2/src/{posix.c → util/posix.c} +3 -3
  383. data/vendor/libgit2/src/{posix.h → util/posix.h} +4 -1
  384. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +2 -2
  385. data/vendor/libgit2/src/util/rand.c +234 -0
  386. data/vendor/libgit2/src/util/rand.h +37 -0
  387. data/vendor/libgit2/src/{regexp.c → util/regexp.c} +4 -4
  388. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  389. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  390. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  391. data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +1 -1
  392. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +2 -2
  393. data/vendor/libgit2/src/{buffer.c → util/str.c} +157 -151
  394. data/vendor/libgit2/src/util/str.h +357 -0
  395. data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
  396. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  397. data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
  398. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  399. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
  400. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -4
  401. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -3
  402. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  403. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  404. data/vendor/libgit2/src/{util.c → util/util.c} +15 -15
  405. data/vendor/libgit2/src/{util.h → util/util.h} +4 -29
  406. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  407. data/vendor/libgit2/src/{vector.h → util/vector.h} +2 -2
  408. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  409. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  410. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  411. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  412. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +140 -9
  413. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
  414. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
  415. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +12 -28
  416. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  417. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  418. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  419. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
  420. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
  421. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
  422. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
  423. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  424. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  425. data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
  426. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
  427. metadata +402 -356
  428. data/vendor/libgit2/src/buffer.h +0 -374
  429. data/vendor/libgit2/src/commit.h +0 -46
  430. data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
  431. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  432. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  433. data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
  434. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  435. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  436. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  437. data/vendor/libgit2/src/hash/sha1.h +0 -38
  438. data/vendor/libgit2/src/hash.c +0 -110
  439. data/vendor/libgit2/src/hash.h +0 -46
  440. data/vendor/libgit2/src/message.h +0 -17
  441. data/vendor/libgit2/src/net.c +0 -540
  442. data/vendor/libgit2/src/oid.h +0 -51
  443. data/vendor/libgit2/src/remote.h +0 -55
  444. data/vendor/libgit2/src/sysdir.c +0 -347
  445. data/vendor/libgit2/src/win32/findfile.c +0 -230
  446. data/vendor/libgit2/src/win32/findfile.h +0 -19
  447. /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  448. /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  449. /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
  450. /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
  451. /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  452. /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
  453. /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
  454. /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
  455. /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
  456. /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
  457. /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
  458. /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
  459. /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
  460. /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
  461. /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  462. /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
  463. /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  464. /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  465. /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  466. /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
  467. /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  468. /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  469. /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
  470. /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  471. /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
  472. /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
  473. /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  474. /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
  475. /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
  476. /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  477. /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
  478. /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  479. /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  480. /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  481. /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  482. /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
  483. /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
  484. /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
  485. /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
  486. /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
  487. /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
  488. /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  489. /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  490. /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  491. /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  492. /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
  493. /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
  494. /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  495. /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  496. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  497. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
  498. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  499. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  500. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  501. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  502. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
  503. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
  504. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  505. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
  506. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  507. /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
  508. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
  509. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
  510. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  511. /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
  512. /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  513. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
  514. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
  515. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
  516. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
  517. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
  518. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
  519. /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
  520. /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
  521. /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
  522. /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
  523. /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
  524. /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  525. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  526. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  527. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  528. /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
  529. /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
  530. /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  531. /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
  532. /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  533. /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  534. /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  535. /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
  536. /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  537. /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  538. /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
  539. /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  540. /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  541. /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  542. /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  543. /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
  544. /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  545. /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  546. /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
  547. /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
@@ -8,14 +8,15 @@
8
8
  #include "midx.h"
9
9
 
10
10
  #include "array.h"
11
- #include "buffer.h"
11
+ #include "buf.h"
12
12
  #include "filebuf.h"
13
13
  #include "futils.h"
14
14
  #include "hash.h"
15
15
  #include "odb.h"
16
16
  #include "pack.h"
17
- #include "path.h"
17
+ #include "fs_path.h"
18
18
  #include "repository.h"
19
+ #include "str.h"
19
20
 
20
21
  #define MIDX_SIGNATURE 0x4d494458 /* "MIDX" */
21
22
  #define MIDX_VERSION 1
@@ -114,19 +115,19 @@ static int midx_parse_oid_lookup(
114
115
  struct git_midx_chunk *chunk_oid_lookup)
115
116
  {
116
117
  uint32_t i;
117
- git_oid *oid, *prev_oid, zero_oid = {{0}};
118
+ unsigned char *oid, *prev_oid, zero_oid[GIT_OID_SHA1_SIZE] = {0};
118
119
 
119
120
  if (chunk_oid_lookup->offset == 0)
120
121
  return midx_error("missing OID Lookup chunk");
121
122
  if (chunk_oid_lookup->length == 0)
122
123
  return midx_error("empty OID Lookup chunk");
123
- if (chunk_oid_lookup->length != idx->num_objects * GIT_OID_RAWSZ)
124
+ if (chunk_oid_lookup->length != idx->num_objects * GIT_OID_SHA1_SIZE)
124
125
  return midx_error("OID Lookup chunk has wrong length");
125
126
 
126
- idx->oid_lookup = oid = (git_oid *)(data + chunk_oid_lookup->offset);
127
- prev_oid = &zero_oid;
128
- for (i = 0; i < idx->num_objects; ++i, ++oid) {
129
- if (git_oid_cmp(prev_oid, oid) >= 0)
127
+ idx->oid_lookup = oid = (unsigned char *)(data + chunk_oid_lookup->offset);
128
+ prev_oid = zero_oid;
129
+ for (i = 0; i < idx->num_objects; ++i, oid += GIT_OID_SHA1_SIZE) {
130
+ if (git_oid_raw_cmp(prev_oid, oid, GIT_OID_SHA1_SIZE) >= 0)
130
131
  return midx_error("OID Lookup index is non-monotonic");
131
132
  prev_oid = oid;
132
133
  }
@@ -177,7 +178,7 @@ int git_midx_parse(
177
178
  struct git_midx_chunk *last_chunk;
178
179
  uint32_t i;
179
180
  off64_t last_chunk_offset, chunk_offset, trailer_offset;
180
- git_oid idx_checksum = {{0}};
181
+ size_t checksum_size;
181
182
  int error;
182
183
  struct git_midx_chunk chunk_packfile_names = {0},
183
184
  chunk_oid_fanout = {0},
@@ -187,7 +188,7 @@ int git_midx_parse(
187
188
 
188
189
  GIT_ASSERT_ARG(idx);
189
190
 
190
- if (size < sizeof(struct git_midx_header) + GIT_OID_RAWSZ)
191
+ if (size < sizeof(struct git_midx_header) + GIT_OID_SHA1_SIZE)
191
192
  return midx_error("multi-pack index is too short");
192
193
 
193
194
  hdr = ((struct git_midx_header *)data);
@@ -207,21 +208,24 @@ int git_midx_parse(
207
208
  last_chunk_offset =
208
209
  sizeof(struct git_midx_header) +
209
210
  (1 + hdr->chunks) * 12;
210
- trailer_offset = size - GIT_OID_RAWSZ;
211
+
212
+ checksum_size = GIT_HASH_SHA1_SIZE;
213
+ trailer_offset = size - checksum_size;
214
+
211
215
  if (trailer_offset < last_chunk_offset)
212
216
  return midx_error("wrong index size");
213
- git_oid_cpy(&idx->checksum, (git_oid *)(data + trailer_offset));
214
-
215
- if (git_hash_buf(&idx_checksum, data, (size_t)trailer_offset) < 0)
216
- return midx_error("could not calculate signature");
217
- if (!git_oid_equal(&idx_checksum, &idx->checksum))
218
- return midx_error("index signature mismatch");
217
+ memcpy(idx->checksum, data + trailer_offset, checksum_size);
219
218
 
220
219
  chunk_hdr = data + sizeof(struct git_midx_header);
221
220
  last_chunk = NULL;
222
221
  for (i = 0; i < hdr->chunks; ++i, chunk_hdr += 12) {
223
- chunk_offset = ((off64_t)ntohl(*((uint32_t *)(chunk_hdr + 4)))) << 32 |
224
- ((off64_t)ntohl(*((uint32_t *)(chunk_hdr + 8))));
222
+ uint32_t chunk_id = ntohl(*((uint32_t *)(chunk_hdr + 0)));
223
+ uint64_t high_offset = ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 4)))) & 0xffffffffu;
224
+ uint64_t low_offset = ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 8)))) & 0xffffffffu;
225
+
226
+ if (high_offset >= INT32_MAX)
227
+ return midx_error("chunk offset out of range");
228
+ chunk_offset = (off64_t)(high_offset << 32 | low_offset);
225
229
  if (chunk_offset < last_chunk_offset)
226
230
  return midx_error("chunks are non-monotonic");
227
231
  if (chunk_offset >= trailer_offset)
@@ -230,7 +234,7 @@ int git_midx_parse(
230
234
  last_chunk->length = (size_t)(chunk_offset - last_chunk_offset);
231
235
  last_chunk_offset = chunk_offset;
232
236
 
233
- switch (ntohl(*((uint32_t *)(chunk_hdr + 0)))) {
237
+ switch (chunk_id) {
234
238
  case MIDX_PACKFILE_NAMES_ID:
235
239
  chunk_packfile_names.offset = last_chunk_offset;
236
240
  last_chunk = &chunk_packfile_names;
@@ -313,7 +317,7 @@ int git_midx_open(
313
317
  idx = git__calloc(1, sizeof(git_midx_file));
314
318
  GIT_ERROR_CHECK_ALLOC(idx);
315
319
 
316
- error = git_buf_sets(&idx->filename, path);
320
+ error = git_str_sets(&idx->filename, path);
317
321
  if (error < 0)
318
322
  return error;
319
323
 
@@ -340,7 +344,8 @@ bool git_midx_needs_refresh(
340
344
  git_file fd = -1;
341
345
  struct stat st;
342
346
  ssize_t bytes_read;
343
- git_oid idx_checksum = {{0}};
347
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
348
+ size_t checksum_size;
344
349
 
345
350
  /* TODO: properly open the file without access time using O_NOATIME */
346
351
  fd = git_futils_open_ro(path);
@@ -359,13 +364,14 @@ bool git_midx_needs_refresh(
359
364
  return true;
360
365
  }
361
366
 
362
- bytes_read = p_pread(fd, &idx_checksum, GIT_OID_RAWSZ, st.st_size - GIT_OID_RAWSZ);
367
+ checksum_size = GIT_HASH_SHA1_SIZE;
368
+ bytes_read = p_pread(fd, checksum, checksum_size, st.st_size - GIT_OID_SHA1_SIZE);
363
369
  p_close(fd);
364
370
 
365
- if (bytes_read != GIT_OID_RAWSZ)
371
+ if (bytes_read != (ssize_t)checksum_size)
366
372
  return true;
367
373
 
368
- return !git_oid_equal(&idx_checksum, &idx->checksum);
374
+ return (memcmp(checksum, idx->checksum, checksum_size) != 0);
369
375
  }
370
376
 
371
377
  int git_midx_entry_find(
@@ -377,7 +383,7 @@ int git_midx_entry_find(
377
383
  int pos, found = 0;
378
384
  size_t pack_index;
379
385
  uint32_t hi, lo;
380
- const git_oid *current = NULL;
386
+ unsigned char *current = NULL;
381
387
  const unsigned char *object_offset;
382
388
  off64_t offset;
383
389
 
@@ -386,31 +392,30 @@ int git_midx_entry_find(
386
392
  hi = ntohl(idx->oid_fanout[(int)short_oid->id[0]]);
387
393
  lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(idx->oid_fanout[(int)short_oid->id[0] - 1]));
388
394
 
389
- pos = git_pack__lookup_sha1(idx->oid_lookup, GIT_OID_RAWSZ, lo, hi, short_oid->id);
395
+ pos = git_pack__lookup_id(idx->oid_lookup, GIT_OID_SHA1_SIZE, lo, hi, short_oid->id, GIT_OID_SHA1);
390
396
 
391
397
  if (pos >= 0) {
392
398
  /* An object matching exactly the oid was found */
393
399
  found = 1;
394
- current = idx->oid_lookup + pos;
400
+ current = idx->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
395
401
  } else {
396
402
  /* No object was found */
397
403
  /* pos refers to the object with the "closest" oid to short_oid */
398
404
  pos = -1 - pos;
399
405
  if (pos < (int)idx->num_objects) {
400
- current = idx->oid_lookup + pos;
406
+ current = idx->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
401
407
 
402
- if (!git_oid_ncmp(short_oid, current, len))
408
+ if (!git_oid_raw_ncmp(short_oid->id, current, len))
403
409
  found = 1;
404
410
  }
405
411
  }
406
412
 
407
- if (found && len != GIT_OID_HEXSZ && pos + 1 < (int)idx->num_objects) {
413
+ if (found && len != GIT_OID_SHA1_HEXSIZE && pos + 1 < (int)idx->num_objects) {
408
414
  /* Check for ambiguousity */
409
- const git_oid *next = current + 1;
415
+ const unsigned char *next = current + GIT_OID_SHA1_SIZE;
410
416
 
411
- if (!git_oid_ncmp(short_oid, next, len)) {
417
+ if (!git_oid_raw_ncmp(short_oid->id, next, len))
412
418
  found = 2;
413
- }
414
419
  }
415
420
 
416
421
  if (!found)
@@ -420,8 +425,8 @@ int git_midx_entry_find(
420
425
 
421
426
  object_offset = idx->object_offsets + pos * 8;
422
427
  offset = ntohl(*((uint32_t *)(object_offset + 4)));
423
- if (offset & 0x80000000) {
424
- uint32_t object_large_offsets_pos = offset & 0x7fffffff;
428
+ if (idx->object_large_offsets && offset & 0x80000000) {
429
+ uint32_t object_large_offsets_pos = (uint32_t) (offset ^ 0x80000000);
425
430
  const unsigned char *object_large_offsets_index = idx->object_large_offsets;
426
431
 
427
432
  /* Make sure we're not being sent out of bounds */
@@ -438,7 +443,7 @@ int git_midx_entry_find(
438
443
  return midx_error("invalid index into the packfile names table");
439
444
  e->pack_index = pack_index;
440
445
  e->offset = offset;
441
- git_oid_cpy(&e->sha1, current);
446
+ git_oid__fromraw(&e->sha1, current, GIT_OID_SHA1);
442
447
  return 0;
443
448
  }
444
449
 
@@ -447,13 +452,17 @@ int git_midx_foreach_entry(
447
452
  git_odb_foreach_cb cb,
448
453
  void *data)
449
454
  {
455
+ git_oid oid;
450
456
  size_t i;
451
457
  int error;
452
458
 
453
459
  GIT_ASSERT_ARG(idx);
454
460
 
455
461
  for (i = 0; i < idx->num_objects; ++i) {
456
- if ((error = cb(&idx->oid_lookup[i], data)) != 0)
462
+ if ((error = git_oid__fromraw(&oid, &idx->oid_lookup[i * GIT_OID_SHA1_SIZE], GIT_OID_SHA1)) < 0)
463
+ return error;
464
+
465
+ if ((error = cb(&oid, data)) != 0)
457
466
  return git_error_set_after_callback(error);
458
467
  }
459
468
 
@@ -477,7 +486,7 @@ void git_midx_free(git_midx_file *idx)
477
486
  if (!idx)
478
487
  return;
479
488
 
480
- git_buf_dispose(&idx->filename);
489
+ git_str_dispose(&idx->filename);
481
490
  git_midx_close(idx);
482
491
  git__free(idx);
483
492
  }
@@ -497,14 +506,14 @@ int git_midx_writer_new(
497
506
  git_midx_writer *w = git__calloc(1, sizeof(git_midx_writer));
498
507
  GIT_ERROR_CHECK_ALLOC(w);
499
508
 
500
- if (git_buf_sets(&w->pack_dir, pack_dir) < 0) {
509
+ if (git_str_sets(&w->pack_dir, pack_dir) < 0) {
501
510
  git__free(w);
502
511
  return -1;
503
512
  }
504
- git_path_squash_slashes(&w->pack_dir);
513
+ git_fs_path_squash_slashes(&w->pack_dir);
505
514
 
506
515
  if (git_vector_init(&w->packs, 0, packfile__cmp) < 0) {
507
- git_buf_dispose(&w->pack_dir);
516
+ git_str_dispose(&w->pack_dir);
508
517
  git__free(w);
509
518
  return -1;
510
519
  }
@@ -524,7 +533,7 @@ void git_midx_writer_free(git_midx_writer *w)
524
533
  git_vector_foreach (&w->packs, i, p)
525
534
  git_mwindow_put_pack(p);
526
535
  git_vector_free(&w->packs);
527
- git_buf_dispose(&w->pack_dir);
536
+ git_str_dispose(&w->pack_dir);
528
537
  git__free(w);
529
538
  }
530
539
 
@@ -532,16 +541,17 @@ int git_midx_writer_add(
532
541
  git_midx_writer *w,
533
542
  const char *idx_path)
534
543
  {
535
- git_buf idx_path_buf = GIT_BUF_INIT;
544
+ git_str idx_path_buf = GIT_STR_INIT;
536
545
  int error;
537
546
  struct git_pack_file *p;
538
547
 
539
- error = git_path_prettify(&idx_path_buf, idx_path, git_buf_cstr(&w->pack_dir));
548
+ error = git_fs_path_prettify(&idx_path_buf, idx_path, git_str_cstr(&w->pack_dir));
540
549
  if (error < 0)
541
550
  return error;
542
551
 
543
- error = git_mwindow_get_pack(&p, git_buf_cstr(&idx_path_buf));
544
- git_buf_dispose(&idx_path_buf);
552
+ /* TODO: SHA256 */
553
+ error = git_mwindow_get_pack(&p, git_str_cstr(&idx_path_buf), 0);
554
+ git_str_dispose(&idx_path_buf);
545
555
  if (error < 0)
546
556
  return error;
547
557
 
@@ -613,8 +623,8 @@ static int write_chunk_header(int chunk_id, off64_t offset, midx_write_cb write_
613
623
 
614
624
  static int midx_write_buf(const char *buf, size_t size, void *data)
615
625
  {
616
- git_buf *b = (git_buf *)data;
617
- return git_buf_put(b, buf, size);
626
+ git_str *b = (git_str *)data;
627
+ return git_str_put(b, buf, size);
618
628
  }
619
629
 
620
630
  struct midx_write_hash_context {
@@ -648,11 +658,12 @@ static int midx_write(
648
658
  uint32_t object_large_offsets_count;
649
659
  uint32_t oid_fanout[256];
650
660
  off64_t offset;
651
- git_buf packfile_names = GIT_BUF_INIT,
652
- oid_lookup = GIT_BUF_INIT,
653
- object_offsets = GIT_BUF_INIT,
654
- object_large_offsets = GIT_BUF_INIT;
655
- git_oid idx_checksum = {{0}};
661
+ git_str packfile_names = GIT_STR_INIT,
662
+ oid_lookup = GIT_STR_INIT,
663
+ object_offsets = GIT_STR_INIT,
664
+ object_large_offsets = GIT_STR_INIT;
665
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
666
+ size_t checksum_size;
656
667
  git_midx_entry *entry;
657
668
  object_entry_array_t object_entries_array = GIT_ARRAY_INIT;
658
669
  git_vector object_entries = GIT_VECTOR_INIT;
@@ -668,7 +679,8 @@ static int midx_write(
668
679
  hash_cb_data.cb_data = cb_data;
669
680
  hash_cb_data.ctx = &ctx;
670
681
 
671
- error = git_hash_ctx_init(&ctx);
682
+ checksum_size = GIT_HASH_SHA1_SIZE;
683
+ error = git_hash_ctx_init(&ctx, GIT_HASH_ALGORITHM_SHA1);
672
684
  if (error < 0)
673
685
  return error;
674
686
  cb_data = &hash_cb_data;
@@ -676,34 +688,34 @@ static int midx_write(
676
688
 
677
689
  git_vector_sort(&w->packs);
678
690
  git_vector_foreach (&w->packs, i, p) {
679
- git_buf relative_index = GIT_BUF_INIT;
691
+ git_str relative_index = GIT_STR_INIT;
680
692
  struct object_entry_cb_state state = {0};
681
693
  size_t path_len;
682
694
 
683
695
  state.pack_index = (uint32_t)i;
684
696
  state.object_entries_array = &object_entries_array;
685
697
 
686
- error = git_buf_sets(&relative_index, p->pack_name);
698
+ error = git_str_sets(&relative_index, p->pack_name);
687
699
  if (error < 0)
688
700
  goto cleanup;
689
- error = git_path_make_relative(&relative_index, git_buf_cstr(&w->pack_dir));
701
+ error = git_fs_path_make_relative(&relative_index, git_str_cstr(&w->pack_dir));
690
702
  if (error < 0) {
691
- git_buf_dispose(&relative_index);
703
+ git_str_dispose(&relative_index);
692
704
  goto cleanup;
693
705
  }
694
- path_len = git_buf_len(&relative_index);
695
- if (path_len <= strlen(".pack") || git__suffixcmp(git_buf_cstr(&relative_index), ".pack") != 0) {
696
- git_buf_dispose(&relative_index);
706
+ path_len = git_str_len(&relative_index);
707
+ if (path_len <= strlen(".pack") || git__suffixcmp(git_str_cstr(&relative_index), ".pack") != 0) {
708
+ git_str_dispose(&relative_index);
697
709
  git_error_set(GIT_ERROR_INVALID, "invalid packfile name: '%s'", p->pack_name);
698
710
  error = -1;
699
711
  goto cleanup;
700
712
  }
701
713
  path_len -= strlen(".pack");
702
714
 
703
- git_buf_put(&packfile_names, git_buf_cstr(&relative_index), path_len);
704
- git_buf_puts(&packfile_names, ".idx");
705
- git_buf_putc(&packfile_names, '\0');
706
- git_buf_dispose(&relative_index);
715
+ git_str_put(&packfile_names, git_str_cstr(&relative_index), path_len);
716
+ git_str_puts(&packfile_names, ".idx");
717
+ git_str_putc(&packfile_names, '\0');
718
+ git_str_dispose(&relative_index);
707
719
 
708
720
  error = git_pack_foreach_entry_offset(p, object_entry__cb, &state);
709
721
  if (error < 0)
@@ -723,8 +735,8 @@ static int midx_write(
723
735
  git_vector_uniq(&object_entries, NULL);
724
736
 
725
737
  /* Pad the packfile names so it is a multiple of four. */
726
- while (git_buf_len(&packfile_names) & 3)
727
- git_buf_putc(&packfile_names, '\0');
738
+ while (git_str_len(&packfile_names) & 3)
739
+ git_str_putc(&packfile_names, '\0');
728
740
 
729
741
  /* Fill the OID Fanout table. */
730
742
  oid_fanout_count = 0;
@@ -737,7 +749,7 @@ static int midx_write(
737
749
 
738
750
  /* Fill the OID Lookup table. */
739
751
  git_vector_foreach (&object_entries, i, entry) {
740
- error = git_buf_put(&oid_lookup, (const char *)&entry->sha1, sizeof(entry->sha1));
752
+ error = git_str_put(&oid_lookup, (char *)&entry->sha1.id, GIT_OID_SHA1_SIZE);
741
753
  if (error < 0)
742
754
  goto cleanup;
743
755
  }
@@ -748,7 +760,7 @@ static int midx_write(
748
760
  uint32_t word;
749
761
 
750
762
  word = htonl((uint32_t)entry->pack_index);
751
- error = git_buf_put(&object_offsets, (const char *)&word, sizeof(word));
763
+ error = git_str_put(&object_offsets, (const char *)&word, sizeof(word));
752
764
  if (error < 0)
753
765
  goto cleanup;
754
766
  if (entry->offset >= 0x80000000l) {
@@ -759,7 +771,7 @@ static int midx_write(
759
771
  word = htonl((uint32_t)entry->offset & 0x7fffffffu);
760
772
  }
761
773
 
762
- error = git_buf_put(&object_offsets, (const char *)&word, sizeof(word));
774
+ error = git_str_put(&object_offsets, (const char *)&word, sizeof(word));
763
775
  if (error < 0)
764
776
  goto cleanup;
765
777
  }
@@ -767,7 +779,7 @@ static int midx_write(
767
779
  /* Write the header. */
768
780
  hdr.packfiles = htonl((uint32_t)git_vector_length(&w->packs));
769
781
  hdr.chunks = 4;
770
- if (git_buf_len(&object_large_offsets) > 0)
782
+ if (git_str_len(&object_large_offsets) > 0)
771
783
  hdr.chunks++;
772
784
  error = write_cb((const char *)&hdr, sizeof(hdr), cb_data);
773
785
  if (error < 0)
@@ -778,7 +790,7 @@ static int midx_write(
778
790
  error = write_chunk_header(MIDX_PACKFILE_NAMES_ID, offset, write_cb, cb_data);
779
791
  if (error < 0)
780
792
  goto cleanup;
781
- offset += git_buf_len(&packfile_names);
793
+ offset += git_str_len(&packfile_names);
782
794
  error = write_chunk_header(MIDX_OID_FANOUT_ID, offset, write_cb, cb_data);
783
795
  if (error < 0)
784
796
  goto cleanup;
@@ -786,53 +798,53 @@ static int midx_write(
786
798
  error = write_chunk_header(MIDX_OID_LOOKUP_ID, offset, write_cb, cb_data);
787
799
  if (error < 0)
788
800
  goto cleanup;
789
- offset += git_buf_len(&oid_lookup);
801
+ offset += git_str_len(&oid_lookup);
790
802
  error = write_chunk_header(MIDX_OBJECT_OFFSETS_ID, offset, write_cb, cb_data);
791
803
  if (error < 0)
792
804
  goto cleanup;
793
- offset += git_buf_len(&object_offsets);
794
- if (git_buf_len(&object_large_offsets) > 0) {
805
+ offset += git_str_len(&object_offsets);
806
+ if (git_str_len(&object_large_offsets) > 0) {
795
807
  error = write_chunk_header(MIDX_OBJECT_LARGE_OFFSETS_ID, offset, write_cb, cb_data);
796
808
  if (error < 0)
797
809
  goto cleanup;
798
- offset += git_buf_len(&object_large_offsets);
810
+ offset += git_str_len(&object_large_offsets);
799
811
  }
800
812
  error = write_chunk_header(0, offset, write_cb, cb_data);
801
813
  if (error < 0)
802
814
  goto cleanup;
803
815
 
804
816
  /* Write all the chunks. */
805
- error = write_cb(git_buf_cstr(&packfile_names), git_buf_len(&packfile_names), cb_data);
817
+ error = write_cb(git_str_cstr(&packfile_names), git_str_len(&packfile_names), cb_data);
806
818
  if (error < 0)
807
819
  goto cleanup;
808
820
  error = write_cb((const char *)oid_fanout, sizeof(oid_fanout), cb_data);
809
821
  if (error < 0)
810
822
  goto cleanup;
811
- error = write_cb(git_buf_cstr(&oid_lookup), git_buf_len(&oid_lookup), cb_data);
823
+ error = write_cb(git_str_cstr(&oid_lookup), git_str_len(&oid_lookup), cb_data);
812
824
  if (error < 0)
813
825
  goto cleanup;
814
- error = write_cb(git_buf_cstr(&object_offsets), git_buf_len(&object_offsets), cb_data);
826
+ error = write_cb(git_str_cstr(&object_offsets), git_str_len(&object_offsets), cb_data);
815
827
  if (error < 0)
816
828
  goto cleanup;
817
- error = write_cb(git_buf_cstr(&object_large_offsets), git_buf_len(&object_large_offsets), cb_data);
829
+ error = write_cb(git_str_cstr(&object_large_offsets), git_str_len(&object_large_offsets), cb_data);
818
830
  if (error < 0)
819
831
  goto cleanup;
820
832
 
821
833
  /* Finalize the checksum and write the trailer. */
822
- error = git_hash_final(&idx_checksum, &ctx);
834
+ error = git_hash_final(checksum, &ctx);
823
835
  if (error < 0)
824
836
  goto cleanup;
825
- error = write_cb((const char *)&idx_checksum, sizeof(idx_checksum), cb_data);
837
+ error = write_cb((char *)checksum, checksum_size, cb_data);
826
838
  if (error < 0)
827
839
  goto cleanup;
828
840
 
829
841
  cleanup:
830
842
  git_array_clear(object_entries_array);
831
843
  git_vector_free(&object_entries);
832
- git_buf_dispose(&packfile_names);
833
- git_buf_dispose(&oid_lookup);
834
- git_buf_dispose(&object_offsets);
835
- git_buf_dispose(&object_large_offsets);
844
+ git_str_dispose(&packfile_names);
845
+ git_str_dispose(&oid_lookup);
846
+ git_str_dispose(&object_offsets);
847
+ git_str_dispose(&object_large_offsets);
836
848
  git_hash_ctx_cleanup(&ctx);
837
849
  return error;
838
850
  }
@@ -848,17 +860,17 @@ int git_midx_writer_commit(
848
860
  {
849
861
  int error;
850
862
  int filebuf_flags = GIT_FILEBUF_DO_NOT_BUFFER;
851
- git_buf midx_path = GIT_BUF_INIT;
863
+ git_str midx_path = GIT_STR_INIT;
852
864
  git_filebuf output = GIT_FILEBUF_INIT;
853
865
 
854
- error = git_buf_joinpath(&midx_path, git_buf_cstr(&w->pack_dir), "multi-pack-index");
866
+ error = git_str_joinpath(&midx_path, git_str_cstr(&w->pack_dir), "multi-pack-index");
855
867
  if (error < 0)
856
868
  return error;
857
869
 
858
870
  if (git_repository__fsync_gitdir)
859
871
  filebuf_flags |= GIT_FILEBUF_FSYNC;
860
- error = git_filebuf_open(&output, git_buf_cstr(&midx_path), filebuf_flags, 0644);
861
- git_buf_dispose(&midx_path);
872
+ error = git_filebuf_open(&output, git_str_cstr(&midx_path), filebuf_flags, 0644);
873
+ git_str_dispose(&midx_path);
862
874
  if (error < 0)
863
875
  return error;
864
876
 
@@ -875,5 +887,13 @@ int git_midx_writer_dump(
875
887
  git_buf *midx,
876
888
  git_midx_writer *w)
877
889
  {
878
- return midx_write(w, midx_write_buf, midx);
890
+ git_str str = GIT_STR_INIT;
891
+ int error;
892
+
893
+ if ((error = git_buf_tostr(&str, midx)) < 0 ||
894
+ (error = midx_write(w, midx_write_buf, &str)) == 0)
895
+ error = git_buf_fromstr(midx, &str);
896
+
897
+ git_str_dispose(&str);
898
+ return error;
879
899
  }
@@ -17,6 +17,7 @@
17
17
  #include "map.h"
18
18
  #include "mwindow.h"
19
19
  #include "odb.h"
20
+ #include "oid.h"
20
21
 
21
22
  /*
22
23
  * A multi-pack-index file.
@@ -40,7 +41,7 @@ typedef struct git_midx_file {
40
41
  uint32_t num_objects;
41
42
 
42
43
  /* The OID Lookup table. */
43
- git_oid *oid_lookup;
44
+ unsigned char *oid_lookup;
44
45
 
45
46
  /* The Object Offsets table. Each entry has two 4-byte fields with the pack index and the offset. */
46
47
  const unsigned char *object_offsets;
@@ -51,10 +52,10 @@ typedef struct git_midx_file {
51
52
  size_t num_object_large_offsets;
52
53
 
53
54
  /* The trailer of the file. Contains the SHA1-checksum of the whole file. */
54
- git_oid checksum;
55
+ unsigned char checksum[GIT_HASH_SHA1_SIZE];
55
56
 
56
57
  /* something like ".git/objects/pack/multi-pack-index". */
57
- git_buf filename;
58
+ git_str filename;
58
59
  } git_midx_file;
59
60
 
60
61
  /*
@@ -77,7 +78,7 @@ struct git_midx_writer {
77
78
  * The path of the directory where the .pack/.idx files are stored. The
78
79
  * `multi-pack-index` file will be written to the same directory.
79
80
  */
80
- git_buf pack_dir;
81
+ git_str pack_dir;
81
82
 
82
83
  /* The list of `git_pack_file`s. */
83
84
  git_vector packs;
@@ -61,7 +61,10 @@ int git_mwindow_global_init(void)
61
61
  return git_runtime_shutdown_register(git_mwindow_global_shutdown);
62
62
  }
63
63
 
64
- int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
64
+ int git_mwindow_get_pack(
65
+ struct git_pack_file **out,
66
+ const char *path,
67
+ git_oid_t oid_type)
65
68
  {
66
69
  struct git_pack_file *pack;
67
70
  char *packname;
@@ -86,7 +89,7 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
86
89
  }
87
90
 
88
91
  /* If we didn't find it, we need to create it */
89
- if ((error = git_packfile_alloc(&pack, path)) < 0) {
92
+ if ((error = git_packfile_alloc(&pack, path, oid_type)) < 0) {
90
93
  git_mutex_unlock(&git__mwindow_mutex);
91
94
  return error;
92
95
  }
@@ -186,13 +189,16 @@ int git_mwindow_free_all(git_mwindow_file *mwf)
186
189
  }
187
190
 
188
191
  /*
189
- * Check if a window 'win' contains the address 'offset'
192
+ * Check if a window 'win' contains both the address 'offset' and 'extra'.
193
+ *
194
+ * 'extra' is the size of the hash we're using as we always want to make sure
195
+ * that it's contained.
190
196
  */
191
- int git_mwindow_contains(git_mwindow *win, off64_t offset)
197
+ int git_mwindow_contains(git_mwindow *win, off64_t offset, off64_t extra)
192
198
  {
193
199
  off64_t win_off = win->offset;
194
200
  return win_off <= offset
195
- && offset <= (off64_t)(win_off + win->window_map.len);
201
+ && (offset + extra) <= (off64_t)(win_off + win->window_map.len);
196
202
  }
197
203
 
198
204
  #define GIT_MWINDOW__LRU -1
@@ -237,9 +243,7 @@ static bool git_mwindow_scan_recently_used(
237
243
  * store it in the output parameter. If lru_window is NULL,
238
244
  * it's the first loop, so store it as well.
239
245
  */
240
- if (!lru_window ||
241
- (comparison_sign == GIT_MWINDOW__LRU && lru_window->last_used > w->last_used) ||
242
- (comparison_sign == GIT_MWINDOW__MRU && lru_window->last_used < w->last_used)) {
246
+ if (!lru_window || (comparison_sign * w->last_used) > lru_window->last_used) {
243
247
  lru_window = w;
244
248
  lru_last = w_last;
245
249
  found = true;
@@ -406,14 +410,13 @@ unsigned char *git_mwindow_open(
406
410
  return NULL;
407
411
  }
408
412
 
409
- if (!w || !(git_mwindow_contains(w, offset) && git_mwindow_contains(w, offset + extra))) {
413
+ if (!w || !(git_mwindow_contains(w, offset, extra))) {
410
414
  if (w) {
411
415
  w->inuse_cnt--;
412
416
  }
413
417
 
414
418
  for (w = mwf->windows; w; w = w->next) {
415
- if (git_mwindow_contains(w, offset) &&
416
- git_mwindow_contains(w, offset + extra))
419
+ if (git_mwindow_contains(w, offset, extra))
417
420
  break;
418
421
  }
419
422
 
@@ -473,7 +476,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
473
476
  git_mwindow_find_lru_file_locked(&lru_file) == 0) {
474
477
  if ((error = git_vector_insert(&closed_files, lru_file)) < 0) {
475
478
  /*
476
- * Exceeding the file limit seems preferrable to being open to
479
+ * Exceeding the file limit seems preferable to being open to
477
480
  * data races that can end up corrupting the heap.
478
481
  */
479
482
  break;
@@ -38,7 +38,7 @@ typedef struct git_mwindow_ctl {
38
38
  git_vector windowfiles;
39
39
  } git_mwindow_ctl;
40
40
 
41
- int git_mwindow_contains(git_mwindow *win, off64_t offset);
41
+ int git_mwindow_contains(git_mwindow *win, off64_t offset, off64_t extra);
42
42
  int git_mwindow_free_all(git_mwindow_file *mwf); /* locks */
43
43
  unsigned char *git_mwindow_open(git_mwindow_file *mwf, git_mwindow **cursor, off64_t offset, size_t extra, unsigned int *left);
44
44
  int git_mwindow_file_register(git_mwindow_file *mwf);
@@ -48,7 +48,10 @@ void git_mwindow_close(git_mwindow **w_cursor);
48
48
  extern int git_mwindow_global_init(void);
49
49
 
50
50
  struct git_pack_file; /* just declaration to avoid cyclical includes */
51
- int git_mwindow_get_pack(struct git_pack_file **out, const char *path);
51
+ int git_mwindow_get_pack(
52
+ struct git_pack_file **out,
53
+ const char *path,
54
+ git_oid_t oid_type);
52
55
  int git_mwindow_put_pack(struct git_pack_file *pack);
53
56
 
54
57
  #endif
@@ -11,8 +11,7 @@
11
11
  #include "git2/errors.h"
12
12
 
13
13
  #include "posix.h"
14
- #include "buffer.h"
15
- #include "http_parser.h"
14
+ #include "str.h"
16
15
  #include "runtime.h"
17
16
 
18
17
  int gitno_recv(gitno_buffer *buf)
@@ -42,7 +42,7 @@ typedef struct gitno_buffer {
42
42
  /* Flags to gitno_connect */
43
43
  enum {
44
44
  /* Attempt to create an SSL connection. */
45
- GITNO_CONNECT_SSL = 1,
45
+ GITNO_CONNECT_SSL = 1
46
46
  };
47
47
 
48
48
  /**