rugged 0.27.7 → 0.27.10

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 (409) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +99 -51
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  8. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  9. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  10. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  11. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  12. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  13. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
  14. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  15. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  16. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  17. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  18. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  19. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  20. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  21. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  82. data/vendor/libgit2/include/git2/apply.h +149 -0
  83. data/vendor/libgit2/include/git2/attr.h +20 -13
  84. data/vendor/libgit2/include/git2/blame.h +4 -4
  85. data/vendor/libgit2/include/git2/blob.h +44 -12
  86. data/vendor/libgit2/include/git2/buffer.h +20 -26
  87. data/vendor/libgit2/include/git2/cert.h +135 -0
  88. data/vendor/libgit2/include/git2/checkout.h +53 -21
  89. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  90. data/vendor/libgit2/include/git2/clone.h +5 -5
  91. data/vendor/libgit2/include/git2/commit.h +25 -3
  92. data/vendor/libgit2/include/git2/common.h +35 -10
  93. data/vendor/libgit2/include/git2/config.h +29 -19
  94. data/vendor/libgit2/include/git2/cred.h +308 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  96. data/vendor/libgit2/include/git2/describe.h +4 -4
  97. data/vendor/libgit2/include/git2/diff.h +177 -135
  98. data/vendor/libgit2/include/git2/errors.h +53 -46
  99. data/vendor/libgit2/include/git2/filter.h +8 -0
  100. data/vendor/libgit2/include/git2/index.h +74 -52
  101. data/vendor/libgit2/include/git2/indexer.h +76 -6
  102. data/vendor/libgit2/include/git2/merge.h +25 -10
  103. data/vendor/libgit2/include/git2/net.h +0 -5
  104. data/vendor/libgit2/include/git2/notes.h +1 -1
  105. data/vendor/libgit2/include/git2/object.h +17 -29
  106. data/vendor/libgit2/include/git2/odb.h +12 -11
  107. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  108. data/vendor/libgit2/include/git2/oid.h +2 -2
  109. data/vendor/libgit2/include/git2/pack.h +14 -3
  110. data/vendor/libgit2/include/git2/proxy.h +5 -3
  111. data/vendor/libgit2/include/git2/rebase.h +46 -2
  112. data/vendor/libgit2/include/git2/refs.h +34 -16
  113. data/vendor/libgit2/include/git2/remote.h +111 -14
  114. data/vendor/libgit2/include/git2/repository.h +69 -34
  115. data/vendor/libgit2/include/git2/revert.h +1 -1
  116. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  117. data/vendor/libgit2/include/git2/signature.h +2 -2
  118. data/vendor/libgit2/include/git2/stash.h +5 -5
  119. data/vendor/libgit2/include/git2/status.h +26 -17
  120. data/vendor/libgit2/include/git2/submodule.h +23 -6
  121. data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
  122. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  123. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  124. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  125. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  126. data/vendor/libgit2/include/git2/sys/merge.h +3 -3
  127. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  128. data/vendor/libgit2/include/git2/sys/path.h +14 -5
  129. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  130. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  131. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  132. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  133. data/vendor/libgit2/include/git2/tag.h +13 -4
  134. data/vendor/libgit2/include/git2/trace.h +2 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -311
  136. data/vendor/libgit2/include/git2/tree.h +4 -4
  137. data/vendor/libgit2/include/git2/types.h +25 -106
  138. data/vendor/libgit2/include/git2/version.h +3 -3
  139. data/vendor/libgit2/include/git2/worktree.h +5 -5
  140. data/vendor/libgit2/include/git2.h +4 -0
  141. data/vendor/libgit2/src/CMakeLists.txt +104 -235
  142. data/vendor/libgit2/src/alloc.c +14 -18
  143. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
  144. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  145. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  146. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  147. data/vendor/libgit2/src/annotated_commit.c +18 -11
  148. data/vendor/libgit2/src/apply.c +535 -28
  149. data/vendor/libgit2/src/apply.h +3 -1
  150. data/vendor/libgit2/src/array.h +2 -2
  151. data/vendor/libgit2/src/attr.c +77 -71
  152. data/vendor/libgit2/src/attr_file.c +203 -117
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +49 -51
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +38 -18
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +29 -15
  159. data/vendor/libgit2/src/blob.c +123 -37
  160. data/vendor/libgit2/src/blob.h +19 -2
  161. data/vendor/libgit2/src/branch.c +47 -23
  162. data/vendor/libgit2/src/buf_text.c +7 -6
  163. data/vendor/libgit2/src/buffer.c +60 -53
  164. data/vendor/libgit2/src/cache.c +38 -45
  165. data/vendor/libgit2/src/cache.h +3 -3
  166. data/vendor/libgit2/src/cc-compat.h +20 -3
  167. data/vendor/libgit2/src/checkout.c +77 -67
  168. data/vendor/libgit2/src/cherrypick.c +12 -6
  169. data/vendor/libgit2/src/clone.c +36 -14
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +103 -48
  172. data/vendor/libgit2/src/commit.h +7 -0
  173. data/vendor/libgit2/src/commit_list.c +36 -78
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +24 -90
  176. data/vendor/libgit2/src/config.c +203 -176
  177. data/vendor/libgit2/src/config.h +8 -20
  178. data/vendor/libgit2/src/config_backend.h +96 -0
  179. data/vendor/libgit2/src/config_cache.c +41 -35
  180. data/vendor/libgit2/src/config_entries.c +229 -0
  181. data/vendor/libgit2/src/config_entries.h +24 -0
  182. data/vendor/libgit2/src/config_file.c +422 -680
  183. data/vendor/libgit2/src/config_mem.c +220 -0
  184. data/vendor/libgit2/src/config_parse.c +96 -68
  185. data/vendor/libgit2/src/config_parse.h +15 -14
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +219 -196
  188. data/vendor/libgit2/src/delta.c +25 -18
  189. data/vendor/libgit2/src/describe.c +42 -41
  190. data/vendor/libgit2/src/diff.c +52 -67
  191. data/vendor/libgit2/src/diff.h +2 -1
  192. data/vendor/libgit2/src/diff_driver.c +44 -46
  193. data/vendor/libgit2/src/diff_file.c +16 -14
  194. data/vendor/libgit2/src/diff_file.h +1 -1
  195. data/vendor/libgit2/src/diff_generate.c +158 -103
  196. data/vendor/libgit2/src/diff_generate.h +3 -3
  197. data/vendor/libgit2/src/diff_parse.c +4 -4
  198. data/vendor/libgit2/src/diff_print.c +34 -22
  199. data/vendor/libgit2/src/diff_stats.c +22 -7
  200. data/vendor/libgit2/src/diff_tform.c +18 -16
  201. data/vendor/libgit2/src/diff_xdiff.c +3 -3
  202. data/vendor/libgit2/src/errors.c +51 -39
  203. data/vendor/libgit2/src/errors.h +81 -0
  204. data/vendor/libgit2/src/features.h.in +9 -3
  205. data/vendor/libgit2/src/fetch.c +8 -3
  206. data/vendor/libgit2/src/fetchhead.c +12 -12
  207. data/vendor/libgit2/src/filebuf.c +28 -32
  208. data/vendor/libgit2/src/filebuf.h +2 -2
  209. data/vendor/libgit2/src/filter.c +47 -33
  210. data/vendor/libgit2/src/filter.h +0 -10
  211. data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
  212. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  213. data/vendor/libgit2/src/global.c +35 -55
  214. data/vendor/libgit2/src/global.h +0 -2
  215. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  216. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  218. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  219. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  220. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  221. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  222. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
  223. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  224. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  226. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  227. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  228. data/vendor/libgit2/src/hash/sha1.h +38 -0
  229. data/vendor/libgit2/src/hash.c +61 -0
  230. data/vendor/libgit2/src/hash.h +20 -21
  231. data/vendor/libgit2/src/hashsig.c +5 -5
  232. data/vendor/libgit2/src/idxmap.c +107 -61
  233. data/vendor/libgit2/src/idxmap.h +153 -31
  234. data/vendor/libgit2/src/ignore.c +38 -42
  235. data/vendor/libgit2/src/index.c +264 -199
  236. data/vendor/libgit2/src/index.h +7 -1
  237. data/vendor/libgit2/src/indexer.c +338 -167
  238. data/vendor/libgit2/src/integer.h +71 -26
  239. data/vendor/libgit2/src/iterator.c +134 -62
  240. data/vendor/libgit2/src/iterator.h +15 -0
  241. data/vendor/libgit2/src/mailmap.c +8 -8
  242. data/vendor/libgit2/src/map.h +1 -1
  243. data/vendor/libgit2/src/merge.c +137 -93
  244. data/vendor/libgit2/src/merge_driver.c +11 -11
  245. data/vendor/libgit2/src/merge_file.c +2 -2
  246. data/vendor/libgit2/src/mwindow.c +24 -29
  247. data/vendor/libgit2/src/mwindow.h +4 -4
  248. data/vendor/libgit2/src/net.c +184 -0
  249. data/vendor/libgit2/src/net.h +36 -0
  250. data/vendor/libgit2/src/netops.c +55 -156
  251. data/vendor/libgit2/src/netops.h +3 -23
  252. data/vendor/libgit2/src/notes.c +14 -9
  253. data/vendor/libgit2/src/object.c +120 -69
  254. data/vendor/libgit2/src/object.h +22 -9
  255. data/vendor/libgit2/src/object_api.c +8 -8
  256. data/vendor/libgit2/src/odb.c +111 -88
  257. data/vendor/libgit2/src/odb.h +8 -7
  258. data/vendor/libgit2/src/odb_loose.c +58 -47
  259. data/vendor/libgit2/src/odb_mempack.c +21 -34
  260. data/vendor/libgit2/src/odb_pack.c +17 -13
  261. data/vendor/libgit2/src/offmap.c +53 -35
  262. data/vendor/libgit2/src/offmap.h +108 -21
  263. data/vendor/libgit2/src/oid.c +12 -7
  264. data/vendor/libgit2/src/oidmap.c +49 -47
  265. data/vendor/libgit2/src/oidmap.h +101 -24
  266. data/vendor/libgit2/src/pack-objects.c +87 -86
  267. data/vendor/libgit2/src/pack-objects.h +2 -8
  268. data/vendor/libgit2/src/pack.c +94 -96
  269. data/vendor/libgit2/src/pack.h +16 -18
  270. data/vendor/libgit2/src/parse.c +17 -4
  271. data/vendor/libgit2/src/parse.h +3 -3
  272. data/vendor/libgit2/src/patch.c +3 -3
  273. data/vendor/libgit2/src/patch_generate.c +18 -18
  274. data/vendor/libgit2/src/patch_parse.c +147 -79
  275. data/vendor/libgit2/src/path.c +207 -62
  276. data/vendor/libgit2/src/path.h +14 -0
  277. data/vendor/libgit2/src/pathspec.c +18 -18
  278. data/vendor/libgit2/src/pool.c +26 -22
  279. data/vendor/libgit2/src/pool.h +7 -7
  280. data/vendor/libgit2/src/posix.c +10 -10
  281. data/vendor/libgit2/src/posix.h +12 -1
  282. data/vendor/libgit2/src/proxy.c +8 -3
  283. data/vendor/libgit2/src/push.c +35 -29
  284. data/vendor/libgit2/src/push.h +2 -1
  285. data/vendor/libgit2/src/reader.c +265 -0
  286. data/vendor/libgit2/src/reader.h +107 -0
  287. data/vendor/libgit2/src/rebase.c +97 -38
  288. data/vendor/libgit2/src/refdb.c +15 -3
  289. data/vendor/libgit2/src/refdb_fs.c +318 -222
  290. data/vendor/libgit2/src/reflog.c +13 -15
  291. data/vendor/libgit2/src/refs.c +122 -89
  292. data/vendor/libgit2/src/refs.h +5 -3
  293. data/vendor/libgit2/src/refspec.c +27 -33
  294. data/vendor/libgit2/src/regexp.c +221 -0
  295. data/vendor/libgit2/src/regexp.h +97 -0
  296. data/vendor/libgit2/src/remote.c +229 -178
  297. data/vendor/libgit2/src/remote.h +11 -2
  298. data/vendor/libgit2/src/repository.c +227 -172
  299. data/vendor/libgit2/src/repository.h +52 -40
  300. data/vendor/libgit2/src/reset.c +7 -7
  301. data/vendor/libgit2/src/revert.c +11 -6
  302. data/vendor/libgit2/src/revparse.c +46 -46
  303. data/vendor/libgit2/src/revwalk.c +89 -54
  304. data/vendor/libgit2/src/revwalk.h +20 -0
  305. data/vendor/libgit2/src/settings.c +22 -9
  306. data/vendor/libgit2/src/signature.c +15 -13
  307. data/vendor/libgit2/src/sortedcache.c +22 -36
  308. data/vendor/libgit2/src/sortedcache.h +1 -1
  309. data/vendor/libgit2/src/stash.c +56 -76
  310. data/vendor/libgit2/src/status.c +27 -21
  311. data/vendor/libgit2/src/stream.h +17 -2
  312. data/vendor/libgit2/src/streams/mbedtls.c +100 -80
  313. data/vendor/libgit2/src/streams/mbedtls.h +5 -2
  314. data/vendor/libgit2/src/streams/openssl.c +93 -81
  315. data/vendor/libgit2/src/streams/openssl.h +5 -2
  316. data/vendor/libgit2/src/streams/registry.c +118 -0
  317. data/vendor/libgit2/src/streams/registry.h +19 -0
  318. data/vendor/libgit2/src/streams/socket.c +55 -30
  319. data/vendor/libgit2/src/streams/stransport.c +57 -32
  320. data/vendor/libgit2/src/streams/stransport.h +5 -0
  321. data/vendor/libgit2/src/streams/tls.c +48 -20
  322. data/vendor/libgit2/src/streams/tls.h +12 -4
  323. data/vendor/libgit2/src/strmap.c +47 -74
  324. data/vendor/libgit2/src/strmap.h +108 -33
  325. data/vendor/libgit2/src/submodule.c +190 -169
  326. data/vendor/libgit2/src/submodule.h +1 -1
  327. data/vendor/libgit2/src/sysdir.c +25 -15
  328. data/vendor/libgit2/src/tag.c +39 -26
  329. data/vendor/libgit2/src/tag.h +2 -1
  330. data/vendor/libgit2/src/trace.c +2 -2
  331. data/vendor/libgit2/src/trace.h +2 -2
  332. data/vendor/libgit2/src/trailer.c +46 -32
  333. data/vendor/libgit2/src/transaction.c +30 -29
  334. data/vendor/libgit2/src/transport.c +3 -3
  335. data/vendor/libgit2/src/transports/auth.c +14 -10
  336. data/vendor/libgit2/src/transports/auth.h +10 -3
  337. data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
  338. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  339. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  340. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  341. data/vendor/libgit2/src/transports/cred.c +24 -24
  342. data/vendor/libgit2/src/transports/git.c +25 -30
  343. data/vendor/libgit2/src/transports/http.c +871 -335
  344. data/vendor/libgit2/src/transports/http.h +2 -0
  345. data/vendor/libgit2/src/transports/local.c +28 -28
  346. data/vendor/libgit2/src/transports/smart.c +64 -46
  347. data/vendor/libgit2/src/transports/smart.h +5 -6
  348. data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
  349. data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
  350. data/vendor/libgit2/src/transports/ssh.c +76 -65
  351. data/vendor/libgit2/src/transports/winhttp.c +328 -319
  352. data/vendor/libgit2/src/tree-cache.c +21 -14
  353. data/vendor/libgit2/src/tree.c +119 -112
  354. data/vendor/libgit2/src/tree.h +1 -0
  355. data/vendor/libgit2/src/unix/map.c +3 -3
  356. data/vendor/libgit2/src/unix/posix.h +1 -11
  357. data/vendor/libgit2/src/userdiff.h +3 -1
  358. data/vendor/libgit2/src/util.c +154 -93
  359. data/vendor/libgit2/src/util.h +19 -23
  360. data/vendor/libgit2/src/vector.c +15 -10
  361. data/vendor/libgit2/src/wildmatch.c +320 -0
  362. data/vendor/libgit2/src/wildmatch.h +23 -0
  363. data/vendor/libgit2/src/win32/dir.c +3 -3
  364. data/vendor/libgit2/src/win32/findfile.c +1 -1
  365. data/vendor/libgit2/src/win32/map.c +9 -11
  366. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  367. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  368. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  369. data/vendor/libgit2/src/win32/posix.h +1 -4
  370. data/vendor/libgit2/src/win32/posix_w32.c +69 -44
  371. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  372. data/vendor/libgit2/src/win32/thread.c +5 -10
  373. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  374. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  375. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
  376. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  377. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  378. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  379. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  380. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  381. data/vendor/libgit2/src/worktree.c +44 -30
  382. data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
  383. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  384. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  385. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  386. data/vendor/libgit2/src/zstream.c +4 -4
  387. metadata +115 -38
  388. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  389. data/vendor/libgit2/deps/regex/config.h +0 -7
  390. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  391. data/vendor/libgit2/deps/regex/regex.c +0 -92
  392. data/vendor/libgit2/deps/regex/regex.h +0 -582
  393. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  394. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  395. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  396. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  397. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  398. data/vendor/libgit2/libgit2.pc.in +0 -13
  399. data/vendor/libgit2/src/config_file.h +0 -73
  400. data/vendor/libgit2/src/fnmatch.c +0 -248
  401. data/vendor/libgit2/src/fnmatch.h +0 -48
  402. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  403. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  404. data/vendor/libgit2/src/streams/curl.c +0 -385
  405. data/vendor/libgit2/src/streams/curl.h +0 -17
  406. /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  407. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  408. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  409. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
