rugged 1.7.2 → 1.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +195 -1
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
  59. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  60. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  61. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  62. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  63. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  64. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  65. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  66. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  67. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  68. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  69. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  70. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  71. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  72. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  73. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  74. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  75. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  76. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  77. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  78. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  79. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  80. data/vendor/libgit2/include/git2/apply.h +27 -6
  81. data/vendor/libgit2/include/git2/attr.h +17 -4
  82. data/vendor/libgit2/include/git2/blame.h +133 -28
  83. data/vendor/libgit2/include/git2/blob.h +71 -28
  84. data/vendor/libgit2/include/git2/branch.h +22 -15
  85. data/vendor/libgit2/include/git2/buffer.h +6 -4
  86. data/vendor/libgit2/include/git2/cert.h +2 -1
  87. data/vendor/libgit2/include/git2/checkout.h +83 -32
  88. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  89. data/vendor/libgit2/include/git2/clone.h +25 -9
  90. data/vendor/libgit2/include/git2/commit.h +132 -3
  91. data/vendor/libgit2/include/git2/common.h +120 -63
  92. data/vendor/libgit2/include/git2/config.h +93 -23
  93. data/vendor/libgit2/include/git2/credential.h +30 -2
  94. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  96. data/vendor/libgit2/include/git2/describe.h +13 -1
  97. data/vendor/libgit2/include/git2/diff.h +38 -8
  98. data/vendor/libgit2/include/git2/email.h +9 -29
  99. data/vendor/libgit2/include/git2/errors.h +46 -73
  100. data/vendor/libgit2/include/git2/filter.h +14 -7
  101. data/vendor/libgit2/include/git2/global.h +8 -1
  102. data/vendor/libgit2/include/git2/graph.h +3 -2
  103. data/vendor/libgit2/include/git2/ignore.h +10 -0
  104. data/vendor/libgit2/include/git2/index.h +100 -15
  105. data/vendor/libgit2/include/git2/indexer.h +21 -4
  106. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  107. data/vendor/libgit2/include/git2/merge.h +50 -3
  108. data/vendor/libgit2/include/git2/message.h +2 -2
  109. data/vendor/libgit2/include/git2/net.h +3 -1
  110. data/vendor/libgit2/include/git2/notes.h +9 -6
  111. data/vendor/libgit2/include/git2/object.h +9 -8
  112. data/vendor/libgit2/include/git2/odb.h +91 -49
  113. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  114. data/vendor/libgit2/include/git2/oid.h +23 -25
  115. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  116. data/vendor/libgit2/include/git2/pack.h +13 -1
  117. data/vendor/libgit2/include/git2/patch.h +2 -3
  118. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  119. data/vendor/libgit2/include/git2/proxy.h +12 -3
  120. data/vendor/libgit2/include/git2/rebase.h +9 -6
  121. data/vendor/libgit2/include/git2/refdb.h +2 -2
  122. data/vendor/libgit2/include/git2/reflog.h +3 -2
  123. data/vendor/libgit2/include/git2/refs.h +9 -6
  124. data/vendor/libgit2/include/git2/refspec.h +14 -4
  125. data/vendor/libgit2/include/git2/remote.h +113 -25
  126. data/vendor/libgit2/include/git2/repository.h +57 -21
  127. data/vendor/libgit2/include/git2/reset.h +16 -3
  128. data/vendor/libgit2/include/git2/revert.h +9 -4
  129. data/vendor/libgit2/include/git2/revparse.h +3 -3
  130. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  131. data/vendor/libgit2/include/git2/signature.h +46 -1
  132. data/vendor/libgit2/include/git2/stash.h +17 -3
  133. data/vendor/libgit2/include/git2/status.h +10 -6
  134. data/vendor/libgit2/include/git2/stdint.h +87 -85
  135. data/vendor/libgit2/include/git2/strarray.h +2 -3
  136. data/vendor/libgit2/include/git2/submodule.h +20 -9
  137. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  138. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  139. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  140. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  141. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  142. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  143. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  144. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  145. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  146. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  147. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  148. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  149. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  150. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  151. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  152. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  153. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  154. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  155. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  156. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  157. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  158. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  159. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  160. data/vendor/libgit2/include/git2/tag.h +3 -1
  161. data/vendor/libgit2/include/git2/trace.h +9 -3
  162. data/vendor/libgit2/include/git2/transaction.h +3 -2
  163. data/vendor/libgit2/include/git2/transport.h +11 -3
  164. data/vendor/libgit2/include/git2/tree.h +16 -5
  165. data/vendor/libgit2/include/git2/types.h +19 -3
  166. data/vendor/libgit2/include/git2/version.h +46 -8
  167. data/vendor/libgit2/include/git2/worktree.h +16 -6
  168. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  169. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  170. data/vendor/libgit2/src/cli/cmd.c +1 -1
  171. data/vendor/libgit2/src/cli/cmd.h +4 -0
  172. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  173. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  174. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  175. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  176. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  177. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  178. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  179. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  180. data/vendor/libgit2/src/cli/common.c +168 -0
  181. data/vendor/libgit2/src/cli/common.h +63 -0
  182. data/vendor/libgit2/src/cli/error.h +1 -1
  183. data/vendor/libgit2/src/cli/main.c +52 -24
  184. data/vendor/libgit2/src/cli/opt.c +31 -5
  185. data/vendor/libgit2/src/cli/opt.h +21 -3
  186. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  187. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  188. data/vendor/libgit2/src/cli/progress.c +51 -2
  189. data/vendor/libgit2/src/cli/progress.h +12 -0
  190. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  191. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  192. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  193. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  194. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  195. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  196. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  197. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  198. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  199. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  200. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  201. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  202. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  203. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  204. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  205. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  206. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  207. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  208. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  209. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  210. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  211. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  212. data/vendor/libgit2/src/libgit2/config.c +390 -299
  213. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  214. data/vendor/libgit2/src/libgit2/config.h +9 -4
  215. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  216. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  217. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  218. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  219. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  220. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  221. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  222. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  223. data/vendor/libgit2/src/libgit2/delta.c +5 -1
  224. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  225. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  226. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  227. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  228. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  229. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  230. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  231. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  232. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  233. data/vendor/libgit2/src/libgit2/email.c +1 -0
  234. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  235. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  236. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  237. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  238. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  239. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  240. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  241. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  242. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  243. data/vendor/libgit2/src/libgit2/index.c +76 -98
  244. data/vendor/libgit2/src/libgit2/index.h +5 -2
  245. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  246. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  247. data/vendor/libgit2/src/libgit2/indexer.c +36 -40
  248. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  249. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  252. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  253. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  254. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  255. data/vendor/libgit2/src/libgit2/message.c +1 -1
  256. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  257. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  258. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  259. data/vendor/libgit2/src/libgit2/object.c +6 -5
  260. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  261. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  264. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  267. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  268. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  269. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  270. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/path.c +1 -1
  272. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  273. data/vendor/libgit2/src/libgit2/push.c +79 -28
  274. data/vendor/libgit2/src/libgit2/push.h +1 -0
  275. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  276. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  277. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  278. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  279. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  280. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  281. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  282. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  283. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  284. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  285. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  286. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  287. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  288. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  289. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  290. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  291. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  292. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  293. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  294. data/vendor/libgit2/src/libgit2/status.c +1 -1
  295. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  296. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  297. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  298. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  299. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  300. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  301. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  302. data/vendor/libgit2/src/libgit2/submodule.c +118 -68
  303. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  304. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  305. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  306. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  307. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  308. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  309. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  310. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  311. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  312. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  313. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  314. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  315. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  316. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  317. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  318. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  319. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  320. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
  321. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  322. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  323. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  324. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  325. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  326. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  327. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  328. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  329. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  330. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  331. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  332. data/vendor/libgit2/src/util/alloc.c +4 -1
  333. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  334. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  335. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  336. data/vendor/libgit2/src/util/array.h +18 -17
  337. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  338. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  339. data/vendor/libgit2/src/util/date.c +22 -14
  340. data/vendor/libgit2/src/util/date.h +12 -0
  341. data/vendor/libgit2/src/util/errors.c +401 -0
  342. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  343. data/vendor/libgit2/src/util/fs_path.c +81 -10
  344. data/vendor/libgit2/src/util/fs_path.h +29 -0
  345. data/vendor/libgit2/src/util/futils.c +6 -5
  346. data/vendor/libgit2/src/util/futils.h +24 -7
  347. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  348. data/vendor/libgit2/src/util/git2_util.h +6 -0
  349. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  350. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  351. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  352. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  353. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  354. data/vendor/libgit2/src/util/hashmap.h +425 -0
  355. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  356. data/vendor/libgit2/src/util/integer.h +3 -1
  357. data/vendor/libgit2/src/util/net.c +17 -11
  358. data/vendor/libgit2/src/util/net.h +2 -0
  359. data/vendor/libgit2/src/util/pool.c +1 -1
  360. data/vendor/libgit2/src/util/pool.h +5 -0
  361. data/vendor/libgit2/src/util/pqueue.h +1 -1
  362. data/vendor/libgit2/src/util/process.h +223 -0
  363. data/vendor/libgit2/src/util/rand.c +1 -7
  364. data/vendor/libgit2/src/util/regexp.c +1 -1
  365. data/vendor/libgit2/src/util/runtime.c +2 -2
  366. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  367. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  368. data/vendor/libgit2/src/util/str.c +20 -8
  369. data/vendor/libgit2/src/util/str.h +5 -3
  370. data/vendor/libgit2/src/util/strlist.c +108 -0
  371. data/vendor/libgit2/src/util/strlist.h +36 -0
  372. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  373. data/vendor/libgit2/src/util/unix/process.c +706 -0
  374. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  375. data/vendor/libgit2/src/util/util.c +18 -5
  376. data/vendor/libgit2/src/util/util.h +5 -38
  377. data/vendor/libgit2/src/util/vector.c +3 -3
  378. data/vendor/libgit2/src/util/vector.h +2 -2
  379. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  380. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  381. data/vendor/libgit2/src/util/win32/process.c +522 -0
  382. metadata +60 -32
  383. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  384. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  385. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  386. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  387. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  388. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  389. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  390. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  391. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  392. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  393. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  394. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  395. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  396. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  397. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  398. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  399. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  400. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  401. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  402. data/vendor/libgit2/src/util/khash.h +0 -615
  403. data/vendor/libgit2/src/util/strmap.c +0 -100
  404. data/vendor/libgit2/src/util/strmap.h +0 -131
  405. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -13,6 +13,7 @@
