rugged 1.7.2 → 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 (361) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +23 -10
  5. data/vendor/libgit2/COPYING +195 -1
  6. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  7. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  8. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  9. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  10. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  11. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  12. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  13. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  14. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  15. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  16. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  17. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  18. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  19. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  20. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  21. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  22. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  23. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  24. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  25. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  26. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  29. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  30. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  31. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  32. data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  34. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  35. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  36. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  37. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  38. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  39. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  40. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  41. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  42. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  43. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  44. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  45. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  46. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  47. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  48. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  49. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  50. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  51. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  52. data/vendor/libgit2/include/git2/apply.h +27 -6
  53. data/vendor/libgit2/include/git2/attr.h +17 -4
  54. data/vendor/libgit2/include/git2/blame.h +133 -28
  55. data/vendor/libgit2/include/git2/blob.h +71 -28
  56. data/vendor/libgit2/include/git2/branch.h +22 -15
  57. data/vendor/libgit2/include/git2/buffer.h +6 -4
  58. data/vendor/libgit2/include/git2/cert.h +2 -1
  59. data/vendor/libgit2/include/git2/checkout.h +83 -32
  60. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  61. data/vendor/libgit2/include/git2/clone.h +25 -9
  62. data/vendor/libgit2/include/git2/commit.h +132 -3
  63. data/vendor/libgit2/include/git2/common.h +120 -63
  64. data/vendor/libgit2/include/git2/config.h +93 -23
  65. data/vendor/libgit2/include/git2/credential.h +30 -2
  66. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  67. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  68. data/vendor/libgit2/include/git2/describe.h +13 -1
  69. data/vendor/libgit2/include/git2/diff.h +38 -8
  70. data/vendor/libgit2/include/git2/email.h +9 -29
  71. data/vendor/libgit2/include/git2/errors.h +46 -73
  72. data/vendor/libgit2/include/git2/filter.h +14 -7
  73. data/vendor/libgit2/include/git2/global.h +8 -1
  74. data/vendor/libgit2/include/git2/graph.h +3 -2
  75. data/vendor/libgit2/include/git2/ignore.h +10 -0
  76. data/vendor/libgit2/include/git2/index.h +99 -14
  77. data/vendor/libgit2/include/git2/indexer.h +21 -4
  78. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  79. data/vendor/libgit2/include/git2/merge.h +46 -1
  80. data/vendor/libgit2/include/git2/message.h +2 -2
  81. data/vendor/libgit2/include/git2/net.h +3 -1
  82. data/vendor/libgit2/include/git2/notes.h +9 -6
  83. data/vendor/libgit2/include/git2/object.h +9 -8
  84. data/vendor/libgit2/include/git2/odb.h +91 -49
  85. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  86. data/vendor/libgit2/include/git2/oid.h +23 -24
  87. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  88. data/vendor/libgit2/include/git2/pack.h +13 -1
  89. data/vendor/libgit2/include/git2/patch.h +2 -3
  90. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  91. data/vendor/libgit2/include/git2/proxy.h +10 -0
  92. data/vendor/libgit2/include/git2/rebase.h +9 -6
  93. data/vendor/libgit2/include/git2/refdb.h +2 -2
  94. data/vendor/libgit2/include/git2/reflog.h +3 -2
  95. data/vendor/libgit2/include/git2/refs.h +9 -6
  96. data/vendor/libgit2/include/git2/refspec.h +14 -4
  97. data/vendor/libgit2/include/git2/remote.h +94 -18
  98. data/vendor/libgit2/include/git2/repository.h +57 -21
  99. data/vendor/libgit2/include/git2/reset.h +16 -3
  100. data/vendor/libgit2/include/git2/revert.h +9 -4
  101. data/vendor/libgit2/include/git2/revparse.h +3 -3
  102. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  103. data/vendor/libgit2/include/git2/signature.h +46 -1
  104. data/vendor/libgit2/include/git2/stash.h +17 -3
  105. data/vendor/libgit2/include/git2/status.h +10 -6
  106. data/vendor/libgit2/include/git2/stdint.h +87 -85
  107. data/vendor/libgit2/include/git2/strarray.h +2 -3
  108. data/vendor/libgit2/include/git2/submodule.h +20 -9
  109. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  110. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  111. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  112. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  113. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  114. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  115. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  116. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  117. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  118. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  119. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  120. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  121. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  122. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  123. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  124. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  125. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  126. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  127. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  128. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  129. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  130. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  131. data/vendor/libgit2/include/git2/sys/transport.h +24 -3
  132. data/vendor/libgit2/include/git2/tag.h +3 -1
  133. data/vendor/libgit2/include/git2/trace.h +9 -3
  134. data/vendor/libgit2/include/git2/transaction.h +3 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -3
  136. data/vendor/libgit2/include/git2/tree.h +16 -5
  137. data/vendor/libgit2/include/git2/types.h +19 -3
  138. data/vendor/libgit2/include/git2/version.h +44 -8
  139. data/vendor/libgit2/include/git2/worktree.h +16 -6
  140. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  142. data/vendor/libgit2/src/cli/cmd.c +1 -1
  143. data/vendor/libgit2/src/cli/cmd.h +4 -0
  144. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  145. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  146. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  147. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  149. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  150. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  151. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  152. data/vendor/libgit2/src/cli/common.c +168 -0
  153. data/vendor/libgit2/src/cli/common.h +63 -0
  154. data/vendor/libgit2/src/cli/error.h +1 -1
  155. data/vendor/libgit2/src/cli/main.c +52 -24
  156. data/vendor/libgit2/src/cli/opt.c +29 -3
  157. data/vendor/libgit2/src/cli/opt.h +21 -3
  158. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  159. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  160. data/vendor/libgit2/src/cli/progress.c +51 -2
  161. data/vendor/libgit2/src/cli/progress.h +12 -0
  162. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  163. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  164. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  165. data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
  166. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  167. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  168. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  169. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  170. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  171. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  172. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  173. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  174. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  175. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  176. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  177. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  178. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  179. data/vendor/libgit2/src/libgit2/clone.c +186 -166
  180. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  181. data/vendor/libgit2/src/libgit2/commit.c +92 -0
  182. data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
  183. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  184. data/vendor/libgit2/src/libgit2/config.c +389 -298
  185. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  186. data/vendor/libgit2/src/libgit2/config.h +9 -4
  187. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  188. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  189. data/vendor/libgit2/src/libgit2/config_file.c +99 -88
  190. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  191. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  192. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  193. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  194. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  195. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  196. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  197. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  198. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  199. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  200. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  201. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  202. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  203. data/vendor/libgit2/src/libgit2/email.c +1 -0
  204. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  205. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  206. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  207. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  208. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  209. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  210. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  211. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  212. data/vendor/libgit2/src/libgit2/index.c +68 -90
  213. data/vendor/libgit2/src/libgit2/index.h +2 -2
  214. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  215. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  216. data/vendor/libgit2/src/libgit2/indexer.c +34 -38
  217. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  218. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  219. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  220. data/vendor/libgit2/src/libgit2/merge.c +42 -37
  221. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  222. data/vendor/libgit2/src/libgit2/midx.c +28 -15
  223. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  224. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  225. data/vendor/libgit2/src/libgit2/object.c +6 -5
  226. data/vendor/libgit2/src/libgit2/odb.c +5 -4
  227. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  228. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  229. data/vendor/libgit2/src/libgit2/oid.c +32 -5
  230. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  231. data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
  232. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  233. data/vendor/libgit2/src/libgit2/pack.c +30 -24
  234. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  235. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  236. data/vendor/libgit2/src/libgit2/path.c +1 -1
  237. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  238. data/vendor/libgit2/src/libgit2/push.c +79 -28
  239. data/vendor/libgit2/src/libgit2/push.h +1 -0
  240. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  241. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  242. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  243. data/vendor/libgit2/src/libgit2/refs.c +26 -7
  244. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  245. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  246. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  247. data/vendor/libgit2/src/libgit2/remote.c +121 -61
  248. data/vendor/libgit2/src/libgit2/repository.c +231 -51
  249. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  250. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  251. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  252. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  253. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  254. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  255. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  256. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  257. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  258. data/vendor/libgit2/src/libgit2/status.c +1 -1
  259. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  260. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  261. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  262. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  263. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  264. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  265. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  266. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  267. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  268. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  269. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  270. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  271. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  272. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  273. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  274. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  275. data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
  276. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  277. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  278. data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
  279. data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
  280. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  281. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
  282. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  283. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  284. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  285. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  286. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  287. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  288. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  289. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  290. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  291. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  292. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  293. data/vendor/libgit2/src/util/alloc.c +4 -1
  294. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  295. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  296. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  297. data/vendor/libgit2/src/util/array.h +18 -17
  298. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  299. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  300. data/vendor/libgit2/src/util/date.c +22 -14
  301. data/vendor/libgit2/src/util/date.h +12 -0
  302. data/vendor/libgit2/src/util/errors.c +401 -0
  303. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  304. data/vendor/libgit2/src/util/fs_path.c +15 -4
  305. data/vendor/libgit2/src/util/fs_path.h +23 -0
  306. data/vendor/libgit2/src/util/futils.c +6 -5
  307. data/vendor/libgit2/src/util/futils.h +13 -4
  308. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  309. data/vendor/libgit2/src/util/git2_util.h +6 -0
  310. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  311. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  312. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  313. data/vendor/libgit2/src/util/hashmap.h +424 -0
  314. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  315. data/vendor/libgit2/src/util/integer.h +3 -1
  316. data/vendor/libgit2/src/util/net.c +13 -7
  317. data/vendor/libgit2/src/util/net.h +2 -0
  318. data/vendor/libgit2/src/util/pool.c +1 -1
  319. data/vendor/libgit2/src/util/pool.h +5 -0
  320. data/vendor/libgit2/src/util/pqueue.h +1 -1
  321. data/vendor/libgit2/src/util/process.h +222 -0
  322. data/vendor/libgit2/src/util/rand.c +1 -7
  323. data/vendor/libgit2/src/util/regexp.c +1 -1
  324. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  325. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  326. data/vendor/libgit2/src/util/str.c +2 -2
  327. data/vendor/libgit2/src/util/strlist.c +108 -0
  328. data/vendor/libgit2/src/util/strlist.h +36 -0
  329. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  330. data/vendor/libgit2/src/util/unix/process.c +629 -0
  331. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  332. data/vendor/libgit2/src/util/util.c +2 -2
  333. data/vendor/libgit2/src/util/util.h +4 -38
  334. data/vendor/libgit2/src/util/vector.c +3 -3
  335. data/vendor/libgit2/src/util/vector.h +2 -2
  336. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  337. data/vendor/libgit2/src/util/win32/process.c +506 -0
  338. metadata +45 -28
  339. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  340. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  341. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  342. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  343. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  344. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  345. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  346. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  347. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  348. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  349. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  350. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  351. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  352. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  353. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  354. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  355. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  356. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  357. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  358. data/vendor/libgit2/src/util/khash.h +0 -615
  359. data/vendor/libgit2/src/util/strmap.c +0 -100
  360. data/vendor/libgit2/src/util/strmap.h +0 -131
  361. /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)
