rugged 0.27.7 → 0.27.10

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 (409) 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 +99 -51
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  8. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  9. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  10. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  11. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  12. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  13. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
  14. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  15. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  16. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  17. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  18. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  19. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  20. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  21. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  82. data/vendor/libgit2/include/git2/apply.h +149 -0
  83. data/vendor/libgit2/include/git2/attr.h +20 -13
  84. data/vendor/libgit2/include/git2/blame.h +4 -4
  85. data/vendor/libgit2/include/git2/blob.h +44 -12
  86. data/vendor/libgit2/include/git2/buffer.h +20 -26
  87. data/vendor/libgit2/include/git2/cert.h +135 -0
  88. data/vendor/libgit2/include/git2/checkout.h +53 -21
  89. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  90. data/vendor/libgit2/include/git2/clone.h +5 -5
  91. data/vendor/libgit2/include/git2/commit.h +25 -3
  92. data/vendor/libgit2/include/git2/common.h +35 -10
  93. data/vendor/libgit2/include/git2/config.h +29 -19
  94. data/vendor/libgit2/include/git2/cred.h +308 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  96. data/vendor/libgit2/include/git2/describe.h +4 -4
  97. data/vendor/libgit2/include/git2/diff.h +177 -135
  98. data/vendor/libgit2/include/git2/errors.h +53 -46
  99. data/vendor/libgit2/include/git2/filter.h +8 -0
  100. data/vendor/libgit2/include/git2/index.h +74 -52
  101. data/vendor/libgit2/include/git2/indexer.h +76 -6
  102. data/vendor/libgit2/include/git2/merge.h +25 -10
  103. data/vendor/libgit2/include/git2/net.h +0 -5
  104. data/vendor/libgit2/include/git2/notes.h +1 -1
  105. data/vendor/libgit2/include/git2/object.h +17 -29
  106. data/vendor/libgit2/include/git2/odb.h +12 -11
  107. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  108. data/vendor/libgit2/include/git2/oid.h +2 -2
  109. data/vendor/libgit2/include/git2/pack.h +14 -3
  110. data/vendor/libgit2/include/git2/proxy.h +5 -3
  111. data/vendor/libgit2/include/git2/rebase.h +46 -2
  112. data/vendor/libgit2/include/git2/refs.h +34 -16
  113. data/vendor/libgit2/include/git2/remote.h +111 -14
  114. data/vendor/libgit2/include/git2/repository.h +69 -34
  115. data/vendor/libgit2/include/git2/revert.h +1 -1
  116. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  117. data/vendor/libgit2/include/git2/signature.h +2 -2
  118. data/vendor/libgit2/include/git2/stash.h +5 -5
  119. data/vendor/libgit2/include/git2/status.h +26 -17
  120. data/vendor/libgit2/include/git2/submodule.h +23 -6
  121. data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
  122. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  123. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  124. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  125. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  126. data/vendor/libgit2/include/git2/sys/merge.h +3 -3
  127. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  128. data/vendor/libgit2/include/git2/sys/path.h +14 -5
  129. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  130. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  131. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  132. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  133. data/vendor/libgit2/include/git2/tag.h +13 -4
  134. data/vendor/libgit2/include/git2/trace.h +2 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -311
  136. data/vendor/libgit2/include/git2/tree.h +4 -4
  137. data/vendor/libgit2/include/git2/types.h +25 -106
  138. data/vendor/libgit2/include/git2/version.h +3 -3
  139. data/vendor/libgit2/include/git2/worktree.h +5 -5
  140. data/vendor/libgit2/include/git2.h +4 -0
  141. data/vendor/libgit2/src/CMakeLists.txt +104 -235
  142. data/vendor/libgit2/src/alloc.c +14 -18
  143. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
  144. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  145. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  146. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  147. data/vendor/libgit2/src/annotated_commit.c +18 -11
  148. data/vendor/libgit2/src/apply.c +535 -28
  149. data/vendor/libgit2/src/apply.h +3 -1
  150. data/vendor/libgit2/src/array.h +2 -2
  151. data/vendor/libgit2/src/attr.c +77 -71
  152. data/vendor/libgit2/src/attr_file.c +203 -117
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +49 -51
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +38 -18
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +29 -15
  159. data/vendor/libgit2/src/blob.c +123 -37
  160. data/vendor/libgit2/src/blob.h +19 -2
  161. data/vendor/libgit2/src/branch.c +47 -23
  162. data/vendor/libgit2/src/buf_text.c +7 -6
  163. data/vendor/libgit2/src/buffer.c +60 -53
  164. data/vendor/libgit2/src/cache.c +38 -45
  165. data/vendor/libgit2/src/cache.h +3 -3
  166. data/vendor/libgit2/src/cc-compat.h +20 -3
  167. data/vendor/libgit2/src/checkout.c +77 -67
  168. data/vendor/libgit2/src/cherrypick.c +12 -6
  169. data/vendor/libgit2/src/clone.c +36 -14
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +103 -48
  172. data/vendor/libgit2/src/commit.h +7 -0
  173. data/vendor/libgit2/src/commit_list.c +36 -78
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +24 -90
  176. data/vendor/libgit2/src/config.c +203 -176
  177. data/vendor/libgit2/src/config.h +8 -20
  178. data/vendor/libgit2/src/config_backend.h +96 -0
  179. data/vendor/libgit2/src/config_cache.c +41 -35
  180. data/vendor/libgit2/src/config_entries.c +229 -0
  181. data/vendor/libgit2/src/config_entries.h +24 -0
  182. data/vendor/libgit2/src/config_file.c +422 -680
  183. data/vendor/libgit2/src/config_mem.c +220 -0
  184. data/vendor/libgit2/src/config_parse.c +96 -68
  185. data/vendor/libgit2/src/config_parse.h +15 -14
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +219 -196
  188. data/vendor/libgit2/src/delta.c +25 -18
  189. data/vendor/libgit2/src/describe.c +42 -41
  190. data/vendor/libgit2/src/diff.c +52 -67
  191. data/vendor/libgit2/src/diff.h +2 -1
  192. data/vendor/libgit2/src/diff_driver.c +44 -46
  193. data/vendor/libgit2/src/diff_file.c +16 -14
  194. data/vendor/libgit2/src/diff_file.h +1 -1
  195. data/vendor/libgit2/src/diff_generate.c +158 -103
  196. data/vendor/libgit2/src/diff_generate.h +3 -3
  197. data/vendor/libgit2/src/diff_parse.c +4 -4
  198. data/vendor/libgit2/src/diff_print.c +34 -22
  199. data/vendor/libgit2/src/diff_stats.c +22 -7
  200. data/vendor/libgit2/src/diff_tform.c +18 -16
  201. data/vendor/libgit2/src/diff_xdiff.c +3 -3
  202. data/vendor/libgit2/src/errors.c +51 -39
  203. data/vendor/libgit2/src/errors.h +81 -0
  204. data/vendor/libgit2/src/features.h.in +9 -3
  205. data/vendor/libgit2/src/fetch.c +8 -3
  206. data/vendor/libgit2/src/fetchhead.c +12 -12
  207. data/vendor/libgit2/src/filebuf.c +28 -32
  208. data/vendor/libgit2/src/filebuf.h +2 -2
  209. data/vendor/libgit2/src/filter.c +47 -33
  210. data/vendor/libgit2/src/filter.h +0 -10
  211. data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
  212. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  213. data/vendor/libgit2/src/global.c +35 -55
  214. data/vendor/libgit2/src/global.h +0 -2
  215. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  216. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  218. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  219. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  220. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  221. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  222. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
  223. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  224. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  226. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  227. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  228. data/vendor/libgit2/src/hash/sha1.h +38 -0
  229. data/vendor/libgit2/src/hash.c +61 -0
  230. data/vendor/libgit2/src/hash.h +20 -21
  231. data/vendor/libgit2/src/hashsig.c +5 -5
  232. data/vendor/libgit2/src/idxmap.c +107 -61
  233. data/vendor/libgit2/src/idxmap.h +153 -31
  234. data/vendor/libgit2/src/ignore.c +38 -42
  235. data/vendor/libgit2/src/index.c +264 -199
  236. data/vendor/libgit2/src/index.h +7 -1
  237. data/vendor/libgit2/src/indexer.c +338 -167
  238. data/vendor/libgit2/src/integer.h +71 -26
  239. data/vendor/libgit2/src/iterator.c +134 -62
  240. data/vendor/libgit2/src/iterator.h +15 -0
  241. data/vendor/libgit2/src/mailmap.c +8 -8
  242. data/vendor/libgit2/src/map.h +1 -1
  243. data/vendor/libgit2/src/merge.c +137 -93
  244. data/vendor/libgit2/src/merge_driver.c +11 -11
  245. data/vendor/libgit2/src/merge_file.c +2 -2
  246. data/vendor/libgit2/src/mwindow.c +24 -29
  247. data/vendor/libgit2/src/mwindow.h +4 -4
  248. data/vendor/libgit2/src/net.c +184 -0
  249. data/vendor/libgit2/src/net.h +36 -0
  250. data/vendor/libgit2/src/netops.c +55 -156
  251. data/vendor/libgit2/src/netops.h +3 -23
  252. data/vendor/libgit2/src/notes.c +14 -9
  253. data/vendor/libgit2/src/object.c +120 -69
  254. data/vendor/libgit2/src/object.h +22 -9
  255. data/vendor/libgit2/src/object_api.c +8 -8
  256. data/vendor/libgit2/src/odb.c +111 -88
  257. data/vendor/libgit2/src/odb.h +8 -7
  258. data/vendor/libgit2/src/odb_loose.c +58 -47
  259. data/vendor/libgit2/src/odb_mempack.c +21 -34
  260. data/vendor/libgit2/src/odb_pack.c +17 -13
  261. data/vendor/libgit2/src/offmap.c +53 -35
  262. data/vendor/libgit2/src/offmap.h +108 -21
  263. data/vendor/libgit2/src/oid.c +12 -7
  264. data/vendor/libgit2/src/oidmap.c +49 -47
  265. data/vendor/libgit2/src/oidmap.h +101 -24
  266. data/vendor/libgit2/src/pack-objects.c +87 -86
  267. data/vendor/libgit2/src/pack-objects.h +2 -8
  268. data/vendor/libgit2/src/pack.c +94 -96
  269. data/vendor/libgit2/src/pack.h +16 -18
  270. data/vendor/libgit2/src/parse.c +17 -4
  271. data/vendor/libgit2/src/parse.h +3 -3
  272. data/vendor/libgit2/src/patch.c +3 -3
  273. data/vendor/libgit2/src/patch_generate.c +18 -18
  274. data/vendor/libgit2/src/patch_parse.c +147 -79
  275. data/vendor/libgit2/src/path.c +207 -62
  276. data/vendor/libgit2/src/path.h +14 -0
  277. data/vendor/libgit2/src/pathspec.c +18 -18
  278. data/vendor/libgit2/src/pool.c +26 -22
  279. data/vendor/libgit2/src/pool.h +7 -7
  280. data/vendor/libgit2/src/posix.c +10 -10
  281. data/vendor/libgit2/src/posix.h +12 -1
  282. data/vendor/libgit2/src/proxy.c +8 -3
  283. data/vendor/libgit2/src/push.c +35 -29
  284. data/vendor/libgit2/src/push.h +2 -1
  285. data/vendor/libgit2/src/reader.c +265 -0
  286. data/vendor/libgit2/src/reader.h +107 -0
  287. data/vendor/libgit2/src/rebase.c +97 -38
  288. data/vendor/libgit2/src/refdb.c +15 -3
  289. data/vendor/libgit2/src/refdb_fs.c +318 -222
  290. data/vendor/libgit2/src/reflog.c +13 -15
  291. data/vendor/libgit2/src/refs.c +122 -89
  292. data/vendor/libgit2/src/refs.h +5 -3
  293. data/vendor/libgit2/src/refspec.c +27 -33
  294. data/vendor/libgit2/src/regexp.c +221 -0
  295. data/vendor/libgit2/src/regexp.h +97 -0
  296. data/vendor/libgit2/src/remote.c +229 -178
  297. data/vendor/libgit2/src/remote.h +11 -2
  298. data/vendor/libgit2/src/repository.c +227 -172
  299. data/vendor/libgit2/src/repository.h +52 -40
  300. data/vendor/libgit2/src/reset.c +7 -7
  301. data/vendor/libgit2/src/revert.c +11 -6
  302. data/vendor/libgit2/src/revparse.c +46 -46
  303. data/vendor/libgit2/src/revwalk.c +89 -54
  304. data/vendor/libgit2/src/revwalk.h +20 -0
  305. data/vendor/libgit2/src/settings.c +22 -9
  306. data/vendor/libgit2/src/signature.c +15 -13
  307. data/vendor/libgit2/src/sortedcache.c +22 -36
  308. data/vendor/libgit2/src/sortedcache.h +1 -1
  309. data/vendor/libgit2/src/stash.c +56 -76
  310. data/vendor/libgit2/src/status.c +27 -21
  311. data/vendor/libgit2/src/stream.h +17 -2
  312. data/vendor/libgit2/src/streams/mbedtls.c +100 -80
  313. data/vendor/libgit2/src/streams/mbedtls.h +5 -2
  314. data/vendor/libgit2/src/streams/openssl.c +93 -81
  315. data/vendor/libgit2/src/streams/openssl.h +5 -2
  316. data/vendor/libgit2/src/streams/registry.c +118 -0
  317. data/vendor/libgit2/src/streams/registry.h +19 -0
  318. data/vendor/libgit2/src/streams/socket.c +55 -30
  319. data/vendor/libgit2/src/streams/stransport.c +57 -32
  320. data/vendor/libgit2/src/streams/stransport.h +5 -0
  321. data/vendor/libgit2/src/streams/tls.c +48 -20
  322. data/vendor/libgit2/src/streams/tls.h +12 -4
  323. data/vendor/libgit2/src/strmap.c +47 -74
  324. data/vendor/libgit2/src/strmap.h +108 -33
  325. data/vendor/libgit2/src/submodule.c +190 -169
  326. data/vendor/libgit2/src/submodule.h +1 -1
  327. data/vendor/libgit2/src/sysdir.c +25 -15
  328. data/vendor/libgit2/src/tag.c +39 -26
  329. data/vendor/libgit2/src/tag.h +2 -1
  330. data/vendor/libgit2/src/trace.c +2 -2
  331. data/vendor/libgit2/src/trace.h +2 -2
  332. data/vendor/libgit2/src/trailer.c +46 -32
  333. data/vendor/libgit2/src/transaction.c +30 -29
  334. data/vendor/libgit2/src/transport.c +3 -3
  335. data/vendor/libgit2/src/transports/auth.c +14 -10
  336. data/vendor/libgit2/src/transports/auth.h +10 -3
  337. data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
  338. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  339. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  340. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  341. data/vendor/libgit2/src/transports/cred.c +24 -24
  342. data/vendor/libgit2/src/transports/git.c +25 -30
  343. data/vendor/libgit2/src/transports/http.c +871 -335
  344. data/vendor/libgit2/src/transports/http.h +2 -0
  345. data/vendor/libgit2/src/transports/local.c +28 -28
  346. data/vendor/libgit2/src/transports/smart.c +64 -46
  347. data/vendor/libgit2/src/transports/smart.h +5 -6
  348. data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
  349. data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
  350. data/vendor/libgit2/src/transports/ssh.c +76 -65
  351. data/vendor/libgit2/src/transports/winhttp.c +328 -319
  352. data/vendor/libgit2/src/tree-cache.c +21 -14
  353. data/vendor/libgit2/src/tree.c +119 -112
  354. data/vendor/libgit2/src/tree.h +1 -0
  355. data/vendor/libgit2/src/unix/map.c +3 -3
  356. data/vendor/libgit2/src/unix/posix.h +1 -11
  357. data/vendor/libgit2/src/userdiff.h +3 -1
  358. data/vendor/libgit2/src/util.c +154 -93
  359. data/vendor/libgit2/src/util.h +19 -23
  360. data/vendor/libgit2/src/vector.c +15 -10
  361. data/vendor/libgit2/src/wildmatch.c +320 -0
  362. data/vendor/libgit2/src/wildmatch.h +23 -0
  363. data/vendor/libgit2/src/win32/dir.c +3 -3
  364. data/vendor/libgit2/src/win32/findfile.c +1 -1
  365. data/vendor/libgit2/src/win32/map.c +9 -11
  366. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  367. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  368. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  369. data/vendor/libgit2/src/win32/posix.h +1 -4
  370. data/vendor/libgit2/src/win32/posix_w32.c +69 -44
  371. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  372. data/vendor/libgit2/src/win32/thread.c +5 -10
  373. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  374. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  375. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
  376. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  377. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  378. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  379. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  380. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  381. data/vendor/libgit2/src/worktree.c +44 -30
  382. data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
  383. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  384. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  385. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  386. data/vendor/libgit2/src/zstream.c +4 -4
  387. metadata +115 -38
  388. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  389. data/vendor/libgit2/deps/regex/config.h +0 -7
  390. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  391. data/vendor/libgit2/deps/regex/regex.c +0 -92
  392. data/vendor/libgit2/deps/regex/regex.h +0 -582
  393. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  394. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  395. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  396. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  397. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  398. data/vendor/libgit2/libgit2.pc.in +0 -13
  399. data/vendor/libgit2/src/config_file.h +0 -73
  400. data/vendor/libgit2/src/fnmatch.c +0 -248
  401. data/vendor/libgit2/src/fnmatch.h +0 -48
  402. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  403. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  404. data/vendor/libgit2/src/streams/curl.c +0 -385
  405. data/vendor/libgit2/src/streams/curl.h +0 -17
  406. /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  407. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  408. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  409. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
