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
@@ -27,7 +27,6 @@ bool git_smart__ofs_delta_enabled = true;
27
27
 
28
28
  int git_smart__store_refs(transport_smart *t, int flushes)
29
29
  {
30
- gitno_buffer *buf = &t->buffer;
31
30
  git_vector *refs = &t->refs;
32
31
  int error, flush = 0, recvd;
33
32
  const char *line_end = NULL;
@@ -45,8 +44,10 @@ int git_smart__store_refs(transport_smart *t, int flushes)
45
44
  pkt = NULL;
46
45
 
47
46
  do {
48
- if (buf->offset > 0)
49
- error = git_pkt_parse_line(&pkt, &line_end, buf->data, buf->offset, &pkt_parse_data);
47
+ if (t->buffer.len > 0)
48
+ error = git_pkt_parse_line(&pkt, &line_end,
49
+ t->buffer.data, t->buffer.len,
50
+ &pkt_parse_data);
50
51
  else
51
52
  error = GIT_EBUFS;
52
53
 
@@ -54,19 +55,18 @@ int git_smart__store_refs(transport_smart *t, int flushes)
54
55
  return error;
55
56
 
56
57
  if (error == GIT_EBUFS) {
57
- if ((recvd = gitno_recv(buf)) < 0)
58
+ if ((recvd = git_smart__recv(t)) < 0)
58
59
  return recvd;
59
60
 
60
61
  if (recvd == 0) {
61
- git_error_set(GIT_ERROR_NET, "early EOF");
62
+ git_error_set(GIT_ERROR_NET, "could not read refs from remote repository");
62
63
  return GIT_EEOF;
63
64
  }
64
65
 
65
66
  continue;
66
67
  }
67
68
 
68
- if (gitno_consume(buf, line_end) < 0)
69
- return -1;
69
+ git_staticstr_consume(&t->buffer, line_end);
70
70
 
71
71
  if (pkt->type == GIT_PKT_ERR) {
72
72
  git_error_set(GIT_ERROR_NET, "remote error: %s", ((git_pkt_err *)pkt)->error);
@@ -194,6 +194,12 @@ int git_smart__detect_caps(
194
194
  continue;
195
195
  }
196
196
 
197
+ if (!git__prefixcmp(ptr, GIT_CAP_PUSH_OPTIONS)) {
198
+ caps->common = caps->push_options = 1;
199
+ ptr += strlen(GIT_CAP_PUSH_OPTIONS);
200
+ continue;
201
+ }
202
+
197
203
  if (!git__prefixcmp(ptr, GIT_CAP_THIN_PACK)) {
198
204
  caps->common = caps->thin_pack = 1;
199
205
  ptr += strlen(GIT_CAP_THIN_PACK);
@@ -243,6 +249,12 @@ int git_smart__detect_caps(
243
249
  continue;
244
250
  }
245
251
 
252
+ if (!git__prefixcmp(ptr, GIT_CAP_SHALLOW)) {
253
+ caps->common = caps->shallow = 1;
254
+ ptr += strlen(GIT_CAP_SHALLOW);
255
+ continue;
256
+ }
257
+
246
258
  /* We don't know this capability, so skip it */
247
259
  ptr = strchr(ptr, ' ');
248
260
  }
@@ -250,16 +262,23 @@ int git_smart__detect_caps(
250
262
  return 0;
251
263
  }
252
264
 
253
- static int recv_pkt(git_pkt **out_pkt, git_pkt_type *out_type, gitno_buffer *buf)
265
+ static int recv_pkt(
266
+ git_pkt **out_pkt,
267
+ git_pkt_type *out_type,
268
+ transport_smart *t)
254
269
  {
255
- const char *ptr = buf->data, *line_end = ptr;
270
+ const char *ptr = t->buffer.data, *line_end = ptr;
256
271
  git_pkt *pkt = NULL;
257
272
  git_pkt_parse_data pkt_parse_data = { 0 };
258
273
  int error = 0, ret;
259
274
 
275
+ pkt_parse_data.oid_type = t->owner->repo->oid_type;
276
+ pkt_parse_data.seen_capabilities = 1;
277
+
260
278
  do {
261
- if (buf->offset > 0)
262
- error = git_pkt_parse_line(&pkt, &line_end, ptr, buf->offset, &pkt_parse_data);
279
+ if (t->buffer.len > 0)
280
+ error = git_pkt_parse_line(&pkt, &line_end, ptr,
281
+ t->buffer.len, &pkt_parse_data);
263
282
  else
264
283
  error = GIT_EBUFS;
265
284
 
@@ -269,16 +288,15 @@ static int recv_pkt(git_pkt **out_pkt, git_pkt_type *out_type, gitno_buffer *buf
269
288
  if (error < 0 && error != GIT_EBUFS)
270
289
  return error;
271
290
 
272
- if ((ret = gitno_recv(buf)) < 0) {
291
+ if ((ret = git_smart__recv(t)) < 0) {
273
292
  return ret;
274
293
  } else if (ret == 0) {
275
- git_error_set(GIT_ERROR_NET, "early EOF");
294
+ git_error_set(GIT_ERROR_NET, "could not read from remote repository");
276
295
  return GIT_EEOF;
277
296
  }
278
297
  } while (error);
279
298
 
280
- if (gitno_consume(buf, line_end) < 0)
281
- return -1;
299
+ git_staticstr_consume(&t->buffer, line_end);
282
300
 
283
301
  if (out_type != NULL)
284
302
  *out_type = pkt->type;
@@ -293,13 +311,19 @@ static int recv_pkt(git_pkt **out_pkt, git_pkt_type *out_type, gitno_buffer *buf
293
311
  static int store_common(transport_smart *t)
294
312
  {
295
313
  git_pkt *pkt = NULL;
296
- gitno_buffer *buf = &t->buffer;
297
314
  int error;
298
315
 
299
316
  do {
300
- if ((error = recv_pkt(&pkt, NULL, buf)) < 0)
317
+ if ((error = recv_pkt(&pkt, NULL, t)) < 0)
301
318
  return error;
302
319
 
320
+ if (t->rpc && (pkt->type == GIT_PKT_SHALLOW ||
321
+ pkt->type == GIT_PKT_UNSHALLOW ||
322
+ pkt->type == GIT_PKT_FLUSH)) {
323
+ git__free(pkt);
324
+ continue;
325
+ }
326
+
303
327
  if (pkt->type != GIT_PKT_ACK) {
304
328
  git__free(pkt);
305
329
  return 0;
@@ -314,7 +338,7 @@ static int store_common(transport_smart *t)
314
338
  return 0;
315
339
  }
316
340
 
317
- static int wait_while_ack(gitno_buffer *buf)
341
+ static int wait_while_ack(transport_smart *t)
318
342
  {
319
343
  int error;
320
344
  git_pkt *pkt = NULL;
@@ -323,7 +347,7 @@ static int wait_while_ack(gitno_buffer *buf)
323
347
  while (1) {
324
348
  git_pkt_free(pkt);
325
349
 
326
- if ((error = recv_pkt(&pkt, NULL, buf)) < 0)
350
+ if ((error = recv_pkt(&pkt, NULL, t)) < 0)
327
351
  return error;
328
352
 
329
353
  if (pkt->type == GIT_PKT_NAK)
@@ -344,11 +368,52 @@ static int wait_while_ack(gitno_buffer *buf)
344
368
  return 0;
345
369
  }
346
370
 
347
- int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, const git_remote_head * const *wants, size_t count)
371
+ static int cap_not_sup_err(const char *cap_name)
372
+ {
373
+ git_error_set(GIT_ERROR_NET, "server doesn't support %s", cap_name);
374
+ return GIT_EINVALID;
375
+ }
376
+
377
+ /* Disables server capabilities we're not interested in */
378
+ static int setup_caps(
379
+ transport_smart_caps *caps,
380
+ const git_fetch_negotiation *wants)
381
+ {
382
+ if (wants->depth > 0) {
383
+ if (!caps->shallow)
384
+ return cap_not_sup_err(GIT_CAP_SHALLOW);
385
+ } else {
386
+ caps->shallow = 0;
387
+ }
388
+
389
+ return 0;
390
+ }
391
+
392
+ static int setup_shallow_roots(
393
+ git_array_oid_t *out,
394
+ const git_fetch_negotiation *wants)
395
+ {
396
+ git_array_clear(*out);
397
+
398
+ if (wants->shallow_roots_len > 0) {
399
+ git_array_init_to_size(*out, wants->shallow_roots_len);
400
+ GIT_ERROR_CHECK_ALLOC(out->ptr);
401
+
402
+ memcpy(out->ptr, wants->shallow_roots,
403
+ sizeof(git_oid) * wants->shallow_roots_len);
404
+ out->size = wants->shallow_roots_len;
405
+ }
406
+
407
+ return 0;
408
+ }
409
+
410
+ int git_smart__negotiate_fetch(
411
+ git_transport *transport,
412
+ git_repository *repo,
413
+ const git_fetch_negotiation *wants)
348
414
  {
349
415
  transport_smart *t = (transport_smart *)transport;
350
416
  git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
351
- gitno_buffer *buf = &t->buffer;
352
417
  git_str data = GIT_STR_INIT;
353
418
  git_revwalk *walk = NULL;
354
419
  int error = -1;
@@ -356,7 +421,11 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
356
421
  unsigned int i;
357
422
  git_oid oid;
358
423
 
359
- if ((error = git_pkt_buffer_wants(wants, count, &t->caps, &data)) < 0)
424
+ if ((error = setup_caps(&t->caps, wants)) < 0 ||
425
+ (error = setup_shallow_roots(&t->shallow_roots, wants)) < 0)
426
+ return error;
427
+
428
+ if ((error = git_pkt_buffer_wants(wants, &t->caps, &data)) < 0)
360
429
  return error;
361
430
 
362
431
  if ((error = git_revwalk_new(&walk, repo)) < 0)
@@ -366,6 +435,40 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
366
435
  if ((error = git_revwalk__push_glob(walk, "refs/*", &opts)) < 0)
367
436
  goto on_error;
368
437
 
438
+ if (wants->depth > 0) {
439
+ git_pkt_shallow *pkt;
440
+
441
+ if ((error = git_smart__negotiation_step(&t->parent, data.ptr, data.size)) < 0)
442
+ goto on_error;
443
+
444
+ if (!t->rpc)
445
+ git_str_clear(&data);
446
+
447
+ while ((error = recv_pkt((git_pkt **)&pkt, NULL, t)) == 0) {
448
+ bool complete = false;
449
+
450
+ if (pkt->type == GIT_PKT_SHALLOW) {
451
+ error = git_oidarray__add(&t->shallow_roots, &pkt->oid);
452
+ } else if (pkt->type == GIT_PKT_UNSHALLOW) {
453
+ git_oidarray__remove(&t->shallow_roots, &pkt->oid);
454
+ } else if (pkt->type == GIT_PKT_FLUSH) {
455
+ /* Server is done, stop processing shallow oids */
456
+ complete = true;
457
+ } else {
458
+ git_error_set(GIT_ERROR_NET, "unexpected packet type");
459
+ error = -1;
460
+ }
461
+
462
+ git_pkt_free((git_pkt *) pkt);
463
+
464
+ if (complete || error < 0)
465
+ break;
466
+ }
467
+
468
+ if (error < 0)
469
+ goto on_error;
470
+ }
471
+
369
472
  /*
370
473
  * Our support for ACK extensions is simply to parse them. On
371
474
  * the first ACK we will accept that as enough common
@@ -406,7 +509,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
406
509
  if ((error = store_common(t)) < 0)
407
510
  goto on_error;
408
511
  } else {
409
- if ((error = recv_pkt(NULL, &pkt_type, buf)) < 0)
512
+ if ((error = recv_pkt(NULL, &pkt_type, t)) < 0)
410
513
  goto on_error;
411
514
 
412
515
  if (pkt_type == GIT_PKT_ACK) {
@@ -428,7 +531,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
428
531
  git_pkt_ack *pkt;
429
532
  unsigned int j;
430
533
 
431
- if ((error = git_pkt_buffer_wants(wants, count, &t->caps, &data)) < 0)
534
+ if ((error = git_pkt_buffer_wants(wants, &t->caps, &data)) < 0)
432
535
  goto on_error;
433
536
 
434
537
  git_vector_foreach(&t->common, j, pkt) {
@@ -448,7 +551,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
448
551
  git_pkt_ack *pkt;
449
552
  unsigned int j;
450
553
 
451
- if ((error = git_pkt_buffer_wants(wants, count, &t->caps, &data)) < 0)
554
+ if ((error = git_pkt_buffer_wants(wants, &t->caps, &data)) < 0)
452
555
  goto on_error;
453
556
 
454
557
  git_vector_foreach(&t->common, j, pkt) {
@@ -466,10 +569,11 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
466
569
  goto on_error;
467
570
 
468
571
  if (t->cancelled.val) {
469
- git_error_set(GIT_ERROR_NET, "The fetch was cancelled by the user");
572
+ git_error_set(GIT_ERROR_NET, "the fetch was cancelled");
470
573
  error = GIT_EUSER;
471
574
  goto on_error;
472
575
  }
576
+
473
577
  if ((error = git_smart__negotiation_step(&t->parent, data.ptr, data.size)) < 0)
474
578
  goto on_error;
475
579
 
@@ -478,7 +582,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
478
582
 
479
583
  /* Now let's eat up whatever the server gives us */
480
584
  if (!t->caps.multi_ack && !t->caps.multi_ack_detailed) {
481
- if ((error = recv_pkt(NULL, &pkt_type, buf)) < 0)
585
+ if ((error = recv_pkt(NULL, &pkt_type, t)) < 0)
482
586
  return error;
483
587
 
484
588
  if (pkt_type != GIT_PKT_ACK && pkt_type != GIT_PKT_NAK) {
@@ -486,7 +590,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
486
590
  return -1;
487
591
  }
488
592
  } else {
489
- error = wait_while_ack(buf);
593
+ error = wait_while_ack(t);
490
594
  }
491
595
 
492
596
  return error;
@@ -497,7 +601,29 @@ on_error:
497
601
  return error;
498
602
  }
499
603
 
500
- static int no_sideband(transport_smart *t, struct git_odb_writepack *writepack, gitno_buffer *buf, git_indexer_progress *stats)
604
+ int git_smart__shallow_roots(git_oidarray *out, git_transport *transport)
605
+ {
606
+ transport_smart *t = (transport_smart *)transport;
607
+ size_t len;
608
+
609
+ GIT_ERROR_CHECK_ALLOC_MULTIPLY(&len, t->shallow_roots.size, sizeof(git_oid));
610
+
611
+ out->count = t->shallow_roots.size;
612
+
613
+ if (len) {
614
+ out->ids = git__malloc(len);
615
+ memcpy(out->ids, t->shallow_roots.ptr, len);
616
+ } else {
617
+ out->ids = NULL;
618
+ }
619
+
620
+ return 0;
621
+ }
622
+
623
+ static int no_sideband(
624
+ transport_smart *t,
625
+ struct git_odb_writepack *writepack,
626
+ git_indexer_progress *stats)
501
627
  {
502
628
  int recvd;
503
629
 
@@ -507,12 +633,12 @@ static int no_sideband(transport_smart *t, struct git_odb_writepack *writepack,
507
633
  return GIT_EUSER;
508
634
  }
509
635
 
510
- if (writepack->append(writepack, buf->data, buf->offset, stats) < 0)
636
+ if (writepack->append(writepack, t->buffer.data, t->buffer.len, stats) < 0)
511
637
  return -1;
512
638
 
513
- gitno_consume_n(buf, buf->offset);
639
+ git_staticstr_clear(&t->buffer);
514
640
 
515
- if ((recvd = gitno_recv(buf)) < 0)
641
+ if ((recvd = git_smart__recv(t)) < 0)
516
642
  return recvd;
517
643
  } while(recvd > 0);
518
644
 
@@ -554,7 +680,6 @@ int git_smart__download_pack(
554
680
  git_indexer_progress *stats)
555
681
  {
556
682
  transport_smart *t = (transport_smart *)transport;
557
- gitno_buffer *buf = &t->buffer;
558
683
  git_odb *odb;
559
684
  struct git_odb_writepack *writepack = NULL;
560
685
  int error = 0;
@@ -573,9 +698,10 @@ int git_smart__download_pack(
573
698
  t->packetsize_payload = &npp;
574
699
 
575
700
  /* We might have something in the buffer already from negotiate_fetch */
576
- if (t->buffer.offset > 0 && !t->cancelled.val)
577
- if (t->packetsize_cb(t->buffer.offset, t->packetsize_payload))
701
+ if (t->buffer.len > 0 && !t->cancelled.val) {
702
+ if (t->packetsize_cb(t->buffer.len, t->packetsize_payload))
578
703
  git_atomic32_set(&t->cancelled, 1);
704
+ }
579
705
  }
580
706
 
581
707
  if ((error = git_repository_odb__weakptr(&odb, repo)) < 0 ||
@@ -588,7 +714,7 @@ int git_smart__download_pack(
588
714
  * check which one belongs there.
589
715
  */
590
716
  if (!t->caps.side_band && !t->caps.side_band_64k) {
591
- error = no_sideband(t, writepack, buf, stats);
717
+ error = no_sideband(t, writepack, stats);
592
718
  goto done;
593
719
  }
594
720
 
@@ -602,7 +728,7 @@ int git_smart__download_pack(
602
728
  goto done;
603
729
  }
604
730
 
605
- if ((error = recv_pkt(&pkt, NULL, buf)) >= 0) {
731
+ if ((error = recv_pkt(&pkt, NULL, t)) >= 0) {
606
732
  /* Check cancellation after network call */
607
733
  if (t->cancelled.val) {
608
734
  git_error_clear();
@@ -669,33 +795,54 @@ done:
669
795
  static int gen_pktline(git_str *buf, git_push *push)
670
796
  {
671
797
  push_spec *spec;
798
+ char *option;
672
799
  size_t i, len;
673
- char old_id[GIT_OID_SHA1_HEXSIZE+1], new_id[GIT_OID_SHA1_HEXSIZE+1];
674
-
675
- old_id[GIT_OID_SHA1_HEXSIZE] = '\0'; new_id[GIT_OID_SHA1_HEXSIZE] = '\0';
800
+ char old_id[GIT_OID_MAX_HEXSIZE + 1], new_id[GIT_OID_MAX_HEXSIZE + 1];
801
+ size_t old_id_len, new_id_len;
676
802
 
677
803
  git_vector_foreach(&push->specs, i, spec) {
678
- len = 2*GIT_OID_SHA1_HEXSIZE + 7 + strlen(spec->refspec.dst);
804
+ len = strlen(spec->refspec.dst) + 7;
679
805
 
680
806
  if (i == 0) {
681
- ++len; /* '\0' */
807
+ /* Need a leading \0 */
808
+ ++len;
809
+
682
810
  if (push->report_status)
683
811
  len += strlen(GIT_CAP_REPORT_STATUS) + 1;
812
+
813
+ if (git_vector_length(&push->remote_push_options) > 0)
814
+ len += strlen(GIT_CAP_PUSH_OPTIONS) + 1;
815
+
684
816
  len += strlen(GIT_CAP_SIDE_BAND_64K) + 1;
685
817
  }
686
818
 
819
+ old_id_len = git_oid_hexsize(git_oid_type(&spec->roid));
820
+ new_id_len = git_oid_hexsize(git_oid_type(&spec->loid));
821
+
822
+ len += (old_id_len + new_id_len);
823
+
687
824
  git_oid_fmt(old_id, &spec->roid);
825
+ old_id[old_id_len] = '\0';
826
+
688
827
  git_oid_fmt(new_id, &spec->loid);
828
+ new_id[new_id_len] = '\0';
689
829
 
690
- git_str_printf(buf, "%04"PRIxZ"%s %s %s", len, old_id, new_id, spec->refspec.dst);
830
+ git_str_printf(buf, "%04"PRIxZ"%.*s %.*s %s", len,
831
+ (int)old_id_len, old_id, (int)new_id_len, new_id,
832
+ spec->refspec.dst);
691
833
 
692
834
  if (i == 0) {
693
835
  git_str_putc(buf, '\0');
836
+
694
837
  /* Core git always starts their capabilities string with a space */
695
838
  if (push->report_status) {
696
839
  git_str_putc(buf, ' ');
697
840
  git_str_printf(buf, GIT_CAP_REPORT_STATUS);
698
841
  }
842
+ if (git_vector_length(&push->remote_push_options) > 0) {
843
+ git_str_putc(buf, ' ');
844
+ git_str_printf(buf, GIT_CAP_PUSH_OPTIONS);
845
+ }
699
846
  git_str_putc(buf, ' ');
700
847
  git_str_printf(buf, GIT_CAP_SIDE_BAND_64K);
701
848
  }
@@ -703,6 +850,13 @@ static int gen_pktline(git_str *buf, git_push *push)
703
850
  git_str_putc(buf, '\n');
704
851
  }
705
852
 
853
+ if (git_vector_length(&push->remote_push_options) > 0) {
854
+ git_str_printf(buf, "0000");
855
+ git_vector_foreach(&push->remote_push_options, i, option) {
856
+ git_str_printf(buf, "%04"PRIxZ"%s", strlen(option) + 4 , option);
857
+ }
858
+ }
859
+
706
860
  git_str_puts(buf, "0000");
707
861
  return git_str_oom(buf) ? -1 : 0;
708
862
  }
@@ -807,15 +961,15 @@ static int parse_report(transport_smart *transport, git_push *push)
807
961
  git_pkt *pkt = NULL;
808
962
  git_pkt_parse_data pkt_parse_data = { 0 };
809
963
  const char *line_end = NULL;
810
- gitno_buffer *buf = &transport->buffer;
811
964
  int error, recvd;
812
965
  git_str data_pkt_buf = GIT_STR_INIT;
813
966
 
814
967
  for (;;) {
815
- if (buf->offset > 0)
968
+ if (transport->buffer.len > 0)
816
969
  error = git_pkt_parse_line(&pkt, &line_end,
817
- buf->data, buf->offset,
818
- &pkt_parse_data);
970
+ transport->buffer.data,
971
+ transport->buffer.len,
972
+ &pkt_parse_data);
819
973
  else
820
974
  error = GIT_EBUFS;
821
975
 
@@ -825,22 +979,20 @@ static int parse_report(transport_smart *transport, git_push *push)
825
979
  }
826
980
 
827
981
  if (error == GIT_EBUFS) {
828
- if ((recvd = gitno_recv(buf)) < 0) {
982
+ if ((recvd = git_smart__recv(transport)) < 0) {
829
983
  error = recvd;
830
984
  goto done;
831
985
  }
832
986
 
833
987
  if (recvd == 0) {
834
- git_error_set(GIT_ERROR_NET, "early EOF");
988
+ git_error_set(GIT_ERROR_NET, "could not read report from remote repository");
835
989
  error = GIT_EEOF;
836
990
  goto done;
837
991
  }
838
992
  continue;
839
993
  }
840
994
 
841
- if (gitno_consume(buf, line_end) < 0)
842
- return -1;
843
-
995
+ git_staticstr_consume(&transport->buffer, line_end);
844
996
  error = 0;
845
997
 
846
998
  switch (pkt->type) {
@@ -1005,7 +1157,7 @@ struct push_packbuilder_payload
1005
1157
  git_push_transfer_progress_cb cb;
1006
1158
  void *cb_payload;
1007
1159
  size_t last_bytes;
1008
- double last_progress_report_time;
1160
+ uint64_t last_progress_report_time;
1009
1161
  };
1010
1162
 
1011
1163
  static int stream_thunk(void *buf, size_t size, void *data)
@@ -1017,11 +1169,11 @@ static int stream_thunk(void *buf, size_t size, void *data)
1017
1169
  return error;
1018
1170
 
1019
1171
  if (payload->cb) {
1020
- double current_time = git__timer();
1021
- double elapsed = current_time - payload->last_progress_report_time;
1172
+ uint64_t current_time = git_time_monotonic();
1173
+ uint64_t elapsed = current_time - payload->last_progress_report_time;
1022
1174
  payload->last_bytes += size;
1023
1175
 
1024
- if (elapsed < 0 || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
1176
+ if (elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
1025
1177
  payload->last_progress_report_time = current_time;
1026
1178
  error = payload->cb(payload->pb->nr_written, payload->pb->nr_objects, payload->last_bytes, payload->cb_payload);
1027
1179
  }
@@ -1050,7 +1202,7 @@ int git_smart__push(git_transport *transport, git_push *push)
1050
1202
  #ifdef PUSH_DEBUG
1051
1203
  {
1052
1204
  git_remote_head *head;
1053
- char hex[GIT_OID_SHA1_HEXSIZE+1]; hex[GIT_OID_SHA1_HEXSIZE] = '\0';
1205
+ char hex[GIT_OID_MAX_HEXSIZE+1], hex[GIT_OID_MAX_HEXSIZE] = '\0';
1054
1206
 
1055
1207
  git_vector_foreach(&push->remote->refs, i, head) {
1056
1208
  git_oid_fmt(hex, &head->oid);