13
13
  #include "attr_file.h"
14
14
  #include "ignore.h"
15
15
  #include "git2/oid.h"
16
+ #include "hashmap_str.h"
16
17
  #include <ctype.h>
17
18
 
18
19
  const char *git_attr__true = "[internal]__TRUE__";
@@ -254,7 +255,7 @@ int git_attr_foreach_ext(
254
255
  git_attr_file *file;
255
256
  git_attr_rule *rule;
256
257
  git_attr_assignment *assign;
257
- git_strmap *seen = NULL;
258
+ git_hashset_str seen = GIT_HASHSET_INIT;
258
259
  git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
259
260
 
260
261
  GIT_ASSERT_ARG(repo);
@@ -267,8 +268,7 @@ int git_attr_foreach_ext(
267
268
  if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
268
269
  return -1;
269
270
 
270
- if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0 ||
271
- (error = git_strmap_new(&seen)) < 0)
271
+ if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0)
272
272
  goto cleanup;
273
273
 
274
274
  git_vector_foreach(&files, i, file) {
@@ -277,10 +277,10 @@ int git_attr_foreach_ext(
277
277
 
278
278
  git_vector_foreach(&rule->assigns, k, assign) {
279
279
  /* skip if higher priority assignment was already seen */
280
- if (git_strmap_exists(seen, assign->name))
280
+ if (git_hashset_str_contains(&seen, assign->name))
281
281
  continue;
282
282
 
283
- if ((error = git_strmap_set(seen, assign->name, assign)) < 0)
283
+ if ((error = git_hashset_str_add(&seen, assign->name)) < 0)
284
284
  goto cleanup;
285
285
 
286
286
  error = callback(assign->name, assign->value, payload);
@@ -293,7 +293,7 @@ int git_attr_foreach_ext(
293
293
  }
294
294
 
295
295
  cleanup:
296
- git_strmap_free(seen);
296
+ git_hashset_str_dispose(&seen);
297
297
  release_attr_files(&files);
298
298
  git_attr_path__free(&path);
299
299
 
@@ -384,6 +384,8 @@ static int attr_setup(
384
384
  git_attr_file_source index_source = { GIT_ATTR_FILE_SOURCE_INDEX, NULL, GIT_ATTR_FILE, NULL };
385
385
  git_attr_file_source head_source = { GIT_ATTR_FILE_SOURCE_HEAD, NULL, GIT_ATTR_FILE, NULL };
386
386
  git_attr_file_source commit_source = { GIT_ATTR_FILE_SOURCE_COMMIT, NULL, GIT_ATTR_FILE, NULL };
387
+ git_attr_cache *attrcache;
388
+ const char *attr_cfg_file = NULL;
387
389
  git_index *idx = NULL;
388
390
  const char *workdir;
389
391
  int error = 0;
@@ -407,8 +409,10 @@ static int attr_setup(
407
409
  error = 0;
408
410
  }
409
411
 
410
- if ((error = preload_attr_file(repo, attr_session, NULL,
411
- git_repository_attr_cache(repo)->cfg_attr_file)) < 0)
412
+ if ((attrcache = git_repository_attr_cache(repo)) != NULL)
413
+ attr_cfg_file = git_attr_cache_attributesfile(attrcache);
414
+
415
+ if ((error = preload_attr_file(repo, attr_session, NULL, attr_cfg_file)) < 0)
412
416
  goto out;
413
417
 
414
418
  if ((error = git_repository__item_path(&info, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
@@ -424,9 +428,13 @@ static int attr_setup(
424
428
  goto out;
425
429
 
426
430
  if ((error = git_repository_index__weakptr(&idx, repo)) < 0 ||
427
- (error = preload_attr_source(repo, attr_session, &index_source)) < 0)
431
+ (error = preload_attr_source(repo, attr_session, &index_source)) < 0) {
432
+ if (error != GIT_ENOTFOUND)
428
433
  goto out;
429
434
 
435
+ error = 0;
436
+ }
437
+
430
438
  if ((opts && (opts->flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0) &&
431
439
  (error = preload_attr_source(repo, attr_session, &head_source)) < 0)
432
440
  goto out;
@@ -460,6 +468,7 @@ int git_attr_add_macro(
460
468
  {
461
469
  int error;
462
470
  git_attr_rule *macro = NULL;
471
+ git_attr_cache *attrcache;
463
472
  git_pool *pool;
464
473
 
465
474
  GIT_ASSERT_ARG(repo);
@@ -471,7 +480,8 @@ int git_attr_add_macro(
471
480
  macro = git__calloc(1, sizeof(git_attr_rule));
472
481
  GIT_ERROR_CHECK_ALLOC(macro);
473
482
 
474
- pool = &git_repository_attr_cache(repo)->pool;
483
+ attrcache = git_repository_attr_cache(repo);
484
+ pool = git_attr_cache_pool(attrcache);
475
485
 
476
486
  macro->match.pattern = git_pool_strdup(pool, name);
477
487
  GIT_ERROR_CHECK_ALLOC(macro->match.pattern);
@@ -614,7 +624,7 @@ static void release_attr_files(git_vector *files)
614
624
  git_attr_file__free(file);
615
625
  files->contents[i] = NULL;
616
626
  }
617
- git_vector_free(files);
627
+ git_vector_dispose(files);
618
628
  }
619
629
 
620
630
  static int collect_attr_files(
@@ -627,6 +637,8 @@ static int collect_attr_files(
627
637
  int error = 0;
628
638
  git_str dir = GIT_STR_INIT, attrfile = GIT_STR_INIT;
629
639
  const char *workdir = git_repository_workdir(repo);
640
+ git_attr_cache *attrcache;
641
+ const char *attr_cfg_file = NULL;
630
642
  attr_walk_up_info info = { NULL };
631
643
 
632
644
  GIT_ASSERT(!git_fs_path_is_absolute(path));
@@ -675,8 +687,13 @@ static int collect_attr_files(
675
687
  if (error < 0)
676
688
  goto cleanup;
677
689
 
678
- if (git_repository_attr_cache(repo)->cfg_attr_file != NULL) {
679
- error = push_attr_file(repo, attr_session, files, NULL, git_repository_attr_cache(repo)->cfg_attr_file);
690
+ if ((attrcache = git_repository_attr_cache(repo)) != NULL)
691
+ attr_cfg_file = git_attr_cache_attributesfile(attrcache);
692
+
693
+
694
+ if (attr_cfg_file) {
695
+ error = push_attr_file(repo, attr_session, files, NULL, attr_cfg_file);
696
+
680
697
  if (error < 0)
681
698
  goto cleanup;
682
699
  }
@@ -69,7 +69,7 @@ int git_attr_file__clear_rules(git_attr_file *file, bool need_lock)
69
69
 
70
70
  git_vector_foreach(&file->rules, i, rule)
71
71
  git_attr_rule__free(rule);
72
- git_vector_free(&file->rules);
72
+ git_vector_dispose(&file->rules);
73
73
 
74
74
  if (need_lock)
75
75
  git_mutex_unlock(&file->lock);
@@ -143,6 +143,8 @@ int git_attr_file__load(
143
143
  blobsize = git_blob_rawsize(blob);
144
144
 
145
145
  GIT_ERROR_CHECK_BLOBSIZE(blobsize);
146
+ if (blobsize > GIT_ATTR_MAX_FILE_SIZE) /* TODO: issue warning when warning API is available */
147
+ goto cleanup;
146
148
  git_str_put(&content, git_blob_rawcontent(blob), (size_t)blobsize);
147
149
  break;
148
150
  }
@@ -155,6 +157,7 @@ int git_attr_file__load(
155
157
  if (p_stat(entry->fullpath, &st) < 0 ||
156
158
  S_ISDIR(st.st_mode) ||
157
159
  (fd = git_futils_open_ro(entry->fullpath)) < 0 ||
160
+ (st.st_size > GIT_ATTR_MAX_FILE_SIZE) ||
158
161
  (error = git_futils_readbuffer_fd(&content, fd, (size_t)st.st_size)) < 0)
159
162
  nonexistent = true;
160
163
 
@@ -198,6 +201,8 @@ int git_attr_file__load(
198
201
  blobsize = git_blob_rawsize(blob);
199
202
 
200
203
  GIT_ERROR_CHECK_BLOBSIZE(blobsize);
204
+ if (blobsize > GIT_ATTR_MAX_FILE_SIZE) /* TODO: issue warning when warning API is available */
205
+ goto cleanup;
201
206
  if ((error = git_str_put(&content,
202
207
  git_blob_rawcontent(blob), (size_t)blobsize)) < 0)
203
208
  goto cleanup;
@@ -342,7 +347,7 @@ int git_attr_file__parse_buffer(
342
347
  {
343
348
  const char *scan = data, *context = NULL;
344
349
  git_attr_rule *rule = NULL;
345
- int error = 0;
350
+ int ignorecase = 0, error = 0;
346
351
 
347
352
  /* If subdir file path, convert context for file paths */
348
353
  if (attrs->entry && git_fs_path_root(attrs->entry->path) < 0 &&
@@ -374,6 +379,13 @@ int git_attr_file__parse_buffer(
374
379
  continue;
375
380
  }
376
381
 
382
+ if (repo &&
383
+ (error = git_repository__configmap_lookup(&ignorecase, repo, GIT_CONFIGMAP_IGNORECASE)) < 0)
384
+ goto out;
385
+
386
+ if (ignorecase)
387
+ rule->match.flags |= GIT_ATTR_FNMATCH_ICASE;
388
+
377
389
  if (rule->match.flags & GIT_ATTR_FNMATCH_MACRO) {
378
390
  /* TODO: warning if macro found in file below repo root */
379
391
  if (!allow_macros)
@@ -477,7 +489,7 @@ bool git_attr_fnmatch__match(
477
489
  */
478
490
  if (match->containing_dir) {
479
491
  if (match->flags & GIT_ATTR_FNMATCH_ICASE) {
480
- if (git__strncasecmp(path->path, match->containing_dir, match->containing_dir_length))
492
+ if (git__prefixcmp_icase(path->path, match->containing_dir))
481
493
  return 0;
482
494
  } else {
483
495
  if (git__prefixcmp(path->path, match->containing_dir))
@@ -799,7 +811,7 @@ int git_attr_fnmatch__parse(
799
811
  }
800
812
 
801
813
  if (context) {
802
- char *slash = strrchr(context, '/');
814
+ const char *slash = strrchr(context, '/');
803
815
  size_t len;
804
816
  if (slash) {
805
817
  /* include the slash for easier matching */
@@ -991,7 +1003,7 @@ static void git_attr_rule__clear(git_attr_rule *rule)
991
1003
  if (!(rule->match.flags & GIT_ATTR_FNMATCH_IGNORE)) {
992
1004
  git_vector_foreach(&rule->assigns, i, assign)
993
1005
  GIT_REFCOUNT_DEC(assign, git_attr_assignment__free);
994
- git_vector_free(&rule->assigns);
1006
+ git_vector_dispose(&rule->assigns);
995
1007
  }
996
1008
 
997
1009
  /* match.pattern is stored in a git_pool, so no need to free */
@@ -21,6 +21,8 @@
21
21
  #define GIT_ATTR_FILE_SYSTEM "gitattributes"
22
22
  #define GIT_ATTR_FILE_XDG "attributes"
23
23
 
24
+ #define GIT_ATTR_MAX_FILE_SIZE 100 * 1024 * 1024
25
+
24
26
  #define GIT_ATTR_FNMATCH_NEGATIVE (1U << 0)
25
27
  #define GIT_ATTR_FNMATCH_DIRECTORY (1U << 1)
26
28
  #define GIT_ATTR_FNMATCH_FULLPATH (1U << 2)
@@ -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,