@@ -7,127 +7,173 @@
7
7
 
8
8
  #include "idxmap.h"
9
9
 
10
+ #define kmalloc git__malloc
11
+ #define kcalloc git__calloc
12
+ #define krealloc git__realloc
13
+ #define kreallocarray git__reallocarray
14
+ #define kfree git__free
15
+ #include "khash.h"
16
+
17
+ __KHASH_TYPE(idx, const git_index_entry *, git_index_entry *)
18
+ __KHASH_TYPE(idxicase, const git_index_entry *, git_index_entry *)
19
+
10
20
  /* This is __ac_X31_hash_string but with tolower and it takes the entry's stage into account */
11
21
  static kh_inline khint_t idxentry_hash(const git_index_entry *e)
12
22
  {
13
23
  const char *s = e->path;
14
24
  khint_t h = (khint_t)git__tolower(*s);
15
25
  if (h) for (++s ; *s; ++s) h = (h << 5) - h + (khint_t)git__tolower(*s);
16
- return h + GIT_IDXENTRY_STAGE(e);
26
+ return h + GIT_INDEX_ENTRY_STAGE(e);
17
27
  }
18
28
 
19
- #define idxentry_equal(a, b) (GIT_IDXENTRY_STAGE(a) == GIT_IDXENTRY_STAGE(b) && strcmp(a->path, b->path) == 0)
20
- #define idxentry_icase_equal(a, b) (GIT_IDXENTRY_STAGE(a) == GIT_IDXENTRY_STAGE(b) && strcasecmp(a->path, b->path) == 0)
29
+ #define idxentry_equal(a, b) (GIT_INDEX_ENTRY_STAGE(a) == GIT_INDEX_ENTRY_STAGE(b) && strcmp(a->path, b->path) == 0)
30
+ #define idxentry_icase_equal(a, b) (GIT_INDEX_ENTRY_STAGE(a) == GIT_INDEX_ENTRY_STAGE(b) && strcasecmp(a->path, b->path) == 0)
21
31
 
