rugged 1.7.2 → 1.9.4

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 (405) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +195 -1
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
  59. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  60. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  61. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  62. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  63. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  64. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  65. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  66. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  67. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  68. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  69. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  70. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  71. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  72. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  73. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  74. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  75. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  76. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  77. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  78. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  79. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  80. data/vendor/libgit2/include/git2/apply.h +27 -6
  81. data/vendor/libgit2/include/git2/attr.h +17 -4
  82. data/vendor/libgit2/include/git2/blame.h +133 -28
  83. data/vendor/libgit2/include/git2/blob.h +71 -28
  84. data/vendor/libgit2/include/git2/branch.h +22 -15
  85. data/vendor/libgit2/include/git2/buffer.h +6 -4
  86. data/vendor/libgit2/include/git2/cert.h +2 -1
  87. data/vendor/libgit2/include/git2/checkout.h +83 -32
  88. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  89. data/vendor/libgit2/include/git2/clone.h +25 -9
  90. data/vendor/libgit2/include/git2/commit.h +132 -3
  91. data/vendor/libgit2/include/git2/common.h +120 -63
  92. data/vendor/libgit2/include/git2/config.h +93 -23
  93. data/vendor/libgit2/include/git2/credential.h +30 -2
  94. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  96. data/vendor/libgit2/include/git2/describe.h +13 -1
  97. data/vendor/libgit2/include/git2/diff.h +38 -8
  98. data/vendor/libgit2/include/git2/email.h +9 -29
  99. data/vendor/libgit2/include/git2/errors.h +46 -73
  100. data/vendor/libgit2/include/git2/filter.h +14 -7
  101. data/vendor/libgit2/include/git2/global.h +8 -1
  102. data/vendor/libgit2/include/git2/graph.h +3 -2
  103. data/vendor/libgit2/include/git2/ignore.h +10 -0
  104. data/vendor/libgit2/include/git2/index.h +100 -15
  105. data/vendor/libgit2/include/git2/indexer.h +21 -4
  106. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  107. data/vendor/libgit2/include/git2/merge.h +50 -3
  108. data/vendor/libgit2/include/git2/message.h +2 -2
  109. data/vendor/libgit2/include/git2/net.h +3 -1
  110. data/vendor/libgit2/include/git2/notes.h +9 -6
  111. data/vendor/libgit2/include/git2/object.h +9 -8
  112. data/vendor/libgit2/include/git2/odb.h +91 -49
  113. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  114. data/vendor/libgit2/include/git2/oid.h +23 -25
  115. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  116. data/vendor/libgit2/include/git2/pack.h +13 -1
  117. data/vendor/libgit2/include/git2/patch.h +2 -3
  118. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  119. data/vendor/libgit2/include/git2/proxy.h +12 -3
  120. data/vendor/libgit2/include/git2/rebase.h +9 -6
  121. data/vendor/libgit2/include/git2/refdb.h +2 -2
  122. data/vendor/libgit2/include/git2/reflog.h +3 -2
  123. data/vendor/libgit2/include/git2/refs.h +9 -6
  124. data/vendor/libgit2/include/git2/refspec.h +14 -4
  125. data/vendor/libgit2/include/git2/remote.h +113 -25
  126. data/vendor/libgit2/include/git2/repository.h +57 -21
  127. data/vendor/libgit2/include/git2/reset.h +16 -3
  128. data/vendor/libgit2/include/git2/revert.h +9 -4
  129. data/vendor/libgit2/include/git2/revparse.h +3 -3
  130. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  131. data/vendor/libgit2/include/git2/signature.h +46 -1
  132. data/vendor/libgit2/include/git2/stash.h +17 -3
  133. data/vendor/libgit2/include/git2/status.h +10 -6
  134. data/vendor/libgit2/include/git2/stdint.h +87 -85
  135. data/vendor/libgit2/include/git2/strarray.h +2 -3
  136. data/vendor/libgit2/include/git2/submodule.h +20 -9
  137. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  138. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  139. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  140. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  141. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  142. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  143. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  144. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  145. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  146. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  147. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  148. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  149. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  150. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  151. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  152. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  153. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  154. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  155. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  156. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  157. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  158. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  159. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  160. data/vendor/libgit2/include/git2/tag.h +3 -1
  161. data/vendor/libgit2/include/git2/trace.h +9 -3
  162. data/vendor/libgit2/include/git2/transaction.h +3 -2
  163. data/vendor/libgit2/include/git2/transport.h +11 -3
  164. data/vendor/libgit2/include/git2/tree.h +16 -5
  165. data/vendor/libgit2/include/git2/types.h +19 -3
  166. data/vendor/libgit2/include/git2/version.h +46 -8
  167. data/vendor/libgit2/include/git2/worktree.h +16 -6
  168. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  169. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  170. data/vendor/libgit2/src/cli/cmd.c +1 -1
  171. data/vendor/libgit2/src/cli/cmd.h +4 -0
  172. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  173. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  174. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  175. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  176. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  177. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  178. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  179. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  180. data/vendor/libgit2/src/cli/common.c +168 -0
  181. data/vendor/libgit2/src/cli/common.h +63 -0
  182. data/vendor/libgit2/src/cli/error.h +1 -1
  183. data/vendor/libgit2/src/cli/main.c +52 -24
  184. data/vendor/libgit2/src/cli/opt.c +31 -5
  185. data/vendor/libgit2/src/cli/opt.h +21 -3
  186. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  187. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  188. data/vendor/libgit2/src/cli/progress.c +51 -2
  189. data/vendor/libgit2/src/cli/progress.h +12 -0
  190. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  191. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  192. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  193. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  194. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  195. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  196. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  197. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  198. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  199. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  200. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  201. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  202. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  203. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  204. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  205. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  206. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  207. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  208. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  209. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  210. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  211. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  212. data/vendor/libgit2/src/libgit2/config.c +390 -299
  213. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  214. data/vendor/libgit2/src/libgit2/config.h +9 -4
  215. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  216. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  217. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  218. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  219. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  220. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  221. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  222. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  223. data/vendor/libgit2/src/libgit2/delta.c +5 -1
  224. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  225. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  226. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  227. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  228. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  229. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  230. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  231. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  232. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  233. data/vendor/libgit2/src/libgit2/email.c +1 -0
  234. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  235. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  236. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  237. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  238. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  239. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  240. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  241. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  242. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  243. data/vendor/libgit2/src/libgit2/index.c +76 -98
  244. data/vendor/libgit2/src/libgit2/index.h +5 -2
  245. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  246. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  247. data/vendor/libgit2/src/libgit2/indexer.c +36 -40
  248. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  249. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  252. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  253. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  254. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  255. data/vendor/libgit2/src/libgit2/message.c +1 -1
  256. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  257. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  258. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  259. data/vendor/libgit2/src/libgit2/object.c +6 -5
  260. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  261. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  264. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  267. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  268. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  269. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  270. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/path.c +1 -1
  272. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  273. data/vendor/libgit2/src/libgit2/push.c +79 -28
  274. data/vendor/libgit2/src/libgit2/push.h +1 -0
  275. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  276. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  277. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  278. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  279. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  280. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  281. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  282. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  283. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  284. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  285. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  286. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  287. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  288. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  289. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  290. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  291. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  292. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  293. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  294. data/vendor/libgit2/src/libgit2/status.c +1 -1
  295. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  296. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  297. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  298. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  299. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  300. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  301. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  302. data/vendor/libgit2/src/libgit2/submodule.c +118 -68
  303. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  304. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  305. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  306. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  307. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  308. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  309. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  310. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  311. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  312. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  313. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  314. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  315. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  316. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  317. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  318. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  319. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  320. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
  321. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  322. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  323. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  324. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  325. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  326. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  327. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  328. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  329. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  330. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  331. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  332. data/vendor/libgit2/src/util/alloc.c +4 -1
  333. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  334. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  335. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  336. data/vendor/libgit2/src/util/array.h +18 -17
  337. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  338. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  339. data/vendor/libgit2/src/util/date.c +22 -14
  340. data/vendor/libgit2/src/util/date.h +12 -0
  341. data/vendor/libgit2/src/util/errors.c +401 -0
  342. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  343. data/vendor/libgit2/src/util/fs_path.c +81 -10
  344. data/vendor/libgit2/src/util/fs_path.h +29 -0
  345. data/vendor/libgit2/src/util/futils.c +6 -5
  346. data/vendor/libgit2/src/util/futils.h +24 -7
  347. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  348. data/vendor/libgit2/src/util/git2_util.h +6 -0
  349. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  350. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  351. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  352. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  353. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  354. data/vendor/libgit2/src/util/hashmap.h +425 -0
  355. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  356. data/vendor/libgit2/src/util/integer.h +3 -1
  357. data/vendor/libgit2/src/util/net.c +17 -11
  358. data/vendor/libgit2/src/util/net.h +2 -0
  359. data/vendor/libgit2/src/util/pool.c +1 -1
  360. data/vendor/libgit2/src/util/pool.h +5 -0
  361. data/vendor/libgit2/src/util/pqueue.h +1 -1
  362. data/vendor/libgit2/src/util/process.h +223 -0
  363. data/vendor/libgit2/src/util/rand.c +1 -7
  364. data/vendor/libgit2/src/util/regexp.c +1 -1
  365. data/vendor/libgit2/src/util/runtime.c +2 -2
  366. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  367. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  368. data/vendor/libgit2/src/util/str.c +20 -8
  369. data/vendor/libgit2/src/util/str.h +5 -3
  370. data/vendor/libgit2/src/util/strlist.c +108 -0
  371. data/vendor/libgit2/src/util/strlist.h +36 -0
  372. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  373. data/vendor/libgit2/src/util/unix/process.c +706 -0
  374. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  375. data/vendor/libgit2/src/util/util.c +18 -5
  376. data/vendor/libgit2/src/util/util.h +5 -38
  377. data/vendor/libgit2/src/util/vector.c +3 -3
  378. data/vendor/libgit2/src/util/vector.h +2 -2
  379. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  380. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  381. data/vendor/libgit2/src/util/win32/process.c +522 -0
  382. metadata +60 -32
  383. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  384. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  385. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  386. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  387. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  388. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  389. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  390. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  391. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  392. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  393. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  394. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  395. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  396. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  397. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  398. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  399. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  400. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  401. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  402. data/vendor/libgit2/src/util/khash.h +0 -615
  403. data/vendor/libgit2/src/util/strmap.c +0 -100
  404. data/vendor/libgit2/src/util/strmap.h +0 -131
  405. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -32,7 +32,6 @@
