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,6 +13,38 @@
13
13
  #include "sysdir.h"
14
14
  #include "ignore.h"
15
15
  #include "path.h"
16
+ #include "hashmap_str.h"
17
+
18
+ GIT_HASHMAP_STR_SETUP(git_attr_cache_filemap, git_attr_file_entry *);
19
+ GIT_HASHMAP_STR_SETUP(git_attr_cache_macromap, git_attr_rule *);
20
+
21
+ struct git_attr_cache {
22
+ char *cfg_attr_file; /* cached value of core.attributesfile */
23
+ char *cfg_excl_file; /* cached value of core.excludesfile */
24
+
25
+ /* hash path to git_attr_file_entry records */
26
+ git_attr_cache_filemap files;
27
+ /* hash name to git_attr_rule */
28
+ git_attr_cache_macromap macros;
29
+
30
+ git_mutex lock;
31
+ git_pool pool;
32
+ };
33
+
34
+ const char *git_attr_cache_attributesfile(git_attr_cache *cache)
35
+ {
36
+ return cache->cfg_attr_file;
37
+ }
38
+
39
+ const char *git_attr_cache_excludesfile(git_attr_cache *cache)
40
+ {
41
+ return cache->cfg_excl_file;
42
+ }
43
+
44
+ git_pool *git_attr_cache_pool(git_attr_cache *cache)
45
+ {
46
+ return &cache->pool;
47
+ }
16
48
 
17
49
  GIT_INLINE(int) attr_cache_lock(git_attr_cache *cache)
18
50
  {
@@ -34,7 +66,12 @@ GIT_INLINE(void) attr_cache_unlock(git_attr_cache *cache)
34
66
  GIT_INLINE(git_attr_file_entry *) attr_cache_lookup_entry(
35
67
  git_attr_cache *cache, const char *path)
36
68
  {
37
- return git_strmap_get(cache->files, path);
69
+ git_attr_file_entry *result;
70
+
71
+ if (git_attr_cache_filemap_get(&result, &cache->files, path) == 0)
72
+ return result;
73
+
74
+ return NULL;
38
75
  }
39
76
 
40
77
  int git_attr_cache__alloc_file_entry(
@@ -92,7 +129,7 @@ static int attr_cache_make_entry(
92
129
  git_repository_workdir(repo), path, &cache->pool)) < 0)
93
130
  return error;
94
131
 
95
- if ((error = git_strmap_set(cache->files, entry->path, entry)) < 0)
132
+ if ((error = git_attr_cache_filemap_put(&cache->files, entry->path, entry)) < 0)
96
133
  return error;
97
134
 
98
135
  *out = entry;