22
32
  __KHASH_IMPL(idx, static kh_inline, const git_index_entry *, git_index_entry *, 1, idxentry_hash, idxentry_equal)
23
33
  __KHASH_IMPL(idxicase, static kh_inline, const git_index_entry *, git_index_entry *, 1, idxentry_hash, idxentry_icase_equal)
24
34
 
25
- int git_idxmap_alloc(git_idxmap **map)
35
+ int git_idxmap_new(git_idxmap **out)
26
36
  {
27
- if ((*map = kh_init(idx)) == NULL) {
28
- giterr_set_oom();
29
- return -1;
30
- }
37
+ *out = kh_init(idx);
38
+ GIT_ERROR_CHECK_ALLOC(*out);
31
39
 
32
40
  return 0;
33
41
  }
34
42
 
35
- int git_idxmap_icase_alloc(git_idxmap_icase **map)
43
+ int git_idxmap_icase_new(git_idxmap_icase **out)
36
44
  {
37
- if ((*map = kh_init(idxicase)) == NULL) {
38
- giterr_set_oom();
39
- return -1;
40
- }
45
+ *out = kh_init(idxicase);
46
+ GIT_ERROR_CHECK_ALLOC(*out);
41
47
 
42
48
  return 0;
43
49
  }
44
50
 
