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
@@ -0,0 +1,220 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "config.h"
9
+
10
+ #include "config_backend.h"
11
+ #include "config_parse.h"
12
+ #include "config_entries.h"
13
+
14
+ typedef struct {
15
+ git_config_backend parent;
16
+ git_config_entries *entries;
17
+ git_buf cfg;
18
+ } config_memory_backend;
19
+
20
+ typedef struct {
21
+ git_config_entries *entries;
22
+ git_config_level_t level;
23
+ } config_memory_parse_data;
24
+
25
+ static int config_error_readonly(void)
26
+ {
27
+ git_error_set(GIT_ERROR_CONFIG, "this backend is read-only");
28
+ return -1;
29
+ }
30
+
31
+ static int read_variable_cb(
32
+ git_config_parser *reader,
33
+ const char *current_section,
34
+ const char *var_name,
35
+ const char *var_value,
36
+ const char *line,
37
+ size_t line_len,
38
+ void *payload)
39
+ {
40
+ config_memory_parse_data *parse_data = (config_memory_parse_data *) payload;
41
+ git_buf buf = GIT_BUF_INIT;
42
+ git_config_entry *entry;
43
+ const char *c;
44
+ int result;
45
+
46
+ GIT_UNUSED(reader);
47
+ GIT_UNUSED(line);
48
+ GIT_UNUSED(line_len);
49
+
50
+ if (current_section) {
51
+ /* TODO: Once warnings land, we should likely warn
52
+ * here. Git appears to warn in most cases if it sees
53
+ * un-namespaced config options.
54
+ */
55
+ git_buf_puts(&buf, current_section);
56
+ git_buf_putc(&buf, '.');
57
+ }
58
+
59
+ for (c = var_name; *c; c++)
60
+ git_buf_putc(&buf, git__tolower(*c));
61
+
62
+ if (git_buf_oom(&buf))
63
+ return -1;
64
+
65
+ entry = git__calloc(1, sizeof(git_config_entry));
66
+ GIT_ERROR_CHECK_ALLOC(entry);
67
+ entry->name = git_buf_detach(&buf);
68
+ entry->value = var_value ? git__strdup(var_value) : NULL;
69
+ entry->level = parse_data->level;
70
+ entry->include_depth = 0;
71
+
72
+ if ((result = git_config_entries_append(parse_data->entries, entry)) < 0)
73
+ return result;
74
+
75
+ return result;
76
+ }
77
+
78
+ static int config_memory_open(git_config_backend *backend, git_config_level_t level, const git_repository *repo)
79
+ {
80
+ config_memory_backend *memory_backend = (config_memory_backend *) backend;
81
+ git_config_parser parser = GIT_PARSE_CTX_INIT;
82
+ config_memory_parse_data parse_data;
83
+ int error;
84
+
85
+ GIT_UNUSED(repo);
86
+
87
+ if ((error = git_config_parser_init(&parser, "in-memory", memory_backend->cfg.ptr,
88
+ memory_backend->cfg.size)) < 0)
89
+ goto out;
90
+ parse_data.entries = memory_backend->entries;
91
+ parse_data.level = level;
92
+
93
+ if ((error = git_config_parse(&parser, NULL, read_variable_cb, NULL, NULL, &parse_data)) < 0)
94
+ goto out;
95
+
96
+ out:
97
+ git_config_parser_dispose(&parser);
98
+ return error;
99
+ }
100
+
101
+ static int config_memory_get(git_config_backend *backend, const char *key, git_config_entry **out)
102
+ {
103
+ config_memory_backend *memory_backend = (config_memory_backend *) backend;
104
+ return git_config_entries_get(out, memory_backend->entries, key);
105
+ }
106
+
107
+ static int config_memory_iterator(
108
+ git_config_iterator **iter,
109
+ git_config_backend *backend)
110
+ {
111
+ config_memory_backend *memory_backend = (config_memory_backend *) backend;
112
+ git_config_entries *entries;
113
+ int error;
114
+
115
+ if ((error = git_config_entries_dup(&entries, memory_backend->entries)) < 0)
116
+ goto out;
117
+
118
+ if ((error = git_config_entries_iterator_new(iter, entries)) < 0)
119
+ goto out;
120
+
121
+ out:
122
+ /* Let iterator delete duplicated entries when it's done */
123
+ git_config_entries_free(entries);
124
+ return error;
125
+ }
126
+
127
+ static int config_memory_set(git_config_backend *backend, const char *name, const char *value)
128
+ {
129
+ GIT_UNUSED(backend);
130
+ GIT_UNUSED(name);
131
+ GIT_UNUSED(value);
132
+ return config_error_readonly();
133
+ }
134
+
135
+ static int config_memory_set_multivar(
136
+ git_config_backend *backend, const char *name, const char *regexp, const char *value)
137
+ {
138
+ GIT_UNUSED(backend);
139
+ GIT_UNUSED(name);
140
+ GIT_UNUSED(regexp);
141
+ GIT_UNUSED(value);
142
+ return config_error_readonly();
143
+ }
144
+
145
+ static int config_memory_delete(git_config_backend *backend, const char *name)
146
+ {
147
+ GIT_UNUSED(backend);
148
+ GIT_UNUSED(name);
149
+ return config_error_readonly();
150
+ }
151
+
152
+ static int config_memory_delete_multivar(git_config_backend *backend, const char *name, const char *regexp)
153
+ {
154
+ GIT_UNUSED(backend);
155
+ GIT_UNUSED(name);
156
+ GIT_UNUSED(regexp);
157
+ return config_error_readonly();
158
+ }
159
+
160
+ static int config_memory_lock(git_config_backend *backend)
161
+ {
162
+ GIT_UNUSED(backend);
163
+ return config_error_readonly();
164
+ }
165
+
166
+ static int config_memory_unlock(git_config_backend *backend, int success)
167
+ {
168
+ GIT_UNUSED(backend);
169
+ GIT_UNUSED(success);
170
+ return config_error_readonly();
171
+ }
172
+
173
+ static void config_memory_free(git_config_backend *_backend)
174
+ {
175
+ config_memory_backend *backend = (config_memory_backend *)_backend;
176
+
177
+ if (backend == NULL)
178
+ return;
179
+
180
+ git_config_entries_free(backend->entries);
181
+ git_buf_dispose(&backend->cfg);
182
+ git__free(backend);
183
+ }
184
+
185
+ int git_config_backend_from_string(git_config_backend **out, const char *cfg, size_t len)
186
+ {
187
+ config_memory_backend *backend;
188
+
189
+ backend = git__calloc(1, sizeof(config_memory_backend));
190
+ GIT_ERROR_CHECK_ALLOC(backend);
191
+
192
+ if (git_config_entries_new(&backend->entries) < 0) {
193
+ git__free(backend);
194
+ return -1;
195
+ }
196
+
197
+ if (git_buf_set(&backend->cfg, cfg, len) < 0) {
198
+ git_config_entries_free(backend->entries);
199
+ git__free(backend);
200
+ return -1;
201
+ }
202
+
203
+ backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
204
+ backend->parent.readonly = 1;
205
+ backend->parent.open = config_memory_open;
206
+ backend->parent.get = config_memory_get;
207
+ backend->parent.set = config_memory_set;
208
+ backend->parent.set_multivar = config_memory_set_multivar;
209
+ backend->parent.del = config_memory_delete;
210
+ backend->parent.del_multivar = config_memory_delete_multivar;
211
+ backend->parent.iterator = config_memory_iterator;
212
+ backend->parent.lock = config_memory_lock;
213
+ backend->parent.unlock = config_memory_unlock;
214
+ backend->parent.snapshot = git_config_backend_snapshot;
215
+ backend->parent.free = config_memory_free;
216
+
217
+ *out = (git_config_backend *)backend;
218
+
219
+ return 0;
220
+ }
@@ -11,10 +11,19 @@
11
11
 
