rugged 1.6.3 → 1.9.0

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 (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -13,7 +13,6 @@
13
13
  #include "futils.h"
14
14
  #include "hash.h"
15
15
  #include "oidarray.h"
16
- #include "oidmap.h"
17
16
  #include "pack.h"
18
17
  #include "repository.h"
19
18
  #include "revwalk.h"
@@ -25,6 +24,7 @@
25
24
  #define COMMIT_GRAPH_SIGNATURE 0x43475048 /* "CGPH" */
26
25
  #define COMMIT_GRAPH_VERSION 1
27
26
  #define COMMIT_GRAPH_OBJECT_ID_VERSION 1
27
+
28
28
  struct git_commit_graph_header {
29
29
  uint32_t signature;
30
30
  uint8_t version;
@@ -138,19 +138,22 @@ static int commit_graph_parse_oid_lookup(
138
138
  struct git_commit_graph_chunk *chunk_oid_lookup)
139
139
  {
140
140
  uint32_t i;
141
- unsigned char *oid, *prev_oid, zero_oid[GIT_OID_SHA1_SIZE] = {0};
141
+ unsigned char *oid, *prev_oid, zero_oid[GIT_OID_MAX_SIZE] = {0};
142
+ size_t oid_size;
143
+
144
+ oid_size = git_oid_size(file->oid_type);
142
145
 
143
146
  if (chunk_oid_lookup->offset == 0)
144
147
  return commit_graph_error("missing OID Lookup chunk");
145
148
  if (chunk_oid_lookup->length == 0)
146
149
  return commit_graph_error("empty OID Lookup chunk");
147
- if (chunk_oid_lookup->length != file->num_commits * GIT_OID_SHA1_SIZE)
150
+ if (chunk_oid_lookup->length != file->num_commits * oid_size)
148
151
  return commit_graph_error("OID Lookup chunk has wrong length");
149
152
 
150
153
  file->oid_lookup = oid = (unsigned char *)(data + chunk_oid_lookup->offset);
151
154
  prev_oid = zero_oid;
152
- for (i = 0; i < file->num_commits; ++i, oid += GIT_OID_SHA1_SIZE) {
153
- if (git_oid_raw_cmp(prev_oid, oid, GIT_OID_SHA1_SIZE) >= 0)
155
+ for (i = 0; i < file->num_commits; ++i, oid += oid_size) {
156
+ if (git_oid_raw_cmp(prev_oid, oid, oid_size) >= 0)
154
157
  return commit_graph_error("OID Lookup index is non-monotonic");
155
158
  prev_oid = oid;
156
159
  }
@@ -163,11 +166,13 @@ static int commit_graph_parse_commit_data(
163
166
  const unsigned char *data,
164
167
  struct git_commit_graph_chunk *chunk_commit_data)
165
168
  {
169
+ size_t oid_size = git_oid_size(file->oid_type);
170
+
166
171
  if (chunk_commit_data->offset == 0)
167
172
  return commit_graph_error("missing Commit Data chunk");
168
173
  if (chunk_commit_data->length == 0)
169
174
  return commit_graph_error("empty Commit Data chunk");
170
- if (chunk_commit_data->length != file->num_commits * (GIT_OID_SHA1_SIZE + 16))
175
+ if (chunk_commit_data->length != file->num_commits * (oid_size + 16))
171
176
  return commit_graph_error("Commit Data chunk has wrong length");
172
177
 
173
178
  file->commit_data = data + chunk_commit_data->offset;
@@ -209,7 +214,9 @@ int git_commit_graph_file_parse(
209
214
 
210
215
  GIT_ASSERT_ARG(file);
211
216
 
212
- if (size < sizeof(struct git_commit_graph_header) + GIT_OID_SHA1_SIZE)
217
+ checksum_size = git_oid_size(file->oid_type);
218
+
219
+ if (size < sizeof(struct git_commit_graph_header) + checksum_size)
213
220
  return commit_graph_error("commit-graph is too short");
214
221
 
215
222
  hdr = ((struct git_commit_graph_header *)data);
@@ -226,8 +233,7 @@ int git_commit_graph_file_parse(
226
233
  * headers, and a special zero chunk.
227
234
  */
228
235
  last_chunk_offset = sizeof(struct git_commit_graph_header) + (1 + hdr->chunks) * 12;
229
- trailer_offset = size - GIT_OID_SHA1_SIZE;
230
- checksum_size = GIT_HASH_SHA1_SIZE;
236
+ trailer_offset = size - checksum_size;
231
237
 
232
238
  if (trailer_offset < last_chunk_offset)
233
239
  return commit_graph_error("wrong commit-graph size");
@@ -295,25 +301,35 @@ int git_commit_graph_file_parse(
295
301
  return 0;
296
302
  }
297
303
 
298
- int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file)
304
+ int git_commit_graph_new(
305
+ git_commit_graph **cgraph_out,
306
+ const char *objects_dir,
307
+ bool open_file,
308
+ git_oid_t oid_type)
299
309
  {
300
310
  git_commit_graph *cgraph = NULL;
301
311
  int error = 0;
302
312
 
303
313
  GIT_ASSERT_ARG(cgraph_out);
304
314
  GIT_ASSERT_ARG(objects_dir);
315
+ GIT_ASSERT_ARG(oid_type);
305
316
 
306
317
  cgraph = git__calloc(1, sizeof(git_commit_graph));
307
318
  GIT_ERROR_CHECK_ALLOC(cgraph);
308
319
 
320
+ cgraph->oid_type = oid_type;
321
+
309
322
  error = git_str_joinpath(&cgraph->filename, objects_dir, "info/commit-graph");
310
323
  if (error < 0)
311
324
  goto error;
312
325
 
313
326
  if (open_file) {
314
- error = git_commit_graph_file_open(&cgraph->file, git_str_cstr(&cgraph->filename));
327
+ error = git_commit_graph_file_open(&cgraph->file,
328
+ git_str_cstr(&cgraph->filename), oid_type);
329
+
315
330
  if (error < 0)
316
331
  goto error;
332
+
317
333
  cgraph->checked = 1;
318
334
  }
319
335
 
@@ -326,14 +342,18 @@ error:
326
342
  }
327
343
 
328
344
  int git_commit_graph_validate(git_commit_graph *cgraph) {
329
- unsigned char checksum[GIT_HASH_SHA1_SIZE];
330
- size_t checksum_size = GIT_HASH_SHA1_SIZE;
331
- size_t trailer_offset = cgraph->file->graph_map.len - checksum_size;
345
+ unsigned char checksum[GIT_HASH_MAX_SIZE];
346
+ git_hash_algorithm_t checksum_type;
347
+ size_t checksum_size, trailer_offset;
348
+
349
+ checksum_type = git_oid_algorithm(cgraph->oid_type);
350
+ checksum_size = git_hash_size(checksum_type);
351
+ trailer_offset = cgraph->file->graph_map.len - checksum_size;
332
352
 
333
353
  if (cgraph->file->graph_map.len < checksum_size)
334
354
  return commit_graph_error("map length too small");
335
355
 
336
- if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset, GIT_HASH_ALGORITHM_SHA1) < 0)
356
+ if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset, checksum_type) < 0)
337
357
  return commit_graph_error("could not calculate signature");
338
358
  if (memcmp(checksum, cgraph->file->checksum, checksum_size) != 0)
339
359
  return commit_graph_error("index signature mismatch");
@@ -341,16 +361,41 @@ int git_commit_graph_validate(git_commit_graph *cgraph) {
341
361
  return 0;
342
362
  }
343
363
 
344
- int git_commit_graph_open(git_commit_graph **cgraph_out, const char *objects_dir)
364
+ int git_commit_graph_open(
365
+ git_commit_graph **cgraph_out,
366
+ const char *objects_dir
367
+ #ifdef GIT_EXPERIMENTAL_SHA256
368
+ , const git_commit_graph_open_options *opts
369
+ #endif
370
+ )
345
371
  {
346
- int error = git_commit_graph_new(cgraph_out, objects_dir, true);
347
- if (!error) {
372
+ git_oid_t oid_type;
373
+ int error;
374
+
375
+ #ifdef GIT_EXPERIMENTAL_SHA256
376
+ GIT_ERROR_CHECK_VERSION(opts,
377
+ GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION,
378
+ "git_commit_graph_open_options");
379
+
380
+ oid_type = opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT;
381
+ GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
382
+ #else
383
+ oid_type = GIT_OID_SHA1;
384
+ #endif
385
+
386
+ error = git_commit_graph_new(cgraph_out, objects_dir, true,
387
+ oid_type);
388
+
389
+ if (!error)
348
390
  return git_commit_graph_validate(*cgraph_out);
349
- }
391
+
350
392
  return error;
351
393
  }
352
394
 
353
- int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path)
395
+ int git_commit_graph_file_open(
396
+ git_commit_graph_file **file_out,
397
+ const char *path,
398
+ git_oid_t oid_type)
354
399
  {
355
400
  git_commit_graph_file *file;
356
401
  git_file fd = -1;
@@ -379,6 +424,8 @@ int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *pat
379
424
  file = git__calloc(1, sizeof(git_commit_graph_file));
380
425
  GIT_ERROR_CHECK_ALLOC(file);
381
426
 
427
+ file->oid_type = oid_type;
428
+
382
429
  error = git_futils_mmap_ro(&file->graph_map, fd, 0, cgraph_size);
383
430
  p_close(fd);
384
431
  if (error < 0) {
@@ -395,7 +442,9 @@ int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *pat
395
442
  return 0;
396
443
  }
397
444
 
398
- int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph *cgraph)
445
+ int git_commit_graph_get_file(
446
+ git_commit_graph_file **file_out,
447
+ git_commit_graph *cgraph)
399
448
  {
400
449
  if (!cgraph->checked) {
401
450
  int error = 0;
@@ -405,7 +454,8 @@ int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph
405
454
  cgraph->checked = 1;
406
455
 
407
456
  /* Best effort */
408
- error = git_commit_graph_file_open(&result, git_str_cstr(&cgraph->filename));
457
+ error = git_commit_graph_file_open(&result,
458
+ git_str_cstr(&cgraph->filename), cgraph->oid_type);
409
459
 
410
460
  if (error < 0)
411
461
  return error;
@@ -441,6 +491,7 @@ static int git_commit_graph_entry_get_byindex(
441
491
  size_t pos)
442
492
  {
443
493
  const unsigned char *commit_data;
494
+ size_t oid_size = git_oid_size(file->oid_type);
444
495
 
445
496
  GIT_ASSERT_ARG(e);
446
497
  GIT_ASSERT_ARG(file);
@@ -450,15 +501,15 @@ static int git_commit_graph_entry_get_byindex(
450
501
  return GIT_ENOTFOUND;
451
502
  }
452
503
 
453
- commit_data = file->commit_data + pos * (GIT_OID_SHA1_SIZE + 4 * sizeof(uint32_t));
454
- git_oid__fromraw(&e->tree_oid, commit_data, GIT_OID_SHA1);
455
- e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE)));
504
+ commit_data = file->commit_data + pos * (oid_size + 4 * sizeof(uint32_t));
505
+ git_oid__fromraw(&e->tree_oid, commit_data, file->oid_type);
506
+ e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + oid_size)));
456
507
  e->parent_indices[1] = ntohl(
457
- *((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + sizeof(uint32_t))));
508
+ *((uint32_t *)(commit_data + oid_size + sizeof(uint32_t))));
458
509
  e->parent_count = (e->parent_indices[0] != GIT_COMMIT_GRAPH_MISSING_PARENT)