45
- void git_idxmap_insert(git_idxmap *map, const git_index_entry *key, void *value, int *rval)
51
+ void git_idxmap_free(git_idxmap *map)
46
52
  {
47
- khiter_t idx = kh_put(idx, map, key, rval);
48
-
49
- if ((*rval) >= 0) {
50
- if ((*rval) == 0)
51
- kh_key(map, idx) = key;
52
- kh_val(map, idx) = value;
53
- }
53
+ kh_destroy(idx, map);
54
54
  }
55
55
 
56
- void git_idxmap_icase_insert(git_idxmap_icase *map, const git_index_entry *key, void *value, int *rval)
56
+ void git_idxmap_icase_free(git_idxmap_icase *map)
57
57
  {
58
- khiter_t idx = kh_put(idxicase, map, key, rval);
59
-
60
- if ((*rval) >= 0) {
61
- if ((*rval) == 0)
62
- kh_key(map, idx) = key;
63
- kh_val(map, idx) = value;
64
- }
58
+ kh_destroy(idxicase, map);
65
59
  }
66
60
 
67
- size_t git_idxmap_lookup_index(git_idxmap *map, const git_index_entry *key)
61
+ void git_idxmap_clear(git_idxmap *map)
68
62
  {
69
- return kh_get(idx, map, key);
63
+ kh_clear(idx, map);
70
64
  }
71
65
 
72
- size_t git_idxmap_icase_lookup_index(git_idxmap_icase *map, const git_index_entry *key)
66
+ void git_idxmap_icase_clear(git_idxmap_icase *map)
73
67
  {
74
- return kh_get(idxicase, map, key);
68
+ kh_clear(idxicase, map);
75
69
  }
76
70
 
77
- void *git_idxmap_value_at(git_idxmap *map, size_t idx)
71
+ int git_idxmap_resize(git_idxmap *map, size_t size)
78
72
  {
79
- return kh_val(map, idx);
73
+ if (!git__is_uint32(size) ||
74
+ kh_resize(idx, map, (khiter_t)size) < 0) {
75
+ git_error_set_oom();
76
+ return -1;
77
+ }
78
+ return 0;
80
79
  }
81
80
 
