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,70 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_ctype_compat_h__
8
+ #define INCLUDE_ctype_compat_h__
9
+
10
+ /*
11
+ * The Microsoft C runtime (MSVCRT) may take a heavy lock on the
12
+ * locale in order to figure out how the `ctype` functions work.
13
+ * This is deeply slow. Provide our own to avoid that.
14
+ */
15
+
16
+ #ifdef GIT_WIN32
17
+
18
+ GIT_INLINE(int) git__tolower(int c)
19
+ {
20
+ return (c >= 'A' && c <= 'Z') ? (c + 32) : c;
21
+ }
22
+
23
+ GIT_INLINE(int) git__toupper(int c)
24
+ {
25
+ return (c >= 'a' && c <= 'z') ? (c - 32) : c;
26
+ }
27
+
28
+ GIT_INLINE(bool) git__isalpha(int c)
29
+ {
30
+ return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
31
+ }
32
+
33
+ GIT_INLINE(bool) git__isdigit(int c)
34
+ {
35
+ return (c >= '0' && c <= '9');
36
+ }
37
+
38
+ GIT_INLINE(bool) git__isalnum(int c)
39
+ {
40
+ return git__isalpha(c) || git__isdigit(c);
41
+ }
42
+
43
+ GIT_INLINE(bool) git__isspace(int c)
44
+ {
45
+ return (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r' || c == '\v');
46
+ }
47
+
48
+ GIT_INLINE(bool) git__isxdigit(int c)
49
+ {
50
+ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'));
51
+ }
52
+
53
+ GIT_INLINE(bool) git__isprint(int c)
54
+ {
55
+ return (c >= ' ' && c <= '~');
56
+ }
57
+
58
+ #else
59
+ # define git__tolower(a) tolower((unsigned char)(a))
60
+ # define git__toupper(a) toupper((unsigned char)(a))
61
+
62
+ # define git__isalpha(a) (!!isalpha((unsigned char)(a)))
63
+ # define git__isdigit(a) (!!isdigit((unsigned char)(a)))
64
+ # define git__isalnum(a) (!!isalnum((unsigned char)(a)))
65
+ # define git__isspace(a) (!!isspace((unsigned char)(a)))
66
+ # define git__isxdigit(a) (!!isxdigit((unsigned char)(a)))
67
+ # define git__isprint(a) (!!isprint((unsigned char)(a)))
68
+ #endif
69
+
70
+ #endif
@@ -129,9 +129,9 @@ static size_t match_string(const char *date, const char *str)
129
129
  for (i = 0; *date; date++, str++, i++) {
130
130
  if (*date == *str)
131
131
  continue;
132
- if (toupper(*date) == toupper(*str))
132
+ if (git__toupper(*date) == git__toupper(*str))
133
133
  continue;
134
- if (!isalnum(*date))
134
+ if (!git__isalnum(*date))
135
135
  break;
136
136
  return 0;
137
137
  }
@@ -143,7 +143,7 @@ static int skip_alpha(const char *date)
143
143
  int i = 0;
144
144
  do {
145
145
  i++;
146
- } while (isalpha(date[i]));
146
+ } while (git__isalpha(date[i]));
147
147
  return i;
148
148
  }
149
149
 
