rugged 1.6.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -0,0 +1,468 @@
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 bool git_disable_pack_keep_file_checks;
48
+ extern int git_odb__packed_priority;
49
+ extern int git_odb__loose_priority;
50
+ extern int git_socket_stream__connect_timeout;
51
+ extern int git_socket_stream__timeout;
52
+
53
+ char *git__user_agent;
54
+ char *git__user_agent_product;
55
+ char *git__ssl_ciphers;
56
+
57
+ static void settings_global_shutdown(void)
58
+ {
59
+ git__free(git__user_agent);
60
+ git__free(git__user_agent_product);
61
+
62
+ git__free(git__ssl_ciphers);
63
+ git_repository__free_extensions();
64
+ }
65
+
66
+ int git_settings_global_init(void)
67
+ {
68
+ return git_runtime_shutdown_register(settings_global_shutdown);
69
+ }
70
+
71
+ static int config_level_to_sysdir(int *out, int config_level)
72
+ {
73
+ switch (config_level) {
74
+ case GIT_CONFIG_LEVEL_SYSTEM:
75
+ *out = GIT_SYSDIR_SYSTEM;
76
+ return 0;
77
+ case GIT_CONFIG_LEVEL_XDG:
78
+ *out = GIT_SYSDIR_XDG;
79
+ return 0;
80
+ case GIT_CONFIG_LEVEL_GLOBAL:
81
+ *out = GIT_SYSDIR_GLOBAL;
82
+ return 0;
83
+ case GIT_CONFIG_LEVEL_PROGRAMDATA:
84
+ *out = GIT_SYSDIR_PROGRAMDATA;
85
+ return 0;
86
+ default:
87
+ break;
88
+ }
89
+
90
+ git_error_set(
91
+ GIT_ERROR_INVALID, "invalid config path selector %d", config_level);
92
+ return -1;
93
+ }
94
+
95
+ const char *git_settings__user_agent_product(void)
96
+ {
97
+ return git__user_agent_product ? git__user_agent_product :
98
+ "git/2.0";
99
+ }
100
+
101
+ const char *git_settings__user_agent(void)
102
+ {
103
+ return git__user_agent ? git__user_agent :
104
+ "libgit2 " LIBGIT2_VERSION;
105
+ }
106
+
107
+ int git_libgit2_opts(int key, ...)
108
+ {
109
+ int error = 0;
110
+ va_list ap;
111
+
112
+ va_start(ap, key);
113
+
114
+ switch (key) {
115
+ case GIT_OPT_SET_MWINDOW_SIZE:
116
+ git_mwindow__window_size = va_arg(ap, size_t);
117
+ break;
118
+
119
+ case GIT_OPT_GET_MWINDOW_SIZE:
120
+ *(va_arg(ap, size_t *)) = git_mwindow__window_size;
121
+ break;
122
+
123
+ case GIT_OPT_SET_MWINDOW_MAPPED_LIMIT:
124
+ git_mwindow__mapped_limit = va_arg(ap, size_t);
125
+ break;
126
+
127
+ case GIT_OPT_GET_MWINDOW_MAPPED_LIMIT:
128
+ *(va_arg(ap, size_t *)) = git_mwindow__mapped_limit;
129
+ break;
130
+
131
+ case GIT_OPT_SET_MWINDOW_FILE_LIMIT:
132
+ git_mwindow__file_limit = va_arg(ap, size_t);
133
+ break;
134
+
135
+ case GIT_OPT_GET_MWINDOW_FILE_LIMIT:
136
+ *(va_arg(ap, size_t *)) = git_mwindow__file_limit;
137
+ break;
138
+
139
+ case GIT_OPT_GET_SEARCH_PATH:
140
+ {
141
+ int sysdir = va_arg(ap, int);
142
+ git_buf *out = va_arg(ap, git_buf *);
143
+ git_str str = GIT_STR_INIT;
144
+ const git_str *tmp;
145
+ int level;
146
+
147
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
148
+ (error = config_level_to_sysdir(&level, sysdir)) < 0 ||
149
+ (error = git_sysdir_get(&tmp, level)) < 0 ||
150
+ (error = git_str_put(&str, tmp->ptr, tmp->size)) < 0)
151
+ break;
152
+
153
+ error = git_buf_fromstr(out, &str);
154
+ }
155
+ break;
156
+
157
+ case GIT_OPT_SET_SEARCH_PATH:
158
+ {
159
+ int level;
160
+
161
+ if ((error = config_level_to_sysdir(&level, va_arg(ap, int))) >= 0)
162
+ error = git_sysdir_set(level, va_arg(ap, const char *));
163
+ }
164
+ break;
165
+
166
+ case GIT_OPT_SET_CACHE_OBJECT_LIMIT:
167
+ {
168
+ git_object_t type = (git_object_t)va_arg(ap, int);
169
+ size_t size = va_arg(ap, size_t);
170
+ error = git_cache_set_max_object_size(type, size);
171
+ break;
172
+ }
173
+
174
+ case GIT_OPT_SET_CACHE_MAX_SIZE:
175
+ git_cache__max_storage = va_arg(ap, ssize_t);
176
+ break;
177
+
178
+ case GIT_OPT_ENABLE_CACHING:
179
+ git_cache__enabled = (va_arg(ap, int) != 0);
180
+ break;
181
+
182
+ case GIT_OPT_GET_CACHED_MEMORY:
183
+ *(va_arg(ap, ssize_t *)) = git_cache__current_storage.val;
184
+ *(va_arg(ap, ssize_t *)) = git_cache__max_storage;
185
+ break;
186
+
187
+ case GIT_OPT_GET_TEMPLATE_PATH:
188
+ {
189
+ git_buf *out = va_arg(ap, git_buf *);
190
+ git_str str = GIT_STR_INIT;
191
+ const git_str *tmp;
192
+
193
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
194
+ (error = git_sysdir_get(&tmp, GIT_SYSDIR_TEMPLATE)) < 0 ||
195
+ (error = git_str_put(&str, tmp->ptr, tmp->size)) < 0)
196
+ break;
197
+
198
+ error = git_buf_fromstr(out, &str);
199
+ }
200
+ break;
201
+
202
+ case GIT_OPT_SET_TEMPLATE_PATH:
203
+ error = git_sysdir_set(GIT_SYSDIR_TEMPLATE, va_arg(ap, const char *));
204
+ break;
205
+
206
+ case GIT_OPT_SET_SSL_CERT_LOCATIONS:
207
+ #ifdef GIT_OPENSSL
208
+ {
209
+ const char *file = va_arg(ap, const char *);
210
+ const char *path = va_arg(ap, const char *);
211
+ error = git_openssl__set_cert_location(file, path);
212
+ }
213
+ #elif defined(GIT_MBEDTLS)
214
+ {
215
+ const char *file = va_arg(ap, const char *);
216
+ const char *path = va_arg(ap, const char *);
217
+ error = git_mbedtls__set_cert_location(file, path);
218
+ }
219
+ #else
220
+ git_error_set(GIT_ERROR_SSL, "TLS backend doesn't support certificate locations");
221
+ error = -1;
222
+ #endif
223
+ break;
224
+
225
+ case GIT_OPT_ADD_SSL_X509_CERT:
226
+ #ifdef GIT_OPENSSL
227
+ {
228
+ X509 *cert = va_arg(ap, X509 *);
229
+ error = git_openssl__add_x509_cert(cert);
230
+ }
231
+ #else
232
+ git_error_set(GIT_ERROR_SSL, "TLS backend doesn't support adding of the raw certs");
233
+ error = -1;
234
+ #endif
235
+ break;
236
+
237
+ case GIT_OPT_SET_USER_AGENT:
238
+ {
239
+ const char *new_agent = va_arg(ap, const char *);
240
+
241
+ git__free(git__user_agent);
242
+
243
+ if (new_agent) {
244
+ git__user_agent= git__strdup(new_agent);
245
+
246
+ if (!git__user_agent)
247
+ error = -1;
248
+ } else {
249
+ git__user_agent = NULL;
250
+ }
251
+ }
252
+ break;
253
+
254
+ case GIT_OPT_GET_USER_AGENT:
255
+ {
256
+ git_buf *out = va_arg(ap, git_buf *);
257
+ git_str str = GIT_STR_INIT;
258
+
259
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
260
+ (error = git_str_puts(&str, git_settings__user_agent())) < 0)
261
+ break;
262
+
263
+ error = git_buf_fromstr(out, &str);
264
+ }
265
+ break;
266
+
267
+ case GIT_OPT_SET_USER_AGENT_PRODUCT:
268
+ {
269
+ const char *new_agent = va_arg(ap, const char *);
270
+
271
+ git__free(git__user_agent_product);
272
+
273
+ if (new_agent) {
274
+ git__user_agent_product = git__strdup(new_agent);
275
+
276
+ if (!git__user_agent_product)
277
+ error = -1;
278
+ } else {
279
+ git__user_agent_product = NULL;
280
+ }
281
+ }
282
+ break;
283
+
284
+ case GIT_OPT_GET_USER_AGENT_PRODUCT:
285
+ {
286
+ git_buf *out = va_arg(ap, git_buf *);
287
+ git_str str = GIT_STR_INIT;
288
+
289
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
290
+ (error = git_str_puts(&str, git_settings__user_agent_product())) < 0)
291
+ break;
292
+
293
+ error = git_buf_fromstr(out, &str);
294
+ }
295
+ break;
296
+
297
+ case GIT_OPT_ENABLE_STRICT_OBJECT_CREATION:
298
+ git_object__strict_input_validation = (va_arg(ap, int) != 0);
299
+ break;
300
+
301
+ case GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION:
302
+ git_reference__enable_symbolic_ref_target_validation = (va_arg(ap, int) != 0);
303
+ break;
304
+
305
+ case GIT_OPT_SET_SSL_CIPHERS:
306
+ #if (GIT_OPENSSL || GIT_MBEDTLS)
307
+ {
308
+ git__free(git__ssl_ciphers);
309
+ git__ssl_ciphers = git__strdup(va_arg(ap, const char *));
310
+ if (!git__ssl_ciphers) {
311
+ git_error_set_oom();
312
+ error = -1;
313
+ }
314
+ }
315
+ #else
316
+ git_error_set(GIT_ERROR_SSL, "TLS backend doesn't support custom ciphers");
317
+ error = -1;
318
+ #endif
319
+ break;
320
+
321
+ case GIT_OPT_ENABLE_OFS_DELTA:
322
+ git_smart__ofs_delta_enabled = (va_arg(ap, int) != 0);
323
+ break;
324
+
325
+ case GIT_OPT_ENABLE_FSYNC_GITDIR:
326
+ git_repository__fsync_gitdir = (va_arg(ap, int) != 0);
327
+ break;
328
+
329
+ case GIT_OPT_GET_WINDOWS_SHAREMODE:
330
+ #ifdef GIT_WIN32
331
+ *(va_arg(ap, unsigned long *)) = git_win32__createfile_sharemode;
332
+ #endif
333
+ break;
334
+
335
+ case GIT_OPT_SET_WINDOWS_SHAREMODE:
336
+ #ifdef GIT_WIN32
337
+ git_win32__createfile_sharemode = va_arg(ap, unsigned long);
338
+ #endif
339
+ break;
340
+
341
+ case GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION:
342
+ git_odb__strict_hash_verification = (va_arg(ap, int) != 0);
343
+ break;
344
+
345
+ case GIT_OPT_SET_ALLOCATOR:
346
+ error = git_allocator_setup(va_arg(ap, git_allocator *));
347
+ break;
348
+
349
+ case GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY:
350
+ git_index__enforce_unsaved_safety = (va_arg(ap, int) != 0);
351
+ break;
352
+
353
+ case GIT_OPT_SET_PACK_MAX_OBJECTS:
354
+ git_indexer__max_objects = va_arg(ap, size_t);
355
+ break;
356
+
357
+ case GIT_OPT_GET_PACK_MAX_OBJECTS:
358
+ *(va_arg(ap, size_t *)) = git_indexer__max_objects;
359
+ break;
360
+
361
+ case GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS:
362
+ git_disable_pack_keep_file_checks = (va_arg(ap, int) != 0);
363
+ break;
364
+
365
+ case GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE:
366
+ git_http__expect_continue = (va_arg(ap, int) != 0);
367
+ break;
368
+
369
+ case GIT_OPT_SET_ODB_PACKED_PRIORITY:
370
+ git_odb__packed_priority = va_arg(ap, int);
371
+ break;
372
+
373
+ case GIT_OPT_SET_ODB_LOOSE_PRIORITY:
374
+ git_odb__loose_priority = va_arg(ap, int);
375
+ break;
376
+
377
+ case GIT_OPT_SET_EXTENSIONS:
378
+ {
379
+ const char **extensions = va_arg(ap, const char **);
380
+ size_t len = va_arg(ap, size_t);
381
+ error = git_repository__set_extensions(extensions, len);
382
+ }
383
+ break;
384
+
385
+ case GIT_OPT_GET_EXTENSIONS:
386
+ {
387
+ git_strarray *out = va_arg(ap, git_strarray *);
388
+ char **extensions;
389
+ size_t len;
390
+
391
+ if ((error = git_repository__extensions(&extensions, &len)) < 0)
392
+ break;
393
+
394
+ out->strings = extensions;
395
+ out->count = len;
396
+ }
397
+ break;
398
+
399
+ case GIT_OPT_GET_OWNER_VALIDATION:
400
+ *(va_arg(ap, int *)) = git_repository__validate_ownership;
401
+ break;
402
+
403
+ case GIT_OPT_SET_OWNER_VALIDATION:
404
+ git_repository__validate_ownership = (va_arg(ap, int) != 0);
405
+ break;
406
+
407
+ case GIT_OPT_GET_HOMEDIR:
408
+ {
409
+ git_buf *out = va_arg(ap, git_buf *);
410
+ git_str str = GIT_STR_INIT;
411
+ const git_str *tmp;
412
+
413
+ if ((error = git_buf_tostr(&str, out)) < 0 ||
414
+ (error = git_sysdir_get(&tmp, GIT_SYSDIR_HOME)) < 0 ||
415
+ (error = git_str_put(&str, tmp->ptr, tmp->size)) < 0)
416
+ break;
417
+
418
+ error = git_buf_fromstr(out, &str);
419
+ }
420
+ break;
421
+
422
+ case GIT_OPT_SET_HOMEDIR:
423
+ error = git_sysdir_set(GIT_SYSDIR_HOME, va_arg(ap, const char *));
424
+ break;
425
+
426
+ case GIT_OPT_GET_SERVER_CONNECT_TIMEOUT:
427
+ *(va_arg(ap, int *)) = git_socket_stream__connect_timeout;
428
+ break;
429
+
430
+ case GIT_OPT_SET_SERVER_CONNECT_TIMEOUT:
431
+ {
432
+ int timeout = va_arg(ap, int);
433
+
434
+ if (timeout < 0) {
435
+ git_error_set(GIT_ERROR_INVALID, "invalid connect timeout");
436
+ error = -1;
437
+ } else {
438
+ git_socket_stream__connect_timeout = timeout;
439
+ }
440
+ }
441
+ break;
442
+
443
+ case GIT_OPT_GET_SERVER_TIMEOUT:
444
+ *(va_arg(ap, int *)) = git_socket_stream__timeout;
445
+ break;
446
+
447
+ case GIT_OPT_SET_SERVER_TIMEOUT:
448
+ {
449
+ int timeout = va_arg(ap, int);
450
+
451
+ if (timeout < 0) {
452
+ git_error_set(GIT_ERROR_INVALID, "invalid timeout");
453
+ error = -1;
454
+ } else {
455
+ git_socket_stream__timeout = timeout;
456
+ }
457
+ }
458
+ break;
459
+
460
+ default:
461
+ git_error_set(GIT_ERROR_INVALID, "invalid option key");
462
+ error = -1;
463
+ }
464
+
465
+ va_end(ap);
466
+
467
+ return error;
468
+ }
@@ -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