32
32
  #include "commit.h"
33
33
  #include "oidarray.h"
34
34
  #include "merge_driver.h"
35
- #include "oidmap.h"
36
35
  #include "array.h"
37
36
 
38
37
  #include "git2/types.h"
@@ -124,11 +123,11 @@ static int merge_bases_many(git_commit_list **out, git_revwalk **walk_out, git_r
124
123
  *out = result;
125
124
  *walk_out = walk;
126
125
 
127
- git_vector_free(&list);
126
+ git_vector_dispose(&list);
128
127
  return 0;
129
128
 
130
129
  on_error:
131
- git_vector_free(&list);
130
+ git_vector_dispose(&list);
132
131
  git_revwalk_free(walk);
133
132
  return error;
134
133
  }
@@ -511,7 +510,7 @@ static int remove_redundant(git_revwalk *walk, git_vector *commits, uint32_t min
511
510
  done:
512
511
  git__free(redundant);
513
512
  git__free(filled_index);
514
- git_vector_free(&work);
513
+ git_vector_dispose(&work);
515
514
  return error;
516
515
  }
517
516
 
@@ -570,7 +569,7 @@ int git_merge__bases_many(
570
569
  if ((error = clear_commit_marks(one, ALL_FLAGS)) < 0 ||
571
570
  (error = clear_commit_marks_many(twos, ALL_FLAGS)) < 0 ||
572
571
  (error = remove_redundant(walk, &redundant, minimum_generation)) < 0) {
573
- git_vector_free(&redundant);
572
+ git_vector_dispose(&redundant);
574
573
  return error;
575
574
  }
576
575
 
@@ -579,7 +578,7 @@ int git_merge__bases_many(
579
578
  git_commit_list_insert_by_date(two, &result);
580
579
  }
581
580
 
582
- git_vector_free(&redundant);
581
+ git_vector_dispose(&redundant);
583
582
  }