182
188
  {
183
189
  GIT_ASSERT_ARG(blame);
184
- 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);
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,19 @@ 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
-
381
464
  git_vector_insert(&blame->hunks, h);
465
+ }
382
466
 
467
+ on_error:
468
+ for (ent = blame->ent; ent; ) {
469
+ git_blame__entry *next = ent->next;
383
470
  git_blame__free_entry(ent);
384
- ent = e;
471
+ ent = next;
385
472
  }
386
473
 
387
474
  return error;
@@ -444,21 +531,20 @@ static int buffer_hunk_cb(
444
531
 
445
532
  GIT_UNUSED(delta);
446
533
 
447
- 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;
448
535
  blame->current_diff_line = wedge_line;
449
-
450
- 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);
451
537
  if (!blame->current_hunk) {
452
538
  /* Line added at the end of the file */
453
539
  blame->current_hunk = new_hunk(wedge_line, 0, wedge_line,
454
540
  blame->path, blame);
541
+ blame->current_diff_line++;
455
542
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
456
-
457
543
  git_vector_insert(&blame->hunks, blame->current_hunk);
458
544
  } else if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){
459
545
  /* If this hunk doesn't start between existing hunks, split a hunk up so it does */
460
546
  blame->current_hunk = split_hunk_in_vector(&blame->hunks, blame->current_hunk,
461
- wedge_line - blame->current_hunk->orig_start_line_number, true,
547
+ wedge_line - blame->current_hunk->final_start_line_number, true,
462
548
  blame);
463
549
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
464
550
  }