@@ -271,12 +308,11 @@ bool git_attr_cache__is_cached(
271
308
  {
272
309
  git_attr_cache *cache = git_repository_attr_cache(repo);
273
310
  git_attr_file_entry *entry;
274
- git_strmap *files;
275
311
 
276
- if (!cache || !(files = cache->files))
312
+ if (!cache)
277
313
  return false;
278
314
 
279
- if ((entry = git_strmap_get(files, filename)) == NULL)
315
+ if (git_attr_cache_filemap_get(&entry, &cache->files, filename) != 0)
280
316
  return false;
281
317
 
282
318
  return entry && (entry->file[source_type] != NULL);
@@ -318,6 +354,9 @@ static int attr_cache__lookup_path(
318
354
 
319
355
  static void attr_cache__free(git_attr_cache *cache)
320
356
  {
357
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
358
+ git_attr_rule *rule;
359
+ git_attr_file_entry *entry;
321
360
  bool unlock;
322
361
 
323
362
  if (!cache)
@@ -325,30 +364,24 @@ static void attr_cache__free(git_attr_cache *cache)
325
364
 
326
365
  unlock = (attr_cache_lock(cache) == 0);
327
366
 
328
- if (cache->files != NULL) {
329
- git_attr_file_entry *entry;
367
+ while (git_attr_cache_filemap_iterate(&iter, NULL, &entry, &cache->files) == 0) {
330
368
  git_attr_file *file;
331
- int i;
332
-
333
- git_strmap_foreach_value(cache->files, entry, {
334
- for (i = 0; i < GIT_ATTR_FILE_NUM_SOURCES; ++i) {
335
- if ((file = git_atomic_swap(entry->file[i], NULL)) != NULL) {
336
- GIT_REFCOUNT_OWN(file, NULL);
337
- git_attr_file__free(file);
338
- }
369
+ size_t i;
370
+
371
+ for (i = 0; i < GIT_ATTR_FILE_NUM_SOURCES; i++) {
372
+ if ((file = git_atomic_swap(entry->file[i], NULL)) != NULL) {
373
+ GIT_REFCOUNT_OWN(file, NULL);
374
+ git_attr_file__free(file);
339
375
  }
340
- });
341
- git_strmap_free(cache->files);
376
+ }
342
377
  }
343
378
 
344
- if (cache->macros != NULL) {
345
- git_attr_rule *rule;
379
+ iter = GIT_HASHMAP_ITER_INIT;
380
+ while (git_attr_cache_macromap_iterate(&iter, NULL, &rule, &cache->macros) == 0)
381
+ git_attr_rule__free(rule);
346
382
 
347
- git_strmap_foreach_value(cache->macros, rule, {
348
- git_attr_rule__free(rule);
349
- });
350
- git_strmap_free(cache->macros);
351
- }
383
+ git_attr_cache_filemap_dispose(&cache->files);
384
+ git_attr_cache_macromap_dispose(&cache->macros);
352
385
 
353
386
  git_pool_clear(&cache->pool);
354
387
 
@@ -401,9 +434,7 @@ int git_attr_cache__init(git_repository *repo)
401
434
  /* allocate hashtable for attribute and ignore file contents,
402
435
  * hashtable for attribute macros, and string pool
403
436
  */
404
- if ((ret = git_strmap_new(&cache->files)) < 0 ||
405
- (ret = git_strmap_new(&cache->macros)) < 0 ||
406
- (ret = git_pool_init(&cache->pool, 1)) < 0)
437
+ if ((ret = git_pool_init(&cache->pool, 1)) < 0)
407
438
  goto cancel;
408
439
 
409
440
  if (git_atomic_compare_and_swap(&repo->attrcache, NULL, cache) != NULL)
@@ -457,11 +488,11 @@ int git_attr_cache__insert_macro(git_repository *repo, git_attr_rule *macro)
457
488
  goto out;
458
489
  locked = true;
459
490
 
460
- if ((preexisting = git_strmap_get(cache->macros, macro->match.pattern)) != NULL)
461
- git_attr_rule__free(preexisting);
491
+ if (git_attr_cache_macromap_get(&preexisting, &cache->macros, macro->match.pattern) == 0)
492
+ git_attr_rule__free(preexisting);
462
493
 
463
- if ((error = git_strmap_set(cache->macros, macro->match.pattern, macro)) < 0)
464
- goto out;
494
+ if ((error = git_attr_cache_macromap_put(&cache->macros, macro->match.pattern, macro)) < 0)
495
+ goto out;
465
496
 
466
497
  out:
467
498
  if (locked)
@@ -472,7 +503,12 @@ out:
472
503
  git_attr_rule *git_attr_cache__lookup_macro(
473
504
  git_repository *repo, const char *name)
474
505
  {
475
- git_strmap *macros = git_repository_attr_cache(repo)->macros;
506
+ git_attr_cache *cache = git_repository_attr_cache(repo);
507
+ git_attr_rule *rule;
508
+
509
+ if (!cache ||
510
+ git_attr_cache_macromap_get(&rule, &cache->macros, name) != 0)
511
+ return NULL;
476
512
 
477
- return git_strmap_get(macros, name);
513
+ return rule;
478
514
  }
@@ -10,22 +10,18 @@
10
10
  #include "common.h"
11
11
 
12
12
  #include "attr_file.h"
13
- #include "strmap.h"
14
13
 
15
14
  #define GIT_ATTR_CONFIG "core.attributesfile"
16
15
  #define GIT_IGNORE_CONFIG "core.excludesfile"
17
16
 
18
- typedef struct {
19
- char *cfg_attr_file; /* cached value of core.attributesfile */
20
- char *cfg_excl_file; /* cached value of core.excludesfile */
21
- git_strmap *files; /* hash path to git_attr_cache_entry records */
22
- git_strmap *macros; /* hash name to vector<git_attr_assignment> */
23
- git_mutex lock;
24
- git_pool pool;
25
- } git_attr_cache;
17
+ typedef struct git_attr_cache git_attr_cache;
26
18
 
27
19
  extern int git_attr_cache__init(git_repository *repo);
28
20
 
21
+ extern const char *git_attr_cache_attributesfile(git_attr_cache *ac);
22
+ extern const char *git_attr_cache_excludesfile(git_attr_cache *ac);
23
+ extern git_pool *git_attr_cache_pool(git_attr_cache *ac);
24
+
29
25
  /* get file - loading and reload as needed */
30
26
  extern int git_attr_cache__get(
31
27
  git_attr_file **file,
@@ -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;
@@ -60,10 +59,11 @@ static bool hunk_starts_at_or_after_line(git_blame_hunk *hunk, size_t line)
60
59
  }
61
60
 
62
61
  static git_blame_hunk *new_hunk(
63
- size_t start,
64
- size_t lines,
65
- size_t orig_start,
66
- const char *path)
62
+ size_t start,
63
+ size_t lines,
64
+ size_t orig_start,
65
+ const char *path,
66
+ git_blame *blame)
67
67
  {
68
68
  git_blame_hunk *hunk = git__calloc(1, sizeof(git_blame_hunk));
69
69
  if (!hunk) return NULL;
@@ -72,27 +72,31 @@ static git_blame_hunk *new_hunk(
72
72
  hunk->final_start_line_number = start;
73
73
  hunk->orig_start_line_number = orig_start;
74
74
  hunk->orig_path = path ? git__strdup(path) : NULL;
75
- git_oid_clear(&hunk->orig_commit_id, GIT_OID_SHA1);
76
- git_oid_clear(&hunk->final_commit_id, GIT_OID_SHA1);
75
+ git_oid_clear(&hunk->orig_commit_id, blame->repository->oid_type);
76
+ git_oid_clear(&hunk->final_commit_id, blame->repository->oid_type);
77
77
 
78
78
  return hunk;
79
79
  }
80
80
 
81
81
  static void free_hunk(git_blame_hunk *hunk)
82
82
  {
83
- git__free((void*)hunk->orig_path);
83
+ git__free((char *)hunk->orig_path);
84
+ git__free((char *)hunk->summary);
84
85
  git_signature_free(hunk->final_signature);
86
+ git_signature_free(hunk->final_committer);
85
87
  git_signature_free(hunk->orig_signature);
88
+ git_signature_free(hunk->orig_committer);
86
89
  git__free(hunk);
87
90
  }
88
91
 
89
- static git_blame_hunk *dup_hunk(git_blame_hunk *hunk)
92
+ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk, git_blame *blame)
90
93
  {
91
94
  git_blame_hunk *newhunk = new_hunk(
92
95
  hunk->final_start_line_number,
93
96
  hunk->lines_in_hunk,
94
97
  hunk->orig_start_line_number,
95
- hunk->orig_path);
98
+ hunk->orig_path,
99
+ blame);
96
100
 
97
101
  if (!newhunk)
98
102
  return NULL;
@@ -102,7 +106,10 @@ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk)
102
106
  newhunk->boundary = hunk->boundary;
103
107
 
104
108
  if (git_signature_dup(&newhunk->final_signature, hunk->final_signature) < 0 ||
105
- 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) {
106
113
  free_hunk(newhunk);
107
114
  return NULL;
108
115
  }
@@ -115,12 +122,12 @@ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk)
115
122
  static void shift_hunks_by(git_vector *v, size_t start_line, int shift_by)
116
123
  {
117
124
  size_t i;
118
-
119
- if (!git_vector_bsearch2(&i, v, hunk_byfinalline_search_cmp, &start_line)) {
120
- for (; i < v->length; i++) {
121
- git_blame_hunk *hunk = (git_blame_hunk*)v->contents[i];
122
- 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;
123
129
  }
130
+ hunk->final_start_line_number += shift_by;
124
131
  }
125
132
  }
126
133
 
@@ -137,10 +144,9 @@ git_blame *git_blame__alloc(
137
144
  gbr->options = opts;
138
145
 
139
146
  if (git_vector_init(&gbr->hunks, 8, hunk_cmp) < 0 ||
140
- git_vector_init(&gbr->paths, 8, paths_cmp) < 0 ||
141
- (gbr->path = git__strdup(path)) == NULL ||
142
- git_vector_insert(&gbr->paths, git__strdup(path)) < 0)
143
- {
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) {
144
150
  git_blame_free(gbr);
145
151
  return NULL;
146
152
  }
@@ -163,9 +169,11 @@ void git_blame_free(git_blame *blame)
163
169
 
164
170
  git_vector_foreach(&blame->hunks, i, hunk)
165
171
  free_hunk(hunk);
166
- git_vector_free(&blame->hunks);
167
172
 
168
- 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);
169
177
 
170
178
  git_array_clear(blame->line_index);
171
179
 
@@ -176,31 +184,76 @@ void git_blame_free(git_blame *blame)
176
184
  git__free(blame);
177
185
  }
178
186
 
179
- uint32_t git_blame_get_hunk_count(git_blame *blame)
187
+ size_t git_blame_hunkcount(git_blame *blame)
180
188
  {
181
189
  GIT_ASSERT_ARG(blame);
182
- return (uint32_t)blame->hunks.length;
190
+
191
+ return blame->hunks.length;
192
+ }
193
+
194
+ size_t git_blame_linecount(git_blame *blame)
195
+ {
196
+ GIT_ASSERT_ARG(blame);
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);
183
209
  }
184
210
 
185
- 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)
186
214
  {
187
215
  GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
188
- return (git_blame_hunk*)git_vector_get(&blame->hunks, index);
216
+ return git_vector_get(&blame->hunks, index);
189
217
  }
