rugged 1.7.2 → 1.9.6

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 (477) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +278 -12
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +8 -3
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +14 -4
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre2/CMakeLists.txt +110 -0
  59. data/vendor/libgit2/deps/pcre2/LICENCE.md +104 -0
  60. data/vendor/libgit2/deps/pcre2/config.h.in +54 -0
  61. data/vendor/libgit2/deps/pcre2/pcre2.h +1079 -0
  62. data/vendor/libgit2/deps/pcre2/pcre2_auto_possess.c +1416 -0
  63. data/vendor/libgit2/deps/{pcre/pcre_chartables.c → pcre2/pcre2_chartables.c} +41 -47
  64. data/vendor/libgit2/deps/{pcre/pcre_ord2utf8.c → pcre2/pcre2_chkdint.c} +36 -36
  65. data/vendor/libgit2/deps/pcre2/pcre2_compile.c +11345 -0
  66. data/vendor/libgit2/deps/pcre2/pcre2_compile.h +356 -0
  67. data/vendor/libgit2/deps/pcre2/pcre2_compile_cgroup.c +632 -0
  68. data/vendor/libgit2/deps/pcre2/pcre2_compile_class.c +2777 -0
  69. data/vendor/libgit2/deps/pcre2/pcre2_config.c +250 -0
  70. data/vendor/libgit2/deps/pcre2/pcre2_context.c +557 -0
  71. data/vendor/libgit2/deps/pcre2/pcre2_convert.c +1263 -0
  72. data/vendor/libgit2/deps/{pcre/pcre_dfa_exec.c → pcre2/pcre2_dfa_match.c} +1402 -943
  73. data/vendor/libgit2/deps/pcre2/pcre2_error.c +384 -0
  74. data/vendor/libgit2/deps/pcre2/pcre2_extuni.c +159 -0
  75. data/vendor/libgit2/deps/pcre2/pcre2_find_bracket.c +217 -0
  76. data/vendor/libgit2/deps/pcre2/pcre2_fuzzsupport.c +844 -0
  77. data/vendor/libgit2/deps/pcre2/pcre2_internal.h +2353 -0
  78. data/vendor/libgit2/deps/pcre2/pcre2_intmodedep.h +1044 -0
  79. data/vendor/libgit2/deps/pcre2/pcre2_maketables.c +177 -0
  80. data/vendor/libgit2/deps/pcre2/pcre2_match.c +8244 -0
  81. data/vendor/libgit2/deps/pcre2/pcre2_match_data.c +184 -0
  82. data/vendor/libgit2/deps/pcre2/pcre2_match_next.c +171 -0
  83. data/vendor/libgit2/deps/{pcre/pcre_newline.c → pcre2/pcre2_newline.c} +92 -63
  84. data/vendor/libgit2/deps/{pcre/pcre_refcount.c → pcre2/pcre2_ord2utf.c} +64 -38
  85. data/vendor/libgit2/deps/pcre2/pcre2_pattern_info.c +430 -0
  86. data/vendor/libgit2/deps/pcre2/pcre2_printint_inc.h +1098 -0
  87. data/vendor/libgit2/deps/pcre2/pcre2_script_run.c +344 -0
  88. data/vendor/libgit2/deps/pcre2/pcre2_serialize.c +284 -0
  89. data/vendor/libgit2/deps/pcre2/pcre2_string_utils.c +199 -0
  90. data/vendor/libgit2/deps/pcre2/pcre2_study.c +2087 -0
  91. data/vendor/libgit2/deps/pcre2/pcre2_substitute.c +1761 -0
  92. data/vendor/libgit2/deps/pcre2/pcre2_substring.c +553 -0
  93. data/vendor/libgit2/deps/pcre2/pcre2_tables.c +310 -0
  94. data/vendor/libgit2/deps/pcre2/pcre2_ucd.c +5805 -0
  95. data/vendor/libgit2/deps/pcre2/pcre2_ucp.h +408 -0
  96. data/vendor/libgit2/deps/pcre2/pcre2_ucptables_inc.h +1596 -0
  97. data/vendor/libgit2/deps/pcre2/pcre2_util.h +179 -0
  98. data/vendor/libgit2/deps/pcre2/pcre2_valid_utf.c +397 -0
  99. data/vendor/libgit2/deps/pcre2/pcre2_xclass.c +547 -0
  100. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  101. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  102. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  103. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  104. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  105. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  106. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  107. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  108. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  109. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  110. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  111. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  112. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  113. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  114. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  115. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  116. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  117. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  118. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  119. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  120. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  121. data/vendor/libgit2/include/git2/apply.h +27 -6
  122. data/vendor/libgit2/include/git2/attr.h +17 -4
  123. data/vendor/libgit2/include/git2/blame.h +133 -28
  124. data/vendor/libgit2/include/git2/blob.h +71 -28
  125. data/vendor/libgit2/include/git2/branch.h +22 -15
  126. data/vendor/libgit2/include/git2/buffer.h +6 -4
  127. data/vendor/libgit2/include/git2/cert.h +2 -1
  128. data/vendor/libgit2/include/git2/checkout.h +83 -32
  129. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  130. data/vendor/libgit2/include/git2/clone.h +25 -9
  131. data/vendor/libgit2/include/git2/commit.h +132 -3
  132. data/vendor/libgit2/include/git2/common.h +132 -63
  133. data/vendor/libgit2/include/git2/config.h +93 -23
  134. data/vendor/libgit2/include/git2/credential.h +30 -2
  135. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  136. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  137. data/vendor/libgit2/include/git2/describe.h +13 -1
  138. data/vendor/libgit2/include/git2/diff.h +38 -8
  139. data/vendor/libgit2/include/git2/email.h +9 -29
  140. data/vendor/libgit2/include/git2/errors.h +46 -73
  141. data/vendor/libgit2/include/git2/filter.h +14 -7
  142. data/vendor/libgit2/include/git2/global.h +8 -1
  143. data/vendor/libgit2/include/git2/graph.h +3 -2
  144. data/vendor/libgit2/include/git2/ignore.h +10 -0
  145. data/vendor/libgit2/include/git2/index.h +100 -15
  146. data/vendor/libgit2/include/git2/indexer.h +21 -4
  147. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  148. data/vendor/libgit2/include/git2/merge.h +50 -3
  149. data/vendor/libgit2/include/git2/message.h +2 -2
  150. data/vendor/libgit2/include/git2/net.h +3 -1
  151. data/vendor/libgit2/include/git2/notes.h +9 -6
  152. data/vendor/libgit2/include/git2/object.h +9 -8
  153. data/vendor/libgit2/include/git2/odb.h +91 -49
  154. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  155. data/vendor/libgit2/include/git2/oid.h +23 -25
  156. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  157. data/vendor/libgit2/include/git2/pack.h +13 -1
  158. data/vendor/libgit2/include/git2/patch.h +2 -3
  159. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  160. data/vendor/libgit2/include/git2/proxy.h +12 -3
  161. data/vendor/libgit2/include/git2/rebase.h +9 -6
  162. data/vendor/libgit2/include/git2/refdb.h +2 -2
  163. data/vendor/libgit2/include/git2/reflog.h +3 -2
  164. data/vendor/libgit2/include/git2/refs.h +9 -6
  165. data/vendor/libgit2/include/git2/refspec.h +14 -4
  166. data/vendor/libgit2/include/git2/remote.h +113 -25
  167. data/vendor/libgit2/include/git2/repository.h +57 -21
  168. data/vendor/libgit2/include/git2/reset.h +16 -3
  169. data/vendor/libgit2/include/git2/revert.h +9 -4
  170. data/vendor/libgit2/include/git2/revparse.h +3 -3
  171. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  172. data/vendor/libgit2/include/git2/signature.h +46 -1
  173. data/vendor/libgit2/include/git2/stash.h +17 -3
  174. data/vendor/libgit2/include/git2/status.h +10 -6
  175. data/vendor/libgit2/include/git2/stdint.h +87 -85
  176. data/vendor/libgit2/include/git2/strarray.h +2 -3
  177. data/vendor/libgit2/include/git2/submodule.h +20 -9
  178. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  179. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  180. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  181. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  182. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  183. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  184. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  185. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  186. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  187. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  188. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  189. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  190. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  191. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  192. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  193. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  194. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  195. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  196. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  197. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  198. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  199. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  200. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  201. data/vendor/libgit2/include/git2/tag.h +3 -1
  202. data/vendor/libgit2/include/git2/trace.h +9 -3
  203. data/vendor/libgit2/include/git2/transaction.h +3 -2
  204. data/vendor/libgit2/include/git2/transport.h +11 -3
  205. data/vendor/libgit2/include/git2/tree.h +16 -5
  206. data/vendor/libgit2/include/git2/types.h +19 -3
  207. data/vendor/libgit2/include/git2/version.h +46 -8
  208. data/vendor/libgit2/include/git2/worktree.h +16 -6
  209. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  210. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  211. data/vendor/libgit2/src/cli/cmd.c +1 -1
  212. data/vendor/libgit2/src/cli/cmd.h +4 -0
  213. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  214. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  215. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  216. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  217. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  218. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  219. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  220. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  221. data/vendor/libgit2/src/cli/common.c +168 -0
  222. data/vendor/libgit2/src/cli/common.h +63 -0
  223. data/vendor/libgit2/src/cli/error.h +1 -1
  224. data/vendor/libgit2/src/cli/main.c +52 -24
  225. data/vendor/libgit2/src/cli/opt.c +31 -5
  226. data/vendor/libgit2/src/cli/opt.h +21 -3
  227. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  228. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  229. data/vendor/libgit2/src/cli/progress.c +51 -2
  230. data/vendor/libgit2/src/cli/progress.h +12 -0
  231. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  232. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  233. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  234. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  235. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  236. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  237. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  238. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  239. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  240. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  241. data/vendor/libgit2/src/libgit2/blame.c +135 -43
  242. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  243. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  244. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  245. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  246. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  247. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  248. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  249. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  250. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  251. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  252. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  253. data/vendor/libgit2/src/libgit2/config.c +390 -299
  254. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  255. data/vendor/libgit2/src/libgit2/config.h +9 -4
  256. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  257. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  258. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  259. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  260. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  261. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  262. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  263. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  264. data/vendor/libgit2/src/libgit2/delta.c +13 -1
  265. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  266. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  267. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  268. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  269. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  270. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  272. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  273. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  274. data/vendor/libgit2/src/libgit2/email.c +1 -0
  275. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  276. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  277. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  278. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  279. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  280. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  281. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  282. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  283. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  284. data/vendor/libgit2/src/libgit2/index.c +76 -98
  285. data/vendor/libgit2/src/libgit2/index.h +5 -2
  286. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  287. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  288. data/vendor/libgit2/src/libgit2/indexer.c +38 -41
  289. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  290. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  291. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  292. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  293. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  294. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  295. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  296. data/vendor/libgit2/src/libgit2/message.c +1 -1
  297. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  298. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  299. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  300. data/vendor/libgit2/src/libgit2/object.c +6 -5
  301. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  302. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  303. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  304. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  305. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  306. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  307. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  308. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  309. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  310. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  311. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  312. data/vendor/libgit2/src/libgit2/path.c +1 -1
  313. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  314. data/vendor/libgit2/src/libgit2/push.c +79 -28
  315. data/vendor/libgit2/src/libgit2/push.h +1 -0
  316. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  317. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  318. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  319. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  320. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  321. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  322. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  323. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  324. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  325. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  326. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  327. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  328. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  329. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  330. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  331. data/vendor/libgit2/src/libgit2/settings.c +477 -0
  332. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  333. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  334. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  335. data/vendor/libgit2/src/libgit2/status.c +1 -1
  336. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  337. data/vendor/libgit2/src/libgit2/streams/openssl.c +36 -8
  338. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  339. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  340. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  341. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  342. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  343. data/vendor/libgit2/src/libgit2/submodule.c +195 -80
  344. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  345. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  346. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  347. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  348. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  349. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  350. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  351. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  352. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  353. data/vendor/libgit2/src/libgit2/transports/http.c +5 -6
  354. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  355. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  356. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  357. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  358. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  359. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  360. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  361. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +7 -6
  362. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  363. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  364. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  365. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  366. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1132 -0
  367. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  368. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  369. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  370. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  371. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  372. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  373. data/vendor/libgit2/src/util/alloc.c +4 -1
  374. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  375. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  376. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  377. data/vendor/libgit2/src/util/array.h +18 -17
  378. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  379. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  380. data/vendor/libgit2/src/util/date.c +22 -14
  381. data/vendor/libgit2/src/util/date.h +12 -0
  382. data/vendor/libgit2/src/util/errors.c +401 -0
  383. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  384. data/vendor/libgit2/src/util/fs_path.c +81 -10
  385. data/vendor/libgit2/src/util/fs_path.h +39 -10
  386. data/vendor/libgit2/src/util/futils.c +6 -5
  387. data/vendor/libgit2/src/util/futils.h +24 -7
  388. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  389. data/vendor/libgit2/src/util/git2_util.h +6 -0
  390. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  391. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  392. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  393. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  394. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  395. data/vendor/libgit2/src/util/hashmap.h +425 -0
  396. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  397. data/vendor/libgit2/src/util/integer.h +3 -1
  398. data/vendor/libgit2/src/util/net.c +17 -11
  399. data/vendor/libgit2/src/util/net.h +2 -0
  400. data/vendor/libgit2/src/util/pool.c +1 -1
  401. data/vendor/libgit2/src/util/pool.h +5 -0
  402. data/vendor/libgit2/src/util/pqueue.h +1 -1
  403. data/vendor/libgit2/src/util/process.h +223 -0
  404. data/vendor/libgit2/src/util/rand.c +1 -7
  405. data/vendor/libgit2/src/util/regexp.c +28 -13
  406. data/vendor/libgit2/src/util/regexp.h +7 -2
  407. data/vendor/libgit2/src/util/runtime.c +2 -2
  408. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  409. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  410. data/vendor/libgit2/src/util/str.c +20 -8
  411. data/vendor/libgit2/src/util/str.h +5 -3
  412. data/vendor/libgit2/src/util/strlist.c +108 -0
  413. data/vendor/libgit2/src/util/strlist.h +36 -0
  414. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  415. data/vendor/libgit2/src/util/unix/process.c +706 -0
  416. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  417. data/vendor/libgit2/src/util/util.c +18 -5
  418. data/vendor/libgit2/src/util/util.h +5 -38
  419. data/vendor/libgit2/src/util/vector.c +3 -3
  420. data/vendor/libgit2/src/util/vector.h +2 -2
  421. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  422. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  423. data/vendor/libgit2/src/util/win32/process.c +522 -0
  424. metadata +102 -67
  425. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  426. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  427. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  428. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  429. data/vendor/libgit2/deps/pcre/CMakeLists.txt +0 -140
  430. data/vendor/libgit2/deps/pcre/COPYING +0 -5
  431. data/vendor/libgit2/deps/pcre/LICENCE +0 -93
  432. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +0 -22
  433. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +0 -17
  434. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +0 -58
  435. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +0 -29
  436. data/vendor/libgit2/deps/pcre/config.h.in +0 -57
  437. data/vendor/libgit2/deps/pcre/pcre.h +0 -641
  438. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +0 -319
  439. data/vendor/libgit2/deps/pcre/pcre_compile.c +0 -9815
  440. data/vendor/libgit2/deps/pcre/pcre_config.c +0 -190
  441. data/vendor/libgit2/deps/pcre/pcre_exec.c +0 -7173
  442. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +0 -245
  443. data/vendor/libgit2/deps/pcre/pcre_get.c +0 -669
  444. data/vendor/libgit2/deps/pcre/pcre_globals.c +0 -86
  445. data/vendor/libgit2/deps/pcre/pcre_internal.h +0 -2787
  446. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +0 -11913
  447. data/vendor/libgit2/deps/pcre/pcre_maketables.c +0 -156
  448. data/vendor/libgit2/deps/pcre/pcre_printint.c +0 -834
  449. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +0 -211
  450. data/vendor/libgit2/deps/pcre/pcre_study.c +0 -1686
  451. data/vendor/libgit2/deps/pcre/pcre_tables.c +0 -727
  452. data/vendor/libgit2/deps/pcre/pcre_ucd.c +0 -3644
  453. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +0 -301
  454. data/vendor/libgit2/deps/pcre/pcre_version.c +0 -98
  455. data/vendor/libgit2/deps/pcre/pcre_xclass.c +0 -268
  456. data/vendor/libgit2/deps/pcre/pcreposix.c +0 -420
  457. data/vendor/libgit2/deps/pcre/pcreposix.h +0 -117
  458. data/vendor/libgit2/deps/pcre/ucp.h +0 -224
  459. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  460. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  461. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  462. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  463. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  464. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  465. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  466. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  467. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  468. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  469. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  470. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  471. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  472. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  473. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  474. data/vendor/libgit2/src/util/khash.h +0 -615
  475. data/vendor/libgit2/src/util/strmap.c +0 -100
  476. data/vendor/libgit2/src/util/strmap.h +0 -131
  477. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -0,0 +1,223 @@
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
+ #ifndef INCLUDE_process_h__
9
+ #define INCLUDE_process_h__
10
+
11
+ typedef struct git_process git_process;
12
+
13
+ typedef struct {
14
+ unsigned int use_shell : 1,
15
+ capture_in : 1,
16
+ capture_out : 1,
17
+ capture_err : 1,
18
+ exclude_env : 1;
19
+
20
+ char *cwd;
21
+ } git_process_options;
22
+
23
+ typedef enum {
24
+ GIT_PROCESS_STATUS_NONE,
25
+ GIT_PROCESS_STATUS_NORMAL,
26
+ GIT_PROCESS_STATUS_ERROR
27
+ } git_process_result_status;
28
+
29
+ #define GIT_PROCESS_RESULT_INIT { GIT_PROCESS_STATUS_NONE }
30
+
31
+ typedef struct {
32
+ git_process_result_status status;
33
+ int exitcode;
34
+ int signal;
35
+ } git_process_result;
36
+
37
+ #define GIT_PROCESS_OPTIONS_INIT { 0 }
38
+
39
+ #ifdef GIT_WIN32
40
+ # define p_pid_t DWORD
41
+ #else
42
+ # define p_pid_t pid_t
43
+ #endif
44
+
45
+ /**
46
+ * Create a new process. The command to run should be specified as the
47
+ * element of the `arg` array, execv-style. This should be the full path
48
+ * to the command to run, the PATH is not obeyed.
49
+ *
50
+ * This function will add the given environment variables (in `env`)
51
+ * to the current environment. Operations on environment variables
52
+ * are not thread safe, so you may not modify the environment during
53
+ * this call. You can avoid this by setting `exclude_env` in the
54
+ * options and providing the entire environment yourself.
55
+ *
56
+ * @param out location to store the process
57
+ * @param args the command (with arguments) to run
58
+ * @param args_len the length of the args array
59
+ * @param env environment variables to add (or NULL)
60
+ * @param env_len the length of the env len
61
+ * @param opts the options for creating the process
62
+ * @return 0 or an error code
63
+ */
64
+ extern int git_process_new(
65
+ git_process **out,
66
+ const char **args,
67
+ size_t args_len,
68
+ const char **env,
69
+ size_t env_len,
70
+ git_process_options *opts);
71
+
72
+ /**
73
+ * Create a new process. The command to run should be specified as the
74
+ * `cmdline` option - which is the full text of the command line as it
75
+ * would be specified or run by a user. The command to run will be
76
+ * looked up in the PATH.
77
+ *
78
+ * On Unix, this will be executed by the system's shell (`/bin/sh`)
79
+ * and may contain _Bourne-style_ shell quoting rules. On Windows,
80
+ * this will be passed to `CreateProcess`, and similarly, may
81
+ * contain _Windows-style_ shell quoting rules.
82
+ *
83
+ * This function will add the given environment variables (in `env`)
84
+ * to the current environment. Operations on environment variables
85
+ * are not thread safe, so you may not modify the environment during
86
+ * this call. You can avoid this by setting `exclude_env` in the
87
+ * options and providing the entire environment yourself.
88
+ */
89
+ extern int git_process_new_from_cmdline(
90
+ git_process **out,
91
+ const char *cmdline,
92
+ const char **env,
93
+ size_t env_len,
94
+ git_process_options *opts);
95
+
96
+ #ifdef GIT_WIN32
97
+
98
+ extern int git_process__appname(
99
+ git_str *out,
100
+ const char *cmdline);
101
+
102
+ /* Windows path parsing is tricky; this helper function is for testing. */
103
+ extern int git_process__cmdline(
104
+ git_str *out,
105
+ const char **in,
106
+ size_t in_len);
107
+
108
+ #endif
109
+
110
+ /*
111
+ * Whether the given string looks like a command line option (starts
112
+ * with a dash). This is useful for examining strings that will become
113
+ * cmdline arguments to ensure that they are not erroneously treated
114
+ * as an option. For example, arguments to `ssh`.
115
+ */
116
+ GIT_INLINE(bool) git_process__is_cmdline_option(const char *str)
117
+ {
118
+ return (str && str[0] == '-');
119
+ }
120
+
121
+ /**
122
+ * Start the process.
123
+ *
124
+ * @param process the process to start
125
+ * @return 0 or an error code
126
+ */
127
+ extern int git_process_start(git_process *process);
128
+
129
+ /**
130
+ * Returns the process id of the process.
131
+ *
132
+ * @param out pointer to a pid_t to store the process id
133
+ * @param process the process to query
134
+ * @return 0 or an error code
135
+ */
136
+ extern int git_process_id(p_pid_t *out, git_process *process);
137
+
138
+ /**
139
+ * Read from the process's stdout. The process must have been created with
140
+ * `capture_out` set to true.
141
+ *
142
+ * @param process the process to read from
143
+ * @param buf the buf to read into
144
+ * @param count maximum number of bytes to read
145
+ * @return number of bytes read or an error code
146
+ */
147
+ extern ssize_t git_process_read(git_process *process, void *buf, size_t count);
148
+
149
+ /**
150
+ * Read from the process's stderr. The process must have been created with
151
+ * `capture_err` set to true.
152
+ *
153
+ * @param process the process to read from
154
+ * @param buf the buf to read into
155
+ * @param count maximum number of bytes to read
156
+ * @return number of bytes read or an error code
157
+ */
158
+ extern ssize_t git_process_read_err(git_process *process, void *buf, size_t count);
159
+
160
+ /**
161
+ * Write to the process's stdin. The process must have been created with
162
+ * `capture_in` set to true.
163
+ *
164
+ * @param process the process to write to
165
+ * @param buf the buf to write
166
+ * @param count maximum number of bytes to write
167
+ * @return number of bytes written or an error code
168
+ */
169
+ extern ssize_t git_process_write(git_process *process, const void *buf, size_t count);
170
+
171
+ /**
172
+ * Wait for the process to finish.
173
+ *
174
+ * @param result the result of the process or NULL
175
+ * @param process the process to wait on
176
+ */
177
+ extern int git_process_wait(git_process_result *result, git_process *process);
178
+
179
+ /**
180
+ * Close the input pipe from the child.
181
+ *
182
+ * @param process the process to close the pipe on
183
+ */
184
+ extern int git_process_close_in(git_process *process);
185
+
186
+ /**
187
+ * Close the output pipe from the child.
188
+ *
189
+ * @param process the process to close the pipe on
190
+ */
191
+ extern int git_process_close_out(git_process *process);
192
+
193
+ /**
194
+ * Close the error pipe from the child.
195
+ *
196
+ * @param process the process to close the pipe on
197
+ */
198
+ extern int git_process_close_err(git_process *process);
199
+
200
+ /**
201
+ * Close all resources that are used by the process. This does not
202
+ * wait for the process to complete.
203
+ *
204
+ * @parma process the process to close
205
+ */
206
+ extern int git_process_close(git_process *process);
207
+
208
+ /**
209
+ * Place a human-readable error message in the given git buffer.
210
+ *
211
+ * @param msg the buffer to store the message
212
+ * @param result the process result that produced an error
213
+ */
214
+ extern int git_process_result_msg(git_str *msg, git_process_result *result);
215
+
216
+ /**
217
+ * Free a process structure
218
+ *
219
+ * @param process the process to free
220
+ */
221
+ extern void git_process_free(git_process *process);
222
+
223
+ #endif
@@ -10,10 +10,6 @@ See <http://creativecommons.org/publicdomain/zero/1.0/>. */
10
10
  #include "rand.h"
11
11
  #include "runtime.h"
12
12
 
13
- #if defined(GIT_RAND_GETENTROPY)
14
- # include <sys/random.h>
15
- #endif
16
-
17
13
  #if defined(GIT_WIN32)
18
14
  # include <wincrypt.h>
19
15
  #endif
@@ -80,10 +76,10 @@ GIT_INLINE(int) getseed(uint64_t *seed)
80
76
  GIT_INLINE(int) getseed(uint64_t *seed)
81
77
  {
82
78
  struct timeval tv;
83
- double loadavg[3];
84
79
  int fd;
85
80
 
86
81
  # if defined(GIT_RAND_GETLOADAVG)
82
+ double loadavg[3];
87
83
  bits convert;
88
84
  # endif
89
85
 
@@ -129,8 +125,6 @@ GIT_INLINE(int) getseed(uint64_t *seed)
129
125
  convert.f = loadavg[0]; *seed ^= (convert.d >> 36);
130
126
  convert.f = loadavg[1]; *seed ^= (convert.d);
131
127
  convert.f = loadavg[2]; *seed ^= (convert.d >> 16);
132
- # else
133
- GIT_UNUSED(loadavg[0]);
134
128
  # endif
135
129
 
136
130
  *seed ^= git_time_monotonic();
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "regexp.h"
9
9
 
10
- #if defined(GIT_REGEX_BUILTIN) || defined(GIT_REGEX_PCRE)
10
+ #if defined(GIT_REGEX_PCRE)
11
11
 
12
12
  int git_regexp_compile(git_regexp *r, const char *pattern, int flags)
13
13
  {
@@ -73,7 +73,7 @@ out:
73
73
  return 0;
74
74
  }
75
75
 
76
- #elif defined(GIT_REGEX_PCRE2)
76
+ #elif defined(GIT_REGEX_BUILTIN) || defined(GIT_REGEX_PCRE2)
77
77
 
78
78
  int git_regexp_compile(git_regexp *r, const char *pattern, int flags)
79
79
  {
@@ -84,8 +84,9 @@ int git_regexp_compile(git_regexp *r, const char *pattern, int flags)
84
84
  if (flags & GIT_REGEXP_ICASE)
85
85
  cflags |= PCRE2_CASELESS;
86
86
 
87
- if ((*r = pcre2_compile((const unsigned char *) pattern, PCRE2_ZERO_TERMINATED,
88
- cflags, &error, &erroff, NULL)) == NULL) {
87
+ if ((*r = pcre2_compile((const unsigned char *) pattern,
88
+ PCRE2_ZERO_TERMINATED,
89
+ cflags, &error, &erroff, NULL)) == NULL) {
89
90
  pcre2_get_error_message(error, errmsg, sizeof(errmsg));
90
91
  git_error_set_str(GIT_ERROR_REGEX, (char *) errmsg);
91
92
  return GIT_EINVALIDSPEC;
@@ -110,37 +111,51 @@ int git_regexp_match(const git_regexp *r, const char *string)
110
111
 
111
112
  error = pcre2_match(*r, (const unsigned char *) string, strlen(string), 0, 0, data, NULL);
112
113
  pcre2_match_data_free(data);
114
+
113
115
  if (error < 0)
114
116
  return (error == PCRE2_ERROR_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
115
117
 
116
118
  return 0;
117
119
  }
118
120
 
119
- int git_regexp_search(const git_regexp *r, const char *string, size_t nmatches, git_regmatch *matches)
121
+ int git_regexp_search(
122
+ const git_regexp *r,
123
+ const char *string,
124
+ size_t given_nmatches,
125
+ git_regmatch *matches)
120
126
  {
121
127
  pcre2_match_data *data = NULL;
122
128
  PCRE2_SIZE *ovec;
129
+ size_t i, captures;
130
+ uint32_t nmatches;
123
131
  int error;
124
- size_t i;
132
+
133
+ GIT_ASSERT(given_nmatches <= UINT32_MAX);
134
+
135
+ nmatches = (uint32_t) given_nmatches;
125
136
 
126
137
  if ((data = pcre2_match_data_create(nmatches, NULL)) == NULL) {
127
138
  git_error_set_oom();
128
- goto out;
139
+ return -1;
129
140
  }
130
141
 
131
- if ((error = pcre2_match(*r, (const unsigned char *) string, strlen(string),
132
- 0, 0, data, NULL)) < 0)
142
+ if ((error = pcre2_match(*r, (const unsigned char *) string,
143
+ strlen(string), 0, 0, data, NULL)) < 0)
133
144
  goto out;
134
145
 
135
- if (error == 0 || (unsigned int) error > nmatches)
136
- error = nmatches;
146
+ captures = (size_t) error;
147
+
148
+ if (!captures || captures > nmatches)
149
+ captures = nmatches;
150
+
137
151
  ovec = pcre2_get_ovector_pointer(data);
138
152
 
139
- for (i = 0; i < (unsigned int) error; i++) {
153
+ for (i = 0; i < captures; i++) {
140
154
  matches[i].start = (ovec[i * 2] == PCRE2_UNSET) ? -1 : (ssize_t) ovec[i * 2];
141
155
  matches[i].end = (ovec[i * 2 + 1] == PCRE2_UNSET) ? -1 : (ssize_t) ovec[i * 2 + 1];
142
156
  }
143
- for (i = (unsigned int) error; i < nmatches; i++)
157
+
158
+ for (i = captures; i < nmatches; i++)
144
159
  matches[i].start = matches[i].end = -1;
145
160
 
146
161
  out:
@@ -10,8 +10,13 @@
10
10
 
11
11
  #include "git2_util.h"
12
12
 
13
- #if defined(GIT_REGEX_BUILTIN) || defined(GIT_REGEX_PCRE)
14
- # include "pcre.h"
13
+ #if defined(GIT_REGEX_BUILTIN)
14
+ # define PCRE2_CODE_UNIT_WIDTH 8
15
+ # include "pcre2.h"
16
+ typedef pcre2_code *git_regexp;
17
+ # define GIT_REGEX_INIT NULL
18
+ #elif defined(GIT_REGEX_PCRE)
19
+ # include <pcre.h>
15
20
  typedef pcre *git_regexp;
16
21
  # define GIT_REGEX_INIT NULL
17
22
  #elif defined(GIT_REGEX_PCRE2)
@@ -16,7 +16,7 @@ static git_atomic32 init_count;
16
16
  static int init_common(git_runtime_init_fn init_fns[], size_t cnt)
17
17
  {
18
18
  size_t i;
19
- int ret;
19
+ int ret = 0;
20
20
 
21
21
  /* Initialize subsystems that have global state */
22
22
  for (i = 0; i < cnt; i++) {
@@ -110,7 +110,7 @@ GIT_INLINE(int) init_unlock(void)
110
110
 
111
111
  int git_runtime_init(git_runtime_init_fn init_fns[], size_t cnt)
112
112
  {
113
- int ret;
113
+ int ret = 0;
114
114
 
115
115
  if (init_lock() < 0)
116
116
  return -1;
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  #include "sortedcache.h"
9
+ #include "hashmap.h"
9
10
 
10
11
  int git_sortedcache_new(
11
12
  git_sortedcache **out,
@@ -26,8 +27,7 @@ int git_sortedcache_new(
26
27
  GIT_ERROR_CHECK_ALLOC(sc);
27
28
 
28
29
  if (git_pool_init(&sc->pool, 1) < 0 ||
29
- git_vector_init(&sc->items, 4, item_cmp) < 0 ||
30
- git_strmap_new(&sc->map) < 0)
30
+ git_vector_init(&sc->items, 4, item_cmp) < 0)
31
31
  goto fail;
32
32
 
33
33
  if (git_rwlock_init(&sc->lock)) {
@@ -46,8 +46,7 @@ int git_sortedcache_new(
46
46
  return 0;
47
47
 
48
48
  fail:
49
- git_strmap_free(sc->map);
50
- git_vector_free(&sc->items);
49
+ git_vector_dispose(&sc->items);
51
50
  git_pool_clear(&sc->pool);
52
51
  git__free(sc);
53
52
  return -1;
@@ -65,7 +64,7 @@ const char *git_sortedcache_path(git_sortedcache *sc)
65
64
 
66
65
  static void sortedcache_clear(git_sortedcache *sc)
67
66
  {
68
- git_strmap_clear(sc->map);
67
+ git_hashmap_str_clear(&sc->map);
69
68
 
70
69
  if (sc->free_item) {
71
70
  size_t i;
@@ -88,8 +87,8 @@ static void sortedcache_free(git_sortedcache *sc)
88
87
  return;
89
88
 
90
89
  sortedcache_clear(sc);
91
- git_vector_free(&sc->items);
92
- git_strmap_free(sc->map);
90
+ git_vector_dispose(&sc->items);
91
+ git_hashmap_str_dispose(&sc->map);
93
92
 
94
93
  git_sortedcache_wunlock(sc);
95
94
 
@@ -274,7 +273,7 @@ int git_sortedcache_upsert(void **out, git_sortedcache *sc, const char *key)
274
273
  char *item_key;
275
274
  void *item;
276
275
 
277
- if ((item = git_strmap_get(sc->map, key)) != NULL)
276
+ if (git_hashmap_str_get(&item, &sc->map, key) == 0)
278
277
  goto done;
279
278
 
280
279
  keylen = strlen(key);
@@ -294,11 +293,11 @@ int git_sortedcache_upsert(void **out, git_sortedcache *sc, const char *key)
294
293
  item_key = ((char *)item) + sc->item_path_offset;
295
294
  memcpy(item_key, key, keylen);
296
295
 
297
- if ((error = git_strmap_set(sc->map, item_key, item)) < 0)
296
+ if ((error = git_hashmap_str_put(&sc->map, item_key, item)) < 0)
298
297
  goto done;
299
298
 
300
299
  if ((error = git_vector_insert(&sc->items, item)) < 0)
301
- git_strmap_delete(sc->map, item_key);
300
+ git_hashmap_str_remove(&sc->map, item_key);
302
301
 
303
302
  done:
304
303
  if (out)
@@ -307,9 +306,11 @@ done:
307
306
  }
308
307
 
309
308
  /* lookup item by key */
310
- void *git_sortedcache_lookup(const git_sortedcache *sc, const char *key)
309
+ void *git_sortedcache_lookup(git_sortedcache *sc, const char *key)
311
310
  {
312
- return git_strmap_get(sc->map, key);
311
+ void *value;
312
+
313
+ return git_hashmap_str_get(&value, &sc->map, key) == 0 ? value : NULL;
313
314
  }
314
315
 
315
316
  /* find out how many items are in the cache */
@@ -370,7 +371,7 @@ int git_sortedcache_remove(git_sortedcache *sc, size_t pos)
370
371
 
371
372
  (void)git_vector_remove(&sc->items, pos);
372
373
 
373
- git_strmap_delete(sc->map, item + sc->item_path_offset);
374
+ git_hashmap_str_remove(&sc->map, item + sc->item_path_offset);
374
375
 
375
376
  if (sc->free_item)
376
377
  sc->free_item(sc->free_item_payload, item);
@@ -14,7 +14,7 @@
14
14
  #include "vector.h"
15
15
  #include "thread.h"
16
16
  #include "pool.h"
17
- #include "strmap.h"
17
+ #include "hashmap_str.h"
18
18
 
19
19
  #include <stddef.h>
20
20
 
@@ -36,7 +36,7 @@ typedef struct {
36
36
  void *free_item_payload;
37
37
  git_pool pool;
38
38
  git_vector items;
39
- git_strmap *map;
39
+ git_hashmap_str map;
40
40
  git_futils_filestamp stamp;
41
41
  char path[GIT_FLEX_ARRAY];
42
42
  } git_sortedcache;
@@ -163,7 +163,7 @@ GIT_WARN_UNUSED_RESULT int git_sortedcache_rlock(git_sortedcache *sc);
163
163
  void git_sortedcache_runlock(git_sortedcache *sc);
164
164
 
165
165
  /* Lookup item by key - returns NULL if not found */
166
- void *git_sortedcache_lookup(const git_sortedcache *sc, const char *key);
166
+ void *git_sortedcache_lookup(git_sortedcache *sc, const char *key);
167
167
 
168
168
  /* Get how many items are in the cache
169
169
  *
@@ -485,8 +485,8 @@ int git_str_decode_percent(
485
485
  for (str_pos = 0; str_pos < str_len; buf->size++, str_pos++) {
486
486
  if (str[str_pos] == '%' &&
487
487
  str_len > str_pos + 2 &&
488
- isxdigit(str[str_pos + 1]) &&
489
- isxdigit(str[str_pos + 2])) {
488
+ git__isxdigit(str[str_pos + 1]) &&
489
+ git__isxdigit(str[str_pos + 2])) {
490
490
  buf->ptr[buf->size] = (HEX_DECODE(str[str_pos + 1]) << 4) +
491
491
  HEX_DECODE(str[str_pos + 2]);
492
492
  str_pos += 2;
@@ -1065,10 +1065,13 @@ int git_str_puts_escaped(
1065
1065
  git_str *buf,
1066
1066
  const char *string,
1067
1067
  const char *esc_chars,
1068
- const char *esc_with)
1068
+ const char *esc_prefix,
1069
+ const char *esc_suffix)
1069
1070
  {
1070
1071
  const char *scan;
1071
- size_t total = 0, esc_len = strlen(esc_with), count, alloclen;
1072
+ size_t total = 0, count, alloclen;
1073
+ size_t esc_prefix_len = esc_prefix ? strlen(esc_prefix) : 0;
1074
+ size_t esc_suffix_len = esc_suffix ? strlen(esc_suffix) : 0;
1072
1075
 
1073
1076
  if (!string)
1074
1077
  return 0;
@@ -1080,7 +1083,7 @@ int git_str_puts_escaped(
1080
1083
  scan += count;
1081
1084
  /* count run of escaped characters */
1082
1085
  count = strspn(scan, esc_chars);
1083
- total += count * (esc_len + 1);
1086
+ total += count * (esc_prefix_len + esc_suffix_len + 1);
1084
1087
  scan += count;
1085
1088
  }
1086
1089
 
@@ -1096,13 +1099,22 @@ int git_str_puts_escaped(
1096
1099
  buf->size += count;
1097
1100
 
1098
1101
  for (count = strspn(scan, esc_chars); count > 0; --count) {
1099
- /* copy escape sequence */
1100
- memmove(buf->ptr + buf->size, esc_with, esc_len);
1101
- buf->size += esc_len;
1102
+ /* copy escape prefix sequence */
1103
+ if (esc_prefix) {
1104
+ memmove(buf->ptr + buf->size, esc_prefix, esc_prefix_len);
1105
+ buf->size += esc_prefix_len;
1106
+ }
1107
+
1102
1108
  /* copy character to be escaped */
1103
1109
  buf->ptr[buf->size] = *scan;
1104
1110
  buf->size++;
1105
1111
  scan++;
1112
+
1113
+ /* copy escape suffix sequence */
1114
+ if (esc_suffix) {
1115
+ memmove(buf->ptr + buf->size, esc_suffix, esc_suffix_len);
1116
+ buf->size += esc_suffix_len;
1117
+ }
1106
1118
  }
1107
1119
  }
1108
1120
 
@@ -268,21 +268,23 @@ int git_str_splice(
268
268
  * @param str String buffer to append data to
269
269
  * @param string String to escape and append
270
270
  * @param esc_chars Characters to be escaped
271
- * @param esc_with String to insert in from of each found character
271
+ * @param esc_prefix String to insert as prefix of each found character
272
+ * @param esc_suffix String to insert as suffix of each found character
272
273
  * @return 0 on success, <0 on failure (probably allocation problem)
273
274
  */
274
275
  extern int git_str_puts_escaped(
275
276
  git_str *str,
276
277
  const char *string,
277
278
  const char *esc_chars,
278
- const char *esc_with);
279
+ const char *esc_prefix,
280
+ const char *esc_suffix);
279
281
 
280
282
  /**
281
283
  * Append string escaping characters that are regex special
282
284
  */
283
285
  GIT_INLINE(int) git_str_puts_escape_regex(git_str *str, const char *string)
284
286
  {
285
- return git_str_puts_escaped(str, string, "^.[]$()|*+?{}\\", "\\");
287
+ return git_str_puts_escaped(str, string, "^.[]$()|*+?{}\\", "\\", NULL);
286
288
  }
287
289
 
288
290
  /**
@@ -0,0 +1,108 @@
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 <stdio.h>
9
+
10
+ #include "git2_util.h"
11
+ #include "vector.h"
12
+ #include "strlist.h"
13
+
14
+ int git_strlist_copy(char ***out, const char **in, size_t len)
15
+ {
16
+ char **dup;
17
+ size_t i;
18
+
19
+ dup = git__calloc(len, sizeof(char *));
20
+ GIT_ERROR_CHECK_ALLOC(dup);
21
+
22
+ for (i = 0; i < len; i++) {
23
+ dup[i] = git__strdup(in[i]);
24
+ GIT_ERROR_CHECK_ALLOC(dup[i]);
25
+ }
26
+
27
+ *out = dup;
28
+ return 0;
29
+ }
30
+
31
+ int git_strlist_copy_with_null(char ***out, const char **in, size_t len)
32
+ {
33
+ char **dup;
34
+ size_t new_len, i;
35
+
36
+ GIT_ERROR_CHECK_ALLOC_ADD(&new_len, len, 1);
37
+
38
+ dup = git__calloc(new_len, sizeof(char *));
39
+ GIT_ERROR_CHECK_ALLOC(dup);
40
+
41
+ for (i = 0; i < len; i++) {
42
+ dup[i] = git__strdup(in[i]);
43
+ GIT_ERROR_CHECK_ALLOC(dup[i]);
44
+ }
45
+
46
+ *out = dup;
47
+ return 0;
48
+ }
49
+
50
+ bool git_strlist_contains_prefix(
51
+ const char **strings,
52
+ size_t len,
53
+ const char *str,
54
+ size_t n)
55
+ {
56
+ size_t i;
57
+
58
+ for (i = 0; i < len; i++) {
59
+ if (strncmp(strings[i], str, n) == 0)
60
+ return true;
61
+ }
62
+
63
+ return false;
64
+ }
65
+
66
+ bool git_strlist_contains_key(
67
+ const char **strings,
68
+ size_t len,
69
+ const char *key,
70
+ char delimiter)
71
+ {
72
+ const char *c;
73
+
74
+ for (c = key; *c; c++) {
75
+ if (*c == delimiter)
76
+ break;
77
+ }
78
+
79
+ return *c ?
80
+ git_strlist_contains_prefix(strings, len, key, (c - key)) :
81
+ false;
82
+ }
83
+
84
+ void git_strlist_free(char **strings, size_t len)
85
+ {
86
+ size_t i;
87
+
88
+ if (!strings)
89
+ return;
90
+
91
+ for (i = 0; i < len; i++)
92
+ git__free(strings[i]);
93
+
94
+ git__free(strings);
95
+ }
96
+
97
+ void git_strlist_free_with_null(char **strings)
98
+ {
99
+ char **s;
100
+
101
+ if (!strings)
102
+ return;
103
+
104
+ for (s = strings; *s; s++)
105
+ git__free(*s);
106
+
107
+ git__free(strings);
108
+ }