@@ -251,7 +251,7 @@ static size_t match_multi_number(unsigned long num, char c, const char *date, ch
251
251
 
252
252
  num2 = strtol(end+1, &end, 10);
253
253
  num3 = -1;
254
- if (*end == c && isdigit(end[1]))
254
+ if (*end == c && git__isdigit(end[1]))
255
255
  num3 = strtol(end+1, &end, 10);
256
256
 
257
257
  /* Time? Date? */
@@ -349,7 +349,7 @@ static size_t match_digit(const char *date, struct tm *tm, int *offset, int *tm_
349
349
  case '.':
350
350
  case '/':
351
351
  case '-':
352
- if (isdigit(end[1])) {
352
+ if (git__isdigit(end[1])) {
353
353
  size_t match = match_multi_number(num, *end, date, end, tm);
354
354
  if (match)
355
355
  return match;
@@ -364,7 +364,7 @@ static size_t match_digit(const char *date, struct tm *tm, int *offset, int *tm_
364
364
  n = 0;
365
365
  do {
366
366
  n++;
367
- } while (isdigit(date[n]));
367
+ } while (git__isdigit(date[n]));
368
368
 
369
369
  /* Four-digit year or a timezone? */
370
370
  if (n == 4) {
@@ -514,11 +514,11 @@ static int parse_date_basic(const char *date, git_time_t *timestamp, int *offset
514
514
  if (!c || c == '\n')
515
515
  break;
516
516
 
517
- if (isalpha(c))
517
+ if (git__isalpha(c))
518
518
  match = match_alpha(date, &tm, offset);
519
- else if (isdigit(c))
519
+ else if (git__isdigit(c))
520
520
  match = match_digit(date, &tm, offset, &tm_gmt);
521
- else if ((c == '-' || c == '+') && isdigit(date[1]))
521
+ else if ((c == '-' || c == '+') && git__isdigit(date[1]))
522
522
  match = match_tz(date, offset);
523
523
 
524
524
  if (!match) {
@@ -682,7 +682,7 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
682
682
  const char *end = date;
683
683
  int i;
684
684
 
685
- while (isalpha(*++end))
685
+ while (git__isalpha(*++end))
686
686
  /* scan to non-alpha */;
687
687
 
688
688
  for (i = 0; i < 12; i++) {
@@ -783,7 +783,7 @@ static const char *approxidate_digit(const char *date, struct tm *tm, int *num)
783
783
  case '.':
784
784
  case '/':
785
785
  case '-':
786
- if (isdigit(end[1])) {
786
+ if (git__isdigit(end[1])) {
787
787
  size_t match = match_multi_number(number, *end, date, end, tm);
788
788
  if (match)
789
789
  return date + match;
@@ -843,13 +843,13 @@ static git_time_t approxidate_str(const char *date,
843
843
  if (!c)
844
844
  break;
845
845
  date++;
846
- if (isdigit(c)) {
846
+ if (git__isdigit(c)) {
847
847
  pending_number(&tm, &number);
848
848
  date = approxidate_digit(date-1, &tm, &number);
849
849
  touched = 1;
850
850
  continue;
851
851
  }
852
- if (isalpha(c))
852
+ if (git__isalpha(c))
853
853
  date = approxidate_alpha(date-1, &tm, &now, &number, &touched);
854
854
  }
855
855
  pending_number(&tm, &number);
@@ -858,7 +858,7 @@ static git_time_t approxidate_str(const char *date,
858
858
  return update_tm(&tm, &now, 0);
859
859
  }
860
860
 
861
- int git_date_parse(git_time_t *out, const char *date)
861
+ int git_date_offset_parse(git_time_t *out, int *out_offset, const char *date)
862
862
  {
863
863
  time_t time_sec;
864
864
  git_time_t timestamp;
@@ -866,6 +866,7 @@ int git_date_parse(git_time_t *out, const char *date)
866
866
 
867
867
  if (!parse_date_basic(date, &timestamp, &offset)) {
868
868
  *out = timestamp;
869
+ *out_offset = offset;
869
870
  return 0;
870
871
  }
871
872
 
@@ -876,6 +877,13 @@ int git_date_parse(git_time_t *out, const char *date)
876
877
  return error_ret;
877
878
  }
878
879
 
880
+ int git_date_parse(git_time_t *out, const char *date)
881
+ {
882
+ int offset;
883
+
884
+ return git_date_offset_parse(out, &offset, date);
885
+ }
886
+
879
887
  int git_date_rfc2822_fmt(git_str *out, git_time_t time, int offset)
880
888
  {
881
889
  time_t t;
@@ -10,9 +10,21 @@
10
10
  #include "util.h"
11
11
  #include "str.h"
12
12
 
13
+ /*
14
+ * Parse a string into a value as a git_time_t with a timezone offset.
15
+ *
16
+ * Sample valid input:
17
+ * - "yesterday"
18
+ * - "July 17, 2003"
19
+ * - "2003-7-17 08:23i+03"
20
+ */
21
+ extern int git_date_offset_parse(git_time_t *out, int *out_offset, const char *date);
22
+
13
23
  /*
14
24
  * Parse a string into a value as a git_time_t.
15
25
  *
26
+ * Timezone offset is ignored.
27
+ *
16
28
  * Sample valid input:
17
29
  * - "yesterday"
18
30
  * - "July 17, 2003"
@@ -0,0 +1,401 @@
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 "git2_util.h"
9
+
10
+ #include "errors.h"
11
+ #include "posix.h"
12
+ #include "str.h"
13
+ #include "runtime.h"
14
+
15
+ /*
16
+ * Some static error data that is used when we're out of memory, TLS
17
+ * has not been setup, or TLS has failed.
18
+ */
19
+
20
+ static git_error oom_error = {
21
+ "Out of memory",
22
+ GIT_ERROR_NOMEMORY
23
+ };
24
+
25
+ static git_error uninitialized_error = {
26
+ "library has not been initialized",
27
+ GIT_ERROR_INVALID
28
+ };
29
+
30
+ static git_error tlsdata_error = {
31
+ "thread-local data initialization failure",
32
+ GIT_ERROR_THREAD
33
+ };
34
+
35
+ static git_error no_error = {
36
+ "no error",
37
+ GIT_ERROR_NONE
38
+ };
39
+
40
+ #define IS_STATIC_ERROR(err) \
41
+ ((err) == &oom_error || (err) == &uninitialized_error || \
42
+ (err) == &tlsdata_error || (err) == &no_error)
43
+
44
+ /* Per-thread error state (TLS) */
45
+
46
+ static git_tlsdata_key tls_key;
47
+
48
+ struct error_threadstate {
49
+ /* The error message buffer. */
50
+ git_str message;
51
+
52
+ /* Error information, set by `git_error_set` and friends. */
53
+ git_error error;
54
+
55
+ /*
56
+ * The last error to occur; points to the error member of this
57
+ * struct _or_ a static error.
58
+ */
59
+ git_error *last;
60
+ };
61
+
62
+ static void threadstate_dispose(struct error_threadstate *threadstate)
63
+ {
64
+ if (!threadstate)
65
+ return;
66
+
67
+ git_str_dispose(&threadstate->message);
68
+ }
69
+
70
+ static struct error_threadstate *threadstate_get(void)
71
+ {
72
+ struct error_threadstate *threadstate;
73
+
74
+ if ((threadstate = git_tlsdata_get(tls_key)) != NULL)
75
+ return threadstate;
76
+
77
+ /*
78
+ * Avoid git__malloc here, since if it fails, it sets an error
79
+ * message, which requires thread state, which would allocate
80
+ * here, which would fail, which would set an error message...
81
+ */
82
+
83
+ if ((threadstate = git__allocator.gmalloc(
84
+ sizeof(struct error_threadstate),
85
+ __FILE__, __LINE__)) == NULL)
86
+ return NULL;
87
+
88
+ memset(threadstate, 0, sizeof(struct error_threadstate));
89
+
90
+ if (git_str_init(&threadstate->message, 0) < 0) {
91
+ git__allocator.gfree(threadstate);
92
+ return NULL;
93
+ }
94
+
95
+ git_tlsdata_set(tls_key, threadstate);
96
+ return threadstate;
97
+ }
98
+
99
+ static void GIT_SYSTEM_CALL threadstate_free(void *threadstate)
100
+ {
101
+ threadstate_dispose(threadstate);
102
+ git__free(threadstate);
103
+ }
104
+
105
+ static void git_error_global_shutdown(void)
106
+ {
107
+ struct error_threadstate *threadstate;
108
+
109
+ threadstate = git_tlsdata_get(tls_key);
110
+ git_tlsdata_set(tls_key, NULL);
111
+
112
+ threadstate_dispose(threadstate);
113
+ git__free(threadstate);
114
+
115
+ git_tlsdata_dispose(tls_key);
116
+ }
117
+
118
+ int git_error_global_init(void)
119
+ {
120
+ if (git_tlsdata_init(&tls_key, &threadstate_free) != 0)
121
+ return -1;
122
+
123
+ return git_runtime_shutdown_register(git_error_global_shutdown);
124
+ }
125
+
126
+ static void set_error_from_buffer(int error_class)
127
+ {
128
+ struct error_threadstate *threadstate = threadstate_get();
129
+ git_error *error;
130
+ git_str *buf;
131
+
132
+ if (!threadstate)
133
+ return;
134
+
135
+ error = &threadstate->error;
136
+ buf = &threadstate->message;
137
+
138
+ error->message = buf->ptr;
139
+ error->klass = error_class;
140
+
141
+ threadstate->last = error;
142
+ }
143
+
144
+ static void set_error(int error_class, char *string)
145
+ {
146
+ struct error_threadstate *threadstate = threadstate_get();
147
+ git_str *buf;
148
+
149
+ if (!threadstate)
150
+ return;
151
+
152
+ buf = &threadstate->message;
153
+
154
+ git_str_clear(buf);
155
+
156
+ if (string)
157
+ git_str_puts(buf, string);
158
+
159
+ if (!git_str_oom(buf))
160
+ set_error_from_buffer(error_class);
161
+ }
162
+
163
+ void git_error_set_oom(void)
164
+ {
165
+ struct error_threadstate *threadstate = threadstate_get();
166
+
167
+ if (!threadstate)
168
+ return;
169
+
170
+ threadstate->last = &oom_error;
171
+ }
172
+
173
+ void git_error_set(int error_class, const char *fmt, ...)
174
+ {
175
+ va_list ap;
176
+
177
+ va_start(ap, fmt);
178
+ git_error_vset(error_class, fmt, ap);
179
+ va_end(ap);
180
+ }
181
+
182
+ void git_error_vset(int error_class, const char *fmt, va_list ap)
183
+ {
184
+ #ifdef GIT_WIN32
185
+ DWORD win32_error_code = (error_class == GIT_ERROR_OS) ? GetLastError() : 0;
186
+ #endif
187
+
188
+ struct error_threadstate *threadstate = threadstate_get();
189
+ int error_code = (error_class == GIT_ERROR_OS) ? errno : 0;
190
+ git_str *buf;
191
+
192
+ if (!threadstate)
193
+ return;
194
+
195
+ buf = &threadstate->message;
196
+
197
+ git_str_clear(buf);
198
+
199
+ if (fmt) {
200
+ git_str_vprintf(buf, fmt, ap);
201
+ if (error_class == GIT_ERROR_OS)
202
+ git_str_PUTS(buf, ": ");
203
+ }
204
+
205
+ if (error_class == GIT_ERROR_OS) {
206
+ #ifdef GIT_WIN32
207
+ char *win32_error = git_win32_get_error_message(win32_error_code);
208
+ if (win32_error) {
209
+ git_str_puts(buf, win32_error);
210
+ git__free(win32_error);
211
+
212
+ SetLastError(0);
213
+ }
214
+ else
215
+ #endif
216
+ if (error_code)
217
+ git_str_puts(buf, strerror(error_code));
218
+
219
+ if (error_code)
220
+ errno = 0;
221
+ }
222
+
223
+ if (!git_str_oom(buf))
224
+ set_error_from_buffer(error_class);
225
+ }
226
+
227
+ int git_error_set_str(int error_class, const char *string)
228
+ {
229
+ struct error_threadstate *threadstate = threadstate_get();
230
+ git_str *buf;
231
+
232
+ GIT_ASSERT_ARG(string);
233
+
234
+ if (!threadstate)
235
+ return -1;
236
+
237
+ buf = &threadstate->message;
238
+
239
+ git_str_clear(buf);
240
+ git_str_puts(buf, string);
241
+
242
+ if (git_str_oom(buf))
243
+ return -1;
244
+
245
+ set_error_from_buffer(error_class);
246
+ return 0;
247
+ }
248
+
249
+ void git_error_clear(void)
250
+ {
251
+ struct error_threadstate *threadstate = threadstate_get();
252
+
253
+ if (!threadstate)
254
+ return;
255
+
256
+ if (threadstate->last != NULL) {
257
+ set_error(0, NULL);
258
+ threadstate->last = NULL;
259
+ }
260
+
261
+ errno = 0;
262
+ #ifdef GIT_WIN32
263
+ SetLastError(0);
264
+ #endif
265
+ }
266
+
267
+ bool git_error_exists(void)
268
+ {
269
+ struct error_threadstate *threadstate;
270
+
271
+ if ((threadstate = threadstate_get()) == NULL)
272
+ return true;
273
+
274
+ return threadstate->last != NULL;
275
+ }
276
+
277
+ const git_error *git_error_last(void)
278
+ {
279
+ struct error_threadstate *threadstate;
280
+
281
+ /* If the library is not initialized, return a static error. */
282
+ if (!git_runtime_init_count())
283
+ return &uninitialized_error;
284
+
285
+ if ((threadstate = threadstate_get()) == NULL)
286
+ return &tlsdata_error;
287
+
288
+ if (!threadstate->last)
289
+ return &no_error;
290
+
291
+ return threadstate->last;
292
+ }
293
+
294
+ int git_error_save(git_error **out)
295
+ {
296
+ struct error_threadstate *threadstate = threadstate_get();
297
+ git_error *error, *dup;
298
+
299
+ if (!threadstate) {
300
+ *out = &tlsdata_error;
301
+ return -1;
302
+ }
303
+
304
+ error = threadstate->last;
305
+
306
+ if (!error || error == &no_error) {
307
+ *out = &no_error;
308
+ return 0;
309
+ } else if (IS_STATIC_ERROR(error)) {
310
+ *out = error;
311
+ return 0;
312
+ }
313
+
314
+ if ((dup = git__malloc(sizeof(git_error))) == NULL) {
315
+ *out = &oom_error;
316
+ return -1;
317
+ }
318
+
319
+ dup->klass = error->klass;
320
+ dup->message = git__strdup(error->message);
321
+
322
+ if (!dup->message) {
323
+ *out = &oom_error;
324
+ return -1;
325
+ }
326
+
327
+ *out = dup;
328
+ return 0;
329
+ }
330
+
331
+ int git_error_restore(git_error *error)
332
+ {
333
+ struct error_threadstate *threadstate = threadstate_get();
334
+
335
+ GIT_ASSERT_ARG(error);
336
+
337
+ if (IS_STATIC_ERROR(error) && threadstate)
338
+ threadstate->last = error;
339
+ else
340
+ set_error(error->klass, error->message);
341
+
342
+ git_error_free(error);
343
+ return 0;
344
+ }
345
+
346
+ void git_error_free(git_error *error)
347
+ {
348
+ if (!error)
349
+ return;
350
+
351
+ if (IS_STATIC_ERROR(error))
352
+ return;
353
+
354
+ git__free(error->message);
355
+ git__free(error);
356
+ }
357
+
358
+ int git_error_system_last(void)
359
+ {
360
+ #ifdef GIT_WIN32
361
+ return GetLastError();
362
+ #else
363
+ return errno;
364
+ #endif
365
+ }
366
+
367
+ void git_error_system_set(int code)
368
+ {
369
+ #ifdef GIT_WIN32
370
+ SetLastError(code);
371
+ #else
372
+ errno = code;
373
+ #endif
374
+ }
375
+
376
+ /* Deprecated error values and functions */
377
+
378
+ #ifndef GIT_DEPRECATE_HARD
379
+
380
+ #include "git2/deprecated.h"
381
+
382
+ const git_error *giterr_last(void)
383
+ {
384
+ return git_error_last();
385
+ }
386
+
387
+ void giterr_clear(void)
388
+ {
389
+ git_error_clear();
390
+ }
391
+
392
+ void giterr_set_str(int error_class, const char *string)
393
+ {
394
+ git_error_set_str(error_class, string);
395
+ }
396
+
397
+ void giterr_set_oom(void)
398
+ {
399
+ git_error_set_oom();
400
+ }
401
+ #endif
@@ -8,13 +8,22 @@
8
8
  #ifndef INCLUDE_errors_h__
9
9
  #define INCLUDE_errors_h__
10
10
 
11
- #include "common.h"
11
+ #include "git2_util.h"
12
+ #include "git2/sys/errors.h"
13
+
14
+ /* Initialize the error thread-state. */
15
+ int git_error_global_init(void);
12
16
 
13
17
  /*
14
18
  * `vprintf`-style formatting for the error message for this thread.
15
19
  */
16
20
  void git_error_vset(int error_class, const char *fmt, va_list ap);
17
21
 
22
+ /**
23
+ * Determines whether an error exists.
24
+ */
25
+ bool git_error_exists(void);
26
+
18
27
  /**
19
28
  * Set error message for user callback if needed.
20
29
  *
@@ -27,9 +36,8 @@ GIT_INLINE(int) git_error_set_after_callback_function(
27
36
  int error_code, const char *action)
28
37
  {
29
38
  if (error_code) {
30
- const git_error *e = git_error_last();
31
- if (!e || !e->message)
32
- git_error_set(e ? e->klass : GIT_ERROR_CALLBACK,
39
+ if (!git_error_exists())
40
+ git_error_set(GIT_ERROR_CALLBACK,
33
41
  "%s callback returned %d", action, error_code);
34
42
  }
35
43
  return error_code;
@@ -53,28 +61,24 @@ int git_error_system_last(void);
53
61
  */
54
62
  void git_error_system_set(int code);
55
63
 
56
- /**
57
- * Structure to preserve libgit2 error state
58
- */
59
- typedef struct {
60
- int error_code;
61
- unsigned int oom : 1;
62
- git_error error_msg;
63
- } git_error_state;
64
-
65
64
  /**
66
65
  * Capture current error state to restore later, returning error code.
67
66
  * If `error_code` is zero, this does not clear the current error state.
68
67
  * You must either restore this error state, or free it.
68
+ *
69
+ * This function returns 0 on success, or -1 on failure. If the function
70
+ * fails, the `out` structure is set to the failure error message and
71
+ * the normal system error message is not updated.
69
72
  */
70
- extern int git_error_state_capture(git_error_state *state, int error_code);
73
+ extern int git_error_save(git_error **out);
71
74
 
72
75
  /**
73
- * Restore error state to a previous value, returning saved error code.
76
+ * Restore thread error state to the given value. The given value is
77
+ * freed and `git_error_free` need not be called on it.
74
78
  */
75
- extern int git_error_state_restore(git_error_state *state);
79
+ extern int git_error_restore(git_error *error);
76
80
 
77
81
  /** Free an error state. */
78
- extern void git_error_state_free(git_error_state *state);
82
+ extern void git_error_free(git_error *error);
79
83
 
80
84
  #endif
@@ -302,11 +302,16 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
302
302
  }
303
303
 
304
304
  /* If we are hashing on-write, allocate a new hash context */
305
- if (flags & GIT_FILEBUF_HASH_CONTENTS) {
305
+ if (flags & GIT_FILEBUF_HASH_SHA1) {
306
306
  file->compute_digest = 1;
307
307
 
308
308
  if (git_hash_ctx_init(&file->digest, GIT_HASH_ALGORITHM_SHA1) < 0)
309
309
  goto cleanup;
310
+ } else if (flags & GIT_FILEBUF_HASH_SHA256) {
311
+ file->compute_digest = 1;
312
+
313
+ if (git_hash_ctx_init(&file->digest, GIT_HASH_ALGORITHM_SHA256) < 0)
314
+ goto cleanup;
310
315
  }
311
316
 
312
317
  compression = flags >> GIT_FILEBUF_DEFLATE_SHIFT;