190
218
 
191
- 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)
192
222
  {
193
223
  size_t i, new_lineno = lineno;
194
224
 
195
225
  GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
196
226
 
197
- if (!git_vector_bsearch2(&i, &blame->hunks, hunk_byfinalline_search_cmp, &new_lineno)) {
198
- return git_blame_get_hunk_byindex(blame, (uint32_t)i);
199
- }
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
+ }
200
233
 
201
- 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;
202
240
  }
203
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
+
204
257
  static int normalize_options(
205
258
  git_blame_options *out,
206
259
  const git_blame_options *in,
@@ -237,7 +290,8 @@ static git_blame_hunk *split_hunk_in_vector(
237
290
  git_vector *vec,
238
291
  git_blame_hunk *hunk,
239
292
  size_t rel_line,
240
- bool return_new)
293
+ bool return_new,
294
+ git_blame *blame)
241
295
  {
242
296
  size_t new_line_count;
243
297
  git_blame_hunk *nh;
@@ -250,8 +304,9 @@ static git_blame_hunk *split_hunk_in_vector(
250
304
  }
251
305
 
252
306
  new_line_count = hunk->lines_in_hunk - rel_line;
253
- nh = new_hunk(hunk->final_start_line_number + rel_line, new_line_count,
254
- hunk->orig_start_line_number + rel_line, hunk->orig_path);
307
+ nh = new_hunk(hunk->final_start_line_number + rel_line,
308
+ new_line_count, hunk->orig_start_line_number + rel_line,
309
+ hunk->orig_path, blame);
255
310
 
256
311
  if (!nh)
257
312
  return NULL;
@@ -278,42 +333,77 @@ static int index_blob_lines(git_blame *blame)
278
333
  const char *buf = blame->final_buf;
279
334
  size_t len = blame->final_buf_size;
280
335
  int num = 0, incomplete = 0, bol = 1;
336
+ git_blame_line *line = NULL;
281
337
  size_t *i;
282
338
 
283
339
  if (len && buf[len-1] != '\n')
284
340
  incomplete++; /* incomplete line at the end */
341
+
285
342
  while (len--) {
286
343
  if (bol) {
287
344
  i = git_array_alloc(blame->line_index);
288
345
  GIT_ERROR_CHECK_ALLOC(i);
289
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;
290
353
  bol = 0;
291
354
  }
355
+
292
356
  if (*buf++ == '\n') {
357
+ GIT_ASSERT(line);
358
+ line->len = (buf - line->ptr) - 1;
359
+ line = NULL;
360
+
293
361
  num++;
294
362
  bol = 1;
295
363
  }
296
364
  }
365
+
297
366
  i = git_array_alloc(blame->line_index);
298
367
  GIT_ERROR_CHECK_ALLOC(i);
299
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
+
300
378
  blame->num_lines = num + incomplete;
301
379
  return blame->num_lines;
302
380
  }
