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
@@ -8,6 +8,10 @@
8
8
  #ifndef CLI_opt_usage_h__
9
9
  #define CLI_opt_usage_h__
10
10
 
11
+ typedef enum {
12
+ CLI_OPT_USAGE_SHOW_HIDDEN = (1 << 0),
13
+ } cli_opt_usage_flags;
14
+
11
15
  /**
12
16
  * Prints usage information to the given file handle.
13
17
  *
@@ -21,7 +25,8 @@ int cli_opt_usage_fprint(
21
25
  FILE *file,
22
26
  const char *command,
23
27
  const char *subcommand,
24
- const cli_opt_spec specs[]);
28
+ const cli_opt_spec specs[],
29
+ unsigned int print_flags);
25
30
 
26
31
  int cli_opt_usage_error(
27
32
  const char *subcommand,
@@ -242,7 +242,21 @@ static int fetch_receiving(
242
242
  done ? ", done." : "");
243
243
  }
244
244
 
245
- static int fetch_resolving(
245
+ static int indexer_indexing(
246
+ cli_progress *progress,
247
+ const git_indexer_progress *stats)
248
+ {
249
+ bool done = (stats->received_objects == stats->total_objects);
250
+
251
+ return progress_printf(progress, false,
252
+ "Indexing objects: %3d%% (%d/%d)%s\r",
253
+ percent(stats->received_objects, stats->total_objects),
254
+ stats->received_objects,
255
+ stats->total_objects,
256
+ done ? ", done." : "");
257
+ }
258
+
259
+ static int indexer_resolving(
246
260
  cli_progress *progress,
247
261
  const git_indexer_progress *stats)
248
262
  {
@@ -283,7 +297,42 @@ int cli_progress_fetch_transfer(const git_indexer_progress *stats, void *payload
283
297
  /* fall through */
284
298
 
285
299
  case CLI_PROGRESS_RESOLVING:
286
- error = fetch_resolving(progress, stats);
300
+ error = indexer_resolving(progress, stats);
301
+ break;
302
+
303
+ default:
304
+ /* should not be reached */
305
+ GIT_ASSERT(!"unexpected progress state");
306
+ }
307
+
308
+ return error;
309
+ }
310
+
311
+ int cli_progress_indexer(
312
+ const git_indexer_progress *stats,
313
+ void *payload)
314
+ {
315
+ cli_progress *progress = (cli_progress *)payload;
316
+ int error = 0;
317
+
318
+ switch (progress->action) {
319
+ case CLI_PROGRESS_NONE:
320
+ progress->action = CLI_PROGRESS_INDEXING;
321
+ /* fall through */
322
+
323
+ case CLI_PROGRESS_INDEXING:
324
+ if ((error = indexer_indexing(progress, stats)) < 0)
325
+ break;
326
+
327
+ if (stats->indexed_deltas == stats->total_deltas)
328
+ break;
329
+
330
+ progress_complete(progress);
331
+ progress->action = CLI_PROGRESS_RESOLVING;
332
+ /* fall through */
333
+
334
+ case CLI_PROGRESS_RESOLVING:
335
+ error = indexer_resolving(progress, stats);
287
336
  break;
288
337
 
289
338
  default:
@@ -22,6 +22,7 @@
22
22
  typedef enum {
23
23
  CLI_PROGRESS_NONE,
24
24
  CLI_PROGRESS_RECEIVING,
25
+ CLI_PROGRESS_INDEXING,
25
26
  CLI_PROGRESS_RESOLVING,
26
27
  CLI_PROGRESS_CHECKING_OUT
27
28
  } cli_progress_t;
@@ -74,6 +75,17 @@ extern int cli_progress_fetch_transfer(
74
75
  const git_indexer_progress *stats,
75
76
  void *payload);
76
77
 
78
+ /**
79
+ * Prints indexer progress to the console. Suitable for a
80
+ * `progress_cb` callback for `git_indexer_options`.
81
+ *
82
+ * @param stats The indexer stats
83
+ * @param payload A pointer to the cli_progress
84
+ */
85
+ extern int cli_progress_indexer(
86
+ const git_indexer_progress *stats,
87
+ void *payload);
88
+
77
89
  /**
78
90
  * Prints checkout progress to the console. Suitable for a
79
91
  * `progress_cb` callback for `git_checkout_options`.
@@ -8,7 +8,8 @@
8
8
  #include <stdint.h>
9
9
  #include <signal.h>
10
10
  #include "git2_util.h"
11
- #include "cli.h"
11
+ #include "common.h"
12
+ #include "sighandler.h"
12
13
 
13
14
  static void (*interrupt_handler)(void) = NULL;
14
15
 
@@ -1,3 +1,3 @@
1
1
  #include <git2.h>
2
2
 
3
- #include "cli.h"
3
+ #include "common.h"
@@ -8,7 +8,7 @@
8
8
  #include "git2_util.h"
9
9
  #include <windows.h>
10
10
 
11
- #include "cli.h"
11
+ #include "sighandler.h"
12
12
 
13
13
  static void (*interrupt_handler)(void) = NULL;
14
14
 
@@ -2,10 +2,9 @@
2
2
  # git library functionality.
3
3
 
4
4
  add_library(libgit2 OBJECT)
5
- set_target_properties(libgit2 PROPERTIES C_STANDARD 90)
6
- set_target_properties(libgit2 PROPERTIES C_EXTENSIONS OFF)
7
5
 
8
6
  include(PkgBuildConfig)
7
+ include(CMakePackageConfigHelpers)
9
8
 
10
9
  set(LIBGIT2_INCLUDES
11
10
  "${PROJECT_BINARY_DIR}/src/util"
@@ -59,18 +58,14 @@ set(LIBGIT2_SYSTEM_LIBS ${LIBGIT2_SYSTEM_LIBS} PARENT_SCOPE)
59
58
  add_library(libgit2package ${SRC_RC} ${LIBGIT2_OBJECTS})
60
59
  target_link_libraries(libgit2package ${LIBGIT2_SYSTEM_LIBS})
61
60
  target_include_directories(libgit2package SYSTEM PRIVATE ${LIBGIT2_INCLUDES})
61
+ target_include_directories(libgit2package INTERFACE $<INSTALL_INTERFACE:./include/git2>)
62
62
 
63
63
  set_target_properties(libgit2package PROPERTIES C_STANDARD 90)
64
+ set_target_properties(libgit2package PROPERTIES C_EXTENSIONS OFF)
64
65
  set_target_properties(libgit2package PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
65
66
  set_target_properties(libgit2package PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
66
67
  set_target_properties(libgit2package PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
67
68
 
68
- # Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)
69
- # Win64+MSVC+static libs = linker error
70
- if(MSVC AND GIT_ARCH_64 AND NOT BUILD_SHARED_LIBS)
71
- set_target_properties(libgit2package PROPERTIES STATIC_LIBRARY_FLAGS "/MACHINE:x64")
72
- endif()
73
-
74
69
  ide_split_sources(libgit2package)
75
70
 
76
71
  if(SONAME)
@@ -108,9 +103,32 @@ FILE(READ "${PROJECT_SOURCE_DIR}/include/git2.h" LIBGIT2_INCLUDE)
108
103
  STRING(REGEX REPLACE "#include \"git2\/" "#include \"${LIBGIT2_FILENAME}/" LIBGIT2_INCLUDE "${LIBGIT2_INCLUDE}")
109
104
  FILE(WRITE "${PROJECT_BINARY_DIR}/include/${LIBGIT2_FILENAME}.h" ${LIBGIT2_INCLUDE})
110
105
 
106
+ # cmake package targets
107
+
108
+ set(LIBGIT2_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
109
+
110
+ write_basic_package_version_file(
111
+ "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake"
112
+ VERSION ${PROJECT_VERSION}
113
+ COMPATIBILITY SameMajorVersion)
114
+
115
+ configure_file(config.cmake.in
116
+ "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}Config.cmake"
117
+ @ONLY)
118
+
119
+ install(FILES
120
+ "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}Config.cmake"
121
+ "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake"
122
+ DESTINATION "lib/cmake/${PROJECT_NAME}")
123
+ install(
124
+ EXPORT ${LIBGIT2_TARGETS_EXPORT_NAME}
125
+ NAMESPACE "${PROJECT_NAME}::"
126
+ DESTINATION "lib/cmake/${PROJECT_NAME}")
127
+
111
128
  # Install
112
129
 
113
130
  install(TARGETS libgit2package
131
+ EXPORT ${LIBGIT2_TARGETS_EXPORT_NAME}
114
132
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
115
133
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
116
134
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
@@ -20,6 +20,7 @@
20
20
  #include "reader.h"
21
21
  #include "index.h"
22
22
  #include "repository.h"
23
+ #include "hashmap_str.h"
23
24
  #include "apply.h"
24
25
 
25
26
  typedef struct {
@@ -96,7 +97,7 @@ static void patch_image_free(patch_image *image)
96
97
  return;
97
98
 
98
99
  git_pool_clear(&image->pool);
99
- git_vector_free(&image->lines);
100
+ git_vector_dispose(&image->lines);
100
101
  }
101
102
 
102
103
  static bool match_hunk(
@@ -452,7 +453,7 @@ static int apply_one(
452
453
  git_reader *postimage_reader,
453
454
  git_index *postimage,
454
455
  git_diff *diff,
455
- git_strmap *removed_paths,
456
+ git_hashset_str *removed_paths,
456
457
  size_t i,
457
458
  const git_apply_options *opts)
458
459
  {
@@ -489,7 +490,7 @@ static int apply_one(
489
490
  */
490
491
  if (delta->status != GIT_DELTA_RENAMED &&
491
492
  delta->status != GIT_DELTA_ADDED) {
492
- if (git_strmap_exists(removed_paths, delta->old_file.path)) {
493
+ if (git_hashset_str_contains(removed_paths, delta->old_file.path)) {
493
494
  error = apply_err("path '%s' has been renamed or deleted", delta->old_file.path);
494
495
  goto done;
495
496
  }
@@ -573,11 +574,11 @@ static int apply_one(
573
574
 
574
575
  if (delta->status == GIT_DELTA_RENAMED ||
575
576
  delta->status == GIT_DELTA_DELETED)
576
- error = git_strmap_set(removed_paths, delta->old_file.path, (char *) delta->old_file.path);
577
+ error = git_hashset_str_add(removed_paths, delta->old_file.path);
577
578
 
578
579
  if (delta->status == GIT_DELTA_RENAMED ||
579
580
  delta->status == GIT_DELTA_ADDED)
580
- git_strmap_delete(removed_paths, delta->new_file.path);
581
+ git_hashset_str_remove(removed_paths, delta->new_file.path);
581
582
 
582
583
  done:
583
584
  git_str_dispose(&pre_contents);
@@ -597,20 +598,17 @@ static int apply_deltas(
597
598
  git_diff *diff,
598
599
  const git_apply_options *opts)
599
600
  {
600
- git_strmap *removed_paths;
601
+ git_hashset_str removed_paths = GIT_HASHSET_INIT;
601
602
  size_t i;
602
603
  int error = 0;
603
604
 
604
- if (git_strmap_new(&removed_paths) < 0)
605
- return -1;
606
-
607
605
  for (i = 0; i < git_diff_num_deltas(diff); i++) {
608
- if ((error = apply_one(repo, pre_reader, preimage, post_reader, postimage, diff, removed_paths, i, opts)) < 0)
606
+ if ((error = apply_one(repo, pre_reader, preimage, post_reader, postimage, diff, &removed_paths, i, opts)) < 0)
609
607
  goto done;
610
608
  }
611
609
 
612
610
  done:
613
- git_strmap_free(removed_paths);
611
+ git_hashset_str_dispose(&removed_paths);
614
612
  return error;
615
613
  }
616
614
 
@@ -715,7 +713,6 @@ static int git_apply__to_workdir(
715
713
  goto done;
716
714
  }
717
715
 
718
- checkout_opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
719
716
  checkout_opts.checkout_strategy |= GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH;
720
717
  checkout_opts.checkout_strategy |= GIT_CHECKOUT_DONT_WRITE_INDEX;
721
718
 
@@ -730,7 +727,7 @@ static int git_apply__to_workdir(
730
727
  error = git_checkout_index(repo, postimage, &checkout_opts);
731
728
 
732
729
  done:
733
- git_vector_free(&paths);
730
+ git_vector_dispose(&paths);
734
731
  return error;
735
732
  }
736
733
 
@@ -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;
@@ -991,7 +996,7 @@ static void git_attr_rule__clear(git_attr_rule *rule)
991
996
  if (!(rule->match.flags & GIT_ATTR_FNMATCH_IGNORE)) {
992
997
  git_vector_foreach(&rule->assigns, i, assign)
993
998
  GIT_REFCOUNT_DEC(assign, git_attr_assignment__free);
994
- git_vector_free(&rule->assigns);
999
+ git_vector_dispose(&rule->assigns);
995
1000
  }
996
1001
 
997
1002
  /* 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,