82
- int git_idxmap_valid_index(git_idxmap *map, size_t idx)
81
+ int git_idxmap_icase_resize(git_idxmap_icase *map, size_t size)
83
82
  {
84
- return idx != kh_end(map);
83
+ if (!git__is_uint32(size) ||
84
+ kh_resize(idxicase, map, (khiter_t)size) < 0) {
85
+ git_error_set_oom();
86
+ return -1;
87
+ }
88
+ return 0;
85
89
  }
86
90
 
87
- int git_idxmap_has_data(git_idxmap *map, size_t idx)
91
+ void *git_idxmap_get(git_idxmap *map, const git_index_entry *key)
88
92
  {
89
- return kh_exist(map, idx);
93
+ size_t idx = kh_get(idx, map, key);
94
+ if (idx == kh_end(map) || !kh_exist(map, idx))
95
+ return NULL;
96
+ return kh_val(map, idx);
90
97
  }
91
98
 
92
- void git_idxmap_resize(git_idxmap *map, size_t size)
99
+ int git_idxmap_set(git_idxmap *map, const git_index_entry *key, void *value)
93
100
  {
94
- kh_resize(idx, map, size);
95
- }
101
+ size_t idx;
102
+ int rval;
96
103
 
97
- void git_idxmap_icase_resize(git_idxmap_icase *map, size_t size)
98
- {
99
- kh_resize(idxicase, map, size);
104
+ idx = kh_put(idx, map, key, &rval);
105
+ if (rval < 0)
106
+ return -1;
107
+
108
+ if (rval == 0)
109
+ kh_key(map, idx) = key;
110
+
111
+ kh_val(map, idx) = value;
112
+
113
+ return 0;
100
114
  }
101
115
 
102
- void git_idxmap_free(git_idxmap *map)
116
+ int git_idxmap_icase_set(git_idxmap_icase *map, const git_index_entry *key, void *value)
103
117
  {
104
- kh_destroy(idx, map);
118
+ size_t idx;
119
+ int rval;
120
+
121
+ idx = kh_put(idxicase, map, key, &rval);
122
+ if (rval < 0)
123
+ return -1;
124
+
125
+ if (rval == 0)
126
+ kh_key(map, idx) = key;
127
+
128
+ kh_val(map, idx) = value;
129
+
130
+ return 0;
105
131
  }
106
132
 
107
- void git_idxmap_clear(git_idxmap *map)
133
+ void *git_idxmap_icase_get(git_idxmap_icase *map, const git_index_entry *key)
108
134
  {
109
- kh_clear(idx, map);
135
+ size_t idx = kh_get(idxicase, map, key);
136
+ if (idx == kh_end(map) || !kh_exist(map, idx))
137
+ return NULL;
138
+ return kh_val(map, idx);
110
139
  }
111
140
 
112
- void git_idxmap_delete_at(git_idxmap *map, size_t idx)
141
+ void git_idxmap_insert(git_idxmap *map, const git_index_entry *key, void *value, int *rval)
113
142
  {
114
- kh_del(idx, map, idx);
143
+ khiter_t idx = kh_put(idx, map, key, rval);
144
+
145
+ if ((*rval) >= 0) {
146
+ if ((*rval) == 0)
147
+ kh_key(map, idx) = key;
148
+ kh_val(map, idx) = value;
149
+ }
115
150
  }
116
151
 
117
- void git_idxmap_icase_delete_at(git_idxmap_icase *map, size_t idx)
152
+ void git_idxmap_icase_insert(git_idxmap_icase *map, const git_index_entry *key, void *value, int *rval)
118
153
  {
119
- kh_del(idxicase, map, idx);
154
+ khiter_t idx = kh_put(idxicase, map, key, rval);
155
+
156
+ if ((*rval) >= 0) {
157
+ if ((*rval) == 0)
158
+ kh_key(map, idx) = key;
159
+ kh_val(map, idx) = value;
160
+ }
120
161
  }
121
162
 
122
- void git_idxmap_delete(git_idxmap *map, const git_index_entry *key)
163
+ int git_idxmap_delete(git_idxmap *map, const git_index_entry *key)
123
164
  {
124
- khiter_t idx = git_idxmap_lookup_index(map, key);
125
- if (git_idxmap_valid_index(map, idx))
126
- git_idxmap_delete_at(map, idx);
165
+ khiter_t idx = kh_get(idx, map, key);
166
+ if (idx == kh_end(map))
167
+ return GIT_ENOTFOUND;
168
+ kh_del(idx, map, idx);
169
+ return 0;
127
170
  }
128
- void git_idxmap_icase_delete(git_idxmap_icase *map, const git_index_entry *key)
171
+
172
+ int git_idxmap_icase_delete(git_idxmap_icase *map, const git_index_entry *key)
129
173
  {
130
- khiter_t idx = git_idxmap_icase_lookup_index(map, key);
131
- if (git_idxmap_valid_index((git_idxmap *)map, idx))
132
- git_idxmap_icase_delete_at(map, idx);
174
+ khiter_t idx = kh_get(idxicase, map, key);
175
+ if (idx == kh_end(map))
176
+ return GIT_ENOTFOUND;
177
+ kh_del(idxicase, map, idx);
178
+ return 0;
133
179
  }
@@ -9,47 +9,169 @@
9
9
 
10
10
  #include "common.h"
11
11
 
12
- #include <ctype.h>
13
12
  #include "git2/index.h"
14
13
 
15
- #define kmalloc git__malloc
16
- #define kcalloc git__calloc
17
- #define krealloc git__realloc
18
- #define kreallocarray git__reallocarray
19
- #define kfree git__free
20
- #include "khash.h"
14
+ /** A map with `git_index_entry`s as key. */
15
+ typedef struct kh_idx_s git_idxmap;
16
+ /** A map with case-insensitive `git_index_entry`s as key */
17
+ typedef struct kh_idxicase_s git_idxmap_icase;
21
18
 
