rugged 1.7.2 → 1.9.6

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 (477) 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 +278 -12
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +8 -3
  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 +14 -4
  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/pcre2/CMakeLists.txt +110 -0
  59. data/vendor/libgit2/deps/pcre2/LICENCE.md +104 -0
  60. data/vendor/libgit2/deps/pcre2/config.h.in +54 -0
  61. data/vendor/libgit2/deps/pcre2/pcre2.h +1079 -0
  62. data/vendor/libgit2/deps/pcre2/pcre2_auto_possess.c +1416 -0
  63. data/vendor/libgit2/deps/{pcre/pcre_chartables.c → pcre2/pcre2_chartables.c} +41 -47
  64. data/vendor/libgit2/deps/{pcre/pcre_ord2utf8.c → pcre2/pcre2_chkdint.c} +36 -36
  65. data/vendor/libgit2/deps/pcre2/pcre2_compile.c +11345 -0
  66. data/vendor/libgit2/deps/pcre2/pcre2_compile.h +356 -0
  67. data/vendor/libgit2/deps/pcre2/pcre2_compile_cgroup.c +632 -0
  68. data/vendor/libgit2/deps/pcre2/pcre2_compile_class.c +2777 -0
  69. data/vendor/libgit2/deps/pcre2/pcre2_config.c +250 -0
  70. data/vendor/libgit2/deps/pcre2/pcre2_context.c +557 -0
  71. data/vendor/libgit2/deps/pcre2/pcre2_convert.c +1263 -0
  72. data/vendor/libgit2/deps/{pcre/pcre_dfa_exec.c → pcre2/pcre2_dfa_match.c} +1402 -943
  73. data/vendor/libgit2/deps/pcre2/pcre2_error.c +384 -0
  74. data/vendor/libgit2/deps/pcre2/pcre2_extuni.c +159 -0
  75. data/vendor/libgit2/deps/pcre2/pcre2_find_bracket.c +217 -0
  76. data/vendor/libgit2/deps/pcre2/pcre2_fuzzsupport.c +844 -0
  77. data/vendor/libgit2/deps/pcre2/pcre2_internal.h +2353 -0
  78. data/vendor/libgit2/deps/pcre2/pcre2_intmodedep.h +1044 -0
  79. data/vendor/libgit2/deps/pcre2/pcre2_maketables.c +177 -0
  80. data/vendor/libgit2/deps/pcre2/pcre2_match.c +8244 -0
  81. data/vendor/libgit2/deps/pcre2/pcre2_match_data.c +184 -0
  82. data/vendor/libgit2/deps/pcre2/pcre2_match_next.c +171 -0
  83. data/vendor/libgit2/deps/{pcre/pcre_newline.c → pcre2/pcre2_newline.c} +92 -63
  84. data/vendor/libgit2/deps/{pcre/pcre_refcount.c → pcre2/pcre2_ord2utf.c} +64 -38
  85. data/vendor/libgit2/deps/pcre2/pcre2_pattern_info.c +430 -0
  86. data/vendor/libgit2/deps/pcre2/pcre2_printint_inc.h +1098 -0
  87. data/vendor/libgit2/deps/pcre2/pcre2_script_run.c +344 -0
  88. data/vendor/libgit2/deps/pcre2/pcre2_serialize.c +284 -0
  89. data/vendor/libgit2/deps/pcre2/pcre2_string_utils.c +199 -0
  90. data/vendor/libgit2/deps/pcre2/pcre2_study.c +2087 -0
  91. data/vendor/libgit2/deps/pcre2/pcre2_substitute.c +1761 -0
  92. data/vendor/libgit2/deps/pcre2/pcre2_substring.c +553 -0
  93. data/vendor/libgit2/deps/pcre2/pcre2_tables.c +310 -0
  94. data/vendor/libgit2/deps/pcre2/pcre2_ucd.c +5805 -0
  95. data/vendor/libgit2/deps/pcre2/pcre2_ucp.h +408 -0
  96. data/vendor/libgit2/deps/pcre2/pcre2_ucptables_inc.h +1596 -0
  97. data/vendor/libgit2/deps/pcre2/pcre2_util.h +179 -0
  98. data/vendor/libgit2/deps/pcre2/pcre2_valid_utf.c +397 -0
  99. data/vendor/libgit2/deps/pcre2/pcre2_xclass.c +547 -0
  100. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  101. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  102. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  103. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  104. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  105. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  106. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  107. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  108. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  109. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  110. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  111. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  112. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  113. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  114. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  115. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  116. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  117. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  118. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  119. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  120. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  121. data/vendor/libgit2/include/git2/apply.h +27 -6
  122. data/vendor/libgit2/include/git2/attr.h +17 -4
  123. data/vendor/libgit2/include/git2/blame.h +133 -28
  124. data/vendor/libgit2/include/git2/blob.h +71 -28
  125. data/vendor/libgit2/include/git2/branch.h +22 -15
  126. data/vendor/libgit2/include/git2/buffer.h +6 -4
  127. data/vendor/libgit2/include/git2/cert.h +2 -1
  128. data/vendor/libgit2/include/git2/checkout.h +83 -32
  129. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  130. data/vendor/libgit2/include/git2/clone.h +25 -9
  131. data/vendor/libgit2/include/git2/commit.h +132 -3
  132. data/vendor/libgit2/include/git2/common.h +132 -63
  133. data/vendor/libgit2/include/git2/config.h +93 -23
  134. data/vendor/libgit2/include/git2/credential.h +30 -2
  135. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  136. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  137. data/vendor/libgit2/include/git2/describe.h +13 -1
  138. data/vendor/libgit2/include/git2/diff.h +38 -8
  139. data/vendor/libgit2/include/git2/email.h +9 -29
  140. data/vendor/libgit2/include/git2/errors.h +46 -73
  141. data/vendor/libgit2/include/git2/filter.h +14 -7
  142. data/vendor/libgit2/include/git2/global.h +8 -1
  143. data/vendor/libgit2/include/git2/graph.h +3 -2
  144. data/vendor/libgit2/include/git2/ignore.h +10 -0
  145. data/vendor/libgit2/include/git2/index.h +100 -15
  146. data/vendor/libgit2/include/git2/indexer.h +21 -4
  147. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  148. data/vendor/libgit2/include/git2/merge.h +50 -3
  149. data/vendor/libgit2/include/git2/message.h +2 -2
  150. data/vendor/libgit2/include/git2/net.h +3 -1
  151. data/vendor/libgit2/include/git2/notes.h +9 -6
  152. data/vendor/libgit2/include/git2/object.h +9 -8
  153. data/vendor/libgit2/include/git2/odb.h +91 -49
  154. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  155. data/vendor/libgit2/include/git2/oid.h +23 -25
  156. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  157. data/vendor/libgit2/include/git2/pack.h +13 -1
  158. data/vendor/libgit2/include/git2/patch.h +2 -3
  159. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  160. data/vendor/libgit2/include/git2/proxy.h +12 -3
  161. data/vendor/libgit2/include/git2/rebase.h +9 -6
  162. data/vendor/libgit2/include/git2/refdb.h +2 -2
  163. data/vendor/libgit2/include/git2/reflog.h +3 -2
  164. data/vendor/libgit2/include/git2/refs.h +9 -6
  165. data/vendor/libgit2/include/git2/refspec.h +14 -4
  166. data/vendor/libgit2/include/git2/remote.h +113 -25
  167. data/vendor/libgit2/include/git2/repository.h +57 -21
  168. data/vendor/libgit2/include/git2/reset.h +16 -3
  169. data/vendor/libgit2/include/git2/revert.h +9 -4
  170. data/vendor/libgit2/include/git2/revparse.h +3 -3
  171. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  172. data/vendor/libgit2/include/git2/signature.h +46 -1
  173. data/vendor/libgit2/include/git2/stash.h +17 -3
  174. data/vendor/libgit2/include/git2/status.h +10 -6
  175. data/vendor/libgit2/include/git2/stdint.h +87 -85
  176. data/vendor/libgit2/include/git2/strarray.h +2 -3
  177. data/vendor/libgit2/include/git2/submodule.h +20 -9
  178. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  179. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  180. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  181. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  182. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  183. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  184. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  185. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  186. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  187. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  188. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  189. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  190. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  191. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  192. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  193. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  194. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  195. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  196. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  197. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  198. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  199. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  200. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  201. data/vendor/libgit2/include/git2/tag.h +3 -1
  202. data/vendor/libgit2/include/git2/trace.h +9 -3
  203. data/vendor/libgit2/include/git2/transaction.h +3 -2
  204. data/vendor/libgit2/include/git2/transport.h +11 -3
  205. data/vendor/libgit2/include/git2/tree.h +16 -5
  206. data/vendor/libgit2/include/git2/types.h +19 -3
  207. data/vendor/libgit2/include/git2/version.h +46 -8
  208. data/vendor/libgit2/include/git2/worktree.h +16 -6
  209. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  210. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  211. data/vendor/libgit2/src/cli/cmd.c +1 -1
  212. data/vendor/libgit2/src/cli/cmd.h +4 -0
  213. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  214. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  215. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  216. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  217. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  218. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  219. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  220. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  221. data/vendor/libgit2/src/cli/common.c +168 -0
  222. data/vendor/libgit2/src/cli/common.h +63 -0
  223. data/vendor/libgit2/src/cli/error.h +1 -1
  224. data/vendor/libgit2/src/cli/main.c +52 -24
  225. data/vendor/libgit2/src/cli/opt.c +31 -5
  226. data/vendor/libgit2/src/cli/opt.h +21 -3
  227. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  228. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  229. data/vendor/libgit2/src/cli/progress.c +51 -2
  230. data/vendor/libgit2/src/cli/progress.h +12 -0
  231. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  232. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  233. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  234. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  235. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  236. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  237. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  238. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  239. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  240. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  241. data/vendor/libgit2/src/libgit2/blame.c +135 -43
  242. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  243. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  244. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  245. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  246. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  247. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  248. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  249. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  250. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  251. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  252. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  253. data/vendor/libgit2/src/libgit2/config.c +390 -299
  254. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  255. data/vendor/libgit2/src/libgit2/config.h +9 -4
  256. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  257. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  258. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  259. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  260. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  261. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  262. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  263. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  264. data/vendor/libgit2/src/libgit2/delta.c +13 -1
  265. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  266. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  267. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  268. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  269. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  270. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  272. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  273. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  274. data/vendor/libgit2/src/libgit2/email.c +1 -0
  275. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  276. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  277. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  278. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  279. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  280. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  281. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  282. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  283. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  284. data/vendor/libgit2/src/libgit2/index.c +76 -98
  285. data/vendor/libgit2/src/libgit2/index.h +5 -2
  286. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  287. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  288. data/vendor/libgit2/src/libgit2/indexer.c +38 -41
  289. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  290. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  291. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  292. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  293. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  294. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  295. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  296. data/vendor/libgit2/src/libgit2/message.c +1 -1
  297. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  298. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  299. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  300. data/vendor/libgit2/src/libgit2/object.c +6 -5
  301. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  302. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  303. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  304. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  305. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  306. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  307. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  308. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  309. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  310. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  311. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  312. data/vendor/libgit2/src/libgit2/path.c +1 -1
  313. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  314. data/vendor/libgit2/src/libgit2/push.c +79 -28
  315. data/vendor/libgit2/src/libgit2/push.h +1 -0
  316. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  317. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  318. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  319. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  320. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  321. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  322. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  323. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  324. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  325. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  326. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  327. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  328. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  329. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  330. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  331. data/vendor/libgit2/src/libgit2/settings.c +477 -0
  332. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  333. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  334. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  335. data/vendor/libgit2/src/libgit2/status.c +1 -1
  336. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  337. data/vendor/libgit2/src/libgit2/streams/openssl.c +36 -8
  338. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  339. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  340. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  341. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  342. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  343. data/vendor/libgit2/src/libgit2/submodule.c +195 -80
  344. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  345. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  346. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  347. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  348. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  349. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  350. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  351. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  352. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  353. data/vendor/libgit2/src/libgit2/transports/http.c +5 -6
  354. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  355. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  356. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  357. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  358. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  359. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  360. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  361. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +7 -6
  362. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  363. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  364. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  365. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  366. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1132 -0
  367. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  368. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  369. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  370. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  371. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  372. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  373. data/vendor/libgit2/src/util/alloc.c +4 -1
  374. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  375. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  376. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  377. data/vendor/libgit2/src/util/array.h +18 -17
  378. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  379. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  380. data/vendor/libgit2/src/util/date.c +22 -14
  381. data/vendor/libgit2/src/util/date.h +12 -0
  382. data/vendor/libgit2/src/util/errors.c +401 -0
  383. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  384. data/vendor/libgit2/src/util/fs_path.c +81 -10
  385. data/vendor/libgit2/src/util/fs_path.h +39 -10
  386. data/vendor/libgit2/src/util/futils.c +6 -5
  387. data/vendor/libgit2/src/util/futils.h +24 -7
  388. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  389. data/vendor/libgit2/src/util/git2_util.h +6 -0
  390. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  391. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  392. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  393. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  394. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  395. data/vendor/libgit2/src/util/hashmap.h +425 -0
  396. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  397. data/vendor/libgit2/src/util/integer.h +3 -1
  398. data/vendor/libgit2/src/util/net.c +17 -11
  399. data/vendor/libgit2/src/util/net.h +2 -0
  400. data/vendor/libgit2/src/util/pool.c +1 -1
  401. data/vendor/libgit2/src/util/pool.h +5 -0
  402. data/vendor/libgit2/src/util/pqueue.h +1 -1
  403. data/vendor/libgit2/src/util/process.h +223 -0
  404. data/vendor/libgit2/src/util/rand.c +1 -7
  405. data/vendor/libgit2/src/util/regexp.c +28 -13
  406. data/vendor/libgit2/src/util/regexp.h +7 -2
  407. data/vendor/libgit2/src/util/runtime.c +2 -2
  408. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  409. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  410. data/vendor/libgit2/src/util/str.c +20 -8
  411. data/vendor/libgit2/src/util/str.h +5 -3
  412. data/vendor/libgit2/src/util/strlist.c +108 -0
  413. data/vendor/libgit2/src/util/strlist.h +36 -0
  414. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  415. data/vendor/libgit2/src/util/unix/process.c +706 -0
  416. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  417. data/vendor/libgit2/src/util/util.c +18 -5
  418. data/vendor/libgit2/src/util/util.h +5 -38
  419. data/vendor/libgit2/src/util/vector.c +3 -3
  420. data/vendor/libgit2/src/util/vector.h +2 -2
  421. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  422. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  423. data/vendor/libgit2/src/util/win32/process.c +522 -0
  424. metadata +102 -67
  425. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  426. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  427. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  428. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  429. data/vendor/libgit2/deps/pcre/CMakeLists.txt +0 -140
  430. data/vendor/libgit2/deps/pcre/COPYING +0 -5
  431. data/vendor/libgit2/deps/pcre/LICENCE +0 -93
  432. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +0 -22
  433. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +0 -17
  434. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +0 -58
  435. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +0 -29
  436. data/vendor/libgit2/deps/pcre/config.h.in +0 -57
  437. data/vendor/libgit2/deps/pcre/pcre.h +0 -641
  438. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +0 -319
  439. data/vendor/libgit2/deps/pcre/pcre_compile.c +0 -9815
  440. data/vendor/libgit2/deps/pcre/pcre_config.c +0 -190
  441. data/vendor/libgit2/deps/pcre/pcre_exec.c +0 -7173
  442. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +0 -245
  443. data/vendor/libgit2/deps/pcre/pcre_get.c +0 -669
  444. data/vendor/libgit2/deps/pcre/pcre_globals.c +0 -86
  445. data/vendor/libgit2/deps/pcre/pcre_internal.h +0 -2787
  446. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +0 -11913
  447. data/vendor/libgit2/deps/pcre/pcre_maketables.c +0 -156
  448. data/vendor/libgit2/deps/pcre/pcre_printint.c +0 -834
  449. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +0 -211
  450. data/vendor/libgit2/deps/pcre/pcre_study.c +0 -1686
  451. data/vendor/libgit2/deps/pcre/pcre_tables.c +0 -727
  452. data/vendor/libgit2/deps/pcre/pcre_ucd.c +0 -3644
  453. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +0 -301
  454. data/vendor/libgit2/deps/pcre/pcre_version.c +0 -98
  455. data/vendor/libgit2/deps/pcre/pcre_xclass.c +0 -268
  456. data/vendor/libgit2/deps/pcre/pcreposix.c +0 -420
  457. data/vendor/libgit2/deps/pcre/pcreposix.h +0 -117
  458. data/vendor/libgit2/deps/pcre/ucp.h +0 -224
  459. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  460. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  461. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  462. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  463. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  464. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  465. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  466. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  467. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  468. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  469. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  470. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  471. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  472. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  473. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  474. data/vendor/libgit2/src/util/khash.h +0 -615
  475. data/vendor/libgit2/src/util/strmap.c +0 -100
  476. data/vendor/libgit2/src/util/strmap.h +0 -131
  477. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -19,7 +19,6 @@