@@ -181,7 +181,7 @@ static int merge_driver_registry_insert(
181
181
  git_merge_driver_entry *entry;
182
182
 
183
183
  entry = git__calloc(1, sizeof(git_merge_driver_entry) + strlen(name) + 1);
184
- GITERR_CHECK_ALLOC(entry);
184
+ GIT_ERROR_CHECK_ALLOC(entry);
185
185
 
186
186
  strcpy(entry->name, name);
187
187
  entry->driver = driver;
@@ -265,12 +265,12 @@ int git_merge_driver_register(const char *name, git_merge_driver *driver)
265
265
  assert(name && driver);
266
266
 
267
267
  if (git_rwlock_wrlock(&merge_driver_registry.lock) < 0) {
268
- giterr_set(GITERR_OS, "failed to lock merge driver registry");
268
+ git_error_set(GIT_ERROR_OS, "failed to lock merge driver registry");
269
269
  return -1;
270
270
  }
271
271
 
272
272
  if (!merge_driver_registry_find(NULL, name)) {
273
- giterr_set(GITERR_MERGE, "attempt to reregister existing driver '%s'",
273
+ git_error_set(GIT_ERROR_MERGE, "attempt to reregister existing driver '%s'",
274
274
  name);
275
275
  error = GIT_EEXISTS;
276
276
  goto done;
@@ -290,12 +290,12 @@ int git_merge_driver_unregister(const char *name)
290
290
  int error = 0;
291
291
 
292
292
  if (git_rwlock_wrlock(&merge_driver_registry.lock) < 0) {
293
- giterr_set(GITERR_OS, "failed to lock merge driver registry");
293
+ git_error_set(GIT_ERROR_OS, "failed to lock merge driver registry");
294
294
  return -1;
295
295
  }
296
296
 
297
297
  if ((entry = merge_driver_registry_lookup(&pos, name)) == NULL) {
298
- giterr_set(GITERR_MERGE, "cannot find merge driver '%s' to unregister",
298
+ git_error_set(GIT_ERROR_MERGE, "cannot find merge driver '%s' to unregister",
299
299
  name);
300
300
  error = GIT_ENOTFOUND;
301
301
  goto done;
@@ -332,7 +332,7 @@ git_merge_driver *git_merge_driver_lookup(const char *name)
332
332
  return &git_merge_driver__binary;
333
333
 
334
334
  if (git_rwlock_rdlock(&merge_driver_registry.lock) < 0) {
335
- giterr_set(GITERR_OS, "failed to lock merge driver registry");
335
+ git_error_set(GIT_ERROR_OS, "failed to lock merge driver registry");
336
336
  return NULL;
337
337
  }
338
338
 
@@ -341,7 +341,7 @@ git_merge_driver *git_merge_driver_lookup(const char *name)
341
341
  git_rwlock_rdunlock(&merge_driver_registry.lock);
342
342
 
343
343
  if (entry == NULL) {
344
- giterr_set(GITERR_MERGE, "cannot use an unregistered filter");
344
+ git_error_set(GIT_ERROR_MERGE, "cannot use an unregistered filter");
345
345
  return NULL;
346
346
  }
347
347
 
@@ -371,17 +371,17 @@ static int merge_driver_name_for_path(
371
371
  return error;
372
372
 
373
373
  /* set: use the built-in 3-way merge driver ("text") */
374
- if (GIT_ATTR_TRUE(value))
374
+ if (GIT_ATTR_IS_TRUE(value))
375
375
  *out = merge_driver_name__text;
376
376
 
377
377
  /* unset: do not merge ("binary") */
378
- else if (GIT_ATTR_FALSE(value))
378
+ else if (GIT_ATTR_IS_FALSE(value))
379
379
  *out = merge_driver_name__binary;
380
380
 
381
- else if (GIT_ATTR_UNSPECIFIED(value) && default_driver)
381
+ else if (GIT_ATTR_IS_UNSPECIFIED(value) && default_driver)
382
382
  *out = default_driver;
383
383
 
384
- else if (GIT_ATTR_UNSPECIFIED(value))
384
+ else if (GIT_ATTR_IS_UNSPECIFIED(value))
385
385
  *out = merge_driver_name__text;
386
386
 
387
387
  else
@@ -9,7 +9,7 @@
9
9
 
10
10
  #include "repository.h"
11
11
  #include "posix.h"
12
- #include "fileops.h"
12
+ #include "futils.h"
13
13
  #include "index.h"
14
14
  #include "diff_xdiff.h"
15
15
  #include "merge.h"
@@ -130,7 +130,7 @@ static int merge_file__xdiff(
130
130
 
131
131
  if ((xdl_result = xdl_merge(&ancestor_mmfile, &our_mmfile,
132
132
  &their_mmfile, &xmparam, &mmbuffer)) < 0) {
133
- giterr_set(GITERR_MERGE, "failed to merge files");
133
+ git_error_set(GIT_ERROR_MERGE, "failed to merge files");
134
134
  error = -1;
135
135
  goto done;
136
136
  }
@@ -8,7 +8,7 @@
8
8
  #include "mwindow.h"
9
9
 
10
10
  #include "vector.h"
11
- #include "fileops.h"
11
+ #include "futils.h"
12
12
  #include "map.h"
13
13
  #include "global.h"
14
14
  #include "strmap.h"
@@ -44,31 +44,28 @@ int git_mwindow_global_init(void)
44
44
  assert(!git__pack_cache);
45
45
 
46
46
  git__on_shutdown(git_mwindow_files_free);
47
- return git_strmap_alloc(&git__pack_cache);
47
+ return git_strmap_new(&git__pack_cache);
48
48
  }
49
49
 
50
50
  int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
51
51
  {
52
- int error;
53
- char *packname;
54
- git_strmap_iter pos;
55
52
  struct git_pack_file *pack;
53
+ char *packname;
54
+ int error;
56
55
 
57
56
  if ((error = git_packfile__name(&packname, path)) < 0)
58
57
  return error;
59
58
 
60
59
  if (git_mutex_lock(&git__mwindow_mutex) < 0) {
61
- giterr_set(GITERR_OS, "failed to lock mwindow mutex");
60
+ git_error_set(GIT_ERROR_OS, "failed to lock mwindow mutex");
62
61
  return -1;
63
62
  }
64
63
 
65
- pos = git_strmap_lookup_index(git__pack_cache, packname);
64
+ pack = git_strmap_get(git__pack_cache, packname);
66
65
  git__free(packname);
67
66
 
68
- if (git_strmap_valid_index(git__pack_cache, pos)) {
69
- pack = git_strmap_value_at(git__pack_cache, pos);
67
+ if (pack != NULL) {
70
68
  git_atomic_inc(&pack->refcount);
71
-
72
69
  git_mutex_unlock(&git__mwindow_mutex);
73
70
  *out = pack;
74
71
  return 0;
@@ -82,7 +79,7 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
82
79
 
83
80
  git_atomic_inc(&pack->refcount);
84
81
 
85
- git_strmap_insert(git__pack_cache, pack->pack_name, pack, &error);
82
+ error = git_strmap_set(git__pack_cache, pack->pack_name, pack);
86
83
  git_mutex_unlock(&git__mwindow_mutex);
87
84
 
88
85
  if (error < 0) {
@@ -97,7 +94,6 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
97
94
  void git_mwindow_put_pack(struct git_pack_file *pack)
98
95
  {
99
96
  int count;
100
- git_strmap_iter pos;
101
97
 
102
98
  if (git_mutex_lock(&git__mwindow_mutex) < 0)
103
99
  return;
@@ -105,13 +101,12 @@ void git_mwindow_put_pack(struct git_pack_file *pack)
105
101
  /* put before get would be a corrupted state */
106
102
  assert(git__pack_cache);
107
103
 
108
- pos = git_strmap_lookup_index(git__pack_cache, pack->pack_name);
109
104
  /* if we cannot find it, the state is corrupted */
110
- assert(git_strmap_valid_index(git__pack_cache, pos));
105
+ assert(git_strmap_exists(git__pack_cache, pack->pack_name));
111
106
 
112
107
  count = git_atomic_dec(&pack->refcount);
113
108
  if (count == 0) {
114
- git_strmap_delete_at(git__pack_cache, pos);
109
+ git_strmap_delete(git__pack_cache, pack->pack_name);
115
110
  git_packfile_free(pack);
116
111
  }
117
112
 
@@ -122,7 +117,7 @@ void git_mwindow_put_pack(struct git_pack_file *pack)
122
117
  void git_mwindow_free_all(git_mwindow_file *mwf)
123
118
  {
124
119
  if (git_mutex_lock(&git__mwindow_mutex)) {
125
- giterr_set(GITERR_THREAD, "unable to lock mwindow mutex");
120
+ git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
126
121
  return;
127
122
  }
128
123
 
@@ -172,11 +167,11 @@ void git_mwindow_free_all_locked(git_mwindow_file *mwf)
172
167
  /*
173
168
  * Check if a window 'win' contains the address 'offset'
174
169
  */
175
- int git_mwindow_contains(git_mwindow *win, git_off_t offset)
170
+ int git_mwindow_contains(git_mwindow *win, off64_t offset)
176
171
  {
177
- git_off_t win_off = win->offset;
172
+ off64_t win_off = win->offset;
178
173
  return win_off <= offset
179
- && offset <= (git_off_t)(win_off + win->window_map.len);
174
+ && offset <= (off64_t)(win_off + win->window_map.len);
180
175
  }
181
176
 
182
177
  /*
@@ -229,7 +224,7 @@ static int git_mwindow_close_lru(git_mwindow_file *mwf)
229
224
  }
230
225
 
231
226
  if (!lru_w) {
232
- giterr_set(GITERR_OS, "failed to close memory window; couldn't find LRU");
227
+ git_error_set(GIT_ERROR_OS, "failed to close memory window; couldn't find LRU");
233
228
  return -1;
234
229
  }
235
230
 
@@ -251,12 +246,12 @@ static int git_mwindow_close_lru(git_mwindow_file *mwf)
251
246
  static git_mwindow *new_window(
252
247
  git_mwindow_file *mwf,
253
248
  git_file fd,
254
- git_off_t size,
255
- git_off_t offset)
249
+ off64_t size,
250
+ off64_t offset)
256
251
  {
257
252
  git_mwindow_ctl *ctl = &mem_ctl;
258
253
  size_t walign = git_mwindow__window_size / 2;
259
- git_off_t len;
254
+ off64_t len;
260
255
  git_mwindow *w;
261
256
 
262
257
  w = git__malloc(sizeof(*w));
@@ -268,8 +263,8 @@ static git_mwindow *new_window(
268
263
  w->offset = (offset / walign) * walign;
269
264
 
270
265
  len = size - w->offset;
271
- if (len > (git_off_t)git_mwindow__window_size)
272
- len = (git_off_t)git_mwindow__window_size;
266
+ if (len > (off64_t)git_mwindow__window_size)
267
+ len = (off64_t)git_mwindow__window_size;
273
268
 
274
269
  ctl->mapped += (size_t)len;
275
270
 
@@ -316,7 +311,7 @@ static git_mwindow *new_window(
316
311
  unsigned char *git_mwindow_open(
317
312
  git_mwindow_file *mwf,
318
313
  git_mwindow **cursor,
319
- git_off_t offset,
314
+ off64_t offset,
320
315
  size_t extra,
321
316
  unsigned int *left)
322
317
  {
@@ -324,7 +319,7 @@ unsigned char *git_mwindow_open(
324
319
  git_mwindow *w = *cursor;
325
320
 
326
321
  if (git_mutex_lock(&git__mwindow_mutex)) {
327
- giterr_set(GITERR_THREAD, "unable to lock mwindow mutex");
322
+ git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
328
323
  return NULL;
329
324
  }
330
325
 
@@ -376,7 +371,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
376
371
  int ret;
377
372
 
378
373
  if (git_mutex_lock(&git__mwindow_mutex)) {
379
- giterr_set(GITERR_THREAD, "unable to lock mwindow mutex");
374
+ git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
380
375
  return -1;
381
376
  }
382
377
 
@@ -416,7 +411,7 @@ void git_mwindow_close(git_mwindow **window)
416
411
  git_mwindow *w = *window;
417
412
  if (w) {
418
413
  if (git_mutex_lock(&git__mwindow_mutex)) {
419
- giterr_set(GITERR_THREAD, "unable to lock mwindow mutex");
414
+ git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
420
415
  return;
421
416
  }
422
417
 
@@ -16,7 +16,7 @@
16
16
  typedef struct git_mwindow {
17
17
  struct git_mwindow *next;
18
18
  git_map window_map;
19
- git_off_t offset;
19
+ off64_t offset;
20
20
  size_t last_used;
21
21
  size_t inuse_cnt;
22
22
  } git_mwindow;
@@ -24,7 +24,7 @@ typedef struct git_mwindow {
24
24
  typedef struct git_mwindow_file {
25
25
  git_mwindow *windows;
26
26
  int fd;
27
- git_off_t size;
27
+ off64_t size;
28
28
  } git_mwindow_file;
29
29
 
30
30
  typedef struct git_mwindow_ctl {
@@ -37,10 +37,10 @@ typedef struct git_mwindow_ctl {
37
37
  git_vector windowfiles;
38
38
  } git_mwindow_ctl;
39
39
 
40
- int git_mwindow_contains(git_mwindow *win, git_off_t offset);
40
+ int git_mwindow_contains(git_mwindow *win, off64_t offset);
41
41
  void git_mwindow_free_all(git_mwindow_file *mwf); /* locks */
42
42
  void git_mwindow_free_all_locked(git_mwindow_file *mwf); /* run under lock */
43
- unsigned char *git_mwindow_open(git_mwindow_file *mwf, git_mwindow **cursor, git_off_t offset, size_t extra, unsigned int *left);
43
+ unsigned char *git_mwindow_open(git_mwindow_file *mwf, git_mwindow **cursor, off64_t offset, size_t extra, unsigned int *left);
44
44
  int git_mwindow_file_register(git_mwindow_file *mwf);
45
45
  void git_mwindow_file_deregister(git_mwindow_file *mwf);
46
46
  void git_mwindow_close(git_mwindow **w_cursor);
@@ -0,0 +1,184 @@
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 "net.h"
9
+ #include "netops.h"
10
+
11
+ #include <ctype.h>
12
+ #include "git2/errors.h"
13
+
14
+ #include "posix.h"
15
+ #include "buffer.h"
16
+ #include "http_parser.h"
17
+ #include "global.h"
18
+
19
+ #define DEFAULT_PORT_HTTP "80"
20
+ #define DEFAULT_PORT_HTTPS "443"
21
+ #define DEFAULT_PORT_GIT "9418"
22
+ #define DEFAULT_PORT_SSH "22"
23
+
24
+ static const char *default_port_for_scheme(const char *scheme)
25
+ {
26
+ if (strcmp(scheme, "http") == 0)
27
+ return DEFAULT_PORT_HTTP;
28
+ else if (strcmp(scheme, "https") == 0)
29
+ return DEFAULT_PORT_HTTPS;
30
+ else if (strcmp(scheme, "git") == 0)
31
+ return DEFAULT_PORT_GIT;
32
+ else if (strcmp(scheme, "ssh") == 0)
33
+ return DEFAULT_PORT_SSH;
34
+
35
+ return NULL;
36
+ }
37
+
38
+ int git_net_url_parse(git_net_url *url, const char *given)
39
+ {
40
+ struct http_parser_url u = {0};
41
+ bool has_scheme, has_host, has_port, has_path, has_query, has_userinfo;
42
+ git_buf scheme = GIT_BUF_INIT,
43
+ host = GIT_BUF_INIT,
44
+ port = GIT_BUF_INIT,
45
+ path = GIT_BUF_INIT,
46
+ username = GIT_BUF_INIT,
47
+ password = GIT_BUF_INIT,
48
+ query = GIT_BUF_INIT;
49
+ int error = GIT_EINVALIDSPEC;
50
+
51
+ if (http_parser_parse_url(given, strlen(given), false, &u)) {
52
+ git_error_set(GIT_ERROR_NET, "malformed URL '%s'", given);
53
+ goto done;
54
+ }
55
+
56
+ has_scheme = !!(u.field_set & (1 << UF_SCHEMA));
57
+ has_host = !!(u.field_set & (1 << UF_HOST));
58
+ has_port = !!(u.field_set & (1 << UF_PORT));
59
+ has_path = !!(u.field_set & (1 << UF_PATH));
60
+ has_query = !!(u.field_set & (1 << UF_QUERY));
61
+ has_userinfo = !!(u.field_set & (1 << UF_USERINFO));
62
+
63
+ if (has_scheme) {
64
+ const char *url_scheme = given + u.field_data[UF_SCHEMA].off;
65
+ size_t url_scheme_len = u.field_data[UF_SCHEMA].len;
66
+ git_buf_put(&scheme, url_scheme, url_scheme_len);
67
+ git__strntolower(scheme.ptr, scheme.size);
68
+ } else {
69
+ git_error_set(GIT_ERROR_NET, "malformed URL '%s'", given);
70
+ goto done;
71
+ }
72
+
73
+ if (has_host) {
74
+ const char *url_host = given + u.field_data[UF_HOST].off;
75
+ size_t url_host_len = u.field_data[UF_HOST].len;
76
+ git_buf_decode_percent(&host, url_host, url_host_len);
77
+ }
78
+
79
+ if (has_port) {
80
+ const char *url_port = given + u.field_data[UF_PORT].off;
81
+ size_t url_port_len = u.field_data[UF_PORT].len;
82
+ git_buf_put(&port, url_port, url_port_len);
83
+ } else {
84
+ const char *default_port = default_port_for_scheme(scheme.ptr);
85
+
86
+ if (default_port == NULL) {
87
+ git_error_set(GIT_ERROR_NET, "unknown scheme for URL '%s'", given);
88
+ goto done;
89
+ }
90
+
91
+ git_buf_puts(&port, default_port);
92
+ }
93
+
94
+ if (has_path) {
95
+ const char *url_path = given + u.field_data[UF_PATH].off;
96
+ size_t url_path_len = u.field_data[UF_PATH].len;
97
+ git_buf_put(&path, url_path, url_path_len);
98
+ } else {
99
+ git_buf_puts(&path, "/");
100
+ }
101
+
102
+ if (has_query) {
103
+ const char *url_query = given + u.field_data[UF_QUERY].off;
104
+ size_t url_query_len = u.field_data[UF_QUERY].len;
105
+ git_buf_decode_percent(&query, url_query, url_query_len);
106
+ }
107
+
108
+ if (has_userinfo) {
109
+ const char *url_userinfo = given + u.field_data[UF_USERINFO].off;
110
+ size_t url_userinfo_len = u.field_data[UF_USERINFO].len;
111
+ const char *colon = memchr(url_userinfo, ':', url_userinfo_len);
112
+
113
+ if (colon) {
114
+ const char *url_username = url_userinfo;
115
+ size_t url_username_len = colon - url_userinfo;
116
+ const char *url_password = colon + 1;
117
+ size_t url_password_len = url_userinfo_len - (url_username_len + 1);
118
+
119
+ git_buf_decode_percent(&username, url_username, url_username_len);
120
+ git_buf_decode_percent(&password, url_password, url_password_len);
121
+ } else {
122
+ git_buf_decode_percent(&username, url_userinfo, url_userinfo_len);
123
+ }
124
+ }
125
+
126
+ if (git_buf_oom(&scheme) ||
127
+ git_buf_oom(&host) ||
128
+ git_buf_oom(&port) ||
129
+ git_buf_oom(&path) ||
130
+ git_buf_oom(&query) ||
131
+ git_buf_oom(&username) ||
132
+ git_buf_oom(&password))
133
+ return -1;
134
+
135
+ url->scheme = git_buf_detach(&scheme);
136
+ url->host = git_buf_detach(&host);
137
+ url->port = git_buf_detach(&port);
138
+ url->path = git_buf_detach(&path);
139
+ url->query = git_buf_detach(&query);
140
+ url->username = git_buf_detach(&username);
141
+ url->password = git_buf_detach(&password);
142
+
143
+ error = 0;
144
+
145
+ done:
146
+ git_buf_dispose(&scheme);
147
+ git_buf_dispose(&host);
148
+ git_buf_dispose(&port);
149
+ git_buf_dispose(&path);
150
+ git_buf_dispose(&query);
151
+ git_buf_dispose(&username);
152
+ git_buf_dispose(&password);
153
+ return error;
154
+ }
155
+
156
+ int git_net_url_is_default_port(git_net_url *url)
157
+ {
158
+ return (strcmp(url->port, default_port_for_scheme(url->scheme)) == 0);
159
+ }
160
+
161
+ void git_net_url_swap(git_net_url *a, git_net_url *b)
162
+ {
163
+ git_net_url tmp = GIT_NET_URL_INIT;
164
+
165
+ memcpy(&tmp, a, sizeof(git_net_url));
166
+ memcpy(a, b, sizeof(git_net_url));
167
+ memcpy(b, &tmp, sizeof(git_net_url));
168
+ }
169
+
170
+ void git_net_url_dispose(git_net_url *url)
171
+ {
172
+ if (url->username)
173
+ git__memzero(url->username, strlen(url->username));
174
+
175
+ if (url->password)
176
+ git__memzero(url->password, strlen(url->password));
177
+
178
+ git__free(url->scheme); url->scheme = NULL;
179
+ git__free(url->host); url->host = NULL;
180
+ git__free(url->port); url->port = NULL;
181
+ git__free(url->path); url->path = NULL;
182
+ git__free(url->username); url->username = NULL;
183
+ git__free(url->password); url->password = NULL;
184
+ }
@@ -0,0 +1,36 @@
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_net_h__
8
+ #define INCLUDE_net_h__
9
+
10
+ #include "common.h"
11
+
12
+ typedef struct git_net_url {
13
+ char *scheme;
14
+ char *host;
15
+ char *port;
16
+ char *path;
17
+ char *query;
18
+ char *username;
19
+ char *password;
20
+ } git_net_url;
21
+
22
+ #define GIT_NET_URL_INIT { NULL }
23
+
24
+ /** Parses a string containing a URL into a structure. */
25
+ int git_net_url_parse(git_net_url *url, const char *str);
26
+
27
+ /** Returns nonzero if the URL is on the default port. */
28
+ int git_net_url_is_default_port(git_net_url *url);
29
+
30
+ /** Swaps the contents of one URL for another. */
31
+ void git_net_url_swap(git_net_url *a, git_net_url *b);
32
+
33
+ /** Disposes the contents of the structure. */
34
+ void git_net_url_dispose(git_net_url *url);
35
+
36
+ #endif