22
- __KHASH_TYPE(idx, const git_index_entry *, git_index_entry *)
23
- __KHASH_TYPE(idxicase, const git_index_entry *, git_index_entry *)
24
-
25
- typedef khash_t(idx) git_idxmap;
26
- typedef khash_t(idxicase) git_idxmap_icase;
19
+ /**
20
+ * Allocate a new index entry map.
21
+ *
22
+ * @param out Pointer to the map that shall be allocated.
23
+ * @return 0 on success, an error code if allocation has failed.
24
+ */
25
+ int git_idxmap_new(git_idxmap **out);
27
26
 
28
- typedef khiter_t git_idxmap_iter;
27
+ /**
28
+ * Allocate a new case-insensitive index entry map.
29
+ *
30
+ * @param out Pointer to the map that shall be allocated.
31
+ * @return 0 on success, an error code if allocation has failed.
32
+ */
33
+ int git_idxmap_icase_new(git_idxmap_icase **out);
29
34
 
30
- int git_idxmap_alloc(git_idxmap **map);
31
- int git_idxmap_icase_alloc(git_idxmap_icase **map);
32
- void git_idxmap_insert(git_idxmap *map, const git_index_entry *key, void *value, int *rval);
33
- void git_idxmap_icase_insert(git_idxmap_icase *map, const git_index_entry *key, void *value, int *rval);
35
+ /**
36
+ * Free memory associated with the map.
37
+ *
38
+ * Note that this function will _not_ free values added to this
39
+ * map.
40
+ *
41
+ * @param map Pointer to the map that is to be free'd. May be
42
+ * `NULL`.
43
+ */
44
+ void git_idxmap_free(git_idxmap *map);
34
45
 
35
- size_t git_idxmap_lookup_index(git_idxmap *map, const git_index_entry *key);
36
- size_t git_idxmap_icase_lookup_index(git_idxmap_icase *map, const git_index_entry *key);
37
- void *git_idxmap_value_at(git_idxmap *map, size_t idx);
38
- int git_idxmap_valid_index(git_idxmap *map, size_t idx);
39
- int git_idxmap_has_data(git_idxmap *map, size_t idx);
46
+ /**
47
+ * Free memory associated with the map.
48
+ *
49
+ * Note that this function will _not_ free values added to this
50
+ * map.
51
+ *
52
+ * @param map Pointer to the map that is to be free'd. May be
53
+ * `NULL`.
54
+ */
55
+ void git_idxmap_icase_free(git_idxmap_icase *map);
40
56
 
41
- void git_idxmap_resize(git_idxmap *map, size_t size);
42
- void git_idxmap_icase_resize(git_idxmap_icase *map, size_t size);
43
- void git_idxmap_free(git_idxmap *map);
57
+ /**
58
+ * Clear all entries from the map.
59
+ *
60
+ * This function will remove all entries from the associated map.
61
+ * Memory associated with it will not be released, though.
62
+ *
63
+ * @param map Pointer to the map that shall be cleared. May be
64
+ * `NULL`.
65
+ */
44
66
  void git_idxmap_clear(git_idxmap *map);
45
67
 
46
- void git_idxmap_delete_at(git_idxmap *map, size_t idx);
47
- void git_idxmap_icase_delete_at(git_idxmap_icase *map, size_t idx);
68
+ /**
69
+ * Clear all entries from the map.
70
+ *
71
+ * This function will remove all entries from the associated map.
72
+ * Memory associated with it will not be released, though.
73
+ *
74
+ * @param map Pointer to the map that shall be cleared. May be
75
+ * `NULL`.
76
+ */
77
+ void git_idxmap_icase_clear(git_idxmap_icase *map);
48
78
 
49
- void git_idxmap_delete(git_idxmap *map, const git_index_entry *key);
50
- void git_idxmap_icase_delete(git_idxmap_icase *map, const git_index_entry *key);
79
+ /**
80
+ * Resize the map by allocating more memory.
81
+ *
82
+ * @param map map that shall be resized
83
+ * @param size count of entries that the map shall hold
84
+ * @return `0` if the map was successfully resized, a negative
85
+ * error code otherwise
86
+ */
87
+ int git_idxmap_resize(git_idxmap *map, size_t size);
51
88
 
52
- #define git_idxmap_begin kh_begin
53
- #define git_idxmap_end kh_end
89
+ /**
90
+ * Resize the map by allocating more memory.
91
+ *
92
+ * @param map map that shall be resized
93
+ * @param size count of entries that the map shall hold
94
+ * @return `0` if the map was successfully resized, a negative
95
+ * error code otherwise
96
+ */
97
+ int git_idxmap_icase_resize(git_idxmap_icase *map, size_t size);
98
+
99
+ /**
100
+ * Return value associated with the given key.
101
+ *
102
+ * @param map map to search key in
103
+ * @param key key to search for; the index entry will be searched
104
+ * for by its case-sensitive path
105
+ * @return value associated with the given key or NULL if the key was not found
106
+ */
107
+ void *git_idxmap_get(git_idxmap *map, const git_index_entry *key);
108
+
109
+ /**
110
+ * Return value associated with the given key.
111
+ *
112
+ * @param map map to search key in
113
+ * @param key key to search for; the index entry will be searched
114
+ * for by its case-insensitive path
115
+ * @return value associated with the given key or NULL if the key was not found
116
+ */
117
+ void *git_idxmap_icase_get(git_idxmap_icase *map, const git_index_entry *key);
118
+
119
+ /**
120
+ * Set the entry for key to value.
121
+ *
122
+ * If the map has no corresponding entry for the given key, a new
123
+ * entry will be created with the given value. If an entry exists
124
+ * already, its value will be updated to match the given value.
125
+ *
126
+ * @param map map to create new entry in
127
+ * @param key key to set
128
+ * @param value value to associate the key with; may be NULL
129
+ * @return zero if the key was successfully set, a negative error
130
+ * code otherwise
131
+ */
132
+ int git_idxmap_set(git_idxmap *map, const git_index_entry *key, void *value);
133
+
134
+ /**
135
+ * Set the entry for key to value.
136
+ *
137
+ * If the map has no corresponding entry for the given key, a new
138
+ * entry will be created with the given value. If an entry exists
139
+ * already, its value will be updated to match the given value.
140
+ *
141
+ * @param map map to create new entry in
142
+ * @param key key to set
143
+ * @param value value to associate the key with; may be NULL
144
+ * @return zero if the key was successfully set, a negative error
145
+ * code otherwise
146
+ */
147
+ int git_idxmap_icase_set(git_idxmap_icase *map, const git_index_entry *key, void *value);
148
+
149
+ /**
150
+ * Delete an entry from the map.
151
+ *
152
+ * Delete the given key and its value from the map. If no such
153
+ * key exists, this will do nothing.
154
+ *
155
+ * @param map map to delete key in
156
+ * @param key key to delete
157
+ * @return `0` if the key has been deleted, GIT_ENOTFOUND if no
158
+ * such key was found, a negative code in case of an
159
+ * error
160
+ */
161
+ int git_idxmap_delete(git_idxmap *map, const git_index_entry *key);
162
+
163
+ /**
164
+ * Delete an entry from the map.
165
+ *
166
+ * Delete the given key and its value from the map. If no such
167
+ * key exists, this will do nothing.
168
+ *
169
+ * @param map map to delete key in
170
+ * @param key key to delete
171
+ * @return `0` if the key has been deleted, GIT_ENOTFOUND if no
172
+ * such key was found, a negative code in case of an
173
+ * error
174
+ */
175
+ int git_idxmap_icase_delete(git_idxmap_icase *map, const git_index_entry *key);
54
176
 