584
583
 
585
584
  *out = result;
@@ -937,7 +936,7 @@ static int merge_conflict_resolve_contents(
937
936
  git_merge_file_result result = {0};
938
937
  git_merge_driver *driver;
939
938
  git_merge_driver__builtin builtin = {{0}};
940
- git_index_entry *merge_result;
939
+ git_index_entry *merge_result = NULL;
941
940
  git_odb *odb = NULL;
942
941
  const char *name;
943
942
  bool fallback = false;
@@ -1144,24 +1143,28 @@ typedef struct {
1144
1143
  size_t first_entry;
1145
1144
  } deletes_by_oid_queue;
1146
1145
 
1147
- static void deletes_by_oid_free(git_oidmap *map) {
1146
+ GIT_HASHMAP_OID_SETUP(git_merge_deletes_oidmap, deletes_by_oid_queue *);
1147
+
1148
+ static void deletes_by_oid_dispose(git_merge_deletes_oidmap *map)
1149
+ {
1150
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
1148
1151
  deletes_by_oid_queue *queue;
1149
1152
 
1150
1153
  if (!map)
1151
1154
  return;
1152
1155
 
1153
- git_oidmap_foreach_value(map, queue, {
1156
+ while (git_merge_deletes_oidmap_iterate(&iter, NULL, &queue, map) == 0)
1154
1157
  git_array_clear(queue->arr);
1155
- });
1156
- git_oidmap_free(map);
1158
+
1159
+ git_merge_deletes_oidmap_dispose(map);
1157
1160
  }
1158
1161
 
1159
- static int deletes_by_oid_enqueue(git_oidmap *map, git_pool *pool, const git_oid *id, size_t idx)
1162
+ static int deletes_by_oid_enqueue(git_merge_deletes_oidmap *map, git_pool *pool, const git_oid *id, size_t idx)
1160
1163
  {
1161
1164
  deletes_by_oid_queue *queue;
1162
1165
  size_t *array_entry;
1163
1166
 
1164
- if ((queue = git_oidmap_get(map, id)) == NULL) {
1167
+ if (git_merge_deletes_oidmap_get(&queue, map, id) != 0) {
1165
1168
  queue = git_pool_malloc(pool, sizeof(deletes_by_oid_queue));
1166
1169
  GIT_ERROR_CHECK_ALLOC(queue);
1167
1170
 
@@ -1169,7 +1172,7 @@ static int deletes_by_oid_enqueue(git_oidmap *map, git_pool *pool, const git_oid
1169
1172
  queue->next_pos = 0;
1170
1173
  queue->first_entry = idx;
1171
1174
 
1172
- if (git_oidmap_set(map, id, queue) < 0)
1175
+ if (git_merge_deletes_oidmap_put(map, id, queue) < 0)
1173
1176
  return -1;
1174
1177
  } else {
1175
1178
  array_entry = git_array_alloc(queue->arr);
@@ -1180,13 +1183,14 @@ static int deletes_by_oid_enqueue(git_oidmap *map, git_pool *pool, const git_oid
1180
1183
  return 0;
1181
1184
  }
1182
1185
 
1183
- static int deletes_by_oid_dequeue(size_t *idx, git_oidmap *map, const git_oid *id)
1186
+ static int deletes_by_oid_dequeue(size_t *idx, git_merge_deletes_oidmap *map, const git_oid *id)
1184
1187
  {
1185
1188
  deletes_by_oid_queue *queue;
1186
1189
  size_t *array_entry;
1190
+ int error;
1187
1191
 
1188
- if ((queue = git_oidmap_get(map, id)) == NULL)
1189
- return GIT_ENOTFOUND;
1192
+ if ((error = git_merge_deletes_oidmap_get(&queue, map, id)) != 0)
1193
+ return error;
1190
1194
 
1191
1195
  if (queue->next_pos == 0) {
1192
1196
  *idx = queue->first_entry;
@@ -1209,15 +1213,10 @@ static int merge_diff_mark_similarity_exact(
1209
1213
  {
1210
1214
  size_t i, j;
1211
1215
  git_merge_diff *conflict_src, *conflict_tgt;
1212
- git_oidmap *ours_deletes_by_oid = NULL, *theirs_deletes_by_oid = NULL;
1216
+ git_merge_deletes_oidmap ours_deletes_by_oid = GIT_HASHMAP_INIT,
1217
+ theirs_deletes_by_oid = GIT_HASHMAP_INIT;
1213
1218
  int error = 0;
1214
1219
 
1215
- if (git_oidmap_new(&ours_deletes_by_oid) < 0 ||
1216
- git_oidmap_new(&theirs_deletes_by_oid) < 0) {
1217
- error = -1;
1218
- goto done;
1219
- }
1220
-
1221
1220
  /* Build a map of object ids to conflicts */
1222
1221
  git_vector_foreach(&diff_list->conflicts, i, conflict_src) {
1223
1222
  /* Items can be the source of a rename iff they have an item in the
@@ -1225,14 +1224,21 @@ static int merge_diff_mark_similarity_exact(
1225
1224
  if (!GIT_MERGE_INDEX_ENTRY_EXISTS(conflict_src->ancestor_entry))
1226
1225
  continue;
1227
1226
 
1227
+ /*
1228
+ * Ignore empty files because it has always the same blob sha1
1229
+ * and will lead to incorrect matches between all entries.
1230
+ */
1231
+ if (git_oid_equal(&conflict_src->ancestor_entry.id, &git_oid__empty_blob_sha1))
1232
+ continue;
1233
+
1228
1234
  if (!GIT_MERGE_INDEX_ENTRY_EXISTS(conflict_src->our_entry)) {
1229
- error = deletes_by_oid_enqueue(ours_deletes_by_oid, &diff_list->pool, &conflict_src->ancestor_entry.id, i);
1235
+ error = deletes_by_oid_enqueue(&ours_deletes_by_oid, &diff_list->pool, &conflict_src->ancestor_entry.id, i);
1230
1236
  if (error < 0)
1231
1237
  goto done;
1232
1238
  }
1233
1239
 
1234
1240
  if (!GIT_MERGE_INDEX_ENTRY_EXISTS(conflict_src->their_entry)) {
1235
- error = deletes_by_oid_enqueue(theirs_deletes_by_oid, &diff_list->pool, &conflict_src->ancestor_entry.id, i);
1241
+ error = deletes_by_oid_enqueue(&theirs_deletes_by_oid, &diff_list->pool, &conflict_src->ancestor_entry.id, i);
1236
1242
  if (error < 0)
1237
1243
  goto done;
1238
1244
  }
@@ -1243,7 +1249,7 @@ static int merge_diff_mark_similarity_exact(
1243
1249
  continue;
1244
1250
 
1245
1251
  if (GIT_MERGE_INDEX_ENTRY_EXISTS(conflict_tgt->our_entry)) {
1246
- if (deletes_by_oid_dequeue(&i, ours_deletes_by_oid, &conflict_tgt->our_entry.id) == 0) {
1252
+ if (deletes_by_oid_dequeue(&i, &ours_deletes_by_oid, &conflict_tgt->our_entry.id) == 0) {
1247
1253
  similarity_ours[i].similarity = 100;
1248
1254
  similarity_ours[i].other_idx = j;
1249
1255
 
@@ -1253,7 +1259,7 @@ static int merge_diff_mark_similarity_exact(
1253
1259
  }
1254
1260
 
1255
1261
  if (GIT_MERGE_INDEX_ENTRY_EXISTS(conflict_tgt->their_entry)) {
1256
- if (deletes_by_oid_dequeue(&i, theirs_deletes_by_oid, &conflict_tgt->their_entry.id) == 0) {
1262
+ if (deletes_by_oid_dequeue(&i, &theirs_deletes_by_oid, &conflict_tgt->their_entry.id) == 0) {
1257
1263
  similarity_theirs[i].similarity = 100;
1258
1264
  similarity_theirs[i].other_idx = j;
1259
1265
 
@@ -1264,8 +1270,8 @@ static int merge_diff_mark_similarity_exact(
1264
1270
  }
1265
1271
 
1266
1272
  done:
1267
- deletes_by_oid_free(ours_deletes_by_oid);
1268
- deletes_by_oid_free(theirs_deletes_by_oid);
1273
+ deletes_by_oid_dispose(&ours_deletes_by_oid);
1274
+ deletes_by_oid_dispose(&theirs_deletes_by_oid);
1269
1275
 
1270
1276
  return error;
1271
1277
  }
@@ -1859,9 +1865,9 @@ void git_merge_diff_list__free(git_merge_diff_list *diff_list)
1859
1865
  if (!diff_list)
1860
1866
  return;
1861
1867
 
1862
- git_vector_free(&diff_list->staged);
1863
- git_vector_free(&diff_list->conflicts);
1864
- git_vector_free(&diff_list->resolved);
1868
+ git_vector_dispose(&diff_list->staged);
1869
+ git_vector_dispose(&diff_list->conflicts);
1870
+ git_vector_dispose(&diff_list->resolved);
1865
1871
  git_pool_clear(&diff_list->pool);
1866
1872
  git__free(diff_list);
1867
1873
  }
@@ -2829,7 +2835,7 @@ cleanup:
2829
2835
 
2830
2836
  git_str_dispose(&file_path);
2831
2837
 
2832
- git_vector_free(&matching);
2838
+ git_vector_dispose(&matching);
2833
2839
  git__free(entries);
2834
2840
 
2835
2841
  return error;
@@ -3008,7 +3014,7 @@ done:
3008
3014
  git_iterator_free(iter_new);
3009
3015
  git_diff_free(staged_diff_list);
3010
3016
  git_diff_free(index_diff_list);
3011
- git_vector_free(&staged_paths);
3017
+ git_vector_dispose(&staged_paths);
3012
3018
 
3013
3019
  return error;
3014
3020
  }
@@ -3105,7 +3111,7 @@ int git_merge__check_result(git_repository *repo, git_index *index_new)
3105
3111
  }
3106
3112
 
3107
3113
  done:
3108
- git_vector_free(&paths);
3114
+ git_vector_dispose(&paths);
3109
3115
  git_tree_free(head_tree);
3110
3116
  git_iterator_free(iter_head);
3111
3117
  git_iterator_free(iter_new);
@@ -3346,8 +3352,7 @@ int git_merge(
3346
3352
  goto done;
3347
3353
 
3348
3354
  checkout_strategy = given_checkout_opts ?
3349
- given_checkout_opts->checkout_strategy :
3350
- GIT_CHECKOUT_SAFE;
3355
+ given_checkout_opts->checkout_strategy : 0;
3351
3356
 
3352
3357
  if ((error = git_indexwriter_init_for_operation(&indexwriter, repo,
3353
3358
  &checkout_strategy)) < 0)
@@ -165,6 +165,10 @@ GIT_INLINE(const char *) git_merge_file__best_path(
165
165
  if (!ancestor) {
166
166
  if (ours && theirs && strcmp(ours, theirs) == 0)
167
167
  return ours;
168
+ if (ours && !theirs)
169
+ return ours;
170
+ if (theirs && !ours)
171
+ return theirs;
168
172
 
169
173
  return NULL;
170
174
  }
@@ -218,7 +218,7 @@ int git_merge_driver_global_init(void)
218
218
 
219
219
  done:
220
220
  if (error < 0)
221
- git_vector_free_deep(&merge_driver_registry.drivers);
221
+ git_vector_dispose_deep(&merge_driver_registry.drivers);
222
222
 
223
223
  return error;
224
224
  }
@@ -238,7 +238,7 @@ static void git_merge_driver_global_shutdown(void)
238
238
  git__free(entry);
239
239
  }
240
240
 
241
- git_vector_free(&merge_driver_registry.drivers);
241
+ git_vector_dispose(&merge_driver_registry.drivers);
242
242
 
243
243
  git_rwlock_wrunlock(&merge_driver_registry.lock);
244
244
  git_rwlock_free(&merge_driver_registry.lock);
@@ -84,30 +84,34 @@ static int merge_file__xdiff(
84
84
 
85
85
  memset(&xmparam, 0x0, sizeof(xmparam_t));
86
86
 
87
- if (ours->size > LONG_MAX ||
88
- theirs->size > LONG_MAX ||
87
+ if ((ours && ours->size > LONG_MAX) ||
88
+ (theirs && theirs->size > LONG_MAX) ||
89
89
  (ancestor && ancestor->size > LONG_MAX)) {
90
90
  git_error_set(GIT_ERROR_MERGE, "failed to merge files");
91
91
  error = -1;
92
92
  goto done;
93
93
  }
94
94
 
95
- if (ancestor) {
95
+ if (ancestor && ancestor->size) {
96
96
  xmparam.ancestor = (options.ancestor_label) ?
97
97
  options.ancestor_label : ancestor->path;
98
98
  ancestor_mmfile.ptr = (char *)ancestor->ptr;
99
99
  ancestor_mmfile.size = (long)ancestor->size;
100
100
  }
101
101
 
102
- xmparam.file1 = (options.our_label) ?
103
- options.our_label : ours->path;
104
- our_mmfile.ptr = (char *)ours->ptr;
105
- our_mmfile.size = (long)ours->size;
102
+ if (ours && ours->size) {
103
+ xmparam.file1 = (options.our_label) ?
104
+ options.our_label : ours->path;
105
+ our_mmfile.ptr = (char *)ours->ptr;
106
+ our_mmfile.size = (long)ours->size;
107
+ }
106
108
 
107
- xmparam.file2 = (options.their_label) ?
108
- options.their_label : theirs->path;
109
- their_mmfile.ptr = (char *)theirs->ptr;
110
- their_mmfile.size = (long)theirs->size;
109
+ if (theirs && theirs->size) {
110
+ xmparam.file2 = (options.their_label) ?
111
+ options.their_label : theirs->path;
112
+ their_mmfile.ptr = (char *)theirs->ptr;
113
+ their_mmfile.size = (long)theirs->size;
114
+ }
111
115
 
112
116
  if (options.favor == GIT_MERGE_FILE_FAVOR_OURS)
113
117
  xmparam.favor = XDL_MERGE_FAVOR_OURS;
@@ -148,8 +152,8 @@ static int merge_file__xdiff(
148
152
 
149
153
  path = git_merge_file__best_path(
150
154
  ancestor ? ancestor->path : NULL,
151
- ours->path,
152
- theirs->path);
155
+ ours ? ours->path : NULL,
156
+ theirs ? theirs->path : NULL);
153
157
 
154
158
  if (path != NULL && (out->path = git__strdup(path)) == NULL) {
155
159
  error = -1;
@@ -161,8 +165,8 @@ static int merge_file__xdiff(
161
165
  out->len = mmbuffer.size;
162
166
  out->mode = git_merge_file__best_mode(
163
167
  ancestor ? ancestor->mode : 0,
164
- ours->mode,
165
- theirs->mode);
168
+ ours ? ours->mode : 0,
169
+ theirs ? theirs->mode : 0);
166
170
 
167
171
  done:
168
172
  if (error < 0)
@@ -201,7 +205,7 @@ static int merge_file__binary(
201
205
  goto done;
202
206
 
203
207
  if ((out->path = git__strdup(favored->path)) == NULL ||
204
- (out->ptr = git__malloc(favored->size)) == NULL)
208
+ (out->ptr = git__malloc(favored->size)) == NULL)
205
209
  goto done;
206
210
 
207
211
  memcpy((char *)out->ptr, favored->ptr, favored->size);
@@ -221,8 +225,8 @@ static int merge_file__from_inputs(
221
225
  const git_merge_file_options *given_opts)
222
226
  {
223
227
  if (merge_file__is_binary(ancestor) ||
224
- merge_file__is_binary(ours) ||
225
- merge_file__is_binary(theirs))
228
+ merge_file__is_binary(ours) ||
229
+ merge_file__is_binary(theirs))
226
230
  return merge_file__binary(out, ours, theirs, given_opts);
227
231
 
228
232
  return merge_file__xdiff(out, ancestor, ours, theirs, given_opts);
@@ -261,8 +265,11 @@ int git_merge_file(
261
265
  if (ancestor)
262
266
  ancestor = git_merge_file__normalize_inputs(&inputs[0], ancestor);
263
267
 
264
- ours = git_merge_file__normalize_inputs(&inputs[1], ours);
265
- theirs = git_merge_file__normalize_inputs(&inputs[2], theirs);
268
+ if (ours)
269
+ ours = git_merge_file__normalize_inputs(&inputs[1], ours);
270
+
271
+ if (theirs)
272
+ theirs = git_merge_file__normalize_inputs(&inputs[2], theirs);
266
273
 
267
274
  return merge_file__from_inputs(out, ancestor, ours, theirs, options);
268
275
  }
@@ -275,16 +282,16 @@ int git_merge_file_from_index(
275
282
  const git_index_entry *theirs,
276
283
  const git_merge_file_options *options)
277
284
  {
278
- git_merge_file_input *ancestor_ptr = NULL,
279
- ancestor_input = {0}, our_input = {0}, their_input = {0};
280
- git_odb *odb = NULL;
285
+ git_merge_file_input ancestor_input = {0};
286
+ git_merge_file_input our_input = {0};
287
+ git_merge_file_input their_input = {0};
288
+ git_odb *odb;
281
289
  git_odb_object *odb_object[3] = { 0 };
282
290
  int error = 0;
283
291
 
284
292
  GIT_ASSERT_ARG(out);
285
293
  GIT_ASSERT_ARG(repo);
286
- GIT_ASSERT_ARG(ours);
287
- GIT_ASSERT_ARG(theirs);
294
+ GIT_ASSERT_ARG(ancestor || ours || theirs);
288
295
 
289
296
  memset(out, 0x0, sizeof(git_merge_file_result));
290
297
 
@@ -295,16 +302,22 @@ int git_merge_file_from_index(
295
302
  if ((error = merge_file_input_from_index(
296
303
  &ancestor_input, &odb_object[0], odb, ancestor)) < 0)
297
304
  goto done;
305
+ }
298
306
 
299
- ancestor_ptr = &ancestor_input;
307
+ if (ours) {
308
+ if ((error = merge_file_input_from_index(
309
+ &our_input, &odb_object[1], odb, ours)) < 0)
310
+ goto done;
300
311
  }
301
312
 
302
- if ((error = merge_file_input_from_index(&our_input, &odb_object[1], odb, ours)) < 0 ||
303
- (error = merge_file_input_from_index(&their_input, &odb_object[2], odb, theirs)) < 0)
304
- goto done;
313
+ if (theirs) {
314
+ if ((error = merge_file_input_from_index(
315
+ &their_input, &odb_object[2], odb, theirs)) < 0)
316
+ goto done;
317
+ }
305
318
 
306
319
  error = merge_file__from_inputs(out,
307
- ancestor_ptr, &our_input, &their_input, options);
320
+ &ancestor_input, &our_input, &their_input, options);
308
321
 
309
322
  done:
310
323
  git_odb_object_free(odb_object[0]);
@@ -33,7 +33,7 @@ static int git_message__prettify(
33
33
 
34
34
  int consecutive_empty_lines = 0;
35
35
  size_t i, line_length, rtrimmed_line_length;
36
- char *next_newline;
36
+ const char *next_newline;
37
37
 
38
38
  for (i = 0; i < strlen(message); i += line_length) {
39
39
  next_newline = memchr(message + i, '\n', message_len - i);
@@ -460,7 +460,7 @@ int git_midx_foreach_entry(
460
460
  {
461
461
  git_oid oid;
462
462
  size_t oid_size, i;
463
- int error;
463
+ int error = 0;
464
464
 
465
465
  GIT_ASSERT_ARG(idx);
466
466
 
@@ -484,7 +484,7 @@ int git_midx_close(git_midx_file *idx)
484
484
  if (idx->index_map.data)
485
485
  git_futils_mmap_free(&idx->index_map);
486
486
 
487
- git_vector_free(&idx->packfile_names);
487
+ git_vector_dispose(&idx->packfile_names);
488
488
 
489
489
  return 0;
490
490
  }
@@ -508,20 +508,28 @@ static int packfile__cmp(const void *a_, const void *b_)
508
508
  }
509
509
 
510
510
  int git_midx_writer_new(
511
- git_midx_writer **out,
512
- const char *pack_dir
511
+ git_midx_writer **out,
512
+ const char *pack_dir
513
513
  #ifdef GIT_EXPERIMENTAL_SHA256
514
- , git_oid_t oid_type
514
+ , git_midx_writer_options *opts
515
515
  #endif
516
516
  )
517
517
  {
518
518
  git_midx_writer *w;
519
+ git_oid_t oid_type;
519
520
 
520
- #ifndef GIT_EXPERIMENTAL_SHA256
521
- git_oid_t oid_type = GIT_OID_SHA1;
522
- #endif
521
+ GIT_ASSERT_ARG(out && pack_dir);
523
522
 
524
- GIT_ASSERT_ARG(out && pack_dir && oid_type);
523
+ #ifdef GIT_EXPERIMENTAL_SHA256
524
+ GIT_ERROR_CHECK_VERSION(opts,
525
+ GIT_MIDX_WRITER_OPTIONS_VERSION,
526
+ "git_midx_writer_options");
527
+
528
+ oid_type = opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT;
529
+ GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
530
+ #else
531
+ oid_type = GIT_OID_SHA1;
532
+ #endif
525
533
 
526
534
  w = git__calloc(1, sizeof(git_midx_writer));
527
535
  GIT_ERROR_CHECK_ALLOC(w);
@@ -554,7 +562,7 @@ void git_midx_writer_free(git_midx_writer *w)
554
562
 
555
563
  git_vector_foreach (&w->packs, i, p)
556
564
  git_mwindow_put_pack(p);
557
- git_vector_free(&w->packs);
565
+ git_vector_dispose(&w->packs);
558
566
  git_str_dispose(&w->pack_dir);
559
567
  git__free(w);
560
568
  }
@@ -571,8 +579,7 @@ int git_midx_writer_add(
571
579
  if (error < 0)
572
580
  return error;
573
581
 
574
- /* TODO: SHA256 */
575
- error = git_mwindow_get_pack(&p, git_str_cstr(&idx_path_buf), 0);
582
+ error = git_mwindow_get_pack(&p, git_str_cstr(&idx_path_buf), w->oid_type);
576
583
  git_str_dispose(&idx_path_buf);
577
584
  if (error < 0)
578
585
  return error;
@@ -660,9 +667,11 @@ static int midx_write_hash(const char *buf, size_t size, void *data)
660
667
  struct midx_write_hash_context *ctx = (struct midx_write_hash_context *)data;
661
668
  int error;
662
669
 
663
- error = git_hash_update(ctx->ctx, buf, size);
664
- if (error < 0)
665
- return error;
670
+ if (ctx->ctx) {
671
+ error = git_hash_update(ctx->ctx, buf, size);
672
+ if (error < 0)
673
+ return error;
674
+ }
666
675
 
667
676
  return ctx->write_cb(buf, size, ctx->cb_data);
668
677
  }
@@ -703,9 +712,9 @@ static int midx_write(
703
712
  hash_cb_data.ctx = &ctx;
704
713
 
705
714
  oid_size = git_oid_size(w->oid_type);
706
-
707
- GIT_ASSERT((checksum_type = git_oid_algorithm(w->oid_type)));
715
+ checksum_type = git_oid_algorithm(w->oid_type);
708
716
  checksum_size = git_hash_size(checksum_type);
717
+ GIT_ASSERT(oid_size && checksum_type && checksum_size);
709
718
 
710
719
  if ((error = git_hash_ctx_init(&ctx, checksum_type)) < 0)
711
720
  return error;
@@ -863,13 +872,16 @@ static int midx_write(
863
872
  error = git_hash_final(checksum, &ctx);
864
873
  if (error < 0)
865
874
  goto cleanup;
875
+
876
+ hash_cb_data.ctx = NULL;
877
+
866
878
  error = write_cb((char *)checksum, checksum_size, cb_data);
867
879
  if (error < 0)
868
880
  goto cleanup;
869
881
 
870
882
  cleanup:
871
883
  git_array_clear(object_entries_array);
872
- git_vector_free(&object_entries);
884
+ git_vector_dispose(&object_entries);
873
885
  git_str_dispose(&packfile_names);
874
886
  git_str_dispose(&oid_lookup);
875
887
  git_str_dispose(&object_offsets);