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
@@ -32,7 +32,7 @@ static int packfile_unpack_compressed(
32
32
  * Throws GIT_EAMBIGUOUSOIDPREFIX if short oid
33
33
  * is ambiguous within the pack.
34
34
  * This method assumes that len is between
35
- * GIT_OID_MINPREFIXLEN and GIT_OID_HEXSZ.
35
+ * GIT_OID_MINPREFIXLEN and the oid type's hexsize.
36
36
  */
37
37
  static int pack_entry_find_offset(
38
38
  off64_t *offset_out,
@@ -186,9 +186,9 @@ static int cache_add(
186
186
 
187
187
  static void pack_index_free(struct git_pack_file *p)
188
188
  {
189
- if (p->oids) {
190
- git__free(p->oids);
191
- p->oids = NULL;
189
+ if (p->ids) {
190
+ git__free(p->ids);
191
+ p->ids = NULL;
192
192
  }
193
193
  if (p->index_map.data) {
194
194
  git_futils_mmap_free(&p->index_map);
@@ -205,6 +205,7 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
205
205
  size_t idx_size;
206
206
  struct stat st;
207
207
  int error;
208
+
208
209
  /* TODO: properly open the file without access time using O_NOATIME */
209
210
  git_file fd = git_futils_open_ro(path);
210
211
  if (fd < 0)
@@ -218,8 +219,7 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
218
219
 
219
220
  if (!S_ISREG(st.st_mode) ||
220
221
  !git__is_sizet(st.st_size) ||
221
- (idx_size = (size_t)st.st_size) < 4 * 256 + 20 + 20)
222
- {
222
+ (idx_size = (size_t)st.st_size) < (size_t)((4 * 256) + (p->oid_size * 2))) {
223
223
  p_close(fd);
224
224
  git_error_set(GIT_ERROR_ODB, "invalid pack index '%s'", path);
225
225
  return -1;
@@ -242,8 +242,9 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
242
242
  return packfile_error("unsupported index version");
243
243
  }
244
244
 
245
- } else
245
+ } else {
246
246
  version = 1;
247
+ }
247
248
 
248
249
  nr = 0;
249
250
  index = idx_map;
@@ -264,11 +265,11 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
264
265
  /*
265
266
  * Total size:
266
267
  * - 256 index entries 4 bytes each
267
- * - 24-byte entries * nr (20-byte sha1 + 4-byte offset)
268
- * - 20-byte SHA1 of the packfile
269
- * - 20-byte SHA1 file checksum
268
+ * - 24/36-byte entries * nr (20/32 byte SHA + 4-byte offset)
269
+ * - 20/32-byte SHA of the packfile
270
+ * - 20/32-byte SHA file checksum
270
271
  */
271
- if (idx_size != 4*256 + nr * 24 + 20 + 20) {
272
+ if (idx_size != (4 * 256 + (nr * (p->oid_size + 4)) + (p->oid_size * 2))) {
272
273
  git_futils_mmap_free(&p->index_map);
273
274
  return packfile_error("index is corrupted");
274
275
  }
@@ -277,16 +278,16 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
277
278
  * Minimum size:
278
279
  * - 8 bytes of header
279
280
  * - 256 index entries 4 bytes each
280
- * - 20-byte sha1 entry * nr
281
+ * - 20/32-byte SHA entry * nr
281
282
  * - 4-byte crc entry * nr
282
283
  * - 4-byte offset entry * nr
283
- * - 20-byte SHA1 of the packfile
284
- * - 20-byte SHA1 file checksum
284
+ * - 20/32-byte SHA of the packfile
285
+ * - 20/32-byte SHA file checksum
285
286
  * And after the 4-byte offset table might be a
286
287
  * variable sized table containing 8-byte entries
287
288
  * for offsets larger than 2^31.
288
289
  */
289
- unsigned long min_size = 8 + 4*256 + nr*(20 + 4 + 4) + 20 + 20;
290
+ unsigned long min_size = 8 + (4 * 256) + (nr * (p->oid_size + 4 + 4)) + (p->oid_size * 2);
290
291
  unsigned long max_size = min_size;
291
292
 
292
293
  if (nr)
@@ -308,7 +309,7 @@ static int pack_index_open_locked(struct git_pack_file *p)
308
309
  {
309
310
  int error = 0;
310
311
  size_t name_len;
311
- git_buf idx_name = GIT_BUF_INIT;
312
+ git_str idx_name = GIT_STR_INIT;
312
313
 
313
314
  if (p->index_version > -1)
314
315
  goto cleanup;
@@ -317,12 +318,12 @@ static int pack_index_open_locked(struct git_pack_file *p)
317
318
  name_len = strlen(p->pack_name);
318
319
  GIT_ASSERT(name_len > strlen(".pack"));
319
320
 
320
- if ((error = git_buf_init(&idx_name, name_len)) < 0)
321
+ if ((error = git_str_init(&idx_name, name_len)) < 0)
321
322
  goto cleanup;
322
323
 
323
- git_buf_put(&idx_name, p->pack_name, name_len - strlen(".pack"));
324
- git_buf_puts(&idx_name, ".idx");
325
- if (git_buf_oom(&idx_name)) {
324
+ git_str_put(&idx_name, p->pack_name, name_len - strlen(".pack"));
325
+ git_str_puts(&idx_name, ".idx");
326
+ if (git_str_oom(&idx_name)) {
326
327
  error = -1;
327
328
  goto cleanup;
328
329
  }
@@ -331,7 +332,7 @@ static int pack_index_open_locked(struct git_pack_file *p)
331
332
  error = pack_index_check_locked(idx_name.ptr, p);
332
333
 
333
334
  cleanup:
334
- git_buf_dispose(&idx_name);
335
+ git_str_dispose(&idx_name);
335
336
 
336
337
  return error;
337
338
  }
@@ -365,12 +366,12 @@ static unsigned char *pack_window_open(
365
366
  * Don't allow a negative offset, as that means we've wrapped
366
367
  * around.
367
368
  */
368
- if (offset > (p->mwf.size - 20))
369
+ if (offset > (p->mwf.size - p->oid_size))
369
370
  goto cleanup;
370
371
  if (offset < 0)
371
372
  goto cleanup;
372
373
 
373
- pack_data = git_mwindow_open(&p->mwf, w_cursor, offset, 20, left);
374
+ pack_data = git_mwindow_open(&p->mwf, w_cursor, offset, p->oid_size, left);
374
375
 
375
376
  cleanup:
376
377
  git_mutex_unlock(&p->mwf.lock);
@@ -473,13 +474,13 @@ int git_packfile_unpack_header(
473
474
  return error;
474
475
  }
475
476
 
476
- /* pack_window_open() assures us we have [base, base + 20) available
477
- * as a range that we can look at at. (Its actually the hash
478
- * size that is assured.) With our object header encoding
479
- * the maximum deflated object size is 2^137, which is just
480
- * insane, so we know won't exceed what we have been given.
477
+ /* pack_window_open() assures us we have [base, base + oid_size)
478
+ * available as a range that we can look at at. (It's actually
479
+ * the hash size that is assured.) With our object header
480
+ * encoding the maximum deflated object size is 2^137, which is
481
+ * just insane, so we know won't exceed what we have been given.
481
482
  */
482
- base = git_mwindow_open(&p->mwf, w_curs, *curpos, 20, &left);
483
+ base = git_mwindow_open(&p->mwf, w_curs, *curpos, p->oid_size, &left);
483
484
  git_mutex_unlock(&p->lock);
484
485
  git_mutex_unlock(&p->mwf.lock);
485
486
  if (base == NULL)
@@ -977,11 +978,12 @@ int get_delta_base(
977
978
  /* Assumption: the only reason this would fail is because the file is too small */
978
979
  if (base_info == NULL)
979
980
  return GIT_EBUFS;
980
- /* pack_window_open() assured us we have [base_info, base_info + 20)
981
- * as a range that we can look at without walking off the
982
- * end of the mapped window. Its actually the hash size
983
- * that is assured. An OFS_DELTA longer than the hash size
984
- * is stupid, as then a REF_DELTA would be smaller to store.
981
+ /* pack_window_open() assured us we have
982
+ * [base_info, base_info + oid_size) as a range that we can look
983
+ * at without walking off the end of the mapped window. Its
984
+ * actually the hash size that is assured. An OFS_DELTA longer
985
+ * than the hash size is stupid, as then a REF_DELTA would be
986
+ * smaller to store.
985
987
  */
986
988
  if (type == GIT_OBJECT_OFS_DELTA) {
987
989
  unsigned used = 0;
@@ -1001,17 +1003,18 @@ int get_delta_base(
1001
1003
  base_offset = delta_obj_offset - unsigned_base_offset;
1002
1004
  *curpos += used;
1003
1005
  } else if (type == GIT_OBJECT_REF_DELTA) {
1006
+ git_oid base_oid;
1007
+ git_oid__fromraw(&base_oid, base_info, p->oid_type);
1008
+
1004
1009
  /* If we have the cooperative cache, search in it first */
1005
1010
  if (p->has_cache) {
1006
1011
  struct git_pack_entry *entry;
1007
- git_oid oid;
1008
1012
 
1009
- git_oid_fromraw(&oid, base_info);
1010
- if ((entry = git_oidmap_get(p->idx_cache, &oid)) != NULL) {
1013
+ if ((entry = git_oidmap_get(p->idx_cache, &base_oid)) != NULL) {
1011
1014
  if (entry->offset == 0)
1012
1015
  return packfile_error("delta offset is zero");
1013
1016
 
1014
- *curpos += 20;
1017
+ *curpos += p->oid_size;
1015
1018
  *delta_base_out = entry->offset;
1016
1019
  return 0;
1017
1020
  } else {
@@ -1024,9 +1027,9 @@ int get_delta_base(
1024
1027
  }
1025
1028
 
1026
1029
  /* The base entry _must_ be in the same pack */
1027
- if (pack_entry_find_offset(&base_offset, &unused, p, (git_oid *)base_info, GIT_OID_HEXSZ) < 0)
1030
+ if (pack_entry_find_offset(&base_offset, &unused, p, &base_oid, p->oid_hexsize) < 0)
1028
1031
  return packfile_error("base entry delta is not in the same pack");
1029
- *curpos += 20;
1032
+ *curpos += p->oid_size;
1030
1033
  } else
1031
1034
  return packfile_error("unknown object type");
1032
1035
 
@@ -1069,7 +1072,7 @@ void git_packfile_free(struct git_pack_file *p, bool unlink_packfile)
1069
1072
 
1070
1073
  pack_index_free(p);
1071
1074
 
1072
- git__free(p->bad_object_sha1);
1075
+ git__free(p->bad_object_ids);
1073
1076
 
1074
1077
  git_mutex_free(&p->bases.lock);
1075
1078
  git_mutex_free(&p->mwf.lock);
@@ -1082,8 +1085,8 @@ static int packfile_open_locked(struct git_pack_file *p)
1082
1085
  {
1083
1086
  struct stat st;
1084
1087
  struct git_pack_header hdr;
1085
- git_oid sha1;
1086
- unsigned char *idx_sha1;
1088
+ unsigned char checksum[GIT_OID_MAX_SIZE];
1089
+ unsigned char *idx_checksum;
1087
1090
 
1088
1091
  if (pack_index_open_locked(p) < 0)
1089
1092
  return git_odb__error_notfound("failed to open packfile", NULL, 0);
@@ -1130,12 +1133,13 @@ static int packfile_open_locked(struct git_pack_file *p)
1130
1133
 
1131
1134
  /* Verify the pack matches its index. */
1132
1135
  if (p->num_objects != ntohl(hdr.hdr_entries) ||
1133
- p_pread(p->mwf.fd, sha1.id, GIT_OID_RAWSZ, p->mwf.size - GIT_OID_RAWSZ) < 0)
1136
+ p_pread(p->mwf.fd, checksum, p->oid_size, p->mwf.size - p->oid_size) < 0)
1134
1137
  goto cleanup;
1135
1138
 
1136
- idx_sha1 = ((unsigned char *)p->index_map.data) + p->index_map.len - 40;
1139
+ idx_checksum = ((unsigned char *)p->index_map.data) +
1140
+ p->index_map.len - (p->oid_size * 2);
1137
1141
 
1138
- if (git_oid__cmp(&sha1, (git_oid *)idx_sha1) != 0)
1142
+ if (git_oid_raw_cmp(checksum, idx_checksum, p->oid_size) != 0)
1139
1143
  goto cleanup;
1140
1144
 
1141
1145
  if (git_mwindow_file_register(&p->mwf) < 0)
@@ -1156,21 +1160,24 @@ cleanup:
1156
1160
  int git_packfile__name(char **out, const char *path)
1157
1161
  {
1158
1162
  size_t path_len;
1159
- git_buf buf = GIT_BUF_INIT;
1163
+ git_str buf = GIT_STR_INIT;
1160
1164
 
1161
1165
  path_len = strlen(path);
1162
1166
 
1163
1167
  if (path_len < strlen(".idx"))
1164
1168
  return git_odb__error_notfound("invalid packfile path", NULL, 0);
1165
1169
 
1166
- if (git_buf_printf(&buf, "%.*s.pack", (int)(path_len - strlen(".idx")), path) < 0)
1170
+ if (git_str_printf(&buf, "%.*s.pack", (int)(path_len - strlen(".idx")), path) < 0)
1167
1171
  return -1;
1168
1172
 
1169
- *out = git_buf_detach(&buf);
1173
+ *out = git_str_detach(&buf);
1170
1174
  return 0;
1171
1175
  }
1172
1176
 
1173
- int git_packfile_alloc(struct git_pack_file **pack_out, const char *path)
1177
+ int git_packfile_alloc(
1178
+ struct git_pack_file **pack_out,
1179
+ const char *path,
1180
+ git_oid_t oid_type)
1174
1181
  {
1175
1182
  struct stat st;
1176
1183
  struct git_pack_file *p;
@@ -1198,7 +1205,7 @@ int git_packfile_alloc(struct git_pack_file **pack_out, const char *path)
1198
1205
 
1199
1206
  if (!git_disable_pack_keep_file_checks) {
1200
1207
  memcpy(p->pack_name + root_len, ".keep", sizeof(".keep"));
1201
- if (git_path_exists(p->pack_name) == true)
1208
+ if (git_fs_path_exists(p->pack_name) == true)
1202
1209
  p->pack_keep = 1;
1203
1210
  }
1204
1211
 
@@ -1218,6 +1225,9 @@ int git_packfile_alloc(struct git_pack_file **pack_out, const char *path)
1218
1225
  p->pack_local = 1;
1219
1226
  p->mtime = (git_time_t)st.st_mtime;
1220
1227
  p->index_version = -1;
1228
+ p->oid_type = oid_type ? oid_type : GIT_OID_DEFAULT;
1229
+ p->oid_size = (unsigned int)git_oid_size(p->oid_type);
1230
+ p->oid_hexsize = (unsigned int)git_oid_hexsize(p->oid_type);
1221
1231
 
1222
1232
  if (git_mutex_init(&p->lock) < 0) {
1223
1233
  git_error_set(GIT_ERROR_OS, "failed to initialize packfile mutex");
@@ -1259,9 +1269,9 @@ static off64_t nth_packed_object_offset_locked(struct git_pack_file *p, uint32_t
1259
1269
  end = index + p->index_map.len;
1260
1270
  index += 4 * 256;
1261
1271
  if (p->index_version == 1)
1262
- return ntohl(*((uint32_t *)(index + 24 * n)));
1272
+ return ntohl(*((uint32_t *)(index + (p->oid_size + 4) * n)));
1263
1273
 
1264
- index += 8 + p->num_objects * (20 + 4);
1274
+ index += 8 + p->num_objects * (p->oid_size + 4);
1265
1275
  off32 = ntohl(*((uint32_t *)(index + 4 * n)));
1266
1276
  if (!(off32 & 0x80000000))
1267
1277
  return off32;
@@ -1272,7 +1282,7 @@ static off64_t nth_packed_object_offset_locked(struct git_pack_file *p, uint32_t
1272
1282
  return -1;
1273
1283
 
1274
1284
  return (((uint64_t)ntohl(*((uint32_t *)(index + 0)))) << 32) |
1275
- ntohl(*((uint32_t *)(index + 4)));
1285
+ ntohl(*((uint32_t *)(index + 4)));
1276
1286
  }
1277
1287
 
1278
1288
  static int git__memcmp4(const void *a, const void *b) {
@@ -1311,7 +1321,7 @@ int git_pack_foreach_entry(
1311
1321
 
1312
1322
  index += 4 * 256;
1313
1323
 
1314
- if (p->oids == NULL) {
1324
+ if (p->ids == NULL) {
1315
1325
  git_vector offsets, oids;
1316
1326
 
1317
1327
  if ((error = git_vector_init(&oids, p->num_objects, NULL))) {
@@ -1325,25 +1335,32 @@ int git_pack_foreach_entry(
1325
1335
  }
1326
1336
 
1327
1337
  if (p->index_version > 1) {
1328
- const unsigned char *off = index + 24 * p->num_objects;
1338
+ const unsigned char *off = index +
1339
+ (p->oid_size + 4) * p->num_objects;
1340
+
1329
1341
  for (i = 0; i < p->num_objects; i++)
1330
1342
  git_vector_insert(&offsets, (void*)&off[4 * i]);
1343
+
1331
1344
  git_vector_sort(&offsets);
1332
1345
  git_vector_foreach(&offsets, i, current)
1333
1346
  git_vector_insert(&oids, (void*)&index[5 * (current - off)]);
1334
1347
  } else {
1335
1348
  for (i = 0; i < p->num_objects; i++)
1336
- git_vector_insert(&offsets, (void*)&index[24 * i]);
1349
+ git_vector_insert(&offsets, (void*)&index[(p->oid_size + 4) * i]);
1337
1350
  git_vector_sort(&offsets);
1338
1351
  git_vector_foreach(&offsets, i, current)
1339
1352
  git_vector_insert(&oids, (void*)&current[4]);
1340
1353
  }
1341
1354
 
1342
1355
  git_vector_free(&offsets);
1343
- p->oids = (git_oid **)git_vector_detach(NULL, NULL, &oids);
1356
+ p->ids = (unsigned char **)git_vector_detach(NULL, NULL, &oids);
1344
1357
  }
1345
1358
 
1346
- /* We need to copy the OIDs to another array before we relinquish the lock to avoid races. */
1359
+ /*
1360
+ * We need to copy the OIDs to another array before we
1361
+ * relinquish the lock to avoid races. We can also take
1362
+ * this opportunity to put them into normal form.
1363
+ */
1347
1364
  git_array_init_to_size(oids, p->num_objects);
1348
1365
  if (!oids.ptr) {
1349
1366
  git_mutex_unlock(&p->lock);
@@ -1357,7 +1374,7 @@ int git_pack_foreach_entry(
1357
1374
  git_array_clear(oids);
1358
1375
  GIT_ERROR_CHECK_ALLOC(oid);
1359
1376
  }
1360
- git_oid_cpy(oid, p->oids[i]);
1377
+ git_oid__fromraw(oid, p->ids[i], p->oid_type);
1361
1378
  }
1362
1379
 
1363
1380
  git_mutex_unlock(&p->lock);
@@ -1380,7 +1397,7 @@ int git_pack_foreach_entry_offset(
1380
1397
  {
1381
1398
  const unsigned char *index;
1382
1399
  off64_t current_offset;
1383
- const git_oid *current_oid;
1400
+ git_oid current_oid;
1384
1401
  uint32_t i;
1385
1402
  int error = 0;
1386
1403
 
@@ -1407,10 +1424,13 @@ int git_pack_foreach_entry_offset(
1407
1424
 
1408
1425
  /* all offsets should have been validated by pack_index_check_locked */
1409
1426
  if (p->index_version > 1) {
1410
- const unsigned char *offsets = index + 24 * p->num_objects;
1427
+ const unsigned char *offsets = index +
1428
+ (p->oid_size + 4) * p->num_objects;
1411
1429
  const unsigned char *large_offset_ptr;
1412
- const unsigned char *large_offsets = index + 28 * p->num_objects;
1413
- const unsigned char *large_offsets_end = ((const unsigned char *)p->index_map.data) + p->index_map.len - 20;
1430
+ const unsigned char *large_offsets = index +
1431
+ (p->oid_size + 8) * p->num_objects;
1432
+ const unsigned char *large_offsets_end = ((const unsigned char *)p->index_map.data) + p->index_map.len - p->oid_size;
1433
+
1414
1434
  for (i = 0; i < p->num_objects; i++) {
1415
1435
  current_offset = ntohl(*(const uint32_t *)(offsets + 4 * i));
1416
1436
  if (current_offset & 0x80000000) {
@@ -1422,17 +1442,18 @@ int git_pack_foreach_entry_offset(
1422
1442
  current_offset = (((off64_t)ntohl(*((uint32_t *)(large_offset_ptr + 0)))) << 32) |
1423
1443
  ntohl(*((uint32_t *)(large_offset_ptr + 4)));
1424
1444
  }
1425
- current_oid = (const git_oid *)(index + 20 * i);
1426
- if ((error = cb(current_oid, current_offset, data)) != 0) {
1445
+
1446
+ git_oid__fromraw(&current_oid, (index + p->oid_size * i), p->oid_type);
1447
+ if ((error = cb(&current_oid, current_offset, data)) != 0) {
1427
1448
  error = git_error_set_after_callback(error);
1428
1449
  goto cleanup;
1429
1450
  }
1430
1451
  }
1431
1452
  } else {
1432
1453
  for (i = 0; i < p->num_objects; i++) {
1433
- current_offset = ntohl(*(const uint32_t *)(index + 24 * i));
1434
- current_oid = (const git_oid *)(index + 24 * i + 4);
1435
- if ((error = cb(current_oid, current_offset, data)) != 0) {
1454
+ current_offset = ntohl(*(const uint32_t *)(index + (p->oid_size + 4) * i));
1455
+ git_oid__fromraw(&current_oid, (index + (p->oid_size + 4) * i + 4), p->oid_type);
1456
+ if ((error = cb(&current_oid, current_offset, data)) != 0) {
1436
1457
  error = git_error_set_after_callback(error);
1437
1458
  goto cleanup;
1438
1459
  }
@@ -1444,14 +1465,20 @@ cleanup:
1444
1465
  return error;
1445
1466
  }
1446
1467
 
1447
- int git_pack__lookup_sha1(const void *oid_lookup_table, size_t stride, unsigned lo,
1448
- unsigned hi, const unsigned char *oid_prefix)
1468
+ int git_pack__lookup_id(
1469
+ const void *oid_lookup_table,
1470
+ size_t stride,
1471
+ unsigned lo,
1472
+ unsigned hi,
1473
+ const unsigned char *oid_prefix,
1474
+ const git_oid_t oid_type)
1449
1475
  {
1450
1476
  const unsigned char *base = oid_lookup_table;
1477
+ size_t oid_size = git_oid_size(oid_type);
1451
1478
 
1452
1479
  while (lo < hi) {
1453
1480
  unsigned mi = (lo + hi) / 2;
1454
- int cmp = git_oid__hashcmp(base + mi * stride, oid_prefix);
1481
+ int cmp = git_oid_raw_cmp(base + mi * stride, oid_prefix, oid_size);
1455
1482
 
1456
1483
  if (!cmp)
1457
1484
  return mi;
@@ -1506,9 +1533,9 @@ static int pack_entry_find_offset(
1506
1533
  lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(level1_ofs[(int)short_oid->id[0] - 1]));
1507
1534
 
1508
1535
  if (p->index_version > 1) {
1509
- stride = 20;
1536
+ stride = p->oid_size;
1510
1537
  } else {
1511
- stride = 24;
1538
+ stride = p->oid_size + 4;
1512
1539
  index += 4;
1513
1540
  }
1514
1541
 
@@ -1517,7 +1544,8 @@ static int pack_entry_find_offset(
1517
1544
  short_oid->id[0], short_oid->id[1], short_oid->id[2], lo, hi, p->num_objects);
1518
1545
  #endif
1519
1546
 
1520
- pos = git_pack__lookup_sha1(index, stride, lo, hi, short_oid->id);
1547
+ pos = git_pack__lookup_id(index, stride, lo, hi,
1548
+ short_oid->id, p->oid_type);
1521
1549
 
1522
1550
  if (pos >= 0) {
1523
1551
  /* An object matching exactly the oid was found */
@@ -1530,16 +1558,18 @@ static int pack_entry_find_offset(
1530
1558
  if (pos < (int)p->num_objects) {
1531
1559
  current = index + pos * stride;
1532
1560
 
1533
- if (!git_oid_ncmp(short_oid, (const git_oid *)current, len))
1561
+ if (!git_oid_raw_ncmp(short_oid->id, current, len))
1534
1562
  found = 1;
1535
1563
  }
1536
1564
  }
1537
1565
 
1538
- if (found && len != GIT_OID_HEXSZ && pos + 1 < (int)p->num_objects) {
1566
+ if (found &&
1567
+ len != p->oid_hexsize &&
1568
+ pos + 1 < (int)p->num_objects) {
1539
1569
  /* Check for ambiguousity */
1540
1570
  const unsigned char *next = current + stride;
1541
1571
 
1542
- if (!git_oid_ncmp(short_oid, (const git_oid *)next, len)) {
1572
+ if (!git_oid_raw_ncmp(short_oid->id, next, len)) {
1543
1573
  found = 2;
1544
1574
  }
1545
1575
  }
@@ -1560,13 +1590,13 @@ static int pack_entry_find_offset(
1560
1590
  }
1561
1591
 
1562
1592
  *offset_out = offset;
1563
- git_oid_fromraw(found_oid, current);
1593
+ git_oid__fromraw(found_oid, current, p->oid_type);
1564
1594
 
1565
1595
  #ifdef INDEX_DEBUG_LOOKUP
1566
1596
  {
1567
- unsigned char hex_sha1[GIT_OID_HEXSZ + 1];
1597
+ char hex_sha1[p->oid_hexsize + 1];
1568
1598
  git_oid_fmt(hex_sha1, found_oid);
1569
- hex_sha1[GIT_OID_HEXSZ] = '\0';
1599
+ hex_sha1[p->oid_hexsize] = '\0';
1570
1600
  printf("found lo=%d %s\n", lo, hex_sha1);
1571
1601
  }
1572
1602
  #endif
@@ -1588,10 +1618,10 @@ int git_pack_entry_find(
1588
1618
 
1589
1619
  GIT_ASSERT_ARG(p);
1590
1620
 
1591
- if (len == GIT_OID_HEXSZ && p->num_bad_objects) {
1621
+ if (len == p->oid_hexsize && p->num_bad_objects) {
1592
1622
  unsigned i;
1593
1623
  for (i = 0; i < p->num_bad_objects; i++)
1594
- if (git_oid__cmp(short_oid, &p->bad_object_sha1[i]) == 0)
1624
+ if (git_oid__cmp(short_oid, &p->bad_object_ids[i]) == 0)
1595
1625
  return packfile_error("bad object found in packfile");
1596
1626
  }
1597
1627
 
@@ -1624,6 +1654,6 @@ int git_pack_entry_find(
1624
1654
  e->offset = offset;
1625
1655
  e->p = p;
1626
1656
 
1627
- git_oid_cpy(&e->sha1, &found_oid);
1657
+ git_oid_cpy(&e->id, &found_oid);
1628
1658
  return 0;
1629
1659
  }
@@ -19,6 +19,7 @@
19
19
  #include "offmap.h"
20
20
  #include "oidmap.h"
21
21
  #include "zstream.h"
22
+ #include "oid.h"
22
23
 
23
24
  /**
24
25
  * Function type for callbacks from git_pack_foreach_entry_offset.
@@ -32,7 +33,7 @@ typedef int git_pack_foreach_entry_offset_cb(
32
33
 
33
34
  #define PACK_SIGNATURE 0x5041434b /* "PACK" */
34
35
  #define PACK_VERSION 2
35
- #define pack_version_ok(v) ((v) == htonl(2) || (v) == htonl(3))
36
+ #define pack_version_ok(v) ((v) == htonl(2))
36
37
  struct git_pack_header {
37
38
  uint32_t hdr_signature;
38
39
  uint32_t hdr_version;
@@ -98,13 +99,19 @@ struct git_pack_file {
98
99
 
99
100
  uint32_t num_objects;
100
101
  uint32_t num_bad_objects;
101
- git_oid *bad_object_sha1; /* array of git_oid */
102
+ git_oid *bad_object_ids; /* array of git_oid */
103
+
104
+ git_oid_t oid_type;
105
+ unsigned oid_hexsize:7,
106
+ oid_size:6,
107
+ pack_local:1,
108
+ pack_keep:1,
109
+ has_cache:1;
102
110
 
103
111
  int index_version;
104
112
  git_time_t mtime;
105
- unsigned pack_local:1, pack_keep:1, has_cache:1;
106
113
  git_oidmap *idx_cache;
107
- git_oid **oids;
114
+ unsigned char **ids;
108
115
 
109
116
  git_pack_cache bases; /* delta base cache */
110
117
 
@@ -115,21 +122,26 @@ struct git_pack_file {
115
122
  };
116
123
 
117
124
  /**
118
- * Return the position where an OID (or a prefix) would be inserted within the
119
- * OID Lookup Table of an .idx file. This performs binary search between the lo
120
- * and hi indices.
125
+ * Return the position where an OID (or a prefix) would be inserted within
126
+ * the OID Lookup Table of an .idx file. This performs binary search
127
+ * between the lo and hi indices.
121
128
  *
122
- * The stride parameter is provided because .idx files version 1 store the OIDs
123
- * interleaved with the 4-byte file offsets of the objects within the .pack
124
- * file (stride = 24), whereas files with version 2 store them in a contiguous
125
- * flat array (stride = 20).
129
+ * The stride parameter is provided because .idx files version 1 store the
130
+ * OIDs interleaved with the 4-byte file offsets of the objects within the
131
+ * .pack file (stride = oid_size + 4), whereas files with version 2 store
132
+ * them in a contiguous flat array (stride = oid_size).
126
133
  */
127
- int git_pack__lookup_sha1(const void *oid_lookup_table, size_t stride, unsigned lo,
128
- unsigned hi, const unsigned char *oid_prefix);
134
+ int git_pack__lookup_id(
135
+ const void *id_lookup_table,
136
+ size_t stride,
137
+ unsigned lo,
138
+ unsigned hi,
139
+ const unsigned char *id_prefix,
140
+ const git_oid_t oid_type);
129
141
 
130
142
  struct git_pack_entry {
131
143
  off64_t offset;
132
- git_oid sha1;
144
+ git_oid id;
133
145
  struct git_pack_file *p;
134
146
  };
135
147
 
@@ -173,12 +185,15 @@ int get_delta_base(
173
185
  off64_t delta_obj_offset);
174
186
 
175
187
  void git_packfile_free(struct git_pack_file *p, bool unlink_packfile);
176
- int git_packfile_alloc(struct git_pack_file **pack_out, const char *path);
188
+ int git_packfile_alloc(
189
+ struct git_pack_file **pack_out,
190
+ const char *path,
191
+ git_oid_t oid_type);
177
192
 
178
193
  int git_pack_entry_find(
179
194
  struct git_pack_entry *e,
180
195
  struct git_pack_file *p,
181
- const git_oid *short_oid,
196
+ const git_oid *short_id,
182
197
  size_t len);
183
198
  int git_pack_foreach_entry(
184
199
  struct git_pack_file *p,
@@ -5,6 +5,7 @@
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
7
  #include "parse.h"
8
+ #include "oid.h"
8
9
 
9
10
  int git_parse_ctx_init(git_parse_ctx *ctx, const char *content, size_t content_len)
10
11
  {
@@ -103,11 +104,11 @@ int git_parse_advance_digit(int64_t *out, git_parse_ctx *ctx, int base)
103
104
 
104
105
  int git_parse_advance_oid(git_oid *out, git_parse_ctx *ctx)
105
106
  {
106
- if (ctx->line_len < GIT_OID_HEXSZ)
107
+ if (ctx->line_len < GIT_OID_SHA1_HEXSIZE)
107
108
  return -1;
108
- if ((git_oid_fromstrn(out, ctx->line, GIT_OID_HEXSZ)) < 0)
109
+ if ((git_oid__fromstrn(out, ctx->line, GIT_OID_SHA1_HEXSIZE, GIT_OID_SHA1)) < 0)
109
110
  return -1;
110
- git_parse_advance_chars(ctx, GIT_OID_HEXSZ);
111
+ git_parse_advance_chars(ctx, GIT_OID_SHA1_HEXSIZE);
111
112
  return 0;
112
113
  }
113
114
 
@@ -76,15 +76,15 @@ size_t git_patch_size(
76
76
  out += patch->header_size;
77
77
 
78
78
  if (include_file_headers) {
79
- git_buf file_header = GIT_BUF_INIT;
79
+ git_str file_header = GIT_STR_INIT;
80
80
 
81
81
  if (git_diff_delta__format_file_header(
82
82
  &file_header, patch->delta, NULL, NULL, 0, true) < 0)
83
83
  git_error_clear();
84
84
  else
85
- out += git_buf_len(&file_header);
85
+ out += git_str_len(&file_header);
86
86
 
87
- git_buf_dispose(&file_header);
87
+ git_str_dispose(&file_header);
88
88
  }
89
89
 
90
90
  return out;
@@ -63,6 +63,7 @@ typedef struct {
63
63
 
64
64
  #define GIT_PATCH_OPTIONS_INIT { 1 }
65
65
 
66
+ extern int git_patch__to_buf(git_str *out, git_patch *patch);
66
67
  extern void git_patch_free(git_patch *patch);
67
68
 
68
69
  #endif