rugged 1.6.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -0,0 +1,285 @@
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_list.h"
9
+ #include "hashmap_str.h"
10
+
11
+ typedef struct config_entry_list {
12
+ struct config_entry_list *next;
13
+ struct config_entry_list *last;
14
+ git_config_list_entry *entry;
15
+ } config_entry_list;
16
+
17
+ typedef struct {
18
+ git_config_list_entry *entry;
19
+ bool multivar;
20
+ } config_entry_map_head;
21
+
22
+ typedef struct config_list_iterator {
23
+ git_config_iterator parent;
24
+ git_config_list *list;
25
+ config_entry_list *head;
26
+ } config_list_iterator;
27
+
28
+ GIT_HASHMAP_STR_SETUP(git_config_list_pathmap, char *);
29
+ GIT_HASHMAP_STR_SETUP(git_config_list_headmap, config_entry_map_head *);
30
+
31
+ struct git_config_list {
32
+ git_refcount rc;
33
+
34
+ /* Interned strings - paths to config files or backend types */
35
+ git_config_list_pathmap strings;
36
+
37
+ /* Config entries */
38
+ git_config_list_headmap map;
39
+ config_entry_list *entries;
40
+ };
41
+
42
+ int git_config_list_new(git_config_list **out)
43
+ {
44
+ git_config_list *config_list;
45
+
46
+ config_list = git__calloc(1, sizeof(git_config_list));
47
+ GIT_ERROR_CHECK_ALLOC(config_list);
48
+ GIT_REFCOUNT_INC(config_list);
49
+
50
+ *out = config_list;
51
+ return 0;
52
+ }
53
+
54
+ int git_config_list_dup_entry(git_config_list *config_list, const git_config_entry *entry)
55
+ {
56
+ git_config_list_entry *duplicated;
57
+ int error;
58
+
59
+ duplicated = git__calloc(1, sizeof(git_config_list_entry));
60
+ GIT_ERROR_CHECK_ALLOC(duplicated);
61
+
62
+ duplicated->base.entry.name = git__strdup(entry->name);
63
+ GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.name);
64
+
65
+ if (entry->value) {
66
+ duplicated->base.entry.value = git__strdup(entry->value);
67
+ GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.value);
68
+ }
69
+
70
+ duplicated->base.entry.backend_type = git_config_list_add_string(config_list, entry->backend_type);
71
+ GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.backend_type);
72
+
73
+ if (entry->origin_path) {
74
+ duplicated->base.entry.origin_path = git_config_list_add_string(config_list, entry->origin_path);
75
+ GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.origin_path);
76
+ }
77
+
78
+ duplicated->base.entry.level = entry->level;
79
+ duplicated->base.entry.include_depth = entry->include_depth;
80
+ duplicated->base.free = git_config_list_entry_free;
81
+ duplicated->config_list = config_list;
82
+
83
+ if ((error = git_config_list_append(config_list, duplicated)) < 0)
84
+ goto out;
85
+
86
+ out:
87
+ if (error && duplicated) {
88
+ git__free((char *) duplicated->base.entry.name);
89
+ git__free((char *) duplicated->base.entry.value);
90
+ git__free(duplicated);
91
+ }
92
+ return error;
93
+ }
94
+
95
+ int git_config_list_dup(git_config_list **out, git_config_list *config_list)
96
+ {
97
+ git_config_list *result = NULL;
98
+ config_entry_list *head;
99
+ int error;
100
+
101
+ if ((error = git_config_list_new(&result)) < 0)
102
+ goto out;
103
+
104
+ for (head = config_list->entries; head; head = head->next)
105
+ if ((git_config_list_dup_entry(result, &head->entry->base.entry)) < 0)
106
+ goto out;
107
+
108
+ *out = result;
109
+ result = NULL;
110
+
111
+ out:
112
+ git_config_list_free(result);
113
+ return error;
114
+ }
115
+
116
+ void git_config_list_incref(git_config_list *config_list)
117
+ {
118
+ GIT_REFCOUNT_INC(config_list);
119
+ }
120
+
121
+ static void config_list_free(git_config_list *config_list)
122
+ {
123
+ config_entry_list *entry_list = NULL, *next;
124
+ config_entry_map_head *head;
125
+ char *str;
126
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
127
+
128
+ while (git_config_list_pathmap_iterate(&iter, NULL, &str, &config_list->strings) == 0)
129
+ git__free(str);
130
+
131
+ git_config_list_pathmap_dispose(&config_list->strings);
132
+
133
+ iter = GIT_HASHMAP_ITER_INIT;
134
+ while (git_config_list_headmap_iterate(&iter, NULL, &head, &config_list->map) == 0) {
135
+ git__free((char *) head->entry->base.entry.name);
136
+ git__free(head);
137
+ }
138
+ git_config_list_headmap_dispose(&config_list->map);
139
+
140
+ entry_list = config_list->entries;
141
+ while (entry_list != NULL) {
142
+ next = entry_list->next;
143
+ git__free((char *) entry_list->entry->base.entry.value);
144
+ git__free(entry_list->entry);
145
+ git__free(entry_list);
146
+ entry_list = next;
147
+ }
148
+
149
+ git__free(config_list);
150
+ }
151
+
152
+ void git_config_list_free(git_config_list *config_list)
153
+ {
154
+ if (config_list)
155
+ GIT_REFCOUNT_DEC(config_list, config_list_free);
156
+ }
157
+
158
+ int git_config_list_append(git_config_list *config_list, git_config_list_entry *entry)
159
+ {
160
+ config_entry_list *list_head;
161
+ config_entry_map_head *map_head;
162
+
163
+ if (git_config_list_headmap_get(&map_head, &config_list->map, entry->base.entry.name) == 0) {
164
+ map_head->multivar = true;
165
+ /*
166
+ * This is a micro-optimization for configuration files
167
+ * with a lot of same keys. As for multivars the entry's
168
+ * key will be the same for all list, we can just free
169
+ * all except the first entry's name and just re-use it.
170
+ */
171
+ git__free((char *) entry->base.entry.name);
172
+ entry->base.entry.name = map_head->entry->base.entry.name;
173
+ } else {
174
+ map_head = git__calloc(1, sizeof(*map_head));
175
+ if ((git_config_list_headmap_put(&config_list->map, entry->base.entry.name, map_head)) < 0)
176
+ return -1;
177
+ }
178
+ map_head->entry = entry;
179
+
180
+ list_head = git__calloc(1, sizeof(config_entry_list));
181
+ GIT_ERROR_CHECK_ALLOC(list_head);
182
+ list_head->entry = entry;
183
+
184
+ if (config_list->entries)
185
+ config_list->entries->last->next = list_head;
186
+ else
187
+ config_list->entries = list_head;
188
+ config_list->entries->last = list_head;
189
+
190
+ return 0;
191
+ }
192
+
193
+ int git_config_list_get(git_config_list_entry **out, git_config_list *config_list, const char *key)
194
+ {
195
+ config_entry_map_head *entry;
196
+
197
+ if (git_config_list_headmap_get(&entry, &config_list->map, key) != 0)
198
+ return GIT_ENOTFOUND;
199
+
200
+ *out = entry->entry;
201
+ return 0;
202
+ }
203
+
204
+ int git_config_list_get_unique(git_config_list_entry **out, git_config_list *config_list, const char *key)
205
+ {
206
+ config_entry_map_head *entry;
207
+
208
+ if (git_config_list_headmap_get(&entry, &config_list->map, key) != 0)
209
+ return GIT_ENOTFOUND;
210
+
211
+ if (entry->multivar) {
212
+ git_error_set(GIT_ERROR_CONFIG, "entry is not unique due to being a multivar");
213
+ return -1;
214
+ }
215
+
216
+ if (entry->entry->base.entry.include_depth) {
217
+ git_error_set(GIT_ERROR_CONFIG, "entry is not unique due to being included");
218
+ return -1;
219
+ }
220
+
221
+ *out = entry->entry;
222
+ return 0;
223
+ }
224
+
225
+ static void config_iterator_free(git_config_iterator *iter)
226
+ {
227
+ config_list_iterator *it = (config_list_iterator *) iter;
228
+ git_config_list_free(it->list);
229
+ git__free(it);
230
+ }
231
+
232
+ static int config_iterator_next(
233
+ git_config_backend_entry **entry,
234
+ git_config_iterator *iter)
235
+ {
236
+ config_list_iterator *it = (config_list_iterator *) iter;
237
+
238
+ if (!it->head)
239
+ return GIT_ITEROVER;
240
+
241
+ *entry = &it->head->entry->base;
242
+ it->head = it->head->next;
243
+
244
+ return 0;
245
+ }
246
+
247
+ int git_config_list_iterator_new(git_config_iterator **out, git_config_list *config_list)
248
+ {
249
+ config_list_iterator *it;
250
+
251
+ it = git__calloc(1, sizeof(config_list_iterator));
252
+ GIT_ERROR_CHECK_ALLOC(it);
253
+ it->parent.next = config_iterator_next;
254
+ it->parent.free = config_iterator_free;
255
+ it->head = config_list->entries;
256
+ it->list = config_list;
257
+
258
+ git_config_list_incref(config_list);
259
+ *out = &it->parent;
260
+
261
+ return 0;
262
+ }
263
+
264
+ /* release the map containing the entry as an equivalent to freeing it */
265
+ void git_config_list_entry_free(git_config_backend_entry *e)
266
+ {
267
+ git_config_list_entry *entry = (git_config_list_entry *)e;
268
+ git_config_list_free(entry->config_list);
269
+ }
270
+
271
+ const char *git_config_list_add_string(
272
+ git_config_list *config_list,
273
+ const char *str)
274
+ {
275
+ char *s;
276
+
277
+ if (git_config_list_pathmap_get(&s, &config_list->strings, str) == 0)
278
+ return s;
279
+
280
+ if ((s = git__strdup(str)) == NULL ||
281
+ git_config_list_pathmap_put(&config_list->strings, s, s) < 0)
282
+ return NULL;
283
+
284
+ return s;
285
+ }
@@ -0,0 +1,32 @@
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_list git_config_list;
14
+
15
+ typedef struct {
16
+ git_config_backend_entry base;
17
+ git_config_list *config_list;
18
+ } git_config_list_entry;
19
+
20
+ int git_config_list_new(git_config_list **out);
21
+ int git_config_list_dup(git_config_list **out, git_config_list *list);
22
+ int git_config_list_dup_entry(git_config_list *list, const git_config_entry *entry);
23
+ void git_config_list_incref(git_config_list *list);
24
+ void git_config_list_free(git_config_list *list);
25
+ /* Add or append the new config option */
26
+ int git_config_list_append(git_config_list *list, git_config_list_entry *entry);
27
+ int git_config_list_get(git_config_list_entry **out, git_config_list *list, const char *key);
28
+ int git_config_list_get_unique(git_config_list_entry **out, git_config_list *list, const char *key);
29
+ int git_config_list_iterator_new(git_config_iterator **out, git_config_list *list);
30
+ const char *git_config_list_add_string(git_config_list *list, const char *str);
31
+
32
+ void git_config_list_entry_free(git_config_backend_entry *entry);
@@ -9,16 +9,29 @@
9
9
 
10
10
  #include "config_backend.h"
11
11
  #include "config_parse.h"
12
- #include "config_entries.h"
12
+ #include "config_list.h"
13
+ #include "strlist.h"
13
14
 
14
15
  typedef struct {
15
16
  git_config_backend parent;
16
- git_config_entries *entries;
17
+
18
+ char *backend_type;
19
+ char *origin_path;
20
+
21
+ git_config_list *config_list;
22
+
23
+ /* Configuration data in the config file format */
17
24
  git_str cfg;
25
+
26
+ /* Array of key=value pairs */
27
+ char **values;
28
+ size_t values_len;
18
29
  } config_memory_backend;
19
30
 
20
31
  typedef struct {
21
- git_config_entries *entries;
32
+ const char *backend_type;
33
+ const char *origin_path;
34
+ git_config_list *config_list;
22
35
  git_config_level_t level;
23
36
  } config_memory_parse_data;
24
37
 
@@ -39,7 +52,7 @@ static int read_variable_cb(
39
52
  {
40
53
  config_memory_parse_data *parse_data = (config_memory_parse_data *) payload;
41
54
  git_str buf = GIT_STR_INIT;
42
- git_config_entry *entry;
55
+ git_config_list_entry *entry;
43
56
  const char *c;
44
57
  int result;
45
58
 
@@ -62,35 +75,46 @@ static int read_variable_cb(
62
75
  if (git_str_oom(&buf))
63
76
  return -1;
64
77
 
65
- entry = git__calloc(1, sizeof(git_config_entry));
78
+ entry = git__calloc(1, sizeof(git_config_list_entry));
66
79
  GIT_ERROR_CHECK_ALLOC(entry);
67
- entry->name = git_str_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)
80
+ entry->base.entry.name = git_str_detach(&buf);
81
+ entry->base.entry.value = var_value ? git__strdup(var_value) : NULL;
82
+ entry->base.entry.level = parse_data->level;
83
+ entry->base.entry.include_depth = 0;
84
+ entry->base.entry.backend_type = parse_data->backend_type;
85
+ entry->base.entry.origin_path = parse_data->origin_path;
86
+ entry->base.free = git_config_list_entry_free;
87
+ entry->config_list = parse_data->config_list;
88
+
89
+ if ((result = git_config_list_append(parse_data->config_list, entry)) < 0)
73
90
  return result;
74
91
 
75
92
  return result;
76
93
  }
77
94
 
78
- static int config_memory_open(git_config_backend *backend, git_config_level_t level, const git_repository *repo)
95
+ static int parse_config(
96
+ config_memory_backend *memory_backend,
97
+ git_config_level_t level)
79
98
  {
80
- config_memory_backend *memory_backend = (config_memory_backend *) backend;
81
99
  git_config_parser parser = GIT_PARSE_CTX_INIT;
82
100
  config_memory_parse_data parse_data;
83
101
  int error;
84
102
 
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)
103
+ if ((error = git_config_parser_init(&parser, "in-memory",
104
+ memory_backend->cfg.ptr, memory_backend->cfg.size)) < 0)
89
105
  goto out;
90
- parse_data.entries = memory_backend->entries;
106
+
107
+ parse_data.backend_type = git_config_list_add_string(
108
+ memory_backend->config_list, memory_backend->backend_type);
109
+ parse_data.origin_path = memory_backend->origin_path ?
110
+ git_config_list_add_string(memory_backend->config_list,
111
+ memory_backend->origin_path) :
112
+ NULL;
113
+ parse_data.config_list = memory_backend->config_list;
91
114
  parse_data.level = level;
92
115
 
93
- if ((error = git_config_parse(&parser, NULL, read_variable_cb, NULL, NULL, &parse_data)) < 0)
116
+ if ((error = git_config_parse(&parser, NULL, read_variable_cb,
117
+ NULL, NULL, &parse_data)) < 0)
94
118
  goto out;
95
119
 
96
120
  out:
@@ -98,10 +122,85 @@ out:
98
122
  return error;
99
123
  }
100
124
 
101
- static int config_memory_get(git_config_backend *backend, const char *key, git_config_entry **out)
125
+ static int parse_values(
126
+ config_memory_backend *memory_backend,
127
+ git_config_level_t level)
128
+ {
129
+ git_config_list_entry *entry;
130
+ const char *eql, *backend_type, *origin_path;
131
+ size_t name_len, i;
132
+
133
+ backend_type = git_config_list_add_string(
134
+ memory_backend->config_list, memory_backend->backend_type);
135
+ GIT_ERROR_CHECK_ALLOC(backend_type);
136
+
137
+ origin_path = memory_backend->origin_path ?
138
+ git_config_list_add_string(memory_backend->config_list,
139
+ memory_backend->origin_path) :
140
+ NULL;
141
+
142
+ for (i = 0; i < memory_backend->values_len; i++) {
143
+ eql = strchr(memory_backend->values[i], '=');
144
+ name_len = eql - memory_backend->values[i];
145
+
146
+ if (name_len == 0) {
147
+ git_error_set(GIT_ERROR_CONFIG, "empty config key");
148
+ return -1;
149
+ }
150
+
151
+ entry = git__calloc(1, sizeof(git_config_list_entry));
152
+ GIT_ERROR_CHECK_ALLOC(entry);
153
+
154
+ entry->base.entry.name = git__strndup(memory_backend->values[i], name_len);
155
+ GIT_ERROR_CHECK_ALLOC(entry->base.entry.name);
156
+
157
+ if (eql) {
158
+ entry->base.entry.value = git__strdup(eql + 1);
159
+ GIT_ERROR_CHECK_ALLOC(entry->base.entry.value);
160
+ }
161
+
162
+ entry->base.entry.level = level;
163
+ entry->base.entry.include_depth = 0;
164
+ entry->base.entry.backend_type = backend_type;
165
+ entry->base.entry.origin_path = origin_path;
166
+ entry->base.free = git_config_list_entry_free;
167
+ entry->config_list = memory_backend->config_list;
168
+
169
+ if (git_config_list_append(memory_backend->config_list, entry) < 0)
170
+ return -1;
171
+ }
172
+
173
+ return 0;
174
+ }
175
+
176
+ static int config_memory_open(git_config_backend *backend, git_config_level_t level, const git_repository *repo)
177
+ {
178
+ config_memory_backend *memory_backend = (config_memory_backend *) backend;
179
+
180
+ GIT_UNUSED(repo);
181
+
182
+ if (memory_backend->cfg.size > 0 &&
183
+ parse_config(memory_backend, level) < 0)
184
+ return -1;
185
+
186
+ if (memory_backend->values_len > 0 &&
187
+ parse_values(memory_backend, level) < 0)
188
+ return -1;
189
+
190
+ return 0;
191
+ }
192
+
193
+ static int config_memory_get(git_config_backend *backend, const char *key, git_config_backend_entry **out)
102
194
  {
103
195
  config_memory_backend *memory_backend = (config_memory_backend *) backend;
104
- return git_config_entries_get(out, memory_backend->entries, key);
196
+ git_config_list_entry *entry;
197
+ int error;
198
+
199
+ if ((error = git_config_list_get(&entry, memory_backend->config_list, key)) != 0)
200
+ return error;
201
+
202
+ *out = &entry->base;
203
+ return 0;
105
204
  }
106
205
 
107
206
  static int config_memory_iterator(
@@ -109,18 +208,18 @@ static int config_memory_iterator(
109
208
  git_config_backend *backend)
110
209
  {
111
210
  config_memory_backend *memory_backend = (config_memory_backend *) backend;
112
- git_config_entries *entries;
211
+ git_config_list *config_list;
113
212
  int error;
114
213
 
115
- if ((error = git_config_entries_dup(&entries, memory_backend->entries)) < 0)
214
+ if ((error = git_config_list_dup(&config_list, memory_backend->config_list)) < 0)
116
215
  goto out;
117
216
 
118
- if ((error = git_config_entries_iterator_new(iter, entries)) < 0)
217
+ if ((error = git_config_list_iterator_new(iter, config_list)) < 0)
119
218
  goto out;
120
219
 
121
220
  out:
122
- /* Let iterator delete duplicated entries when it's done */
123
- git_config_entries_free(entries);
221
+ /* Let iterator delete duplicated config_list when it's done */
222
+ git_config_list_free(config_list);
124
223
  return error;
125
224
  }
126
225
 
@@ -177,28 +276,24 @@ static void config_memory_free(git_config_backend *_backend)
177
276
  if (backend == NULL)
178
277
  return;
179
278
 
180
- git_config_entries_free(backend->entries);
279
+ git__free(backend->origin_path);
280
+ git__free(backend->backend_type);
281
+ git_config_list_free(backend->config_list);
282
+ git_strlist_free(backend->values, backend->values_len);
181
283
  git_str_dispose(&backend->cfg);
182
284
  git__free(backend);
183
285
  }
184
286
 
185
- int git_config_backend_from_string(git_config_backend **out, const char *cfg, size_t len)
287
+ static config_memory_backend *config_backend_new(
288
+ git_config_backend_memory_options *opts)
186
289
  {
187
290
  config_memory_backend *backend;
188
291
 
189
- backend = git__calloc(1, sizeof(config_memory_backend));
190
- GIT_ERROR_CHECK_ALLOC(backend);
292
+ if ((backend = git__calloc(1, sizeof(config_memory_backend))) == NULL)
293
+ return NULL;
191
294
 
192
- if (git_config_entries_new(&backend->entries) < 0) {
193
- git__free(backend);
194
- return -1;
195
- }
196
-
197
- if (git_str_set(&backend->cfg, cfg, len) < 0) {
198
- git_config_entries_free(backend->entries);
199
- git__free(backend);
200
- return -1;
201
- }
295
+ if (git_config_list_new(&backend->config_list) < 0)
296
+ goto on_error;
202
297
 
203
298
  backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
204
299
  backend->parent.readonly = 1;
@@ -214,7 +309,66 @@ int git_config_backend_from_string(git_config_backend **out, const char *cfg, si
214
309
  backend->parent.snapshot = git_config_backend_snapshot;
215
310
  backend->parent.free = config_memory_free;
216
311
 
312
+ backend->backend_type = git__strdup(opts && opts->backend_type ?
313
+ opts->backend_type : "in-memory");
314
+
315
+ if (backend->backend_type == NULL)
316
+ goto on_error;
317
+
318
+ if (opts && opts->origin_path &&
319
+ (backend->origin_path = git__strdup(opts->origin_path)) == NULL)
320
+ goto on_error;
321
+
322
+ return backend;
323
+
324
+ on_error:
325
+ git_config_list_free(backend->config_list);
326
+ git__free(backend->origin_path);
327
+ git__free(backend->backend_type);
328
+ git__free(backend);
329
+ return NULL;
330
+ }
331
+
332
+ int git_config_backend_from_string(
333
+ git_config_backend **out,
334
+ const char *cfg,
335
+ size_t len,
336
+ git_config_backend_memory_options *opts)
337
+ {
338
+ config_memory_backend *backend;
339
+
340
+ if ((backend = config_backend_new(opts)) == NULL)
341
+ return -1;
342
+
343
+ if (git_str_set(&backend->cfg, cfg, len) < 0) {
344
+ git_config_list_free(backend->config_list);
345
+ git__free(backend);
346
+ return -1;
347
+ }
348
+
217
349
  *out = (git_config_backend *)backend;
350
+ return 0;
351
+ }
352
+
353
+ int git_config_backend_from_values(
354
+ git_config_backend **out,
355
+ const char **values,
356
+ size_t len,
357
+ git_config_backend_memory_options *opts)
358
+ {
359
+ config_memory_backend *backend;
218
360
 
361
+ if ((backend = config_backend_new(opts)) == NULL)
362
+ return -1;
363
+
364
+ if (git_strlist_copy(&backend->values, values, len) < 0) {
365
+ git_config_list_free(backend->config_list);
366
+ git__free(backend);
367
+ return -1;
368
+ }
369
+
370
+ backend->values_len = len;
371
+
372
+ *out = (git_config_backend *)backend;
219
373
  return 0;
220
374
  }
@@ -25,9 +25,9 @@ static void set_parse_error(git_config_parser *reader, int col, const char *erro
25
25
  }
26
26
 
27
27
 
28
- GIT_INLINE(int) config_keychar(int c)
28
+ GIT_INLINE(int) config_keychar(char c)
29
29
  {
30
- return isalnum(c) || c == '-';
30
+ return git__isalnum(c) || c == '-';
31
31
  }
32
32
 
33
33
  static int strip_comments(char *line, int in_quotes)
@@ -158,9 +158,10 @@ end_error:
158
158
  static int parse_section_header(git_config_parser *reader, char **section_out)
159
159
  {
160
160
  char *name, *name_end;
161
- int name_length, c, pos;
161
+ int name_length, pos;
162
162
  int result;
163
163
  char *line;
164
+ char c;
164
165
  size_t line_len;
165
166
 
166
167
  git_parse_advance_ws(&reader->ctx);
@@ -279,8 +280,7 @@ static int skip_bom(git_parse_ctx *parser)
279
280
  */
280
281
 
281
282
  /* '\"' -> '"' etc */
282
- static int unescape_line(
283
- char **out, bool *is_multi, const char *ptr, int quote_count)
283
+ static int unescape_line(char **out, bool *is_multi, const char *ptr, int *quote_count)
284
284
  {
285
285
  char *str, *fixed, *esc;
286
286
  size_t ptr_len = strlen(ptr), alloc_len;
@@ -296,7 +296,8 @@ static int unescape_line(
296
296
 
297
297
  while (*ptr != '\0') {
298
298
  if (*ptr == '"') {
299
- quote_count++;
299
+ if (quote_count)
300
+ (*quote_count)++;
300
301
  } else if (*ptr != '\\') {
301
302
  *fixed++ = *ptr;
302
303
  } else {
@@ -358,7 +359,7 @@ static int parse_multiline_variable(git_config_parser *reader, git_str *value, i
358
359
  goto next;
359
360
 
360
361
  if ((error = unescape_line(&proc_line, &multiline,
361
- line, in_quotes)) < 0)
362
+ line, &in_quotes)) < 0)
362
363
  goto out;
363
364
 
364
365
  /* Add this line to the multiline var */
@@ -382,7 +383,7 @@ out:
382
383
 
383
384
  GIT_INLINE(bool) is_namechar(char c)
384
385
  {
385
- return isalnum(c) || c == '-';
386
+ return git__isalnum(c) || c == '-';
386
387
  }
387
388
 
388
389
  static int parse_name(
@@ -445,7 +446,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
445
446
  while (git__isspace(value_start[0]))
446
447
  value_start++;
447
448
 
448
- if ((error = unescape_line(&value, &multiline, value_start, 0)) < 0)
449
+ if ((error = unescape_line(&value, &multiline, value_start, NULL)) < 0)
449
450
  goto out;
450
451
 
451
452
  if (multiline) {