55
177
  #endif
@@ -12,7 +12,7 @@
12
12
  #include "attrcache.h"
13
13
  #include "path.h"
14
14
  #include "config.h"
15
- #include "fnmatch.h"
15
+ #include "wildmatch.h"
16
16
 
17
17
  #define GIT_IGNORE_INTERNAL "[internal]exclude"
18
18
 
@@ -101,7 +101,7 @@ static int does_negate_pattern(git_attr_fnmatch *rule, git_attr_fnmatch *neg)
101
101
  */
102
102
  static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match)
103
103
  {
104
- int error = 0, fnflags;
104
+ int error = 0, wildmatch_flags;
105
105
  size_t i;
106
106
  git_attr_fnmatch *rule;
107
107
  char *path;
@@ -109,9 +109,9 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match
109
109
 
110
110
  *out = 0;
111
111
 
112
- fnflags = FNM_PATHNAME;
112
+ wildmatch_flags = WM_PATHNAME;
113
113
  if (match->flags & GIT_ATTR_FNMATCH_ICASE)
114
- fnflags |= FNM_IGNORECASE;
114
+ wildmatch_flags |= WM_CASEFOLD;
115
115
 
116
116
  /* path of the file relative to the workdir, so we match the rules in subdirs */
117
117
  if (match->containing_dir) {
@@ -141,13 +141,8 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match
141
141
  if (git_buf_oom(&buf))
142
142
  goto out;
143
143
 
144
- if ((error = p_fnmatch(git_buf_cstr(&buf), path, fnflags)) < 0) {
145
- giterr_set(GITERR_INVALID, "error matching pattern");
146
- goto out;
147
- }
148
-
149
144
  /* if we found a match, we want to keep this rule */
150
- if (error != FNM_NOMATCH) {
145
+ if ((wildmatch(git_buf_cstr(&buf), path, wildmatch_flags)) == WM_MATCH) {
151
146
  *out = 1;
152
147
  error = 0;
153
148
  goto out;
@@ -163,15 +158,17 @@ out:
163
158
  }
164
159
 
165
160
  static int parse_ignore_file(
166
- git_repository *repo, git_attr_file *attrs, const char *data)
161
+ git_repository *repo, git_attr_file *attrs, const char *data, bool allow_macros)
167
162
  {
168
163
  int error = 0;
169
164
  int ignore_case = false;
170
165
  const char *scan = data, *context = NULL;
171
166
  git_attr_fnmatch *match = NULL;
172
167
 
173
- if (git_repository__cvar(&ignore_case, repo, GIT_CVAR_IGNORECASE) < 0)
174
- giterr_clear();
168
+ GIT_UNUSED(allow_macros);
169
+
170
+ if (git_repository__configmap_lookup(&ignore_case, repo, GIT_CONFIGMAP_IGNORECASE) < 0)
171
+ git_error_clear();
175
172
 
176
173
  /* if subdir file path, convert context for file paths */
177
174
  if (attrs->entry &&
@@ -180,7 +177,7 @@ static int parse_ignore_file(
180
177
  context = attrs->entry->path;
181
178
 
182
179
  if (git_mutex_lock(&attrs->lock) < 0) {
183
- giterr_set(GITERR_OS, "failed to lock ignore file");
180
+ git_error_set(GIT_ERROR_OS, "failed to lock ignore file");
184
181
  return -1;
185
182
  }
186
183
 
@@ -193,9 +190,7 @@ static int parse_ignore_file(
193
190
  }
194
191
 
195
192
  match->flags =
196
- GIT_ATTR_FNMATCH_ALLOWSPACE |
197
- GIT_ATTR_FNMATCH_ALLOWNEG |
198
- GIT_ATTR_FNMATCH_NOLEADINGDIR;
193
+ GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG;
199
194
 
200
195
  if (!(error = git_attr_fnmatch__parse(
201
196
  match, &attrs->pool, context, &scan)))
@@ -246,9 +241,8 @@ static int push_ignore_file(
246
241
  int error = 0;
247
242
  git_attr_file *file = NULL;
248
243
 
249
- error = git_attr_cache__get(
250
- &file, ignores->repo, NULL, GIT_ATTR_FILE__FROM_FILE,
251
- base, filename, parse_ignore_file);
244
+ error = git_attr_cache__get(&file, ignores->repo, NULL, GIT_ATTR_FILE__FROM_FILE,
245
+ base, filename, parse_ignore_file, false);
252
246
  if (error < 0)
253
247
  return error;
254
248
 
@@ -274,12 +268,12 @@ static int get_internal_ignores(git_attr_file **out, git_repository *repo)
274
268
  if ((error = git_attr_cache__init(repo)) < 0)
275
269
  return error;
276
270
 
277
- error = git_attr_cache__get(
278
- out, repo, NULL, GIT_ATTR_FILE__IN_MEMORY, NULL, GIT_IGNORE_INTERNAL, NULL);
271
+ error = git_attr_cache__get(out, repo, NULL, GIT_ATTR_FILE__IN_MEMORY, NULL,
272
+ GIT_IGNORE_INTERNAL, NULL, false);
279
273
 
280
274
  /* if internal rules list is empty, insert default rules */
281
275
  if (!error && !(*out)->rules.length)
282
- error = parse_ignore_file(repo, *out, GIT_IGNORE_DEFAULT_RULES);
276
+ error = parse_ignore_file(repo, *out, GIT_IGNORE_DEFAULT_RULES, false);
283
277
 
284
278
  return error;
285
279
  }
@@ -299,8 +293,8 @@ int git_ignore__for_path(
299
293
  ignores->repo = repo;
300
294
 
301
295
  /* Read the ignore_case flag */
302
- if ((error = git_repository__cvar(
303
- &ignores->ignore_case, repo, GIT_CVAR_IGNORECASE)) < 0)
296
+ if ((error = git_repository__configmap_lookup(
297
+ &ignores->ignore_case, repo, GIT_CONFIGMAP_IGNORECASE)) < 0)
304
298
  goto cleanup;
305
299
 
306
300
  if ((error = git_attr_cache__init(repo)) < 0)
@@ -337,16 +331,13 @@ int git_ignore__for_path(
337
331
  goto cleanup;
338
332
  }
339
333
 
340
- if ((error = git_repository_item_path(&infopath,
341
- repo, GIT_REPOSITORY_ITEM_INFO)) < 0)
342
- goto cleanup;
343
-
344
- /* load .git/info/exclude */
345
- error = push_ignore_file(
346
- ignores, &ignores->ign_global,
347
- infopath.ptr, GIT_IGNORE_FILE_INREPO);
348
- if (error < 0)
349
- goto cleanup;
334
+ /* load .git/info/exclude if possible */
335
+ if ((error = git_repository_item_path(&infopath, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
336
+ (error = push_ignore_file(ignores, &ignores->ign_global, infopath.ptr, GIT_IGNORE_FILE_INREPO)) < 0) {
337
+ if (error != GIT_ENOTFOUND)
338
+ goto cleanup;
339
+ error = 0;
340
+ }
350
341
 
351
342
  /* load core.excludesfile */
352
343
  if (git_repository_attr_cache(repo)->cfg_excl_file != NULL)
@@ -453,7 +444,7 @@ static bool ignore_lookup_in_rules(
453
444
  int git_ignore__lookup(
454
445
  int *out, git_ignores *ignores, const char *pathname, git_dir_flag dir_flag)
455
446
  {
456
- unsigned int i;
447
+ size_t i;
457
448
  git_attr_file *file;
458
449
  git_attr_path path;
459
450
 
@@ -467,8 +458,11 @@ int git_ignore__lookup(
467
458
  if (ignore_lookup_in_rules(out, ignores->ign_internal, &path))
468
459
  goto cleanup;
469
460
 
470
- /* next process files in the path */
471
- git_vector_foreach(&ignores->ign_path, i, file) {
461
+ /* next process files in the path.
462
+ * this process has to process ignores in reverse order
463
+ * to ensure correct prioritization of rules
464
+ */
465
+ git_vector_rforeach(&ignores->ign_path, i, file) {
472
466
  if (ignore_lookup_in_rules(out, file, &path))
473
467
  goto cleanup;
474
468
  }
@@ -492,7 +486,7 @@ int git_ignore_add_rule(git_repository *repo, const char *rules)
492
486
  if ((error = get_internal_ignores(&ign_internal, repo)) < 0)
493
487
  return error;
494
488
 
495
- error = parse_ignore_file(repo, ign_internal, rules);
489
+ error = parse_ignore_file(repo, ign_internal, rules, false);
496
490
  git_attr_file__free(ign_internal);
497
491
 
498
492
  return error;
@@ -508,7 +502,7 @@ int git_ignore_clear_internal_rules(git_repository *repo)
508
502
 
509
503
  if (!(error = git_attr_file__clear_rules(ign_internal, true)))
510
504
  error = parse_ignore_file(
511
- repo, ign_internal, GIT_IGNORE_DEFAULT_RULES);
505
+ repo, ign_internal, GIT_IGNORE_DEFAULT_RULES, false);
512
506
 
513
507
  git_attr_file__free(ign_internal);
514
508
  return error;
@@ -534,7 +528,9 @@ int git_ignore_path_is_ignored(
534
528
  memset(&path, 0, sizeof(path));
535
529
  memset(&ignores, 0, sizeof(ignores));
536
530
 
537
- if (git_repository_is_bare(repo))
531
+ if (!git__suffixcmp(pathname, "/"))
532
+ dir_flag = GIT_DIR_FLAG_TRUE;
533
+ else if (git_repository_is_bare(repo))
538
534
  dir_flag = GIT_DIR_FLAG_FALSE;
539
535
 
540
536
  if ((error = git_attr_path__init(&path, pathname, workdir, dir_flag)) < 0 ||
@@ -624,7 +620,7 @@ int git_ignore__check_pathspec_for_exact_ignores(
624
620
  break;
625
621
 
626
622
  if (ignored) {
627
- giterr_set(GITERR_INVALID, "pathspec contains ignored file '%s'",
623
+ git_error_set(GIT_ERROR_INVALID, "pathspec contains ignored file '%s'",
628
624
  filename);
629
625
  error = GIT_EINVALIDSPEC;
630
626
  break;