12
12
  #include <ctype.h>
13
13
 
14
+ const char *git_config_escapes = "ntb\"\\";
15
+ const char *git_config_escaped = "\n\t\b\"\\";
16
+
14
17
  static void set_parse_error(git_config_parser *reader, int col, const char *error_str)
15
18
  {
16
- giterr_set(GITERR_CONFIG, "failed to parse config file: %s (in %s:%"PRIuZ", column %d)",
17
- error_str, reader->file->path, reader->ctx.line_num, col);
19
+ if (col)
20
+ git_error_set(GIT_ERROR_CONFIG,
21
+ "failed to parse config file: %s (in %s:%"PRIuZ", column %d)",
22
+ error_str, reader->path, reader->ctx.line_num, col);
23
+ else
24
+ git_error_set(GIT_ERROR_CONFIG,
25
+ "failed to parse config file: %s (in %s:%"PRIuZ")",
26
+ error_str, reader->path, reader->ctx.line_num);
18
27
  }
19
28
 
20
29
 
@@ -55,35 +64,40 @@ static int strip_comments(char *line, int in_quotes)
55
64
  }
56
65
 
57
66
 
58
- static int parse_section_header_ext(git_config_parser *reader, const char *line, const char *base_name, char **section_name)
67
+ static int parse_subsection_header(git_config_parser *reader, const char *line, size_t pos, const char *base_name, char **section_name)
59
68
  {
60
69
  int c, rpos;
61
- char *first_quote, *last_quote;
70
+ const char *first_quote, *last_quote;
71
+ const char *line_start = line;
62
72
  git_buf buf = GIT_BUF_INIT;
63
73
  size_t quoted_len, alloc_len, base_name_len = strlen(base_name);
64
74
 
65
- /*
66
- * base_name is what came before the space. We should be at the
67
- * first quotation mark, except for now, line isn't being kept in
68
- * sync so we only really use it to calculate the length.
69
- */
75
+ /* Skip any additional whitespace before our section name */
76
+ while (git__isspace(line[pos]))
77
+ pos++;
70
78
 
71
- first_quote = strchr(line, '"');
72
- if (first_quote == NULL) {
73
- set_parse_error(reader, 0, "Missing quotation marks in section header");
79
+ /* We should be at the first quotation mark. */
80
+ if (line[pos] != '"') {
81
+ set_parse_error(reader, 0, "missing quotation marks in section header");
74
82
  goto end_error;
75
83
  }
76
84
 
85
+ first_quote = &line[pos];
77
86
  last_quote = strrchr(line, '"');
78
87
  quoted_len = last_quote - first_quote;
79
88
 
89
+ if ((last_quote - line) > INT_MAX) {
90
+ set_parse_error(reader, 0, "invalid section header, line too long");
91
+ goto end_error;
92
+ }
93
+
80
94
  if (quoted_len == 0) {
81
- set_parse_error(reader, 0, "Missing closing quotation mark in section header");
95
+ set_parse_error(reader, 0, "missing closing quotation mark in section header");
82
96
  goto end_error;
83
97
  }
84
98
 
85
- GITERR_CHECK_ALLOC_ADD(&alloc_len, base_name_len, quoted_len);
86
- GITERR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 2);
99
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, base_name_len, quoted_len);
100
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 2);
87
101
 