303
381
 
304
382
  static git_blame_hunk *hunk_from_entry(git_blame__entry *e, git_blame *blame)
305
383
  {
384
+ const char *summary;
306
385
  git_blame_hunk *h = new_hunk(
307
- e->lno+1, e->num_lines, e->s_lno+1, e->suspect->path);
386
+ e->lno+1, e->num_lines, e->s_lno+1, e->suspect->path,
387
+ blame);
308
388
 
309
389
  if (!h)
310
390
  return NULL;
311
391
 
312
392
  git_oid_cpy(&h->final_commit_id, git_commit_id(e->suspect->commit));
313
393
  git_oid_cpy(&h->orig_commit_id, git_commit_id(e->suspect->commit));
314
- git_commit_author_with_mailmap(
315
- &h->final_signature, e->suspect->commit, blame->mailmap);
316
- 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
+
317
407
  h->boundary = e->is_boundary ? 1 : 0;
318
408
  return h;
319
409
  }
@@ -342,12 +432,12 @@ static int blame_internal(git_blame *blame)
342
432
 
343
433
  if ((error = load_blob(blame)) < 0 ||
344
434
  (error = git_blame__get_origin(&o, blame, blame->final, blame->path)) < 0)
345
- goto cleanup;
435
+ goto on_error;
346
436
 
