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
@@ -24,7 +24,7 @@
24
24
 
25
25
  struct git_config {
26
26
  git_refcount rc;
27
- git_vector files;
27
+ git_vector backends;
28
28
  };
29
29
 
30
30
  extern int git_config__global_location(git_buf *buf);
@@ -34,19 +34,6 @@ extern int git_config_rename_section(
34
34
  const char *old_section_name, /* eg "branch.dummy" */
35
35
  const char *new_section_name); /* NULL to drop the old section */
36
36
 
37
- /**
38
- * Create a configuration file backend for ondisk files
39
- *
40
- * These are the normal `.gitconfig` files that Core Git
41
- * processes. Note that you first have to add this file to a
42
- * configuration object before you can query it for configuration
43
- * variables.
44
- *
45
- * @param out the new backend
46
- * @param path where the config file is located
47
- */
48
- extern int git_config_file__ondisk(git_config_backend **out, const char *path);
49
-
50
37
  extern int git_config__normalize_name(const char *in, char **out);
51
38
 
52
39
  /* internal only: does not normalize key and sets out to NULL if not found */
@@ -79,18 +66,19 @@ extern int git_config__get_bool_force(
79
66
  extern int git_config__get_int_force(
80
67
  const git_config *cfg, const char *key, int fallback_value);
81
68
 
82
- /* API for repository cvar-style lookups from config - not cached, but
83
- * uses cvar value maps and fallbacks
69
+ /* API for repository configmap-style lookups from config - not cached, but
70
+ * uses configmap value maps and fallbacks
84
71
  */
85
- extern int git_config__cvar(
86
- int *out, git_config *config, git_cvar_cached cvar);
72
+ extern int git_config__configmap_lookup(
73
+ int *out, git_config *config, git_configmap_item item);
87
74
 
88
75
  /**
89
76
  * The opposite of git_config_lookup_map_value, we take an enum value
90
77
  * and map it to the string or bool value on the config.
91
78
  */
92
- int git_config_lookup_map_enum(git_cvar_t *type_out, const char **str_out,
93
- const git_cvar_map *maps, size_t map_n, int enum_val);
79
+ int git_config_lookup_map_enum(git_configmap_t *type_out,
80
+ const char **str_out, const git_configmap *maps,
81
+ size_t map_n, int enum_val);
94
82
 
95
83
  /**
96
84
  * Unlock the backend with the highest priority
@@ -0,0 +1,96 @@
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
+ #ifndef INCLUDE_config_file_h__
8
+ #define INCLUDE_config_file_h__
9
+
10
+ #include "common.h"
11
+
12
+ #include "git2/sys/config.h"
13
+ #include "git2/config.h"
14
+
15
+ /**
16
+ * Create a configuration file backend for ondisk files
17
+ *
18
+ * These are the normal `.gitconfig` files that Core Git
19
+ * processes. Note that you first have to add this file to a
20
+ * configuration object before you can query it for configuration
21
+ * variables.
22
+ *
23
+ * @param out the new backend
24
+ * @param path where the config file is located
25
+ */
26
+ extern int git_config_backend_from_file(git_config_backend **out, const char *path);
27
+
28
+ /**
29
+ * Create a readonly configuration file backend from another backend
30
+ *
31
+ * This copies the complete contents of the source backend to the
32
+ * new backend. The new backend will be completely read-only and
33
+ * cannot be modified.
34
+ *
35
+ * @param out the new snapshotted backend
36
+ * @param source the backend to copy
37
+ */
38
+ extern int git_config_backend_snapshot(git_config_backend **out, git_config_backend *source);
39
+
40
+ /**
41
+ * Create an in-memory configuration file backend
42
+ *
43
+ * @param out the new backend
44
+ * @param cfg the configuration that is to be parsed
45
+ * @param len the length of the string pointed to by `cfg`
46
+ */
47
+ extern int git_config_backend_from_string(git_config_backend **out, const char *cfg, size_t len);
48
+
49
+ GIT_INLINE(int) git_config_backend_open(git_config_backend *cfg, unsigned int level, const git_repository *repo)
50
+ {
51
+ return cfg->open(cfg, level, repo);
52
+ }
53
+
54
+ GIT_INLINE(void) git_config_backend_free(git_config_backend *cfg)
55
+ {
56
+ if (cfg)
57
+ cfg->free(cfg);
58
+ }
59
+
60
+ GIT_INLINE(int) git_config_backend_get_string(
61
+ git_config_entry **out, git_config_backend *cfg, const char *name)
62
+ {
63
+ return cfg->get(cfg, name, out);
64
+ }
65
+
66
+ GIT_INLINE(int) git_config_backend_set_string(
67
+ git_config_backend *cfg, const char *name, const char *value)
68
+ {
69
+ return cfg->set(cfg, name, value);
70
+ }
71
+
72
+ GIT_INLINE(int) git_config_backend_delete(
73
+ git_config_backend *cfg, const char *name)
74
+ {
75
+ return cfg->del(cfg, name);
76
+ }
77
+
78
+ GIT_INLINE(int) git_config_backend_foreach(
79
+ git_config_backend *cfg,
80
+ int (*fn)(const git_config_entry *entry, void *data),
81
+ void *data)
82
+ {
83
+ return git_config_backend_foreach_match(cfg, NULL, fn, data);
84
+ }
85
+
86
+ GIT_INLINE(int) git_config_backend_lock(git_config_backend *cfg)
87
+ {
88
+ return cfg->lock(cfg);
89
+ }
90
+
91
+ GIT_INLINE(int) git_config_backend_unlock(git_config_backend *cfg, int success)
92
+ {
93
+ return cfg->unlock(cfg, success);
94
+ }
95
+
96
+ #endif
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "common.h"
9
9
 
10
- #include "fileops.h"
10
+ #include "futils.h"
11
11
  #include "repository.h"
12
12
  #include "config.h"
13
13
  #include "git2/config.h"
@@ -15,8 +15,8 @@
15
15
  #include "filter.h"
16
16
 
17
17
  struct map_data {
18
- const char *cvar_name;
19
- git_cvar_map *maps;
18
+ const char *name;
19
+ git_configmap *maps;
20
20
  size_t map_count;
21
21
  int default_value;
22
22
  };
@@ -29,11 +29,11 @@ struct map_data {
29
29
  * value is native. See gitattributes(5) for more information on
30
30
  * end-of-line conversion.
31
31
  */
32
- static git_cvar_map _cvar_map_eol[] = {
33
- {GIT_CVAR_FALSE, NULL, GIT_EOL_UNSET},
34
- {GIT_CVAR_STRING, "lf", GIT_EOL_LF},
35
- {GIT_CVAR_STRING, "crlf", GIT_EOL_CRLF},
36
- {GIT_CVAR_STRING, "native", GIT_EOL_NATIVE}
32
+ static git_configmap _configmap_eol[] = {
33
+ {GIT_CONFIGMAP_FALSE, NULL, GIT_EOL_UNSET},
34
+ {GIT_CONFIGMAP_STRING, "lf", GIT_EOL_LF},
35
+ {GIT_CONFIGMAP_STRING, "crlf", GIT_EOL_CRLF},
36
+ {GIT_CONFIGMAP_STRING, "native", GIT_EOL_NATIVE}
37
37
  };
38
38
 
39
39
  /*
@@ -46,49 +46,55 @@ static git_cvar_map _cvar_map_eol[] = {
46
46
  * does not have normalized line endings. This variable can be set to input,
47
47
  * in which case no output conversion is performed.
48
48
  */
49
- static git_cvar_map _cvar_map_autocrlf[] = {
50
- {GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE},
51
- {GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE},
52
- {GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT}
49
+ static git_configmap _configmap_autocrlf[] = {
50
+ {GIT_CONFIGMAP_FALSE, NULL, GIT_AUTO_CRLF_FALSE},
51
+ {GIT_CONFIGMAP_TRUE, NULL, GIT_AUTO_CRLF_TRUE},
52
+ {GIT_CONFIGMAP_STRING, "input", GIT_AUTO_CRLF_INPUT}
53
53
  };
54
54
 
55
- static git_cvar_map _cvar_map_safecrlf[] = {
56
- {GIT_CVAR_FALSE, NULL, GIT_SAFE_CRLF_FALSE},
57
- {GIT_CVAR_TRUE, NULL, GIT_SAFE_CRLF_FAIL},
58
- {GIT_CVAR_STRING, "warn", GIT_SAFE_CRLF_WARN}
55
+ static git_configmap _configmap_safecrlf[] = {
56
+ {GIT_CONFIGMAP_FALSE, NULL, GIT_SAFE_CRLF_FALSE},
57
+ {GIT_CONFIGMAP_TRUE, NULL, GIT_SAFE_CRLF_FAIL},
58
+ {GIT_CONFIGMAP_STRING, "warn", GIT_SAFE_CRLF_WARN}
59
+ };
60
+
61
+ static git_configmap _configmap_logallrefupdates[] = {
62
+ {GIT_CONFIGMAP_FALSE, NULL, GIT_LOGALLREFUPDATES_FALSE},
63
+ {GIT_CONFIGMAP_TRUE, NULL, GIT_LOGALLREFUPDATES_TRUE},
64
+ {GIT_CONFIGMAP_STRING, "always", GIT_LOGALLREFUPDATES_ALWAYS},
59
65
  };
60
66
 
61
67
  /*
62
68
  * Generic map for integer values
63
69
  */
64
- static git_cvar_map _cvar_map_int[] = {
65
- {GIT_CVAR_INT32, NULL, 0},
70
+ static git_configmap _configmap_int[] = {
71
+ {GIT_CONFIGMAP_INT32, NULL, 0},
66
72
  };
67
73
 
68
- static struct map_data _cvar_maps[] = {
69
- {"core.autocrlf", _cvar_map_autocrlf, ARRAY_SIZE(_cvar_map_autocrlf), GIT_AUTO_CRLF_DEFAULT},
70
- {"core.eol", _cvar_map_eol, ARRAY_SIZE(_cvar_map_eol), GIT_EOL_DEFAULT},
74
+ static struct map_data _configmaps[] = {
75
+ {"core.autocrlf", _configmap_autocrlf, ARRAY_SIZE(_configmap_autocrlf), GIT_AUTO_CRLF_DEFAULT},
76
+ {"core.eol", _configmap_eol, ARRAY_SIZE(_configmap_eol), GIT_EOL_DEFAULT},
71
77
  {"core.symlinks", NULL, 0, GIT_SYMLINKS_DEFAULT },
72
78
  {"core.ignorecase", NULL, 0, GIT_IGNORECASE_DEFAULT },
73
79
  {"core.filemode", NULL, 0, GIT_FILEMODE_DEFAULT },
74
80
  {"core.ignorestat", NULL, 0, GIT_IGNORESTAT_DEFAULT },
75
81
  {"core.trustctime", NULL, 0, GIT_TRUSTCTIME_DEFAULT },
76
- {"core.abbrev", _cvar_map_int, 1, GIT_ABBREV_DEFAULT },
82
+ {"core.abbrev", _configmap_int, 1, GIT_ABBREV_DEFAULT },
77
83
  {"core.precomposeunicode", NULL, 0, GIT_PRECOMPOSE_DEFAULT },
78
- {"core.safecrlf", _cvar_map_safecrlf, ARRAY_SIZE(_cvar_map_safecrlf), GIT_SAFE_CRLF_DEFAULT},
79
- {"core.logallrefupdates", NULL, 0, GIT_LOGALLREFUPDATES_DEFAULT },
84
+ {"core.safecrlf", _configmap_safecrlf, ARRAY_SIZE(_configmap_safecrlf), GIT_SAFE_CRLF_DEFAULT},
85
+ {"core.logallrefupdates", _configmap_logallrefupdates, ARRAY_SIZE(_configmap_logallrefupdates), GIT_LOGALLREFUPDATES_DEFAULT},
80
86
  {"core.protecthfs", NULL, 0, GIT_PROTECTHFS_DEFAULT },
81
87
  {"core.protectntfs", NULL, 0, GIT_PROTECTNTFS_DEFAULT },
82
88
  {"core.fsyncobjectfiles", NULL, 0, GIT_FSYNCOBJECTFILES_DEFAULT },
83
89
  };
84
90
 
85
- int git_config__cvar(int *out, git_config *config, git_cvar_cached cvar)
91
+ int git_config__configmap_lookup(int *out, git_config *config, git_configmap_item item)
86
92
  {
87
93
  int error = 0;
88
- struct map_data *data = &_cvar_maps[(int)cvar];
94
+ struct map_data *data = &_configmaps[(int)item];
89
95
  git_config_entry *entry;
90
96
 
91
- if ((error = git_config__lookup_entry(&entry, config, data->cvar_name, false)) < 0)
97
+ if ((error = git_config__lookup_entry(&entry, config, data->name, false)) < 0)
92
98
  return error;
93
99
 
94
100
  if (!entry)
@@ -103,29 +109,29 @@ int git_config__cvar(int *out, git_config *config, git_cvar_cached cvar)
103
109
  return error;
104
110
  }
105
111
 
106
- int git_repository__cvar(int *out, git_repository *repo, git_cvar_cached cvar)
112
+ int git_repository__configmap_lookup(int *out, git_repository *repo, git_configmap_item item)
107
113
  {
108
- *out = repo->cvar_cache[(int)cvar];
114
+ *out = repo->configmap_cache[(int)item];
109
115
 
110
- if (*out == GIT_CVAR_NOT_CACHED) {
116
+ if (*out == GIT_CONFIGMAP_NOT_CACHED) {
111
117
  int error;
112
118
  git_config *config;
113
119
 
114
120
  if ((error = git_repository_config__weakptr(&config, repo)) < 0 ||
115
- (error = git_config__cvar(out, config, cvar)) < 0)
121
+ (error = git_config__configmap_lookup(out, config, item)) < 0)
116
122
  return error;
117
123
 
118
- repo->cvar_cache[(int)cvar] = *out;
124
+ repo->configmap_cache[(int)item] = *out;
119
125
  }
120
126
 
121
127
  return 0;
122
128
  }
123
129
 
124
- void git_repository__cvar_cache_clear(git_repository *repo)
130
+ void git_repository__configmap_lookup_cache_clear(git_repository *repo)
125
131
  {
126
132
  int i;
127
133
 
128
- for (i = 0; i < GIT_CVAR_CACHE_MAX; ++i)
129
- repo->cvar_cache[i] = GIT_CVAR_NOT_CACHED;
134
+ for (i = 0; i < GIT_CONFIGMAP_CACHE_MAX; ++i)
135
+ repo->configmap_cache[i] = GIT_CONFIGMAP_NOT_CACHED;
130
136
  }
131
137
 
@@ -0,0 +1,229 @@
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_entries.h"
9
+
10
+ typedef struct config_entry_list {
11
+ struct config_entry_list *next;
12
+ struct config_entry_list *last;
13
+ git_config_entry *entry;
14
+ bool first;
15
+ } config_entry_list;
16
+
17
+ typedef struct config_entries_iterator {
18
+ git_config_iterator parent;
19
+ git_config_entries *entries;
20
+ config_entry_list *head;
21
+ } config_entries_iterator;
22
+
23
+ struct git_config_entries {
24
+ git_refcount rc;
25
+ git_strmap *map;
26
+ config_entry_list *list;
27
+ };
28
+
29
+ int git_config_entries_new(git_config_entries **out)
30
+ {
31
+ git_config_entries *entries;
32
+ int error;
33
+
34
+ entries = git__calloc(1, sizeof(git_config_entries));
35
+ GIT_ERROR_CHECK_ALLOC(entries);
36
+ GIT_REFCOUNT_INC(entries);
37
+
38
+ if ((error = git_strmap_new(&entries->map)) < 0)
39
+ git__free(entries);
40
+ else
41
+ *out = entries;
42
+
43
+ return error;
44
+ }
45
+
46
+ int git_config_entries_dup_entry(git_config_entries *entries, const git_config_entry *entry)
47
+ {
48
+ git_config_entry *duplicated;
49
+ int error;
50
+
51
+ duplicated = git__calloc(1, sizeof(git_config_entry));
52
+ GIT_ERROR_CHECK_ALLOC(duplicated);
53
+
54
+ duplicated->name = git__strdup(entry->name);
55
+ GIT_ERROR_CHECK_ALLOC(duplicated->name);
56
+
57
+ if (entry->value) {
58
+ duplicated->value = git__strdup(entry->value);
59
+ GIT_ERROR_CHECK_ALLOC(duplicated->value);
60
+ }
61
+ duplicated->level = entry->level;
62
+ duplicated->include_depth = entry->include_depth;
63
+
64
+ if ((error = git_config_entries_append(entries, duplicated)) < 0)
65
+ goto out;
66
+
67
+ out:
68
+ if (error && duplicated) {
69
+ git__free((char *) duplicated->name);
70
+ git__free((char *) duplicated->value);
71
+ git__free(duplicated);
72
+ }
73
+ return error;
74
+ }
75
+
76
+ int git_config_entries_dup(git_config_entries **out, git_config_entries *entries)
77
+ {
78
+ git_config_entries *result = NULL;
79
+ config_entry_list *head;
80
+ int error;
81
+
82
+ if ((error = git_config_entries_new(&result)) < 0)
83
+ goto out;
84
+
85
+ for (head = entries->list; head; head = head->next)
86
+ if ((git_config_entries_dup_entry(result, head->entry)) < 0)
87
+ goto out;
88
+
89
+ *out = result;
90
+ result = NULL;
91
+
92
+ out:
93
+ git_config_entries_free(result);
94
+ return error;
95
+ }
96
+
97
+ void git_config_entries_incref(git_config_entries *entries)
98
+ {
99
+ GIT_REFCOUNT_INC(entries);
100
+ }
101
+
102
+ static void config_entries_free(git_config_entries *entries)
103
+ {
104
+ config_entry_list *list = NULL, *next;
105
+
106
+ git_strmap_free(entries->map);
107
+
108
+ list = entries->list;
109
+ while (list != NULL) {
110
+ next = list->next;
111
+ if (list->first)
112
+ git__free((char *) list->entry->name);
113
+ git__free((char *) list->entry->value);
114
+ git__free(list->entry);
115
+ git__free(list);
116
+ list = next;
117
+ }
118
+
119
+ git__free(entries);
120
+ }
121
+
122
+ void git_config_entries_free(git_config_entries *entries)
123
+ {
124
+ if (entries)
125
+ GIT_REFCOUNT_DEC(entries, config_entries_free);
126
+ }
127
+
128
+ int git_config_entries_append(git_config_entries *entries, git_config_entry *entry)
129
+ {
130
+ config_entry_list *existing, *head;
131
+
132
+ head = git__calloc(1, sizeof(config_entry_list));
133
+ GIT_ERROR_CHECK_ALLOC(head);
134
+ head->entry = entry;
135
+
136
+ /*
137
+ * This is a micro-optimization for configuration files
138
+ * with a lot of same keys. As for multivars the entry's
139
+ * key will be the same for all entries, we can just free
140
+ * all except the first entry's name and just re-use it.
141
+ */
142
+ if ((existing = git_strmap_get(entries->map, entry->name)) != NULL) {
143
+ git__free((char *) entry->name);
144
+ entry->name = existing->entry->name;
145
+ } else {
146
+ head->first = 1;
147
+ }
148
+
149
+ if (entries->list)
150
+ entries->list->last->next = head;
151
+ else
152
+ entries->list = head;
153
+ entries->list->last = head;
154
+
155
+ if (git_strmap_set(entries->map, entry->name, head) < 0)
156
+ return -1;
157
+
158
+ return 0;
159
+ }
160
+
161
+ int git_config_entries_get(git_config_entry **out, git_config_entries *entries, const char *key)
162
+ {
163
+ config_entry_list *entry;
164
+ if ((entry = git_strmap_get(entries->map, key)) == NULL)
165
+ return GIT_ENOTFOUND;
166
+ *out = entry->entry;
167
+ return 0;
168
+ }
169
+
170
+ int git_config_entries_get_unique(git_config_entry **out, git_config_entries *entries, const char *key)
171
+ {
172
+ config_entry_list *entry;
173
+
174
+ if ((entry = git_strmap_get(entries->map, key)) == NULL)
175
+ return GIT_ENOTFOUND;
176
+
177
+ if (!entry->first) {
178
+ git_error_set(GIT_ERROR_CONFIG, "entry is not unique due to being a multivar");
179
+ return -1;
180
+ }
181
+
182
+ if (entry->entry->include_depth) {
183
+ git_error_set(GIT_ERROR_CONFIG, "entry is not unique due to being included");
184
+ return -1;
185
+ }
186
+
187
+ *out = entry->entry;
188
+
189
+ return 0;
190
+ }
191
+
192
+ static void config_iterator_free(git_config_iterator *iter)
193
+ {
194
+ config_entries_iterator *it = (config_entries_iterator *) iter;
195
+ git_config_entries_free(it->entries);
196
+ git__free(it);
197
+ }
198
+
199
+ static int config_iterator_next(
200
+ git_config_entry **entry,
201
+ git_config_iterator *iter)
202
+ {
203
+ config_entries_iterator *it = (config_entries_iterator *) iter;
204
+
205
+ if (!it->head)
206
+ return GIT_ITEROVER;
207
+
208
+ *entry = it->head->entry;
209
+ it->head = it->head->next;
210
+
211
+ return 0;
212
+ }
213
+
214
+ int git_config_entries_iterator_new(git_config_iterator **out, git_config_entries *entries)
215
+ {
216
+ config_entries_iterator *it;
217
+
218
+ it = git__calloc(1, sizeof(config_entries_iterator));
219
+ GIT_ERROR_CHECK_ALLOC(it);
220
+ it->parent.next = config_iterator_next;
221
+ it->parent.free = config_iterator_free;
222
+ it->head = entries->list;
223
+ it->entries = entries;
224
+
225
+ git_config_entries_incref(entries);
226
+ *out = &it->parent;
227
+
228
+ return 0;
229
+ }
@@ -0,0 +1,24 @@
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 "common.h"
9
+
10
+ #include "git2/sys/config.h"
11
+ #include "config.h"
12
+
13
+ typedef struct git_config_entries git_config_entries;
14
+
15
+ int git_config_entries_new(git_config_entries **out);
16
+ int git_config_entries_dup(git_config_entries **out, git_config_entries *entries);
17
+ int git_config_entries_dup_entry(git_config_entries *entries, const git_config_entry *entry);
18
+ void git_config_entries_incref(git_config_entries *entries);
19
+ void git_config_entries_free(git_config_entries *entries);
20
+ /* Add or append the new config option */
21
+ int git_config_entries_append(git_config_entries *entries, git_config_entry *entry);
22
+ int git_config_entries_get(git_config_entry **out, git_config_entries *entries, const char *key);
23
+ int git_config_entries_get_unique(git_config_entry **out, git_config_entries *entries, const char *key);
24
+ int git_config_entries_iterator_new(git_config_iterator **out, git_config_entries *entries);