88
102
  if (git_buf_grow(&buf, alloc_len) < 0 ||
89
103
  git_buf_printf(&buf, "%s.", base_name) < 0)
@@ -102,7 +116,7 @@ static int parse_section_header_ext(git_config_parser *reader, const char *line,
102
116
 
103
117
  switch (c) {
104
118
  case 0:
105
- set_parse_error(reader, 0, "Unexpected end-of-line in section header");
119
+ set_parse_error(reader, 0, "unexpected end-of-line in section header");
106
120
  goto end_error;
107
121
 
108
122
  case '"':
@@ -112,7 +126,7 @@ static int parse_section_header_ext(git_config_parser *reader, const char *line,
112
126
  c = line[++rpos];
113
127
 
114
128
  if (c == 0) {
115
- set_parse_error(reader, rpos, "Unexpected end-of-line in section header");
129
+ set_parse_error(reader, rpos, "unexpected end-of-line in section header");
116
130
  goto end_error;
117
131
  }
118
132
 
@@ -129,13 +143,13 @@ end_parse:
129
143
  goto end_error;
130
144
 
131
145
  if (line[rpos] != '"' || line[rpos + 1] != ']') {
132
- set_parse_error(reader, rpos, "Unexpected text after closing quotes");
146
+ set_parse_error(reader, rpos, "unexpected text after closing quotes");
133
147
  git_buf_dispose(&buf);
134
148
  return -1;
135
149
  }
136
150
 
137
151
  *section_name = git_buf_detach(&buf);
138
- return base_name_len + 1 /* SP */ + 1 /* " */ + rpos + 1 /* " */ + 1 /* ] */;
152
+ return (int)(&line[rpos + 2] - line_start); /* rpos is at the closing quote */
139
153
 
140
154
  end_error:
141
155
  git_buf_dispose(&buf);
@@ -160,13 +174,13 @@ static int parse_section_header(git_config_parser *reader, char **section_out)
160
174
  name_end = strrchr(line, ']');
161
175
  if (name_end == NULL) {
162
176
  git__free(line);
163
- set_parse_error(reader, 0, "Missing ']' in section header");
177
+ set_parse_error(reader, 0, "missing ']' in section header");
164
178
  return -1;
165
179
  }
166
180
 
167
- GITERR_CHECK_ALLOC_ADD(&line_len, (size_t)(name_end - line), 1);
181
+ GIT_ERROR_CHECK_ALLOC_ADD(&line_len, (size_t)(name_end - line), 1);
168
182
  name = git__malloc(line_len);
169
- GITERR_CHECK_ALLOC(name);
183
+ GIT_ERROR_CHECK_ALLOC(name);
170
184
 
171
185
  name_length = 0;
172
186
  pos = 0;
@@ -180,14 +194,14 @@ static int parse_section_header(git_config_parser *reader, char **section_out)
180
194
  do {
181
195
  if (git__isspace(c)){
182
196
  name[name_length] = '\0';
183
- result = parse_section_header_ext(reader, line, name, section_out);
197
+ result = parse_subsection_header(reader, line, pos, name, section_out);
184
198
  git__free(line);
185
199
  git__free(name);
186
200
  return result;
187
201
  }
188
202
 
189
203
  if (!config_keychar(c) && c != '.') {
190
- set_parse_error(reader, pos, "Unexpected character in header");
204
+ set_parse_error(reader, pos, "unexpected character in header");
191
205
  goto fail_parse;
192
206
  }
193
207
 
@@ -196,7 +210,7 @@ static int parse_section_header(git_config_parser *reader, char **section_out)
196
210
  } while ((c = line[pos++]) != ']');
197
211
 
198
212
  if (line[pos - 1] != ']') {
199
- set_parse_error(reader, pos, "Unexpected end of file");
213
+ set_parse_error(reader, pos, "unexpected end of file");
200
214
  goto fail_parse;
201
215
  }
202
216
 
@@ -299,7 +313,7 @@ static int unescape_line(
299
313
  *fixed++ = git_config_escaped[esc - git_config_escapes];
300
314
  } else {
301
315
  git__free(str);
302
- giterr_set(GITERR_CONFIG, "invalid escape at %s", ptr);
316
+ git_error_set(GIT_ERROR_CONFIG, "invalid escape at %s", ptr);
303
317
  return -1;
304
318
  }
305
319
  }
@@ -315,49 +329,51 @@ done:
315
329
 
316
330
  static int parse_multiline_variable(git_config_parser *reader, git_buf *value, int in_quotes)
317
331
  {
318
- char *line = NULL, *proc_line = NULL;
319
332
  int quote_count;
320
- bool multiline;
333
+ bool multiline = true;
321
334
 
322
- /* Check that the next line exists */
323
- git_parse_advance_line(&reader->ctx);
324
- line = git__strndup(reader->ctx.line, reader->ctx.line_len);
325
- if (line == NULL)
326
- return -1;
335
+ while (multiline) {
336
+ char *line = NULL, *proc_line = NULL;
337
+ int error;
327
338
 
328
- /* We've reached the end of the file, there is no continuation.
329
- * (this is not an error).
330
- */
331
- if (line[0] == '\0') {
332
- git__free(line);
333
- return 0;
334
- }
339
+ /* Check that the next line exists */
340
+ git_parse_advance_line(&reader->ctx);
341
+ line = git__strndup(reader->ctx.line, reader->ctx.line_len);
342
+ GIT_ERROR_CHECK_ALLOC(line);
343
+
344
+ /*
345
+ * We've reached the end of the file, there is no continuation.
346
+ * (this is not an error).
347
+ */
348
+ if (line[0] == '\0') {
349
+ error = 0;
350
+ goto out;
351
+ }
335
352
 
336
- quote_count = strip_comments(line, !!in_quotes);
353
+ /* If it was just a comment, pretend it didn't exist */
354
+ quote_count = strip_comments(line, !!in_quotes);
355
+ if (line[0] == '\0')
356
+ goto next;
337
357
 
338
- /* If it was just a comment, pretend it didn't exist */
339
- if (line[0] == '\0') {
358
+ if ((error = unescape_line(&proc_line, &multiline,
359
+ line, in_quotes)) < 0)
360
+ goto out;
361
+
362
+ /* Add this line to the multiline var */
363
+ if ((error = git_buf_puts(value, proc_line)) < 0)
364
+ goto out;
365
+
366
+ next:
340
367
  git__free(line);
341
- return parse_multiline_variable(reader, value, quote_count);
342
- /* TODO: unbounded recursion. This **could** be exploitable */
343
- }
368
+ git__free(proc_line);
369
+ in_quotes = quote_count;
370
+ continue;
344
371
 
345
- if (unescape_line(&proc_line, &multiline, line, in_quotes) < 0) {
372
+ out:
346
373
  git__free(line);
347
- return -1;
374
+ git__free(proc_line);
375
+ return error;
348
376
  }
349
- /* add this line to the multiline var */
350
-
351
- git_buf_puts(value, proc_line);
352
- git__free(line);
353
- git__free(proc_line);
354
-
355
- /*
356
- * If we need to continue reading the next line, let's just
357
- * keep putting stuff in the buffer
358
- */
359
- if (multiline)
360
- return parse_multiline_variable(reader, value, quote_count);
361
377
 
362
378
  return 0;
363
379
  }
@@ -379,7 +395,7 @@ static int parse_name(
379
395
  name_end++;
380
396
 
381
397
  if (line == name_end) {
382
- set_parse_error(reader, 0, "Invalid configuration key");
398
+ set_parse_error(reader, 0, "invalid configuration key");
383
399
  return -1;
384
400
  }
385
401
 
@@ -391,7 +407,7 @@ static int parse_name(
391
407
  if (*value_start == '=') {
392
408
  *value = value_start + 1;
393
409
  } else if (*value_start) {
394
- set_parse_error(reader, 0, "Invalid configuration key");
410
+ set_parse_error(reader, 0, "invalid configuration key");
395
411
  return -1;
396
412
  }
397
413
 
@@ -413,7 +429,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
413
429
 
414
430
  git_parse_advance_ws(&reader->ctx);
415
431
  line = git__strndup(reader->ctx.line, reader->ctx.line_len);
416
- GITERR_CHECK_ALLOC(line);
432
+ GIT_ERROR_CHECK_ALLOC(line);
417
433
 
418
434
  quote_count = strip_comments(line, 0);
419
435
 
@@ -433,6 +449,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
433
449
  if (multiline) {
434
450
  git_buf multi_value = GIT_BUF_INIT;
435
451
  git_buf_attach(&multi_value, value, 0);
452
+ value = NULL;
436
453
 
437
454
  if (parse_multiline_variable(reader, &multi_value, quote_count) < 0 ||
438
455
  git_buf_oom(&multi_value)) {
@@ -457,13 +474,24 @@ out:
457
474
  return error;
458
475
  }
459
476
 
477
+ int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen)
478
+ {
479
+ out->path = path;
480
+ return git_parse_ctx_init(&out->ctx, data, datalen);
481
+ }
482
+
483
+ void git_config_parser_dispose(git_config_parser *parser)
484
+ {
485
+ git_parse_ctx_clear(&parser->ctx);
486
+ }
487
+
460
488
  int git_config_parse(
461
489
  git_config_parser *parser,
462
490
  git_config_parser_section_cb on_section,
463
491
  git_config_parser_variable_cb on_variable,
464
492
  git_config_parser_comment_cb on_comment,
465
493
  git_config_parser_eof_cb on_eof,
466
- void *data)
494
+ void *payload)
467
495
  {
468
496
  git_parse_ctx *ctx;
469
497
  char *current_section = NULL, *var_name = NULL, *var_value = NULL;
@@ -503,7 +531,7 @@ int git_config_parse(
503
531
  git_parse_advance_chars(ctx, result);
504
532
 
505
533
  if (on_section)
506
- result = on_section(parser, current_section, line_start, line_len, data);
534
+ result = on_section(parser, current_section, line_start, line_len, payload);
507
535
  /*
508
536
  * After we've parsed the section header we may not be
509
537
  * done with the line. If there's still data in there,
@@ -523,13 +551,13 @@ int git_config_parse(
523
551
  case ';':
524
552
  case '#':
525
553
  if (on_comment) {
526
- result = on_comment(parser, line_start, line_len, data);
554
+ result = on_comment(parser, line_start, line_len, payload);
527
555
  }
528
556
  break;
529
557
 
530
558
  default: /* assume variable declaration */
531
559
  if ((result = parse_variable(parser, &var_name, &var_value)) == 0 && on_variable) {
532
- result = on_variable(parser, current_section, var_name, var_value, line_start, line_len, data);
560
+ result = on_variable(parser, current_section, var_name, var_value, line_start, line_len, payload);
533
561
  git__free(var_name);
534
562
  git__free(var_value);
535
563
  }
@@ -542,7 +570,7 @@ int git_config_parse(
542
570
  }
543
571
 
544
572
  if (on_eof)
545
- result = on_eof(parser, current_section, data);
573
+ result = on_eof(parser, current_section, payload);
546
574
 
547
575
  out:
548
576
  git__free(current_section);
@@ -8,30 +8,28 @@
8
8
  #define INCLUDE_config_parse_h__
9
9
 
10
10
  #include "common.h"
11
+
11
12
  #include "array.h"
13
+ #include "futils.h"
12
14
  #include "oid.h"
13
15
  #include "parse.h"
14
16
 
15
- static const char *git_config_escapes = "ntb\"\\";
16
- static const char *git_config_escaped = "\n\t\b\"\\";
17
-
18
- typedef struct config_file {
19
- git_oid checksum;
20
- char *path;
21
- git_array_t(struct config_file) includes;
22
- } git_config_file;
17
+ extern const char *git_config_escapes;
18
+ extern const char *git_config_escaped;
23
19
 
24
20
  typedef struct {
25
- struct config_file *file;
21
+ const char *path;
26
22
  git_parse_ctx ctx;
27
23
  } git_config_parser;
28
24
 
25
+ #define GIT_CONFIG_PARSER_INIT { NULL, GIT_PARSE_CTX_INIT }
26
+
29
27
  typedef int (*git_config_parser_section_cb)(
30
28
  git_config_parser *parser,
31
29
  const char *current_section,
32
30
  const char *line,
33
31
  size_t line_len,
34
- void *data);
32
+ void *payload);
35
33
 
36
34
  typedef int (*git_config_parser_variable_cb)(
37
35
  git_config_parser *parser,
@@ -40,18 +38,21 @@ typedef int (*git_config_parser_variable_cb)(
40
38
  const char *var_value,
41
39
  const char *line,
42
40
  size_t line_len,
43
- void *data);
41
+ void *payload);
44
42
 
45
43
  typedef int (*git_config_parser_comment_cb)(
46
44
  git_config_parser *parser,
47
45
  const char *line,
48
46
  size_t line_len,
49
- void *data);
47
+ void *payload);
50
48
 
51
49
  typedef int (*git_config_parser_eof_cb)(
52
50
  git_config_parser *parser,
53
51
  const char *current_section,
54
- void *data);
52
+ void *payload);
53
+
54
+ int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen);
55
+ void git_config_parser_dispose(git_config_parser *parser);
55
56
 
56
57
  int git_config_parse(
57
58
  git_config_parser *parser,
@@ -59,6 +60,6 @@ int git_config_parse(
59
60
  git_config_parser_variable_cb on_variable,
60
61
  git_config_parser_comment_cb on_comment,
61
62
  git_config_parser_eof_cb on_eof,
62
- void *data);
63
+ void *payload);
63
64
 
64
65
  #endif