347
437
  if (git_blob_rawsize(blame->final_blob) > SIZE_MAX) {
348
438
  git_error_set(GIT_ERROR_NOMEMORY, "blob is too large to blame");
349
439
  error = -1;
350
- goto cleanup;
440
+ goto on_error;
351
441
  }
352
442
 
353
443
  blame->final_buf = git_blob_rawcontent(blame->final_blob);
@@ -366,17 +456,19 @@ static int blame_internal(git_blame *blame)
366
456
 
367
457
  blame->ent = ent;
368
458
 
369
- 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;
370
461
 
371
- cleanup:
372
- for (ent = blame->ent; ent; ) {
373
- git_blame__entry *e = ent->next;
462
+ for (ent = blame->ent; ent; ent = ent->next) {
374
463
  git_blame_hunk *h = hunk_from_entry(ent, blame);
375
-
376
464
  git_vector_insert(&blame->hunks, h);
465
+ }
377
466
 
467
+ on_error:
468
+ for (ent = blame->ent; ent; ) {
469
+ git_blame__entry *next = ent->next;
378
470
  git_blame__free_entry(ent);
379
- ent = e;
471
+ ent = next;
380
472
  }
381
473
 
382
474
  return error;
@@ -439,20 +531,21 @@ static int buffer_hunk_cb(
439
531
 
440
532
  GIT_UNUSED(delta);
441
533
 
442
- wedge_line = (hunk->old_lines == 0) ? hunk->new_start : hunk->old_start;
534
+ wedge_line = (hunk->new_start >= hunk->old_start || hunk->old_lines==0) ? hunk->new_start : hunk->old_start;
443
535
  blame->current_diff_line = wedge_line;
444
-
445
- blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byline(blame, wedge_line);
536
+ blame->current_hunk = (git_blame_hunk*)git_blame_hunk_byline(blame, wedge_line);
446
537
  if (!blame->current_hunk) {
447
538
  /* Line added at the end of the file */
448
- blame->current_hunk = new_hunk(wedge_line, 0, wedge_line, blame->path);
539
+ blame->current_hunk = new_hunk(wedge_line, 0, wedge_line,
540
+ blame->path, blame);
541
+ blame->current_diff_line++;
449
542
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
450
-
451
543
  git_vector_insert(&blame->hunks, blame->current_hunk);
452
544
  } else if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){
453
545
  /* If this hunk doesn't start between existing hunks, split a hunk up so it does */
454
546
  blame->current_hunk = split_hunk_in_vector(&blame->hunks, blame->current_hunk,
455
- wedge_line - blame->current_hunk->orig_start_line_number, true);
547
+ wedge_line - blame->current_hunk->final_start_line_number, true,
548
+ blame);
456
549
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
457
550
  }
458
551
 
@@ -477,13 +570,12 @@ static int buffer_line_cb(
477
570
  hunk_ends_at_or_before_line(blame->current_hunk, blame->current_diff_line)) {
478
571
  /* Append to the current buffer-blame hunk */
479
572
  blame->current_hunk->lines_in_hunk++;
480
- shift_hunks_by(&blame->hunks, blame->current_diff_line+1, 1);
573
+ shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
481
574
  } else {
482
575
  /* Create a new buffer-blame hunk with this line */
483
576
  shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
484
- blame->current_hunk = new_hunk(blame->current_diff_line, 1, 0, blame->path);
577
+ blame->current_hunk = new_hunk(blame->current_diff_line, 1, 0, blame->path, blame);
485
578
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
486
-
487
579
  git_vector_insert_sorted(&blame->hunks, blame->current_hunk, NULL);
488
580
  }
489
581
  blame->current_diff_line++;
@@ -491,15 +583,16 @@ static int buffer_line_cb(
491
583
 
492
584
  if (line->origin == GIT_DIFF_LINE_DELETION) {
493
585
  /* Trim the line from the current hunk; remove it if it's now empty */
494
- size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk+1;
586
+ size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk;
495
587
 
496
588
  if (--(blame->current_hunk->lines_in_hunk) == 0) {
497
589
  size_t i;
498
- shift_base--;
590
+ size_t i_next;
499
591
  if (!git_vector_search2(&i, &blame->hunks, ptrs_equal_cmp, blame->current_hunk)) {
500
592
  git_vector_remove(&blame->hunks, i);
501
593
  free_hunk(blame->current_hunk);
502
- blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byindex(blame, (uint32_t)i);
594
+ i_next = min( i , blame->hunks.length -1);
595
+ blame->current_hunk = (git_blame_hunk*)git_blame_hunk_byindex(blame, (uint32_t)i_next);
503
596
  }
504
597
  }
505
598
  shift_hunks_by(&blame->hunks, shift_base, -1);
@@ -529,7 +622,7 @@ int git_blame_buffer(
529
622
 
530
623
  /* Duplicate all of the hunk structures in the reference blame */
531
624
  git_vector_foreach(&reference->hunks, i, hunk) {
532
- git_blame_hunk *h = dup_hunk(hunk);
625
+ git_blame_hunk *h = dup_hunk(hunk, blame);
533
626
  GIT_ERROR_CHECK_ALLOC(h);
534
627
 
535
628
  git_vector_insert(&blame->hunks, h);
@@ -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;
@@ -9,7 +9,6 @@
9
9
 
10
10
  #include "commit.h"
11
11
  #include "blob.h"
12
- #include "xdiff/xinclude.h"
13
12
  #include "diff_xdiff.h"
14
13
 
15
14
  /*
@@ -134,9 +134,9 @@ int git_branch_create(
134
134
  const git_commit *commit,
135
135
  int force)
136
136
  {
137
- char commit_id[GIT_OID_SHA1_HEXSIZE + 1];
137
+ char commit_id[GIT_OID_MAX_HEXSIZE + 1];
138
138
 
139
- git_oid_tostr(commit_id, GIT_OID_SHA1_HEXSIZE + 1, git_commit_id(commit));
139
+ git_oid_tostr(commit_id, GIT_OID_MAX_HEXSIZE + 1, git_commit_id(commit));
140
140
  return create_branch(ref_out, repository, branch_name, commit, commit_id, force);
141
141
  }
142
142