@@ -484,13 +570,12 @@ static int buffer_line_cb(
484
570
  hunk_ends_at_or_before_line(blame->current_hunk, blame->current_diff_line)) {
485
571
  /* Append to the current buffer-blame hunk */
486
572
  blame->current_hunk->lines_in_hunk++;
487
- shift_hunks_by(&blame->hunks, blame->current_diff_line+1, 1);
573
+ shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
488
574
  } else {
489
575
  /* Create a new buffer-blame hunk with this line */
490
576
  shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
491
577
  blame->current_hunk = new_hunk(blame->current_diff_line, 1, 0, blame->path, blame);
492
578
  GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
493
-
494
579
  git_vector_insert_sorted(&blame->hunks, blame->current_hunk, NULL);
495
580
  }
496
581
  blame->current_diff_line++;
@@ -498,15 +583,16 @@ static int buffer_line_cb(
498
583
 
499
584
  if (line->origin == GIT_DIFF_LINE_DELETION) {
500
585
  /* 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;
586
+ size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk;
502
587
 
503
588
  if (--(blame->current_hunk->lines_in_hunk) == 0) {
504
589
  size_t i;
505
- shift_base--;
590
+ size_t i_next;
506
591
  if (!git_vector_search2(&i, &blame->hunks, ptrs_equal_cmp, blame->current_hunk)) {
507
592
  git_vector_remove(&blame->hunks, i);
508
593
  free_hunk(blame->current_hunk);
509
- 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);
510
596
  }
511
597
  }
512
598
  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;