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,99 @@
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
+ #ifndef INCLUDE_transports_httpparser_h__
9
+ #define INCLUDE_transports_httpparser_h__
10
+
11
+ #include "git2_util.h"
12
+
13
+ #if defined(GIT_HTTPPARSER_HTTPPARSER)
14
+
15
+ # include <http_parser.h>
16
+
17
+ typedef enum {
18
+ GIT_HTTP_PARSER_OK = HPE_OK,
19
+ GIT_HTTP_PARSER_PAUSED = HPE_PAUSED,
20
+ } git_http_parser_error_t;
21
+
22
+ typedef enum {
23
+ GIT_HTTP_PARSER_REQUEST = HTTP_REQUEST,
24
+ GIT_HTTP_PARSER_RESPONSE = HTTP_RESPONSE,
25
+ } git_http_parser_t;
26
+
27
+ typedef struct git_http_parser git_http_parser;
28
+
29
+ typedef struct {
30
+ int (*on_message_begin)(git_http_parser *);
31
+ int (*on_url)(git_http_parser *, const char *, size_t);
32
+ int (*on_header_field)(git_http_parser *, const char *, size_t);
33
+ int (*on_header_value)(git_http_parser *, const char *, size_t);
34
+ int (*on_headers_complete)(git_http_parser *);
35
+ int (*on_body)(git_http_parser *, const char *, size_t);
36
+ int (*on_message_complete)(git_http_parser *);
37
+ } git_http_parser_settings;
38
+
39
+ struct git_http_parser {
40
+ http_parser parser;
41
+ git_http_parser_settings settings;
42
+ void *data;
43
+ };
44
+
45
+ void git_http_parser_init(
46
+ git_http_parser *parser,
47
+ git_http_parser_t type,
48
+ git_http_parser_settings *settings);
49
+
50
+ size_t git_http_parser_execute(
51
+ git_http_parser *parser,
52
+ const char *data,
53
+ size_t len);
54
+
55
+ # define git_http_parser_status_code(parser) parser->parser.status_code
56
+ # define git_http_parser_keep_alive(parser) http_should_keep_alive(&parser->parser)
57
+ # define git_http_parser_pause(parser) (http_parser_pause(&parser->parser, 1), 0)
58
+ # define git_http_parser_resume(parser) http_parser_pause(&parser->parser, 0)
59
+ # define git_http_parser_remain_after_pause(parser) 1
60
+ # define git_http_parser_errno(parser) parser->parser.http_errno
61
+ # define git_http_parser_errmsg(parser, errno) http_errno_description(errno)
62
+
63
+ #elif defined(GIT_HTTPPARSER_LLHTTP) || defined(GIT_HTTPPARSER_BUILTIN)
64
+
65
+ # include <llhttp.h>
66
+
67
+ typedef enum {
68
+ GIT_HTTP_PARSER_OK = HPE_OK,
69
+ GIT_HTTP_PARSER_PAUSED = HPE_PAUSED,
70
+ } git_http_parser_error_t;
71
+
72
+ typedef enum {
73
+ GIT_HTTP_PARSER_REQUEST = HTTP_REQUEST,
74
+ GIT_HTTP_PARSER_RESPONSE = HTTP_RESPONSE,
75
+ } git_http_parser_t;
76
+
77
+ typedef llhttp_t git_http_parser;
78
+ typedef llhttp_settings_t git_http_parser_settings;
79
+
80
+ # define git_http_parser_init(parser, direction, settings) llhttp_init(parser, (llhttp_type_t)direction, settings)
81
+
82
+ size_t git_http_parser_execute(
83
+ git_http_parser *parser,
84
+ const char *data,
85
+ size_t len);
86
+
87
+ # define git_http_parser_status_code(parser) parser->status_code
88
+ # define git_http_parser_keep_alive(parser) llhttp_should_keep_alive(parser)
89
+ # define git_http_parser_pause(parser) (llhttp_pause(parser), GIT_HTTP_PARSER_PAUSED)
90
+ # define git_http_parser_resume(parser) llhttp_resume(parser)
91
+ # define git_http_parser_remain_after_pause(parser) 0
92
+ # define git_http_parser_errno(parser) parser->error
93
+ # define git_http_parser_errmsg(parser, errno) llhttp_get_error_reason(parser)
94
+
95
+ #else
96
+ # error unknown http-parser
97
+ #endif
98
+
99
+ #endif
@@ -58,7 +58,7 @@ static void free_heads(git_vector *heads)
58
58
  git_vector_foreach(heads, i, head)