459
510
  + (e->parent_indices[1] != GIT_COMMIT_GRAPH_MISSING_PARENT);
460
- e->generation = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 2 * sizeof(uint32_t))));
461
- e->commit_time = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 3 * sizeof(uint32_t))));
511
+ e->generation = ntohl(*((uint32_t *)(commit_data + oid_size + 2 * sizeof(uint32_t))));
512
+ e->commit_time = ntohl(*((uint32_t *)(commit_data + oid_size + 3 * sizeof(uint32_t))));
462
513
 
463
514
  e->commit_time |= (e->generation & UINT64_C(0x3)) << UINT64_C(32);
464
515
  e->generation >>= 2u;
@@ -485,7 +536,7 @@ static int git_commit_graph_entry_get_byindex(
485
536
  }
486
537
  }
487
538
 
488
- git_oid__fromraw(&e->sha1, &file->oid_lookup[pos * GIT_OID_SHA1_SIZE], GIT_OID_SHA1);
539
+ git_oid__fromraw(&e->sha1, &file->oid_lookup[pos * oid_size], file->oid_type);
489
540
  return 0;
490
541
  }
491
542
 
@@ -494,8 +545,8 @@ bool git_commit_graph_file_needs_refresh(const git_commit_graph_file *file, cons
494
545
  git_file fd = -1;
495
546
  struct stat st;
496
547
  ssize_t bytes_read;
497
- unsigned char checksum[GIT_HASH_SHA1_SIZE];
498
- size_t checksum_size = GIT_HASH_SHA1_SIZE;
548
+ unsigned char checksum[GIT_HASH_MAX_SIZE];
549
+ size_t checksum_size = git_oid_size(file->oid_type);
499
550
 
500
551
  /* TODO: properly open the file without access time using O_NOATIME */
501
552
  fd = git_futils_open_ro(path);
@@ -530,35 +581,40 @@ int git_commit_graph_entry_find(
530
581
  int pos, found = 0;
531
582
  uint32_t hi, lo;
532
583
  const unsigned char *current = NULL;
584
+ size_t oid_size, oid_hexsize;
533
585
 
534
586
  GIT_ASSERT_ARG(e);
535
587
  GIT_ASSERT_ARG(file);
536
588
  GIT_ASSERT_ARG(short_oid);
537
589
 
590
+ oid_size = git_oid_size(file->oid_type);
591
+ oid_hexsize = git_oid_hexsize(file->oid_type);
592
+
538
593
  hi = ntohl(file->oid_fanout[(int)short_oid->id[0]]);
539
594
  lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(file->oid_fanout[(int)short_oid->id[0] - 1]));
540
595
 
541
- pos = git_pack__lookup_id(file->oid_lookup, GIT_OID_SHA1_SIZE, lo, hi, short_oid->id, GIT_OID_SHA1);
596
+ pos = git_pack__lookup_id(file->oid_lookup, oid_size, lo, hi,
597
+ short_oid->id, file->oid_type);
542
598
 
543
599
  if (pos >= 0) {
544
600
  /* An object matching exactly the oid was found */
545
601
  found = 1;
546
- current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
602
+ current = file->oid_lookup + (pos * oid_size);
547
603
  } else {
548
604
  /* No object was found */
549
605
  /* pos refers to the object with the "closest" oid to short_oid */
550
606
  pos = -1 - pos;
551
607
  if (pos < (int)file->num_commits) {
552
- current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
608
+ current = file->oid_lookup + (pos * oid_size);
553
609
 
554
610
  if (!git_oid_raw_ncmp(short_oid->id, current, len))
555
611
  found = 1;
556
612
  }
557
613
  }
558
614
 
559
- if (found && len != GIT_OID_SHA1_HEXSIZE && pos + 1 < (int)file->num_commits) {
615
+ if (found && len != oid_hexsize && pos + 1 < (int)file->num_commits) {
560
616
  /* Check for ambiguousity */
561
- const unsigned char *next = current + GIT_OID_SHA1_SIZE;
617
+ const unsigned char *next = current + oid_size;
562
618
 
563
619
  if (!git_oid_raw_ncmp(short_oid->id, next, len))
564
620
  found = 2;
@@ -637,11 +693,46 @@ static int packed_commit__cmp(const void *a_, const void *b_)
637
693
  return git_oid_cmp(&a->sha1, &b->sha1);
638
694
  }
639
695
 
640
- int git_commit_graph_writer_new(git_commit_graph_writer **out, const char *objects_info_dir)
696
+ int git_commit_graph_writer_options_init(
697
+ git_commit_graph_writer_options *opts,
698
+ unsigned int version)
641
699
  {
642
- git_commit_graph_writer *w = git__calloc(1, sizeof(git_commit_graph_writer));
700
+ GIT_INIT_STRUCTURE_FROM_TEMPLATE(
701
+ opts,
702
+ version,
703
+ git_commit_graph_writer_options,
704
+ GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT);
705
+ return 0;
706
+ }
707
+
708
+ int git_commit_graph_writer_new(
709
+ git_commit_graph_writer **out,
710
+ const char *objects_info_dir,
711
+ const git_commit_graph_writer_options *opts
712
+ )
713
+ {
714
+ git_commit_graph_writer *w;
715
+ git_oid_t oid_type;
716
+
717
+ #ifdef GIT_EXPERIMENTAL_SHA256
718
+ GIT_ERROR_CHECK_VERSION(opts,
719
+ GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION,
720
+ "git_commit_graph_writer_options");
721
+
722
+ oid_type = opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT;
723
+ GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
724
+ #else
725
+ GIT_UNUSED(opts);
726
+ oid_type = GIT_OID_SHA1;
727
+ #endif
728
+
729
+ GIT_ASSERT_ARG(out && objects_info_dir);
730
+
731
+ w = git__calloc(1, sizeof(git_commit_graph_writer));
643
732
  GIT_ERROR_CHECK_ALLOC(w);
644
733
 
734
+ w->oid_type = oid_type;
735
+
645
736
  if (git_str_sets(&w->objects_info_dir, objects_info_dir) < 0) {
646
737
  git__free(w);
647
738
  return -1;
@@ -667,7 +758,7 @@ void git_commit_graph_writer_free(git_commit_graph_writer *w)
667
758
 
668
759
  git_vector_foreach (&w->commits, i, packed_commit)
669
760
  packed_commit_free(packed_commit);
670
- git_vector_free(&w->commits);
761
+ git_vector_dispose(&w->commits);
671
762
  git_str_dispose(&w->objects_info_dir);
672
763
  git__free(w);
673
764
  }
@@ -712,9 +803,9 @@ static int object_entry__cb(const git_oid *id, void *data)
712
803
  }
713
804
 
714
805
  int git_commit_graph_writer_add_index_file(
715
- git_commit_graph_writer *w,
716
- git_repository *repo,
717
- const char *idx_path)
806
+ git_commit_graph_writer *w,
807
+ git_repository *repo,
808
+ const char *idx_path)
718
809
  {
719
810
  int error;
720
811
  struct git_pack_file *p = NULL;
@@ -776,6 +867,8 @@ enum generation_number_commit_state {
776
867
  GENERATION_NUMBER_COMMIT_STATE_VISITED = 3
777
868
  };
778
869
 
870
+ GIT_HASHMAP_OID_SETUP(git_commit_graph_oidmap, struct packed_commit *);
871
+
779
872
  static int compute_generation_numbers(git_vector *commits)
780
873
  {
781
874
  git_array_t(size_t) index_stack = GIT_ARRAY_INIT;
@@ -783,17 +876,14 @@ static int compute_generation_numbers(git_vector *commits)
783
876
  size_t *parent_idx;
784
877
  enum generation_number_commit_state *commit_states = NULL;
785
878
  struct packed_commit *child_packed_commit;
786
- git_oidmap *packed_commit_map = NULL;
879
+ git_commit_graph_oidmap packed_commit_map = GIT_HASHMAP_INIT;
787
880
  int error = 0;
788
881
 
789
882
  /* First populate the parent indices fields */
790
- error = git_oidmap_new(&packed_commit_map);
791
- if (error < 0)
792
- goto cleanup;
793
883
  git_vector_foreach (commits, i, child_packed_commit) {
794
884
  child_packed_commit->index = i;
795
- error = git_oidmap_set(
796
- packed_commit_map, &child_packed_commit->sha1, child_packed_commit);
885
+ error = git_commit_graph_oidmap_put(&packed_commit_map,
886
+ &child_packed_commit->sha1, child_packed_commit);
797
887
  if (error < 0)
798
888
  goto cleanup;
799
889
  }
@@ -811,8 +901,7 @@ static int compute_generation_numbers(git_vector *commits)
811
901
  goto cleanup;
812
902
  }
813
903
  git_array_foreach (child_packed_commit->parents, parent_i, parent_id) {
814
- parent_packed_commit = git_oidmap_get(packed_commit_map, parent_id);
815
- if (!parent_packed_commit) {
904
+ if (git_commit_graph_oidmap_get(&parent_packed_commit, &packed_commit_map, parent_id) != 0) {
816
905
  git_error_set(GIT_ERROR_ODB,
817
906
  "parent commit %s not found in commit graph",
818
907
  git_oid_tostr_s(parent_id));
@@ -912,7 +1001,7 @@ static int compute_generation_numbers(git_vector *commits)
912
1001
  }
913
1002
 
914
1003
  cleanup:
915
- git_oidmap_free(packed_commit_map);
1004
+ git_commit_graph_oidmap_dispose(&packed_commit_map);
916
1005
  git__free(commit_states);
917
1006
  git_array_clear(index_stack);
918
1007
 
@@ -966,9 +1055,12 @@ static int commit_graph_write_hash(const char *buf, size_t size, void *data)
966
1055
  struct commit_graph_write_hash_context *ctx = data;
967
1056
  int error;
968
1057
 
969
- error = git_hash_update(ctx->ctx, buf, size);
970
- if (error < 0)
971
- return error;
1058
+ if (ctx->ctx) {
1059
+ error = git_hash_update(ctx->ctx, buf, size);
1060
+
1061
+ if (error < 0)
1062
+ return error;
1063
+ }
972
1064
 
973
1065
  return ctx->write_cb(buf, size, ctx->cb_data);
974
1066
  }
@@ -979,9 +1071,9 @@ static void packed_commit_free_dup(void *packed_commit)
979
1071
  }
980
1072
 
981
1073
  static int commit_graph_write(
982
- git_commit_graph_writer *w,
983
- commit_graph_write_cb write_cb,
984
- void *cb_data)
1074
+ git_commit_graph_writer *w,
1075
+ commit_graph_write_cb write_cb,
1076
+ void *cb_data)
985
1077
  {
986
1078
  int error = 0;
987
1079
  size_t i;
@@ -993,8 +1085,9 @@ static int commit_graph_write(
993
1085
  off64_t offset;
994
1086
  git_str oid_lookup = GIT_STR_INIT, commit_data = GIT_STR_INIT,
995
1087
  extra_edge_list = GIT_STR_INIT;
996
- unsigned char checksum[GIT_HASH_SHA1_SIZE];
997
- size_t checksum_size;
1088
+ unsigned char checksum[GIT_HASH_MAX_SIZE];
1089
+ git_hash_algorithm_t checksum_type;
1090
+ size_t checksum_size, oid_size;
998
1091
  git_hash_ctx ctx;
999
1092
  struct commit_graph_write_hash_context hash_cb_data = {0};
1000
1093
 
@@ -1007,8 +1100,11 @@ static int commit_graph_write(
1007
1100
  hash_cb_data.cb_data = cb_data;
1008
1101
  hash_cb_data.ctx = &ctx;
1009
1102
 
1010
- checksum_size = GIT_HASH_SHA1_SIZE;
1011
- error = git_hash_ctx_init(&ctx, GIT_HASH_ALGORITHM_SHA1);
1103
+ oid_size = git_oid_size(w->oid_type);
1104
+ checksum_type = git_oid_algorithm(w->oid_type);
1105
+ checksum_size = git_hash_size(checksum_type);
1106
+
1107
+ error = git_hash_ctx_init(&ctx, checksum_type);
1012
1108
  if (error < 0)
1013
1109
  return error;
1014
1110
  cb_data = &hash_cb_data;
@@ -1035,7 +1131,7 @@ static int commit_graph_write(
1035
1131
  git_vector_foreach (&w->commits, i, packed_commit) {
1036
1132
  error = git_str_put(&oid_lookup,
1037
1133
  (const char *)&packed_commit->sha1.id,
1038
- GIT_OID_SHA1_SIZE);
1134
+ oid_size);
1039
1135
 
1040
1136
  if (error < 0)
1041
1137
  goto cleanup;
@@ -1052,7 +1148,7 @@ static int commit_graph_write(
1052
1148
 
1053
1149
  error = git_str_put(&commit_data,
1054
1150
  (const char *)&packed_commit->tree_oid.id,
1055
- GIT_OID_SHA1_SIZE);
1151
+ oid_size);
1056
1152
 
1057
1153
  if (error < 0)
1058
1154
  goto cleanup;
@@ -1160,6 +1256,9 @@ static int commit_graph_write(
1160
1256
  error = git_hash_final(checksum, &ctx);
1161
1257
  if (error < 0)
1162
1258
  goto cleanup;
1259
+
1260
+ hash_cb_data.ctx = NULL;
1261
+
1163
1262
  error = write_cb((char *)checksum, checksum_size, cb_data);
1164
1263
  if (error < 0)
1165
1264
  goto cleanup;
@@ -1178,30 +1277,13 @@ static int commit_graph_write_filebuf(const char *buf, size_t size, void *data)
1178
1277
  return git_filebuf_write(f, buf, size);
1179
1278
  }
1180
1279
 
1181
- int git_commit_graph_writer_options_init(
1182
- git_commit_graph_writer_options *opts,
1183
- unsigned int version)
1184
- {
1185
- GIT_INIT_STRUCTURE_FROM_TEMPLATE(
1186
- opts,
1187
- version,
1188
- git_commit_graph_writer_options,
1189
- GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT);
1190
- return 0;
1191
- }
1192
-
1193
- int git_commit_graph_writer_commit(
1194
- git_commit_graph_writer *w,
1195
- git_commit_graph_writer_options *opts)
1280
+ int git_commit_graph_writer_commit(git_commit_graph_writer *w)
1196
1281
  {
1197
1282
  int error;
1198
1283
  int filebuf_flags = GIT_FILEBUF_DO_NOT_BUFFER;
1199
1284
  git_str commit_graph_path = GIT_STR_INIT;
1200
1285
  git_filebuf output = GIT_FILEBUF_INIT;
1201
1286
 
1202
- /* TODO: support options and fill in defaults. */
1203
- GIT_UNUSED(opts);
1204
-
1205
1287
  error = git_str_joinpath(
1206
1288
  &commit_graph_path, git_str_cstr(&w->objects_info_dir), "commit-graph");
1207
1289
  if (error < 0)
@@ -1225,18 +1307,14 @@ int git_commit_graph_writer_commit(
1225
1307
 
1226
1308
  int git_commit_graph_writer_dump(
1227
1309
  git_buf *cgraph,
1228
- git_commit_graph_writer *w,
1229
- git_commit_graph_writer_options *opts)
1310
+ git_commit_graph_writer *w)
1230
1311
  {
1231
- GIT_BUF_WRAP_PRIVATE(cgraph, git_commit_graph__writer_dump, w, opts);
1312
+ GIT_BUF_WRAP_PRIVATE(cgraph, git_commit_graph__writer_dump, w);
1232
1313
  }
1233
1314
 
1234
1315
  int git_commit_graph__writer_dump(
1235
1316
  git_str *cgraph,
1236
- git_commit_graph_writer *w,
1237
- git_commit_graph_writer_options *opts)
1317
+ git_commit_graph_writer *w)
1238
1318
  {
1239
- /* TODO: support options. */
1240
- GIT_UNUSED(opts);
1241
1319
  return commit_graph_write(w, commit_graph_write_buf, cgraph);
1242
1320
  }
@@ -30,6 +30,9 @@
30
30
  typedef struct git_commit_graph_file {
31
31
  git_map graph_map;
32
32
 
33
+ /* The type of object IDs in the commit graph file. */
34
+ git_oid_t oid_type;
35
+
33
36
  /* The OID Fanout table. */
34
37
  const uint32_t *oid_fanout;
35
38
  /* The total number of commits in the graph. */
@@ -84,10 +87,10 @@ typedef struct git_commit_graph_entry {
84
87
  /* The index within the Extra Edge List of any parent after the first two. */
85
88
  size_t extra_parents_index;
86
89
 
87
- /* The SHA-1 hash of the root tree of the commit. */
90
+ /* The object ID of the root tree of the commit. */
88
91
  git_oid tree_oid;
89
92
 
90
- /* The SHA-1 hash of the requested commit. */
93
+ /* The object ID hash of the requested commit. */
91
94
  git_oid sha1;
92
95
  } git_commit_graph_entry;
93
96
 
@@ -99,18 +102,28 @@ struct git_commit_graph {
99
102
  /* The underlying commit-graph file. */
100
103
  git_commit_graph_file *file;
101
104
 
105
+ /* The object ID types in the commit graph. */
106
+ git_oid_t oid_type;
107
+
102
108
  /* Whether the commit-graph file was already checked for validity. */
103
109
  bool checked;
104
110
  };
105
111
 
106
112
  /** Create a new commit-graph, optionally opening the underlying file. */
107
- int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file);
113
+ int git_commit_graph_new(
114
+ git_commit_graph **cgraph_out,
115
+ const char *objects_dir,
116
+ bool open_file,
117
+ git_oid_t oid_type);
108
118
 
109
119
  /** Validate the checksum of a commit graph */
110
120
  int git_commit_graph_validate(git_commit_graph *cgraph);
111
121
 
112
122
  /** Open and validate a commit-graph file. */
113
- int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path);
123
+ int git_commit_graph_file_open(
124
+ git_commit_graph_file **file_out,
125
+ const char *path,
126
+ git_oid_t oid_type);
114
127
 
115
128
  /*
116
129
  * Attempt to get the git_commit_graph's commit-graph file. This object is
@@ -134,14 +147,16 @@ struct git_commit_graph_writer {
134
147
  */
135
148
  git_str objects_info_dir;
136
149
 
150
+ /* The object ID type of the commit graph. */
151
+ git_oid_t oid_type;
152
+
137
153
  /* The list of packed commits. */
138
154
  git_vector commits;
139
155
  };
140
156
 
141
157
  int git_commit_graph__writer_dump(
142
158
  git_str *cgraph,
143
- git_commit_graph_writer *w,
144
- git_commit_graph_writer_options *opts);
159
+ git_commit_graph_writer *w);
145
160
 
146
161
  /*
147
162
  * Returns whether the git_commit_graph_file needs to be reloaded since the
@@ -43,13 +43,18 @@ int git_commit_list_time_cmp(const void *a, const void *b)
43
43
  return 0;
44
44
  }
45
45
 
46
- git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p)
47
- {
46
+ git_commit_list *git_commit_list_create(git_commit_list_node *item, git_commit_list *next) {
48
47
  git_commit_list *new_list = git__malloc(sizeof(git_commit_list));
49
48
  if (new_list != NULL) {
50
49
  new_list->item = item;
51
- new_list->next = *list_p;
50
+ new_list->next = next;
52
51
  }
52
+ return new_list;
53
+ }
54
+
55
+ git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p)
56
+ {
57
+ git_commit_list *new_list = git_commit_list_create(item, *list_p);
53
58
  *list_p = new_list;
54
59
  return new_list;
55
60
  }
@@ -125,7 +130,7 @@ static int commit_quick_parse(
125
130
  git_oid *parent_oid;
126
131
  git_commit *commit;
127
132
  git_commit__parse_options parse_opts = {
128
- GIT_OID_SHA1,
133
+ walk->repo->oid_type,
129
134
  GIT_COMMIT_PARSE_QUICK
130
135
  };
131
136
  size_t i;
@@ -176,7 +181,9 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
176
181
  if (cgraph_file) {
177
182
  git_commit_graph_entry e;
178
183
 
179
- error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid, GIT_OID_SHA1_SIZE);
184
+ error = git_commit_graph_entry_find(&e, cgraph_file,
185
+ &commit->oid, git_oid_size(walk->repo->oid_type));
186
+
180
187
  if (error == 0 && git__is_uint16(e.parent_count)) {
181
188
  size_t i;
182
189
  commit->generation = (uint32_t)e.generation;
@@ -49,6 +49,7 @@ git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
49
49
  int git_commit_list_generation_cmp(const void *a, const void *b);
50
50
  int git_commit_list_time_cmp(const void *a, const void *b);
51
51
  void git_commit_list_free(git_commit_list **list_p);
52
+ git_commit_list *git_commit_list_create(git_commit_list_node *item, git_commit_list *next);
52
53
  git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
53
54
  git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p);
54
55
  int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit);