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,477 @@
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 "settings.h"
9
+
10
+ #include <git2.h>
11
+ #include "alloc.h"
12
+ #include "buf.h"
13
+ #include "cache.h"
14
+ #include "common.h"
15
+ #include "filter.h"
16
+ #include "grafts.h"
17
+ #include "hash.h"
18
+ #include "index.h"
19
+ #include "merge_driver.h"
20
+ #include "pool.h"
21
+ #include "mwindow.h"
22
+ #include "object.h"
23
+ #include "odb.h"
24
+ #include "rand.h"
25
+ #include "refs.h"
26
+ #include "runtime.h"
27
+ #include "sysdir.h"
28
+ #include "thread.h"
29
+ #include "git2/global.h"
30
+ #include "streams/registry.h"
31
+ #include "streams/mbedtls.h"
32
+ #include "streams/openssl.h"
33
+ #include "streams/socket.h"
34
+ #include "transports/smart.h"
35
+ #include "transports/http.h"
36
+ #include "transports/ssh_libssh2.h"
37
+
38
+ #ifdef GIT_WIN32
39
+ # include "win32/w32_leakcheck.h"
40
+ #endif
41
+
42
+ /* Declarations for tuneable settings */
43
+ extern size_t git_mwindow__window_size;
44
+ extern size_t git_mwindow__mapped_limit;
45
+ extern size_t git_mwindow__file_limit;
46
+ extern size_t git_indexer__max_objects;
47
+ extern size_t git_indexer__max_object_size;
48
+ extern bool git_disable_pack_keep_file_checks;
49
+ extern int git_odb__packed_priority;
50
+ extern int git_odb__loose_priority;
51
+ extern int git_socket_stream__connect_timeout;
52
+ extern int git_socket_stream__timeout;
53
+
54
+ char *git__user_agent;
55
+ char *git__user_agent_product;
56
+ char *git__ssl_ciphers;
57
+
58
+ static void settings_global_shutdown(void)
59
+ {
60
+ git__free(git__user_agent);
61
+ git__free(git__user_agent_product);
62
+
63
+ git__free(git__ssl_ciphers);
64
+ git_repository__free_extensions();
65
+ }
66
+
67
+ int git_settings_global_init(void)
68
+ {
69
+ return git_runtime_shutdown_register(settings_global_shutdown);
70
+ }
71
+
72
+ static int config_level_to_sysdir(int *out, int config_level)
73
+ {
74
+ switch (config_level) {
75
+ case GIT_CONFIG_LEVEL_SYSTEM:
76
+ *out = GIT_SYSDIR_SYSTEM;
77
+ return 0;
78
+ case GIT_CONFIG_LEVEL_XDG:
79
+ *out = GIT_SYSDIR_XDG;
80
+ return 0;
81
+ case GIT_CONFIG_LEVEL_GLOBAL:
82
+ *out = GIT_SYSDIR_GLOBAL;
83
+ return 0;
84
+ case GIT_CONFIG_LEVEL_PROGRAMDATA:
85
+ *out = GIT_SYSDIR_PROGRAMDATA;
86
+ return 0;
87
+ default:
88
+ break;
89
+ }
90
+
91
+ git_error_set(
92
+ GIT_ERROR_INVALID, "invalid config path selector %d", config_level);
93
+ return -1;
94
+ }
95
+
96
+ const char *git_settings__user_agent_product(void)
97
+ {
98
+ return git__user_agent_product ? git__user_agent_product :
99
+ "git/2.0";
100
+ }
101
+
102
+ const char *git_settings__user_agent(void)
103
+ {
104
+ return git__user_agent ? git__user_agent :
105
+ "libgit2 " LIBGIT2_VERSION;
106
+ }
107
+
108
+ int git_libgit2_opts(int key, ...)
109
+ {
110
+ int error = 0;
111
+ va_list ap;
112
+
113
+ va_start(ap, key);
114
+
115
+ switch (key) {
116
+ case GIT_OPT_SET_MWINDOW_SIZE:
117
+ git_mwindow__window_size = va_arg(ap, size_t);
118
+ break;
119
+
120
+ case GIT_OPT_GET_MWINDOW_SIZE:
121
+ *(va_arg(ap, size_t *)) = git_mwindow__window_size;
122
+ break;
123
+
124
+ case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
125
+ git_mwindow__mapped_limit = va_arg(ap, size_t);
126
+ break;
127
+
128
+ case GIT_OPT_GET_MWINDOW_MAPPED_LIMIT:
129
+ *(va_arg(ap, size_t *)) = git_mwindow__mapped_limit;
130
+ break;
131
+
132
+ case GIT_OPT_SET_MWINDOW_FILE_LIMIT:
133
+ git_mwindow__file_limit = va_arg(ap, size_t);
134
+ break;
135
+
136
+ case GIT_OPT_GET_MWINDOW_FILE_LIMIT:
137
+ *(va_arg(ap, size_t *)) = git_mwindow__file_limit;
138
+ break;
139
+
140
+ case GIT_OPT_GET_SEARCH_PATH:
141
+ {
142
+ int sysdir = va_arg(ap, int);
143
+ git_buf *out = va_arg(ap, git_buf *);
144
+ git_str str = GIT_STR_INIT;
145
+ const git_str *tmp;
146
+ int level;
147
+
148
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
149
+ (error = config_level_to_sysdir(&level, sysdir)) < 0 ||
150
+ (error = git_sysdir_get(&tmp, level)) < 0 ||
151
+ (error = git_str_put(&str, tmp->ptr, tmp->size)) < 0)
152
+ break;
153
+
154
+ error = git_buf_fromstr(out, &str);
155
+ }
156
+ break;
157
+
158
+ case GIT_OPT_SET_SEARCH_PATH:
159
+ {
160
+ int level;
161
+
162
+ if ((error = config_level_to_sysdir(&level, va_arg(ap, int))) >= 0)
163
+ error = git_sysdir_set(level, va_arg(ap, const char *));
164
+ }
165
+ break;
166
+
167
+ case GIT_OPT_SET_CACHE_OBJECT_LIMIT:
168
+ {
169
+ git_object_t type = (git_object_t)va_arg(ap, int);
170
+ size_t size = va_arg(ap, size_t);
171
+ error = git_cache_set_max_object_size(type, size);
172
+ break;
173
+ }
174
+
175
+ case GIT_OPT_SET_CACHE_MAX_SIZE:
176
+ git_cache__max_storage = va_arg(ap, ssize_t);
177
+ break;
178
+
179
+ case GIT_OPT_ENABLE_CACHING:
180
+ git_cache__enabled = (va_arg(ap, int) != 0);
181
+ break;
182
+
183
+ case GIT_OPT_GET_CACHED_MEMORY:
184
+ *(va_arg(ap, ssize_t *)) = git_cache__current_storage.val;
185
+ *(va_arg(ap, ssize_t *)) = git_cache__max_storage;
186
+ break;
187
+
188
+ case GIT_OPT_GET_TEMPLATE_PATH:
189
+ {
190
+ git_buf *out = va_arg(ap, git_buf *);
191
+ git_str str = GIT_STR_INIT;
192
+ const git_str *tmp;
193
+
194
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
195
+ (error = git_sysdir_get(&tmp, GIT_SYSDIR_TEMPLATE)) < 0 ||
196
+ (error = git_str_put(&str, tmp->ptr, tmp->size)) < 0)
197
+ break;
198
+
199
+ error = git_buf_fromstr(out, &str);
200
+ }
201
+ break;
202
+
203
+ case GIT_OPT_SET_TEMPLATE_PATH:
204
+ error = git_sysdir_set(GIT_SYSDIR_TEMPLATE, va_arg(ap, const char *));
205
+ break;
206
+
207
+ case GIT_OPT_SET_SSL_CERT_LOCATIONS:
208
+ #ifdef GIT_OPENSSL
209
+ {
210
+ const char *file = va_arg(ap, const char *);
211
+ const char *path = va_arg(ap, const char *);
212
+ error = git_openssl__set_cert_location(file, path);
213
+ }
214
+ #elif defined(GIT_MBEDTLS)
215
+ {
216
+ const char *file = va_arg(ap, const char *);
217
+ const char *path = va_arg(ap, const char *);
218
+ error = git_mbedtls__set_cert_location(file, path);
219
+ }
220
+ #else
221
+ git_error_set(GIT_ERROR_SSL, "TLS backend doesn't support certificate locations");
222
+ error = -1;
223
+ #endif
224
+ break;
225
+
226
+ case GIT_OPT_ADD_SSL_X509_CERT:
227
+ #ifdef GIT_OPENSSL
228
+ {
229
+ X509 *cert = va_arg(ap, X509 *);
230
+ error = git_openssl__add_x509_cert(cert);
231
+ }
232
+ #else
233
+ git_error_set(GIT_ERROR_SSL, "TLS backend doesn't support adding of the raw certs");
234
+ error = -1;
235
+ #endif
236
+ break;
237
+
238
+ case GIT_OPT_SET_USER_AGENT:
239
+ {
240
+ const char *new_agent = va_arg(ap, const char *);
241
+
242
+ git__free(git__user_agent);
243
+
244
+ if (new_agent) {
245
+ git__user_agent= git__strdup(new_agent);
246
+
247
+ if (!git__user_agent)
248
+ error = -1;
249
+ } else {
250
+ git__user_agent = NULL;
251
+ }
252
+ }
253
+ break;
254
+
255
+ case GIT_OPT_GET_USER_AGENT:
256
+ {
257
+ git_buf *out = va_arg(ap, git_buf *);
258
+ git_str str = GIT_STR_INIT;
259
+
260
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
261
+ (error = git_str_puts(&str, git_settings__user_agent())) < 0)
262
+ break;
263
+
264
+ error = git_buf_fromstr(out, &str);
265
+ }
266
+ break;
267
+
268
+ case GIT_OPT_SET_USER_AGENT_PRODUCT:
269
+ {
270
+ const char *new_agent = va_arg(ap, const char *);
271
+
272
+ git__free(git__user_agent_product);
273
+
274
+ if (new_agent) {
275
+ git__user_agent_product = git__strdup(new_agent);
276
+
277
+ if (!git__user_agent_product)
278
+ error = -1;
279
+ } else {
280
+ git__user_agent_product = NULL;
281
+ }
282
+ }
283
+ break;
284
+
285
+ case GIT_OPT_GET_USER_AGENT_PRODUCT:
286
+ {
287
+ git_buf *out = va_arg(ap, git_buf *);
288
+ git_str str = GIT_STR_INIT;
289
+
290
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
291
+ (error = git_str_puts(&str, git_settings__user_agent_product())) < 0)
292
+ break;
293
+
294
+ error = git_buf_fromstr(out, &str);
295
+ }
296
+ break;
297
+
298
+ case GIT_OPT_ENABLE_STRICT_OBJECT_CREATION:
299
+ git_object__strict_input_validation = (va_arg(ap, int) != 0);
300
+ break;
301
+
302
+ case GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION:
303
+ git_reference__enable_symbolic_ref_target_validation = (va_arg(ap, int) != 0);
304
+ break;
305
+
306
+ case GIT_OPT_SET_SSL_CIPHERS:
307
+ #if (GIT_OPENSSL || GIT_MBEDTLS)
308
+ {
309
+ git__free(git__ssl_ciphers);
310
+ git__ssl_ciphers = git__strdup(va_arg(ap, const char *));
311
+ if (!git__ssl_ciphers) {
312
+ git_error_set_oom();
313
+ error = -1;
314
+ }
315
+ }
316
+ #else
317
+ git_error_set(GIT_ERROR_SSL, "TLS backend doesn't support custom ciphers");
318
+ error = -1;
319
+ #endif
320
+ break;
321
+
322
+ case GIT_OPT_ENABLE_OFS_DELTA:
323
+ git_smart__ofs_delta_enabled = (va_arg(ap, int) != 0);
324
+ break;
325
+
326
+ case GIT_OPT_ENABLE_FSYNC_GITDIR:
327
+ git_repository__fsync_gitdir = (va_arg(ap, int) != 0);
328
+ break;
329
+
330
+ case GIT_OPT_GET_WINDOWS_SHAREMODE:
331
+ #ifdef GIT_WIN32
332
+ *(va_arg(ap, unsigned long *)) = git_win32__createfile_sharemode;
333
+ #endif
334
+ break;
335
+
336
+ case GIT_OPT_SET_WINDOWS_SHAREMODE:
337
+ #ifdef GIT_WIN32
338
+ git_win32__createfile_sharemode = va_arg(ap, unsigned long);
339
+ #endif
340
+ break;
341
+
342
+ case GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION:
343
+ git_odb__strict_hash_verification = (va_arg(ap, int) != 0);
344
+ break;
345
+
346
+ case GIT_OPT_SET_ALLOCATOR:
347
+ error = git_allocator_setup(va_arg(ap, git_allocator *));
348
+ break;
349
+
350
+ case GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY:
351
+ git_index__enforce_unsaved_safety = (va_arg(ap, int) != 0);
352
+ break;
353
+
354
+ case GIT_OPT_SET_PACK_MAX_OBJECTS:
355
+ git_indexer__max_objects = va_arg(ap, size_t);
356
+ break;
357
+
358
+ case GIT_OPT_GET_PACK_MAX_OBJECTS:
359
+ *(va_arg(ap, size_t *)) = git_indexer__max_objects;
360
+ break;
361
+
362
+ case GIT_OPT_SET_PACK_MAX_OBJECT_SIZE:
363
+ git_indexer__max_object_size = va_arg(ap, size_t);
364
+ break;
365
+
366
+ case GIT_OPT_GET_PACK_MAX_OBJECT_SIZE:
367
+ *(va_arg(ap, size_t *)) = git_indexer__max_object_size;
368
+ break;
369
+
370
+ case GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS:
371
+ git_disable_pack_keep_file_checks = (va_arg(ap, int) != 0);
372
+ break;
373
+
374
+ case GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE:
375
+ git_http__expect_continue = (va_arg(ap, int) != 0);
376
+ break;
377
+
378
+ case GIT_OPT_SET_ODB_PACKED_PRIORITY:
379
+ git_odb__packed_priority = va_arg(ap, int);
380
+ break;
381
+
382
+ case GIT_OPT_SET_ODB_LOOSE_PRIORITY:
383
+ git_odb__loose_priority = va_arg(ap, int);
384
+ break;
385
+
386
+ case GIT_OPT_SET_EXTENSIONS:
387
+ {
388
+ const char **extensions = va_arg(ap, const char **);
389
+ size_t len = va_arg(ap, size_t);
390
+ error = git_repository__set_extensions(extensions, len);
391
+ }
392
+ break;
393
+
394
+ case GIT_OPT_GET_EXTENSIONS:
395
+ {
396
+ git_strarray *out = va_arg(ap, git_strarray *);
397
+ char **extensions;
398
+ size_t len;
399
+
400
+ if ((error = git_repository__extensions(&extensions, &len)) < 0)
401
+ break;
402
+
403
+ out->strings = extensions;
404
+ out->count = len;
405
+ }
406
+ break;
407
+
408
+ case GIT_OPT_GET_OWNER_VALIDATION:
409
+ *(va_arg(ap, int *)) = git_repository__validate_ownership;
410
+ break;
411
+
412
+ case GIT_OPT_SET_OWNER_VALIDATION:
413
+ git_repository__validate_ownership = (va_arg(ap, int) != 0);
414
+ break;
415
+
416
+ case GIT_OPT_GET_HOMEDIR:
417
+ {
418
+ git_buf *out = va_arg(ap, git_buf *);
419
+ git_str str = GIT_STR_INIT;
420
+ const git_str *tmp;
421
+
422
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
423
+ (error = git_sysdir_get(&tmp, GIT_SYSDIR_HOME)) < 0 ||
424
+ (error = git_str_put(&str, tmp->ptr, tmp->size)) < 0)
425
+ break;
426
+
427
+ error = git_buf_fromstr(out, &str);
428
+ }
429
+ break;
430
+
431
+ case GIT_OPT_SET_HOMEDIR:
432
+ error = git_sysdir_set(GIT_SYSDIR_HOME, va_arg(ap, const char *));
433
+ break;
434
+
435
+ case GIT_OPT_GET_SERVER_CONNECT_TIMEOUT:
436
+ *(va_arg(ap, int *)) = git_socket_stream__connect_timeout;
437
+ break;
438
+
439
+ case GIT_OPT_SET_SERVER_CONNECT_TIMEOUT:
440
+ {
441
+ int timeout = va_arg(ap, int);
442
+
443
+ if (timeout < 0) {
444
+ git_error_set(GIT_ERROR_INVALID, "invalid connect timeout");
445
+ error = -1;
446
+ } else {
447
+ git_socket_stream__connect_timeout = timeout;
448
+ }
449
+ }
450
+ break;
451
+
452
+ case GIT_OPT_GET_SERVER_TIMEOUT:
453
+ *(va_arg(ap, int *)) = git_socket_stream__timeout;
454
+ break;
455
+
456
+ case GIT_OPT_SET_SERVER_TIMEOUT:
457
+ {
458
+ int timeout = va_arg(ap, int);
459
+
460
+ if (timeout < 0) {
461
+ git_error_set(GIT_ERROR_INVALID, "invalid timeout");
462
+ error = -1;
463
+ } else {
464
+ git_socket_stream__timeout = timeout;
465
+ }
466
+ }
467
+ break;
468
+
469
+ default:
470
+ git_error_set(GIT_ERROR_INVALID, "invalid option key");
471
+ error = -1;
472
+ }
473
+
474
+ va_end(ap);
475
+
476
+ return error;
477
+ }
@@ -4,8 +4,12 @@
4
4
  * This file is part of libgit2, distributed under the GNU GPL v2 with
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
+ #ifndef INCLUDE_settings_h__
8
+ #define INCLUDE_settings_h__
7
9
 
8
10
  extern int git_settings_global_init(void);
9
11
 
10
- extern const char *git_libgit2__user_agent(void);
11
- extern const char *git_libgit2__ssl_ciphers(void);
12
+ extern const char *git_settings__user_agent(void);
13
+ extern const char *git_settings__user_agent_product(void);
14
+
15
+ #endif
@@ -10,6 +10,7 @@
10
10
  #include "repository.h"
11
11
  #include "git2/common.h"
12
12
  #include "posix.h"
13
+ #include "date.h"
13
14
 
14
15
  void git_signature_free(git_signature *sig)
15
16
  {
@@ -43,7 +44,6 @@ static bool contains_angle_brackets(const char *input)
43
44
  static bool is_crud(unsigned char c)
44
45
  {
45
46
  return c <= 32 ||
46
- c == '.' ||
47
47
  c == ',' ||
48
48
  c == ':' ||
49
49
  c == ';' ||
@@ -153,15 +153,10 @@ int git_signature__pdup(git_signature **dest, const git_signature *source, git_p
153
153
  return 0;
154
154
  }
155
155
 
156
- int git_signature_now(git_signature **sig_out, const char *name, const char *email)
156
+ static void current_time(time_t *now_out, int *offset_out)
157
157
  {
158
- time_t now;
159
158
  time_t offset;
160
- struct tm *utc_tm;
161
- git_signature *sig;
162
- struct tm _utc;
163
-
164
- *sig_out = NULL;
159
+ struct tm _utc, *utc_tm;
165
160
 
166
161
  /*
167
162
  * Get the current time as seconds since the epoch and
@@ -171,18 +166,26 @@ int git_signature_now(git_signature **sig_out, const char *name, const char *ema
171
166
  * us that time as seconds since the epoch. The difference
172
167
  * between its return value and 'now' is our offset to UTC.
173
168
  */
174
- time(&now);
175
- utc_tm = p_gmtime_r(&now, &_utc);
169
+ time(now_out);
170
+ utc_tm = p_gmtime_r(now_out, &_utc);
176
171
  utc_tm->tm_isdst = -1;
177
- offset = (time_t)difftime(now, mktime(utc_tm));
172
+ offset = (time_t)difftime(*now_out, mktime(utc_tm));
178
173
  offset /= 60;
179
174
 
180
- if (git_signature_new(&sig, name, email, now, (int)offset) < 0)
181
- return -1;
175
+ *offset_out = (int)offset;
176
+ }
177
+
178
+ int git_signature_now(
179
+ git_signature **sig_out,
180
+ const char *name,
181
+ const char *email)
182
+ {
183
+ time_t now;
184
+ int offset;
182
185
 
183
- *sig_out = sig;
186
+ current_time(&now, &offset);
184
187
 
185
- return 0;
188
+ return git_signature_new(sig_out, name, email, now, offset);
186
189
  }
187
190
 
188
191
  int git_signature_default(git_signature **out, git_repository *repo)
@@ -202,6 +205,120 @@ int git_signature_default(git_signature **out, git_repository *repo)
202
205
  return error;
203
206
  }
204
207
 
208
+ static int user_from_env(
209
+ git_signature **out,
210
+ git_repository *repo,
211
+ const char *name_env_var,
212
+ const char *email_env_var,
213
+ const char *date_env_var,
214
+ time_t default_time,
215
+ int default_offset)
216
+ {
217
+ int error;
218
+ git_config *cfg;
219
+ const char *name, *email, *date;
220
+ git_time_t timestamp;
221
+ int offset;
222
+ git_str name_env = GIT_STR_INIT;
223
+ git_str email_env = GIT_STR_INIT;
224
+ git_str date_env = GIT_STR_INIT;
225
+
226
+ if ((error = git_repository_config_snapshot(&cfg, repo)) < 0)
227
+ return error;
228
+
229
+ /* Check if the environment variable for the name is set */
230
+ if (!(git__getenv(&name_env, name_env_var))) {
231
+ name = git_str_cstr(&name_env);
232
+ } else {
233
+ /* or else read the configuration value. */
234
+ if ((error = git_config_get_string(&name, cfg, "user.name")) < 0)
235
+ goto done;
236
+ }
237
+
238
+ /* Check if the environment variable for the email is set. */
239
+ if (!(git__getenv(&email_env, email_env_var))) {
240
+ email = git_str_cstr(&email_env);
241
+ } else {
242
+ if ((error = git_config_get_string(&email, cfg, "user.email")) == GIT_ENOTFOUND) {
243
+ git_error *last_error;
244
+
245
+ git_error_save(&last_error);
246
+
247
+ if ((error = git__getenv(&email_env, "EMAIL")) < 0) {
248
+ git_error_restore(last_error);
249
+ error = GIT_ENOTFOUND;
250
+ goto done;
251
+ }
252
+
253
+ email = git_str_cstr(&email_env);
254
+ git_error_free(last_error);
255
+ } else if (error < 0) {
256
+ goto done;
257
+ }
258
+ }
259
+
260
+ /* Check if the environment variable for the timestamp is set */
261
+ if (!(git__getenv(&date_env, date_env_var))) {
262
+ date = git_str_cstr(&date_env);
263
+
264
+ if ((error = git_date_offset_parse(&timestamp, &offset, date)) < 0)
265
+ goto done;
266
+ } else {
267
+ timestamp = default_time;
268
+ offset = default_offset;
269
+ }
270
+
271
+ error = git_signature_new(out, name, email, timestamp, offset);
272
+
273
+ done:
274
+ git_config_free(cfg);
275
+ git_str_dispose(&name_env);
276
+ git_str_dispose(&email_env);
277
+ git_str_dispose(&date_env);
278
+ return error;
279
+ }
280
+
281
+ int git_signature_default_from_env(
282
+ git_signature **author_out,
283
+ git_signature **committer_out,
284
+ git_repository *repo)
285
+ {
286
+ git_signature *author = NULL, *committer = NULL;
287
+ time_t now;
288
+ int offset;
289
+ int error;
290
+
291
+ GIT_ASSERT_ARG(author_out || committer_out);
292
+ GIT_ASSERT_ARG(repo);
293
+
294
+ current_time(&now, &offset);
295
+
296
+ if (author_out &&
297
+ (error = user_from_env(&author, repo, "GIT_AUTHOR_NAME",
298
+ "GIT_AUTHOR_EMAIL", "GIT_AUTHOR_DATE",
299
+ now, offset)) < 0)
300
+ goto on_error;
301
+
302
+ if (committer_out &&
303
+ (error = user_from_env(&committer, repo, "GIT_COMMITTER_NAME",
304
+ "GIT_COMMITTER_EMAIL", "GIT_COMMITTER_DATE",
305
+ now, offset)) < 0)
306
+ goto on_error;
307
+
308
+ if (author_out)
309
+ *author_out = author;
310
+
311
+ if (committer_out)
312
+ *committer_out = committer;
313
+
314
+ return 0;
315
+
316
+ on_error:
317
+ git__free(author);
318
+ git__free(committer);
319
+ return error;
320
+ }
321
+
205
322
  int git_signature__parse(git_signature *sig, const char **buffer_out,
206
323
  const char *buffer_end, const char *header, char ender)
207
324
  {
@@ -17,7 +17,6 @@
17
17
  int git_signature__parse(git_signature *sig, const char **buffer_out, const char *buffer_end, const char *header, char ender);
18
18
  void git_signature__writebuf(git_str *buf, const char *header, const git_signature *sig);
19
19
  bool git_signature__equal(const git_signature *one, const git_signature *two);
20
-
21
20
  int git_signature__pdup(git_signature **dest, const git_signature *source, git_pool *pool);
22
21
 
23
22
  #endif
@@ -414,7 +414,7 @@ void git_status_list_free(git_status_list *status)
414
414
  git_diff_free(status->head2idx);
415
415
  git_diff_free(status->idx2wd);
416
416
 
417
- git_vector_free_deep(&status->paired);
417
+ git_vector_dispose_deep(&status->paired);
418
418
 
419
419
  git__memzero(status, sizeof(*status));
420
420
  git__free(status);