19
19
  #include "repository.h"
20
20
  #include "blame_git.h"
21
21
 
22
-
23
22
  static int hunk_byfinalline_search_cmp(const void *key, const void *entry)
24
23
  {
25
24
  git_blame_hunk *hunk = (git_blame_hunk*)entry;
@@ -81,9 +80,12 @@ static git_blame_hunk *new_hunk(
81
80
 
82
81
  static void free_hunk(git_blame_hunk *hunk)
83
82
  {
84
- git__free((void*)hunk->orig_path);
83
+ git__free((char *)hunk->orig_path);
84
+ git__free((char *)hunk->summary);
85
85
  git_signature_free(hunk->final_signature);
86
+ git_signature_free(hunk->final_committer);
86
87
  git_signature_free(hunk->orig_signature);
88
+ git_signature_free(hunk->orig_committer);
87
89
  git__free(hunk);
88
90
  }
89
91
 
@@ -104,7 +106,10 @@ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk, git_blame *blame)
104
106
  newhunk->boundary = hunk->boundary;
105
107
 
106
108
  if (git_signature_dup(&newhunk->final_signature, hunk->final_signature) < 0 ||
107
- git_signature_dup(&newhunk->orig_signature, hunk->orig_signature) < 0) {
109
+ git_signature_dup(&newhunk->final_committer, hunk->final_committer) < 0 ||
110
+ git_signature_dup(&newhunk->orig_signature, hunk->orig_signature) < 0 ||
111
+ git_signature_dup(&newhunk->orig_committer, hunk->orig_committer) < 0 ||
112
+ (newhunk->summary = git__strdup(hunk->summary)) == NULL) {
108
113
  free_hunk(newhunk);
109
114
  return NULL;
110
115
  }
@@ -117,12 +122,12 @@ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk, git_blame *blame)
117
122
  static void shift_hunks_by(git_vector *v, size_t start_line, int shift_by)
