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
@@ -23,6 +23,7 @@
23
23
  #include "git2/types.h"
24
24
  #include "git2/oid.h"
25
25
  #include "git2/net.h"
26
+ #include "transports/smart.h"
26
27
 
27
28
  #define CONFIG_URL_FMT "remote.%s.url"
28
29
  #define CONFIG_PUSHURL_FMT "remote.%s.pushurl"
@@ -1292,9 +1293,9 @@ static int git_remote__download(
1292
1293
  free_refspecs(&remote->active_refspecs);
1293
1294
  error = dwim_refspecs(&remote->active_refspecs, to_active, &refs);
1294
1295
 
1295
- git_vector_free(&refs);
1296
+ git_vector_dispose(&refs);
1296
1297
  free_refspecs(&specs);
1297
- git_vector_free(&specs);
1298
+ git_vector_dispose(&specs);
1298
1299
 
1299
1300
  if (error < 0)
1300
1301
  goto on_error;
@@ -1310,9 +1311,9 @@ static int git_remote__download(
1310
1311
  error = git_fetch_download_pack(remote);
1311
1312
 
1312
1313
  on_error:
1313
- git_vector_free(&refs);
1314
+ git_vector_dispose(&refs);
1314
1315
  free_refspecs(&specs);
1315
- git_vector_free(&specs);
1316
+ git_vector_dispose(&specs);
1316
1317
  return error;
1317
1318
  }
1318
1319
 
@@ -1338,7 +1339,11 @@ int git_remote_download(
1338
1339
  if ((error = connect_or_reset_options(remote, GIT_DIRECTION_FETCH, &connect_opts)) < 0)
1339
1340
  return error;
1340
1341
 
1341
- return git_remote__download(remote, refspecs, opts);
1342
+ error = git_remote__download(remote, refspecs, opts);
1343
+
1344
+ git_remote_connect_options_dispose(&connect_opts);
1345
+
1346
+ return error;
1342
1347
  }
1343
1348
 
1344
1349
  int git_remote_fetch(
@@ -1347,13 +1352,14 @@ int git_remote_fetch(
1347
1352
  const git_fetch_options *opts,
1348
1353
  const char *reflog_message)
1349
1354
  {
1350
- int error, update_fetchhead = 1;
1351
1355
  git_remote_autotag_option_t tagopt = remote->download_tags;
1352
1356
  bool prune = false;
1353
1357
  git_str reflog_msg_buf = GIT_STR_INIT;
1354
1358
  git_remote_connect_options connect_opts = GIT_REMOTE_CONNECT_OPTIONS_INIT;
1355
1359
  unsigned int capabilities;
1356
1360
  git_oid_t oid_type;
1361
+ unsigned int update_flags = GIT_REMOTE_UPDATE_FETCHHEAD;
1362
+ int error;
1357
1363
 
1358
1364
  GIT_ASSERT_ARG(remote);
1359
1365
 
@@ -1370,7 +1376,7 @@ int git_remote_fetch(
1370
1376
  return error;
1371
1377
 
1372
1378
  if (opts) {
1373
- update_fetchhead = opts->update_fetchhead;
1379
+ update_flags = opts->update_fetchhead;
1374
1380
  tagopt = opts->download_tags;
1375
1381
  }
1376
1382
 
@@ -1397,8 +1403,14 @@ int git_remote_fetch(
1397
1403
  }
1398
1404
 
1399
1405
  /* Create "remote/foo" branches for all remote branches */
1400
- error = git_remote_update_tips(remote, &connect_opts.callbacks, update_fetchhead, tagopt, git_str_cstr(&reflog_msg_buf));
1406
+ error = git_remote_update_tips(remote,
1407
+ &connect_opts.callbacks,
1408
+ update_flags,
1409
+ tagopt,
1410
+ git_str_cstr(&reflog_msg_buf));
1411
+
1401
1412
  git_str_dispose(&reflog_msg_buf);
1413
+
1402
1414
  if (error < 0)
1403
1415
  goto done;
1404
1416
 
@@ -1577,7 +1589,7 @@ cleanup:
1577
1589
  for (i = 0; i < fetchhead_refs.length; ++i)
1578
1590
  git_fetchhead_ref_free(fetchhead_refs.contents[i]);
1579
1591
 
1580
- git_vector_free(&fetchhead_refs);
1592
+ git_vector_dispose(&fetchhead_refs);
1581
1593
  git_reference_free(head_ref);
1582
1594
 
1583
1595
  return error;
@@ -1631,7 +1643,10 @@ int git_remote_prune(git_remote *remote, const git_remote_callbacks *callbacks)
1631
1643
  const git_refspec *spec;
1632
1644
  const char *refname;
1633
1645
  int error;
1634
- git_oid zero_id = GIT_OID_SHA1_ZERO;
1646
+ git_oid zero_id;
1647
+
1648
+ GIT_ASSERT(remote && remote->repo);
1649
+ git_oid_clear(&zero_id, remote->repo->oid_type);
1635
1650
 
1636
1651
  if (callbacks)
1637
1652
  GIT_ERROR_CHECK_VERSION(callbacks, GIT_REMOTE_CALLBACKS_VERSION, "git_remote_callbacks");
@@ -1709,19 +1724,28 @@ int git_remote_prune(git_remote *remote, const git_remote_callbacks *callbacks)
1709
1724
  git_oid_cpy(&id, git_reference_target(ref));
1710
1725
  error = git_reference_delete(ref);
1711
1726
  git_reference_free(ref);
1727
+
1712
1728
  if (error < 0)
1713
1729
  goto cleanup;
1714
1730
 
1715
- if (callbacks && callbacks->update_tips)
1716
- error = callbacks->update_tips(refname, &id, &zero_id, callbacks->payload);
1731
+ if (callbacks && callbacks->update_refs)
1732
+ error = callbacks->update_refs(refname, &id,
1733
+ &zero_id, NULL, callbacks->payload);
1734
+ #ifndef GIT_DEPRECATE_HARD
1735
+ else if (callbacks && callbacks->update_tips)
1736
+ error = callbacks->update_tips(refname, &id,
1737
+ &zero_id, callbacks->payload);
1738
+ #endif
1717
1739
 
1718
- if (error < 0)
1740
+ if (error < 0) {
1741
+ git_error_set_after_callback_function(error, "git_remote_fetch");
1719
1742
  goto cleanup;
1743
+ }
1720
1744
  }
1721
1745
 
1722
1746
  cleanup:
1723
- git_vector_free(&remote_refs);
1724
- git_vector_free_deep(&candidates);
1747
+ git_vector_dispose(&remote_refs);
1748
+ git_vector_dispose_deep(&candidates);
1725
1749
  return error;
1726
1750
  }
1727
1751
 
@@ -1729,13 +1753,17 @@ static int update_ref(
1729
1753
  const git_remote *remote,
1730
1754
  const char *ref_name,
1731
1755
  git_oid *id,
1756
+ git_refspec *spec,
1732
1757
  const char *msg,
1733
1758
  const git_remote_callbacks *callbacks)
1734
1759
  {
1735
1760
  git_reference *ref;
1736
- git_oid old_id = GIT_OID_SHA1_ZERO;
1761
+ git_oid old_id;
1737
1762
  int error;
1738
1763
 
1764
+ GIT_ASSERT(remote && remote->repo);
1765
+ git_oid_clear(&old_id, remote->repo->oid_type);
1766
+
1739
1767
  error = git_reference_name_to_id(&old_id, remote->repo, ref_name);
1740
1768
 
1741
1769
  if (error < 0 && error != GIT_ENOTFOUND)
@@ -1754,9 +1782,19 @@ static int update_ref(
1754
1782
  if (error < 0)
1755
1783
  return error;
1756
1784
 
1757
- if (callbacks && callbacks->update_tips &&
1758
- (error = callbacks->update_tips(ref_name, &old_id, id, callbacks->payload)) < 0)
1785
+ if (callbacks && callbacks->update_refs)
1786
+ error = callbacks->update_refs(ref_name, &old_id,
1787
+ id, spec, callbacks->payload);
1788
+ #ifndef GIT_DEPRECATE_HARD
1789
+ else if (callbacks && callbacks->update_tips)
1790
+ error = callbacks->update_tips(ref_name, &old_id,
1791
+ id, callbacks->payload);
1792
+ #endif
1793
+
1794
+ if (error < 0) {
1795
+ git_error_set_after_callback_function(error, "git_remote_fetch");
1759
1796
  return error;
1797
+ }
1760
1798
 
1761
1799
  return 0;
1762
1800
  }
@@ -1767,6 +1805,7 @@ static int update_one_tip(
1767
1805
  git_refspec *spec,
1768
1806
  git_remote_head *head,
1769
1807
  git_refspec *tagspec,
1808
+ unsigned int update_flags,
1770
1809
  git_remote_autotag_option_t tagopt,
1771
1810
  const char *log_message,
1772
1811
  const git_remote_callbacks *callbacks)
@@ -1774,11 +1813,13 @@ static int update_one_tip(
1774
1813
  git_odb *odb;
1775
1814
  git_str refname = GIT_STR_INIT;
1776
1815
  git_reference *ref = NULL;
1777
- bool autotag = false;
1816
+ bool autotag = false, updated = false;
1778
1817
  git_oid old;
1779
1818
  int valid;
1780
1819
  int error;
1781
1820
 
1821
+ GIT_ASSERT(remote && remote->repo);
1822
+
1782
1823
  if ((error = git_repository_odb__weakptr(&odb, remote->repo)) < 0)
1783
1824
  goto done;
1784
1825
 
@@ -1839,29 +1880,40 @@ static int update_one_tip(
1839
1880
  }
1840
1881
 
1841
1882
  if (error == GIT_ENOTFOUND) {
1842
- git_oid_clear(&old, GIT_OID_SHA1);
1883
+ git_oid_clear(&old, remote->repo->oid_type);
1843
1884
  error = 0;
1844
1885
 
1845
1886
  if (autotag && (error = git_vector_insert(update_heads, head)) < 0)
1846
1887
  goto done;
1847
1888
  }
1848
1889
 
1849
- if (!git_oid__cmp(&old, &head->oid))
1850
- goto done;
1890
+ if ((updated = !git_oid_equal(&old, &head->oid))) {
1891
+ /* In autotag mode, don't overwrite any locally-existing tags */
1892
+ error = git_reference_create(&ref, remote->repo, refname.ptr, &head->oid, !autotag,
1893
+ log_message);
1851
1894
 
1852
- /* In autotag mode, don't overwrite any locally-existing tags */
1853
- error = git_reference_create(&ref, remote->repo, refname.ptr, &head->oid, !autotag,
1854
- log_message);
1895
+ if (error < 0) {
1896
+ if (error == GIT_EEXISTS)
1897
+ error = 0;
1855
1898
 
1856
- if (error < 0) {
1857
- if (error == GIT_EEXISTS)
1858
- error = 0;
1899
+ goto done;
1900
+ }
1901
+ }
1859
1902
 
1903
+ if (!callbacks ||
1904
+ (!updated && (update_flags & GIT_REMOTE_UPDATE_REPORT_UNCHANGED) == 0))
1860
1905
  goto done;
1861
- }
1862
1906
 
1863
- if (callbacks && callbacks->update_tips != NULL &&
1864
- (error = callbacks->update_tips(refname.ptr, &old, &head->oid, callbacks->payload)) < 0)
1907
+ if (callbacks && callbacks->update_refs)
1908
+ error = callbacks->update_refs(refname.ptr, &old,
1909
+ &head->oid, spec, callbacks->payload);
1910
+ #ifndef GIT_DEPRECATE_HARD
1911
+ else if (callbacks && callbacks->update_tips)
1912
+ error = callbacks->update_tips(refname.ptr, &old,
1913
+ &head->oid, callbacks->payload);
1914
+ #endif
1915
+
1916
+ if (error < 0)
1865
1917
  git_error_set_after_callback_function(error, "git_remote_fetch");
1866
1918
 
1867
1919
  done:
@@ -1873,7 +1925,7 @@ done:
1873
1925
  static int update_tips_for_spec(
1874
1926
  git_remote *remote,
1875
1927
  const git_remote_callbacks *callbacks,
1876
- int update_fetchhead,
1928
+ unsigned int update_flags,
1877
1929
  git_remote_autotag_option_t tagopt,
1878
1930
  git_refspec *spec,
1879
1931
  git_vector *refs,
@@ -1885,7 +1937,7 @@ static int update_tips_for_spec(
1885
1937
  int error = 0;
1886
1938
  size_t i;
1887
1939
 
1888
- GIT_ASSERT_ARG(remote);
1940
+ GIT_ASSERT_ARG(remote && remote->repo);
1889
1941
 
1890
1942
  if (git_refspec__parse(&tagspec, GIT_REFSPEC_TAGS, true) < 0)
1891
1943
  return -1;
@@ -1896,19 +1948,22 @@ static int update_tips_for_spec(
1896
1948
 
1897
1949
  /* Update tips based on the remote heads */
1898
1950
  git_vector_foreach(refs, i, head) {
1899
- if (update_one_tip(&update_heads, remote, spec, head, &tagspec, tagopt, log_message, callbacks) < 0)
1951
+ if (update_one_tip(&update_heads,
1952
+ remote, spec, head, &tagspec,
1953
+ update_flags, tagopt, log_message,
1954
+ callbacks) < 0)
1900
1955
  goto on_error;
1901
1956
  }
1902
1957
 
1903
1958
  /* Handle specified oid sources */
1904
- if (git_oid__is_hexstr(spec->src, GIT_OID_SHA1)) {
1959
+ if (git_oid__is_hexstr(spec->src, remote->repo->oid_type)) {
1905
1960
  git_oid id;
1906
1961
 
1907
- if ((error = git_oid__fromstr(&id, spec->src, GIT_OID_SHA1)) < 0)
1962
+ if ((error = git_oid__fromstr(&id, spec->src, remote->repo->oid_type)) < 0)
1908
1963
  goto on_error;
1909
1964
 
1910
1965
  if (spec->dst &&
1911
- (error = update_ref(remote, spec->dst, &id, log_message, callbacks)) < 0)
1966
+ (error = update_ref(remote, spec->dst, &id, spec, log_message, callbacks)) < 0)
1912
1967
  goto on_error;
1913
1968
 
1914
1969
  git_oid_cpy(&oid_head.oid, &id);
@@ -1918,17 +1973,17 @@ static int update_tips_for_spec(
1918
1973
  goto on_error;
1919
1974
  }
1920
1975
 
1921
- if (update_fetchhead &&
1976
+ if ((update_flags & GIT_REMOTE_UPDATE_FETCHHEAD) &&
1922
1977
  (error = git_remote_write_fetchhead(remote, spec, &update_heads)) < 0)
1923
1978
  goto on_error;
1924
1979
 
1925
1980
  git_refspec__dispose(&tagspec);
1926
- git_vector_free(&update_heads);
1981
+ git_vector_dispose(&update_heads);
1927
1982
  return 0;
1928
1983
 
1929
1984
  on_error:
1930
1985
  git_refspec__dispose(&tagspec);
1931
- git_vector_free(&update_heads);
1986
+ git_vector_dispose(&update_heads);
1932
1987
  return -1;
1933
1988
 
1934
1989
  }
@@ -2020,7 +2075,7 @@ static int opportunistic_updates(
2020
2075
 
2021
2076
  git_str_clear(&refname);
2022
2077
  if ((error = git_refspec__transform(&refname, spec, head->name)) < 0 ||
2023
- (error = update_ref(remote, refname.ptr, &head->oid, msg, callbacks)) < 0)
2078
+ (error = update_ref(remote, refname.ptr, &head->oid, spec, msg, callbacks)) < 0)
2024
2079
  goto cleanup;
2025
2080
  }
2026
2081
 
@@ -2049,11 +2104,11 @@ static int truncate_fetch_head(const char *gitdir)
2049
2104
  }
2050
2105
 
2051
2106
  int git_remote_update_tips(
2052
- git_remote *remote,
2053
- const git_remote_callbacks *callbacks,
2054
- int update_fetchhead,
2055
- git_remote_autotag_option_t download_tags,
2056
- const char *reflog_message)
2107
+ git_remote *remote,
2108
+ const git_remote_callbacks *callbacks,
2109
+ unsigned int update_flags,
2110
+ git_remote_autotag_option_t download_tags,
2111
+ const char *reflog_message)
2057
2112
  {
2058
2113
  git_refspec *spec, tagspec;
2059
2114
  git_vector refs = GIT_VECTOR_INIT;
@@ -2082,7 +2137,7 @@ int git_remote_update_tips(
2082
2137
  goto out;
2083
2138
 
2084
2139
  if (tagopt == GIT_REMOTE_DOWNLOAD_TAGS_ALL) {
2085
- if ((error = update_tips_for_spec(remote, callbacks, update_fetchhead, tagopt, &tagspec, &refs, reflog_message)) < 0)
2140
+ if ((error = update_tips_for_spec(remote, callbacks, update_flags, tagopt, &tagspec, &refs, reflog_message)) < 0)
2086
2141
  goto out;
2087
2142
  }
2088
2143
 
@@ -2090,7 +2145,7 @@ int git_remote_update_tips(
2090
2145
  if (spec->push)
2091
2146
  continue;
2092
2147
 
2093
- if ((error = update_tips_for_spec(remote, callbacks, update_fetchhead, tagopt, spec, &refs, reflog_message)) < 0)
2148
+ if ((error = update_tips_for_spec(remote, callbacks, update_flags, tagopt, spec, &refs, reflog_message)) < 0)
2094
2149
  goto out;
2095
2150
  }
2096
2151
 
@@ -2099,7 +2154,7 @@ int git_remote_update_tips(
2099
2154
  error = opportunistic_updates(remote, callbacks, &refs, reflog_message);
2100
2155
 
2101
2156
  out:
2102
- git_vector_free(&refs);
2157
+ git_vector_dispose(&refs);
2103
2158
  git_refspec__dispose(&tagspec);
2104
2159
  return error;
2105
2160
  }
@@ -2158,19 +2213,19 @@ void git_remote_free(git_remote *remote)
2158
2213
  remote->transport = NULL;
2159
2214
  }
2160
2215
 
2161
- git_vector_free(&remote->refs);
2216
+ git_vector_dispose(&remote->refs);
2162
2217
 
2163
2218
  free_refspecs(&remote->refspecs);
2164
- git_vector_free(&remote->refspecs);
2219
+ git_vector_dispose(&remote->refspecs);
2165
2220
 
2166
2221
  free_refspecs(&remote->active_refspecs);
2167
- git_vector_free(&remote->active_refspecs);
2222
+ git_vector_dispose(&remote->active_refspecs);
2168
2223
 
2169
2224
  free_refspecs(&remote->passive_refspecs);
2170
- git_vector_free(&remote->passive_refspecs);
2225
+ git_vector_dispose(&remote->passive_refspecs);
2171
2226
 
2172
2227
  free_heads(&remote->local_heads);
2173
- git_vector_free(&remote->local_heads);
2228
+ git_vector_dispose(&remote->local_heads);
2174
2229
 
2175
2230
  git_push_free(remote->push);
2176
2231
  git__free(remote->url);
@@ -2213,7 +2268,7 @@ int git_remote_list(git_strarray *remotes_list, git_repository *repo)
2213
2268
  cfg, "^remote\\..*\\.(push)?url$", remote_list_cb, &list);
2214
2269
 
2215
2270
  if (error < 0) {
2216
- git_vector_free_deep(&list);
2271
+ git_vector_dispose_deep(&list);
2217
2272
  return error;
2218
2273
  }
2219
2274
 
@@ -2494,7 +2549,7 @@ static int rename_fetch_refspecs(git_vector *problems, git_remote *remote, const
2494
2549
  git_vector_foreach(problems, i, str)
2495
2550
  git__free(str);
2496
2551
 
2497
- git_vector_free(problems);
2552
+ git_vector_dispose(problems);
2498
2553
  }
2499
2554
 
2500
2555
  return error;
@@ -2534,7 +2589,7 @@ int git_remote_rename(git_strarray *out, git_repository *repo, const char *name,
2534
2589
 
2535
2590
  cleanup:
2536
2591
  if (error < 0)
2537
- git_vector_free(&problem_refspecs);
2592
+ git_vector_dispose(&problem_refspecs);
2538
2593
 
2539
2594
  git_remote_free(remote);
2540
2595
  return error;
@@ -2573,17 +2628,21 @@ done:
2573
2628
  git_refspec *git_remote__matching_refspec(git_remote *remote, const char *refname)
2574
2629
  {
2575
2630
  git_refspec *spec;
2631
+ git_refspec *match = NULL;
2576
2632
  size_t i;
2577
2633
 
2578
2634
  git_vector_foreach(&remote->active_refspecs, i, spec) {
2579
2635
  if (spec->push)
2580
2636
  continue;
2581
2637
 
2582
- if (git_refspec_src_matches(spec, refname))
2583
- return spec;
2638
+ if (git_refspec_src_matches_negative(spec, refname))
2639
+ return NULL;
2640
+
2641
+ if (git_refspec_src_matches(spec, refname) && match == NULL)
2642
+ match = spec;
2584
2643
  }
2585
2644
 
2586
- return NULL;
2645
+ return match;
2587
2646
  }
2588
2647
 
2589
2648
  git_refspec *git_remote__matching_dst_refspec(git_remote *remote, const char *refname)
@@ -2641,7 +2700,7 @@ static int copy_refspecs(git_strarray *array, const git_remote *remote, unsigned
2641
2700
  return 0;
2642
2701
 
2643
2702
  on_error:
2644
- git_vector_free_deep(&refspecs);
2703
+ git_vector_dispose_deep(&refspecs);
2645
2704
 
2646
2705
  return -1;
2647
2706
  }
@@ -2789,7 +2848,7 @@ cleanup:
2789
2848
  git_vector_foreach(&refs, i, dup) {
2790
2849
  git__free(dup);
2791
2850
  }
2792
- git_vector_free(&refs);
2851
+ git_vector_dispose(&refs);
2793
2852
  return error;
2794
2853
  }
2795
2854
 
@@ -2958,12 +3017,22 @@ int git_remote_upload(
2958
3017
  }
2959
3018
  }
2960
3019
 
2961
- if ((error = git_push_finish(push)) < 0)
2962
- goto cleanup;
3020
+ if (opts && opts->remote_push_options.count > 0)
3021
+ for (i = 0; i < opts->remote_push_options.count; ++i) {
3022
+ char *optstr = git__strdup(opts->remote_push_options.strings[i]);
3023
+ GIT_ERROR_CHECK_ALLOC(optstr);
2963
3024
 
2964
- if (connect_opts.callbacks.push_update_reference &&
2965
- (error = git_push_status_foreach(push, connect_opts.callbacks.push_update_reference, connect_opts.callbacks.payload)) < 0)
2966
- goto cleanup;
3025
+ if ((error = git_vector_insert(&push->remote_push_options, optstr)) < 0)
3026
+ goto cleanup;
3027
+ }
3028
+
3029
+ error = git_push_finish(push);
3030
+
3031
+ if (connect_opts.callbacks.push_update_reference) {
3032
+ const int cb_error = git_push_status_foreach(push, connect_opts.callbacks.push_update_reference, connect_opts.callbacks.payload);
3033
+ if (!error)
3034
+ error = cb_error;
3035
+ }
2967
3036
 
2968
3037
  cleanup:
2969
3038
  git_remote_connect_options_dispose(&connect_opts);
@@ -38,6 +38,7 @@ struct git_remote {
38
38
  git_remote_autotag_option_t download_tags;
39
39
  int prune_refs;
40
40
  int passed_refspecs;
41
+ git_fetch_negotiation nego;
41
42
  };
42
43
 
43
44
  int git_remote__urlfordirection(git_str *url_out, struct git_remote *remote, int direction, const git_remote_callbacks *callbacks);