59
59
  free_head(head);
60
60
 
61
- git_vector_free(heads);
61
+ git_vector_dispose(heads);
62
62
  }
63
63
 
64
64
  static int add_ref(transport_local *t, const char *name)
@@ -108,10 +108,6 @@ static int add_ref(transport_local *t, const char *name)
108
108
  return error;
109
109
  }
110
110
 
111
- /* If it's not a tag, we don't need to try to peel it */
112
- if (git__prefixcmp(name, GIT_REFS_TAGS_DIR))
113
- return 0;
114
-
115
111
  if ((error = git_object_lookup(&obj, t->repo, &head->oid, GIT_OBJECT_ANY)) < 0)
116
112
  return error;
117
113
 
@@ -186,7 +182,7 @@ static int store_refs(transport_local *t)
186
182
  return 0;
187
183
 
188
184
  on_error:
189
- git_vector_free(&t->refs);
185
+ git_vector_dispose(&t->refs);
190
186
  git_strarray_dispose(&ref_names);
191
187
  return -1;
192
188
  }
@@ -295,15 +291,18 @@ static int local_ls(const git_remote_head ***out, size_t *size, git_transport *t
295
291
  static int local_negotiate_fetch(
296
292
  git_transport *transport,
297
293
  git_repository *repo,
298
- const git_remote_head * const *refs,
299
- size_t count)
294
+ const git_fetch_negotiation *wants)
300
295
  {
301
296
  transport_local *t = (transport_local*)transport;
302
297
  git_remote_head *rhead;
303
298
  unsigned int i;
304
299
 
305
- GIT_UNUSED(refs);
306
- GIT_UNUSED(count);
300
+ GIT_UNUSED(wants);
301
+
302
+ if (wants->depth) {
303
+ git_error_set(GIT_ERROR_NET, "shallow fetch is not supported by the local transport");
304
+ return GIT_ENOTSUPPORTED;
305
+ }
307
306
 
308
307
  /* Fill in the loids */
309
308
  git_vector_foreach(&t->refs, i, rhead) {
@@ -322,6 +321,16 @@ static int local_negotiate_fetch(
322
321
  return 0;
323
322
  }
324
323
 
324
+ static int local_shallow_roots(
325
+ git_oidarray *out,
326
+ git_transport *transport)
327
+ {
328
+ GIT_UNUSED(out);
329
+ GIT_UNUSED(transport);
330
+
331
+ return 0;
332
+ }
333
+
325
334
  static int local_push_update_remote_ref(
326
335
  git_repository *remote_repo,
327
336
  const char *lref,
@@ -445,7 +454,7 @@ static int local_push(
445
454
  default:
446
455
  last = git_error_last();
447
456
 
448
- if (last && last->message)
457
+ if (last->klass != GIT_ERROR_NONE)
449
458
  status->msg = git__strdup(last->message);
450
459
  else
451
460
  status->msg = git__strdup("Unspecified error encountered");
@@ -747,6 +756,7 @@ int git_transport_local(git_transport **out, git_remote *owner, void *param)
747
756
  t->parent.oid_type = local_oid_type;
748
757
  #endif
749
758
  t->parent.negotiate_fetch = local_negotiate_fetch;
759
+ t->parent.shallow_roots = local_shallow_roots;
750
760
  t->parent.download_pack = local_download_pack;
751
761
  t->parent.push = local_push;
752
762
  t->parent.close = local_close;
@@ -13,30 +13,42 @@
13
13
  #include "refspec.h"
14
14
  #include "proxy.h"
15
15
 
16
- static int git_smart__recv_cb(gitno_buffer *buf)
16
+ int git_smart__recv(transport_smart *t)
17
17
  {
18
- transport_smart *t = (transport_smart *) buf->cb_data;
19
- size_t old_len, bytes_read;
20
- int error;
18
+ size_t bytes_read;
19
+ int ret;
21
20
 
21
+ GIT_ASSERT_ARG(t);
22
22
  GIT_ASSERT(t->current_stream);
23
23
 
24
- old_len = buf->offset;
24
+ if (git_staticstr_remain(&t->buffer) == 0) {
25
+ git_error_set(GIT_ERROR_NET, "out of buffer space");
26
+ return -1;
27
+ }
25
28
 
26
- if ((error = t->current_stream->read(t->current_stream, buf->data + buf->offset, buf->len - buf->offset, &bytes_read)) < 0)
27
- return error;
29
+ ret = t->current_stream->read(t->current_stream,
30
+ git_staticstr_offset(&t->buffer),
31
+ git_staticstr_remain(&t->buffer),
32
+ &bytes_read);
33
+
34
+ if (ret < 0)
35
+ return ret;
36
+
37
+ GIT_ASSERT(bytes_read <= INT_MAX);
38
+ GIT_ASSERT(bytes_read <= git_staticstr_remain(&t->buffer));
28
39
 
29
- buf->offset += bytes_read;
40
+ git_staticstr_increase(&t->buffer, bytes_read);
30
41
 
31
42
  if (t->packetsize_cb && !t->cancelled.val) {
32
- error = t->packetsize_cb(bytes_read, t->packetsize_payload);
33
- if (error) {
43
+ ret = t->packetsize_cb(bytes_read, t->packetsize_payload);
44
+
45
+ if (ret) {
34
46
  git_atomic32_set(&t->cancelled, 1);
35
47
  return GIT_EUSER;
36
48
  }
37
49
  }
38
50
 
39
- return (int)(buf->offset - old_len);
51
+ return (int)bytes_read;
40
52
  }
41
53
 
42
54
  GIT_INLINE(int) git_smart__reset_stream(transport_smart *t, bool close_subtransport)
@@ -112,7 +124,7 @@ static void free_symrefs(git_vector *symrefs)
112
124
  git__free(spec);
113
125
  }
114
126
 
115
- git_vector_free(symrefs);
127
+ git_vector_dispose(symrefs);
116
128
  }
117
129
 
118
130
  static int git_smart__connect(
@@ -155,8 +167,6 @@ static int git_smart__connect(
155
167
  /* Save off the current stream (i.e. socket) that we are working with */
156
168
  t->current_stream = stream;
157
169
 
158
- gitno_buffer_setup_callback(&t->buffer, t->buffer_data, sizeof(t->buffer_data), git_smart__recv_cb, t);
159
-
160
170
  /* 2 flushes for RPC; 1 for stateful */
161
171
  if ((error = git_smart__store_refs(t, t->rpc ? 2 : 1)) < 0)
162
172
  return error;
@@ -239,6 +249,9 @@ static int git_smart__capabilities(unsigned int *capabilities, git_transport *tr
239
249
 
240
250
  *capabilities = 0;
241
251
 
252
+ if (t->caps.push_options)
253
+ *capabilities |= GIT_REMOTE_CAPABILITY_PUSH_OPTIONS;
254
+
242
255
  if (t->caps.want_tip_sha1)
243
256
  *capabilities |= GIT_REMOTE_CAPABILITY_TIP_OID;
244
257
 
@@ -313,8 +326,6 @@ int git_smart__negotiation_step(git_transport *transport, void *data, size_t len
313
326
  if ((error = stream->write(stream, (const char *)data, len)) < 0)
314
327
  return error;
315
328
 
316
- gitno_buffer_setup_callback(&t->buffer, t->buffer_data, sizeof(t->buffer_data), git_smart__recv_cb, t);
317
-
318
329
  return 0;
319
330
  }
320
331
 
@@ -339,8 +350,6 @@ int git_smart__get_push_stream(transport_smart *t, git_smart_subtransport_stream
339
350
  /* Save off the current stream (i.e. socket) that we are working with */
340
351
  t->current_stream = *stream;
341
352
 
342
- gitno_buffer_setup_callback(&t->buffer, t->buffer_data, sizeof(t->buffer_data), git_smart__recv_cb, t);
343
-
344
353
  return 0;
345
354
  }
346
355
 
@@ -364,17 +373,27 @@ static int git_smart__close(git_transport *transport)
364
373
  git_vector *common = &t->common;
365
374
  unsigned int i;
366
375
  git_pkt *p;
376
+ git_smart_service_t service;
367
377
  int ret;
368
378
  git_smart_subtransport_stream *stream;
369
379
  const char flush[] = "0000";
370
380
 
381
+ if (t->direction == GIT_DIRECTION_FETCH) {
382
+ service = GIT_SERVICE_UPLOADPACK;
383
+ } else if (t->direction == GIT_DIRECTION_PUSH) {
384
+ service = GIT_SERVICE_RECEIVEPACK;
385
+ } else {
386
+ git_error_set(GIT_ERROR_NET, "invalid direction");
387
+ return -1;
388
+ }
389
+
371
390
  /*
372
391
  * If we're still connected at this point and not using RPC,
373
392
  * we should say goodbye by sending a flush, or git-daemon
374
393
  * will complain that we disconnected unexpectedly.
375
394
  */
376
395
  if (t->connected && !t->rpc &&
377
- !t->wrapped->action(&stream, t->wrapped, t->url, GIT_SERVICE_UPLOADPACK)) {
396
+ !t->wrapped->action(&stream, t->wrapped, t->url, service)) {
378
397
  t->current_stream->write(t->current_stream, flush, 4);
379
398
  }
380
399
 
@@ -383,7 +402,7 @@ static int git_smart__close(git_transport *transport)
383
402
  git_vector_foreach(common, i, p)
384
403
  git_pkt_free(p);
385
404
 
386
- git_vector_free(common);
405
+ git_vector_dispose(common);
387
406
 
388
407
  if (t->url) {
389
408
  git__free(t->url);
@@ -408,14 +427,16 @@ static void git_smart__free(git_transport *transport)
408
427
  /* Free the subtransport */
409
428
  t->wrapped->free(t->wrapped);
410
429
 
411
- git_vector_free(&t->heads);
430
+ git_vector_dispose(&t->heads);
412
431
  git_vector_foreach(refs, i, p)
413
432
  git_pkt_free(p);
414
433
 
415
- git_vector_free(refs);
434
+ git_vector_dispose(refs);
416
435
 
417
436
  git_remote_connect_options_dispose(&t->connect_opts);
418
437
 
438
+ git_array_dispose(t->shallow_roots);
439
+
419
440
  git__free(t->caps.object_format);
420
441
  git__free(t->caps.agent);
421
442
  git__free(t);
@@ -490,6 +511,7 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
490
511
  t->parent.close = git_smart__close;
491
512
  t->parent.free = git_smart__free;
492
513
  t->parent.negotiate_fetch = git_smart__negotiate_fetch;
514
+ t->parent.shallow_roots = git_smart__shallow_roots;
493
515
  t->parent.download_pack = git_smart__download_pack;
494
516
  t->parent.push = git_smart__push;
495
517
  t->parent.ls = git_smart__ls;
@@ -499,20 +521,16 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
499
521
  t->owner = owner;
500
522
  t->rpc = definition->rpc;
501
523
 
502
- if (git_vector_init(&t->refs, 16, ref_name_cmp) < 0) {
524
+ if (git_vector_init(&t->refs, 16, ref_name_cmp) < 0 ||
525
+ git_vector_init(&t->heads, 16, ref_name_cmp) < 0 ||
526
+ definition->callback(&t->wrapped, &t->parent, definition->param) < 0) {
527
+ git_vector_dispose(&t->refs);
528
+ git_vector_dispose(&t->heads);
503
529
  git__free(t);
504
530
  return -1;
505
531
  }
506
532
 
507
- if (git_vector_init(&t->heads, 16, ref_name_cmp) < 0) {
508
- git__free(t);
509
- return -1;
510
- }
511
-
512
- if (definition->callback(&t->wrapped, &t->parent, definition->param) < 0) {
513
- git__free(t);
514
- return -1;
515
- }
533
+ git_staticstr_init(&t->buffer, GIT_SMART_BUFFER_SIZE);
516
534
 
517
535
  *out = (git_transport *) t;
518
536
  return 0;
@@ -11,11 +11,14 @@
11
11
 
12
12
  #include "git2.h"
13
13
  #include "vector.h"
14
- #include "netops.h"
15
14
  #include "push.h"
16
15
  #include "str.h"
16
+ #include "oidarray.h"
17
+ #include "staticstr.h"
17
18
  #include "git2/sys/transport.h"
18
19
 
20
+ #define GIT_SMART_BUFFER_SIZE 65536
21
+
19
22
  #define GIT_SIDE_BAND_DATA 1
20
23
  #define GIT_SIDE_BAND_PROGRESS 2
21
24
  #define GIT_SIDE_BAND_ERROR 3
@@ -32,8 +35,10 @@
32
35
  #define GIT_CAP_SYMREF "symref"
33
36
  #define GIT_CAP_WANT_TIP_SHA1 "allow-tip-sha1-in-want"
34
37
  #define GIT_CAP_WANT_REACHABLE_SHA1 "allow-reachable-sha1-in-want"
38
+ #define GIT_CAP_SHALLOW "shallow"
35
39
  #define GIT_CAP_OBJECT_FORMAT "object-format="
36
40
  #define GIT_CAP_AGENT "agent="
41
+ #define GIT_CAP_PUSH_OPTIONS "push-options"
37
42
 
38
43
  extern bool git_smart__ofs_delta_enabled;
39
44
 
@@ -50,7 +55,9 @@ typedef enum {
50
55
  GIT_PKT_PROGRESS,
51
56
  GIT_PKT_OK,
52
57
  GIT_PKT_NG,
53
- GIT_PKT_UNPACK
58
+ GIT_PKT_UNPACK,
59
+ GIT_PKT_SHALLOW,
60
+ GIT_PKT_UNSHALLOW
54
61
  } git_pkt_type;
55
62
 
56
63
  /* Used for multi_ack and multi_ack_detailed */
@@ -122,6 +129,11 @@ typedef struct {
122
129
  int unpack_ok;
123
130
  } git_pkt_unpack;
124
131
 
132
+ typedef struct {
133
+ git_pkt_type type;
134
+ git_oid oid;
135
+ } git_pkt_shallow;
136
+
125
137
  typedef struct transport_smart_caps {
126
138
  unsigned int common:1,
127
139
  ofs_delta:1,
@@ -134,7 +146,9 @@ typedef struct transport_smart_caps {
134
146
  report_status:1,
135
147
  thin_pack:1,
136
148
  want_tip_sha1:1,
137
- want_reachable_sha1:1;
149
+ want_reachable_sha1:1,
150
+ shallow:1,
151
+ push_options:1;
138
152
  char *object_format;
139
153
  char *agent;
140
154
  } transport_smart_caps;
@@ -153,14 +167,14 @@ typedef struct {
153
167
  git_vector refs;
154
168
  git_vector heads;
155
169
  git_vector common;
170
+ git_array_oid_t shallow_roots;
156
171
  git_atomic32 cancelled;
157
172
  packetsize_cb packetsize_cb;
158
173
  void *packetsize_payload;
159
174
  unsigned rpc : 1,
160
175
  have_refs : 1,
161
176
  connected : 1;
162
- gitno_buffer buffer;
163
- char buffer_data[65536];
177
+ git_staticstr_with_size(GIT_SMART_BUFFER_SIZE) buffer;
164
178
  } transport_smart;
165
179
 
166
180
  /* smart_protocol.c */
@@ -171,8 +185,9 @@ int git_smart__push(git_transport *transport, git_push *push);
171
185
  int git_smart__negotiate_fetch(
172
186
  git_transport *transport,
173
187
  git_repository *repo,
174
- const git_remote_head * const *refs,
175
- size_t count);
188
+ const git_fetch_negotiation *wants);
189
+
190
+ int git_smart__shallow_roots(git_oidarray *out, git_transport *transport);
176
191
 
177
192
  int git_smart__download_pack(
178
193
  git_transport *transport,
@@ -180,6 +195,8 @@ int git_smart__download_pack(
180
195
  git_indexer_progress *stats);
181
196
 
182
197
  /* smart.c */
198
+ int git_smart__recv(transport_smart *t);
199
+
183
200
  int git_smart__negotiation_step(git_transport *transport, void *data, size_t len);
184
201
  int git_smart__get_push_stream(transport_smart *t, git_smart_subtransport_stream **out);
185
202
 
@@ -188,14 +205,14 @@ int git_smart__update_heads(transport_smart *t, git_vector *symrefs);
188
205
  /* smart_pkt.c */
189
206
  typedef struct {
190
207
  git_oid_t oid_type;
191
- int seen_capabilities: 1;
208
+ unsigned int seen_capabilities: 1;
192
209
  } git_pkt_parse_data;
193
210
 
194
211
  int git_pkt_parse_line(git_pkt **head, const char **endptr, const char *line, size_t linelen, git_pkt_parse_data *data);
195
212
  int git_pkt_buffer_flush(git_str *buf);
196
213
  int git_pkt_send_flush(GIT_SOCKET s);
197
214
  int git_pkt_buffer_done(git_str *buf);
198
- int git_pkt_buffer_wants(const git_remote_head * const *refs, size_t count, transport_smart_caps *caps, git_str *buf);
215
+ int git_pkt_buffer_wants(const git_fetch_negotiation *wants, transport_smart_caps *caps, git_str *buf);
199
216
  int git_pkt_buffer_have(git_oid *oid, git_str *buf);
200
217
  void git_pkt_free(git_pkt *pkt);
201
218