118
123
  {
119
124
  size_t i;
120
-
121
- if (!git_vector_bsearch2(&i, v, hunk_byfinalline_search_cmp, &start_line)) {
122
- for (; i < v->length; i++) {
123
- git_blame_hunk *hunk = (git_blame_hunk*)v->contents[i];
124
- hunk->final_start_line_number += shift_by;
125
+ for (i = 0; i < v->length; i++) {
126
+ git_blame_hunk *hunk = (git_blame_hunk*)v->contents[i];
127
+ if(hunk->final_start_line_number < start_line){
128
+ continue;
125
129
  }
130
+ hunk->final_start_line_number += shift_by;
126
131
  }
127
132
  }
128
133
 
@@ -139,10 +144,9 @@ git_blame *git_blame__alloc(
139
144
  gbr->options = opts;
140
145
 
141
146
  if (git_vector_init(&gbr->hunks, 8, hunk_cmp) < 0 ||
142
- git_vector_init(&gbr->paths, 8, paths_cmp) < 0 ||
143
- (gbr->path = git__strdup(path)) == NULL ||
144
- git_vector_insert(&gbr->paths, git__strdup(path)) < 0)
145
- {
147
+ git_vector_init(&gbr->paths, 8, paths_cmp) < 0 ||
148
+ (gbr->path = git__strdup(path)) == NULL ||
149
+ git_vector_insert(&gbr->paths, git__strdup(path)) < 0) {
146
150
  git_blame_free(gbr);
147
151
  return NULL;
148
152
  }
@@ -165,9 +169,11 @@ void git_blame_free(git_blame *blame)
165
169
 
166
170
  git_vector_foreach(&blame->hunks, i, hunk)
167
171
  free_hunk(hunk);
168
- git_vector_free(&blame->hunks);
169
172
 
170
- git_vector_free_deep(&blame->paths);
173
+ git_vector_dispose(&blame->hunks);
174
+ git_array_clear(blame->lines);
175
+
176
+ git_vector_dispose_deep(&blame->paths);
171
177
 
172
178
  git_array_clear(blame->line_index);
173
179
 
@@ -178,31 +184,76 @@ void git_blame_free(git_blame *blame)
178
184
  git__free(blame);
179
185
  }
180
186
 
181
- uint32_t git_blame_get_hunk_count(git_blame *blame)
187
+ size_t git_blame_hunkcount(git_blame *blame)
188
+ {
189
+ GIT_ASSERT_ARG(blame);
190
+
191
+ return blame->hunks.length;
192
+ }
193
+
194
+ size_t git_blame_linecount(git_blame *blame)
182
195
  {
183
196
  GIT_ASSERT_ARG(blame);
184
- return (uint32_t)blame->hunks.length;
197
+
198
+ return git_array_size(blame->line_index);
199
+ }
200
+
201
+ const git_blame_line *git_blame_line_byindex(
202
+ git_blame *blame,
203
+ size_t idx)
204
+ {
205
+ GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
206
+ GIT_ASSERT_WITH_RETVAL(idx > 0 && idx <= git_array_size(blame->line_index), NULL);
207
+
208
+ return git_array_get(blame->lines, idx - 1);
185
209
  }
186
210
 
187
- const git_blame_hunk *git_blame_get_hunk_byindex(git_blame *blame, uint32_t index)
211
+ const git_blame_hunk *git_blame_hunk_byindex(
212
+ git_blame *blame,
213
+ size_t index)
188
214
  {
189
215
  GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
190
- return (git_blame_hunk*)git_vector_get(&blame->hunks, index);
216
+ return git_vector_get(&blame->hunks, index);
191
217
  }
192
218
 
193
- const git_blame_hunk *git_blame_get_hunk_byline(git_blame *blame, size_t lineno)
219
+ const git_blame_hunk *git_blame_hunk_byline(
220
+ git_blame *blame,
221
+ size_t lineno)
194
222
  {
195
223
  size_t i, new_lineno = lineno;
196
224
 
197
225
  GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
198
226
 
199
- if (!git_vector_bsearch2(&i, &blame->hunks, hunk_byfinalline_search_cmp, &new_lineno)) {
200
- return git_blame_get_hunk_byindex(blame, (uint32_t)i);
201
- }
227
+ if (git_vector_bsearch2(&i, &blame->hunks,
228
+ hunk_byfinalline_search_cmp, &new_lineno) != 0)
229
+ return NULL;
230
+
231
+ return git_blame_hunk_byindex(blame, i);
232
+ }
202
233
 
203
- return NULL;
234
+ #ifndef GIT_DEPRECATE_HARD
235
+ uint32_t git_blame_get_hunk_count(git_blame *blame)
236
+ {
237
+ size_t count = git_blame_hunkcount(blame);
238
+ GIT_ASSERT(count < UINT32_MAX);
239
+ return (uint32_t)count;
204
240
  }
205
241
 
242
+ const git_blame_hunk *git_blame_get_hunk_byindex(
243
+ git_blame *blame,
244
+ uint32_t index)
245
+ {
246
+ return git_blame_hunk_byindex(blame, index);
247
+ }
248
+
249
+ const git_blame_hunk *git_blame_get_hunk_byline(
250
+ git_blame *blame,
251
+ size_t lineno)
252
+ {
253
+ return git_blame_hunk_byline(blame, lineno);
254
+ }
255
+ #endif
256
+
206
257
  static int normalize_options(
207
258
  git_blame_options *out,
208
259
  const git_blame_options *in,
@@ -282,31 +333,55 @@ static int index_blob_lines(git_blame *blame)
282
333
  const char *buf = blame->final_buf;
283
334
  size_t len = blame->final_buf_size;
284
335
  int num = 0, incomplete = 0, bol = 1;
336
+ git_blame_line *line = NULL;
285
337
  size_t *i;
286
338
 
287
339
  if (len && buf[len-1] != '\n')
288
340
  incomplete++; /* incomplete line at the end */
341
+
289
342
  while (len--) {
290
343
  if (bol) {
291
344
  i = git_array_alloc(blame->line_index);
292
345
  GIT_ERROR_CHECK_ALLOC(i);
293
346
  *i = buf - blame->final_buf;
347
+
348
+ GIT_ASSERT(line == NULL);
349
+ line = git_array_alloc(blame->lines);
350
+ GIT_ERROR_CHECK_ALLOC(line);
351
+
352
+ line->ptr = buf;
294
353
  bol = 0;
295
354
  }
355
+
296
356
  if (*buf++ == '\n') {
357
+ GIT_ASSERT(line);
358
+ line->len = (buf - line->ptr) - 1;
359
+ line = NULL;
360
+
297
361
  num++;
298
362
  bol = 1;
299
363
  }
300
364
  }
365
+
301
366
  i = git_array_alloc(blame->line_index);
302
367
  GIT_ERROR_CHECK_ALLOC(i);
303
368
  *i = buf - blame->final_buf;
369
+
370
+ if (!bol) {
371
+ GIT_ASSERT(line);
372
+ line->len = buf - line->ptr;
373
+ line = NULL;
374
+ }
375
+
376
+ GIT_ASSERT(!line);
377
+
304
378
  blame->num_lines = num + incomplete;
305
379
  return blame->num_lines;
306
380
  }
307
381
 
308
382
  static git_blame_hunk *hunk_from_entry(git_blame__entry *e, git_blame *blame)
309
383
  {
384
+ const char *summary;
310
385
  git_blame_hunk *h = new_hunk(
311
386
  e->lno+1, e->num_lines, e->s_lno+1, e->suspect->path,
312
387
  blame);
@@ -316,9 +391,19 @@ static git_blame_hunk *hunk_from_entry(git_blame__entry *e, git_blame *blame)
316
391
 
317
392
  git_oid_cpy(&h->final_commit_id, git_commit_id(e->suspect->commit));
318
393
  git_oid_cpy(&h->orig_commit_id, git_commit_id(e->suspect->commit));
319
- git_commit_author_with_mailmap(
320
- &h->final_signature, e->suspect->commit, blame->mailmap);
321
- git_signature_dup(&h->orig_signature, h->final_signature);
394
+
395
+ if (git_commit_author_with_mailmap(
396
+ &h->final_signature, e->suspect->commit, blame->mailmap) < 0 ||
397
+ git_commit_committer_with_mailmap(
398
+ &h->final_committer, e->suspect->commit, blame->mailmap) < 0 ||
399
+ git_signature_dup(&h->orig_signature, h->final_signature) < 0 ||
400
+ git_signature_dup(&h->orig_committer, h->final_committer) < 0 ||
401
+ (summary = git_commit_summary(e->suspect->commit)) == NULL ||
402
+ (h->summary = git__strdup(summary)) == NULL) {
403
+ free_hunk(h);
404
+ return NULL;
405
+ }
406
+
322
407
  h->boundary = e->is_boundary ? 1 : 0;
323
408
  return h;
324
409
  }
@@ -347,12 +432,12 @@ static int blame_internal(git_blame *blame)
347
432
 
348
433
  if ((error = load_blob(blame)) < 0 ||
349
434
  (error = git_blame__get_origin(&o, blame, blame->final, blame->path)) < 0)
350
- goto cleanup;
435
+ goto on_error;
351
436
 
352
437
  if (git_blob_rawsize(blame->final_blob) > SIZE_MAX) {
353
438
  git_error_set(GIT_ERROR_NOMEMORY, "blob is too large to blame");
354
439
  error = -1;
355
- goto cleanup;
440
+ goto on_error;
356
441
  }
357
442
 
358
443
  blame->final_buf = git_blob_rawcontent(blame->final_blob);
@@ -371,17 +456,25 @@ static int blame_internal(git_blame *blame)
371
456
 
372
457
  blame->ent = ent;
373
458
 
374
- error = git_blame__like_git(blame, blame->options.flags);
459
+ if ((error = git_blame__like_git(blame, blame->options.flags)) < 0)
460
+ goto on_error;
375
461
 
376
- cleanup:
377
- for (ent = blame->ent; ent; ) {
378
- git_blame__entry *e = ent->next;
462
+ for (ent = blame->ent; ent; ent = ent->next) {
379
463
  git_blame_hunk *h = hunk_from_entry(ent, blame);
380
464
 
465
+ if (!h) {
466
+ error = -1;
467
+ goto on_error;
468
+ }
469
+
381
470
  git_vector_insert(&blame->hunks, h);
471
+ }
382
472
 
473
+ on_error:
474
+ for (ent = blame->ent; ent; ) {
475
+ git_blame__entry *next = ent->next;
383
476
  git_blame__free_entry(ent);
384
- ent = e;
477
+ ent = next;
385
478
  }
386
479
 
387
480
  return error;
@@ -444,21 +537,20 @@ static int buffer_hunk_cb(
444
537
 
445
538
  GIT_UNUSED(delta);
446
539
 
447
- wedge_line = (hunk->old_lines == 0) ? hunk->new_start : hunk->old_start;
540
+ wedge_line = (hunk->new_start >= hunk->old_start || hunk->old_lines==0) ? hunk->new_start : hunk->old_start;
448
541
  blame->current_diff_line = wedge_line;
449
-
450
- blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byline(blame, wedge_line);
542
+ blame->current_hunk = (git_blame_hunk*)git_blame_hunk_byline(blame, wedge_line);
451
543
  if (!blame->current_hunk) {
452
544
  /* Line added at the end of the file */
453
545
  blame->current_hunk = new_hunk(wedge_line, 0, wedge_line,
454
546
  blame->path, blame);
547
+ blame->current_diff_line++;
455
548
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
456
-
457
549
  git_vector_insert(&blame->hunks, blame->current_hunk);
458
550
  } else if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){
459
551
  /* If this hunk doesn't start between existing hunks, split a hunk up so it does */
460
552
  blame->current_hunk = split_hunk_in_vector(&blame->hunks, blame->current_hunk,
461
- wedge_line - blame->current_hunk->orig_start_line_number, true,
553
+ wedge_line - blame->current_hunk->final_start_line_number, true,
462
554
  blame);
463
555
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
464
556
  }
@@ -484,13 +576,12 @@ static int buffer_line_cb(
484
576
  hunk_ends_at_or_before_line(blame->current_hunk, blame->current_diff_line)) {
485
577
  /* Append to the current buffer-blame hunk */
486
578
  blame->current_hunk->lines_in_hunk++;
487
- shift_hunks_by(&blame->hunks, blame->current_diff_line+1, 1);
579
+ shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
488
580
  } else {
489
581
  /* Create a new buffer-blame hunk with this line */
490
582
  shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
491
583
  blame->current_hunk = new_hunk(blame->current_diff_line, 1, 0, blame->path, blame);
492
584
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
493
-
494
585
  git_vector_insert_sorted(&blame->hunks, blame->current_hunk, NULL);
495
586
  }
496
587
  blame->current_diff_line++;
@@ -498,15 +589,16 @@ static int buffer_line_cb(
498
589
 
499
590
  if (line->origin == GIT_DIFF_LINE_DELETION) {
500
591
  /* Trim the line from the current hunk; remove it if it's now empty */
501
- size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk+1;
592
+ size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk;
502
593
 
503
594
  if (--(blame->current_hunk->lines_in_hunk) == 0) {
504
595
  size_t i;
505
- shift_base--;
596
+ size_t i_next;
506
597
  if (!git_vector_search2(&i, &blame->hunks, ptrs_equal_cmp, blame->current_hunk)) {
507
598
  git_vector_remove(&blame->hunks, i);
508
599
  free_hunk(blame->current_hunk);
509
- blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byindex(blame, (uint32_t)i);
600
+ i_next = min( i , blame->hunks.length -1);
601
+ blame->current_hunk = (git_blame_hunk*)git_blame_hunk_byindex(blame, (uint32_t)i_next);
510
602
  }
511
603
  }
512
604
  shift_hunks_by(&blame->hunks, shift_base, -1);
@@ -71,6 +71,7 @@ struct git_blame {
71
71
  git_blame_options options;
72
72
 
73
73
  git_vector hunks;
74
+ git_array_t(git_blame_line) lines;
74
75
  git_vector paths;
75
76
 
76
77
  git_blob *final_blob;
@@ -14,6 +14,9 @@
14
14
  #include "odb.h"
15
15
  #include "object.h"
16
16
  #include "git2/oid.h"
17
+ #include "hashmap_oid.h"
18
+
19
+ GIT_HASHMAP_OID_FUNCTIONS(git_cache_oidmap, GIT_HASHMAP_INLINE, git_cached_obj *);
17
20
 
18
21
  bool git_cache__enabled = true;
19
22
  ssize_t git_cache__max_storage = (256 * 1024 * 1024);
@@ -45,9 +48,6 @@ int git_cache_init(git_cache *cache)
45
48
  {
46
49
  memset(cache, 0, sizeof(*cache));
47
50
 
48
- if ((git_oidmap_new(&cache->map)) < 0)
49
- return -1;
50
-
51
51
  if (git_rwlock_init(&cache->lock)) {
52
52
  git_error_set(GIT_ERROR_OS, "failed to initialize cache rwlock");
53
53
  return -1;
@@ -60,15 +60,15 @@ int git_cache_init(git_cache *cache)
60
60
  static void clear_cache(git_cache *cache)
61
61
  {
62
62
  git_cached_obj *evict = NULL;
63
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
63
64
 
64
65
  if (git_cache_size(cache) == 0)
65
66
  return;
66
67
 
67
- git_oidmap_foreach_value(cache->map, evict, {
68
+ while (git_cache_oidmap_iterate(&iter, NULL, &evict, &cache->map) == 0)
68
69
  git_cached_obj_decref(evict);
69
- });
70
70
 
71
- git_oidmap_clear(cache->map);
71
+ git_cache_oidmap_clear(&cache->map);
72
72
  git_atomic_ssize_add(&git_cache__current_storage, -cache->used_memory);
73
73
  cache->used_memory = 0;
74
74
  }
@@ -83,10 +83,15 @@ void git_cache_clear(git_cache *cache)
83
83
  git_rwlock_wrunlock(&cache->lock);
84
84
  }
85
85
 
86
+ size_t git_cache_size(git_cache *cache)
87
+ {
88
+ return git_cache_oidmap_size(&cache->map);
89
+ }
90
+
86
91
  void git_cache_dispose(git_cache *cache)
87
92
  {
88
93
  git_cache_clear(cache);
89
- git_oidmap_free(cache->map);
94
+ git_cache_oidmap_dispose(&cache->map);
90
95
  git_rwlock_free(&cache->lock);
91
96
  git__memzero(cache, sizeof(*cache));
92
97
  }
@@ -94,8 +99,9 @@ void git_cache_dispose(git_cache *cache)
94
99
  /* Called with lock */
95
100
  static void cache_evict_entries(git_cache *cache)
96
101
  {
97
- size_t evict_count = git_cache_size(cache) / 2048, i;
102
+ size_t evict_count = git_cache_size(cache) / 2048;
98
103
  ssize_t evicted_memory = 0;
104
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
99
105
 
100
106
  if (evict_count < 8)
101
107
  evict_count = 8;
@@ -106,17 +112,16 @@ static void cache_evict_entries(git_cache *cache)
106
112
  return;
107
113
  }
108
114
 
109
- i = 0;
110
115
  while (evict_count > 0) {
111
- git_cached_obj *evict;
112
116
  const git_oid *key;
117
+ git_cached_obj *evict;
113
118
 
114
- if (git_oidmap_iterate((void **) &evict, cache->map, &i, &key) == GIT_ITEROVER)
119
+ if (git_cache_oidmap_iterate(&iter, &key, &evict, &cache->map) != 0)
115
120
  break;
116
121
 
117
122
  evict_count--;
118
123
  evicted_memory += evict->size;
119
- git_oidmap_delete(cache->map, key);
124
+ git_cache_oidmap_remove(&cache->map, key);
120
125
  git_cached_obj_decref(evict);
121
126
  }
122
127
 
@@ -132,12 +137,12 @@ static bool cache_should_store(git_object_t object_type, size_t object_size)
132
137
 
133
138
  static void *cache_get(git_cache *cache, const git_oid *oid, unsigned int flags)
134
139
  {
135
- git_cached_obj *entry;
140
+ git_cached_obj *entry = NULL;
136
141
 
137
142
  if (!git_cache__enabled || git_rwlock_rdlock(&cache->lock) < 0)
138
143
  return NULL;
139
144
 
140
- if ((entry = git_oidmap_get(cache->map, oid)) != NULL) {
145
+ if (git_cache_oidmap_get(&entry, &cache->map, oid) == 0) {
141
146
  if (flags && entry->flags != flags) {
142
147
  entry = NULL;
143
148
  } else {
@@ -172,8 +177,8 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
172
177
  cache_evict_entries(cache);
173
178
 
174
179
  /* not found */
175
- if ((stored_entry = git_oidmap_get(cache->map, &entry->oid)) == NULL) {
176
- if (git_oidmap_set(cache->map, &entry->oid, entry) == 0) {
180
+ if (git_cache_oidmap_get(&stored_entry, &cache->map, &entry->oid) != 0) {
181
+ if (git_cache_oidmap_put(&cache->map, &entry->oid, entry) == 0) {
177
182
  git_cached_obj_incref(entry);
178
183
  cache->used_memory += entry->size;
179
184
  git_atomic_ssize_add(&git_cache__current_storage, (ssize_t)entry->size);
@@ -187,7 +192,7 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
187
192
  entry = stored_entry;
188
193
  } else if (stored_entry->flags == GIT_CACHE_STORE_RAW &&
189
194
  entry->flags == GIT_CACHE_STORE_PARSED) {
190
- if (git_oidmap_set(cache->map, &entry->oid, entry) == 0) {
195
+ if (git_cache_oidmap_put(&cache->map, &entry->oid, entry) == 0) {
191
196
  git_cached_obj_decref(stored_entry);
192
197
  git_cached_obj_incref(entry);
193
198
  } else {
@@ -14,7 +14,7 @@
14
14
  #include "git2/odb.h"
15
15
 
16
16
  #include "thread.h"
17
- #include "oidmap.h"
17
+ #include "hashmap_oid.h"
18
18
 
19
19
  enum {
20
20
  GIT_CACHE_STORE_ANY = 0,
@@ -30,10 +30,12 @@ typedef struct {
30
30
  git_atomic32 refcount;
31
31
  } git_cached_obj;
32
32
 
33
+ GIT_HASHMAP_OID_STRUCT(git_cache_oidmap, git_cached_obj *);
34
+
33
35
  typedef struct {
34
- git_oidmap *map;
35
- git_rwlock lock;
36
- ssize_t used_memory;
36
+ git_cache_oidmap map;
37
+ git_rwlock lock;
38
+ ssize_t used_memory;
37
39
  } git_cache;
38
40
 
39
41
  extern bool git_cache__enabled;
@@ -45,6 +47,7 @@ int git_cache_set_max_object_size(git_object_t type, size_t size);
45
47
  int git_cache_init(git_cache *cache);
46
48
  void git_cache_dispose(git_cache *cache);
47
49
  void git_cache_clear(git_cache *cache);
50
+ size_t git_cache_size(git_cache *cache);
48
51
 
49
52
  void *git_cache_store_raw(git_cache *cache, git_odb_object *entry);
50
53
  void *git_cache_store_parsed(git_cache *cache, git_object *entry);
@@ -53,11 +56,6 @@ git_odb_object *git_cache_get_raw(git_cache *cache, const git_oid *oid);
53
56
  git_object *git_cache_get_parsed(git_cache *cache, const git_oid *oid);
54
57
  void *git_cache_get_any(git_cache *cache, const git_oid *oid);
55
58
 
56
- GIT_INLINE(size_t) git_cache_size(git_cache *cache)
57
- {
58
- return (size_t)git_oidmap_size(cache->map);
59
- }
60
-
61
59
  GIT_INLINE(void) git_cached_obj_incref(void *_obj)
62
60
  {
63
61
  git_cached_obj *obj = _obj;