rugged 1.7.2 → 1.9.4

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 (405) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +195 -1
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
  59. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  60. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  61. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  62. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  63. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  64. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  65. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  66. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  67. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  68. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  69. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  70. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  71. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  72. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  73. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  74. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  75. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  76. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  77. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  78. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  79. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  80. data/vendor/libgit2/include/git2/apply.h +27 -6
  81. data/vendor/libgit2/include/git2/attr.h +17 -4
  82. data/vendor/libgit2/include/git2/blame.h +133 -28
  83. data/vendor/libgit2/include/git2/blob.h +71 -28
  84. data/vendor/libgit2/include/git2/branch.h +22 -15
  85. data/vendor/libgit2/include/git2/buffer.h +6 -4
  86. data/vendor/libgit2/include/git2/cert.h +2 -1
  87. data/vendor/libgit2/include/git2/checkout.h +83 -32
  88. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  89. data/vendor/libgit2/include/git2/clone.h +25 -9
  90. data/vendor/libgit2/include/git2/commit.h +132 -3
  91. data/vendor/libgit2/include/git2/common.h +120 -63
  92. data/vendor/libgit2/include/git2/config.h +93 -23
  93. data/vendor/libgit2/include/git2/credential.h +30 -2
  94. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  96. data/vendor/libgit2/include/git2/describe.h +13 -1
  97. data/vendor/libgit2/include/git2/diff.h +38 -8
  98. data/vendor/libgit2/include/git2/email.h +9 -29
  99. data/vendor/libgit2/include/git2/errors.h +46 -73
  100. data/vendor/libgit2/include/git2/filter.h +14 -7
  101. data/vendor/libgit2/include/git2/global.h +8 -1
  102. data/vendor/libgit2/include/git2/graph.h +3 -2
  103. data/vendor/libgit2/include/git2/ignore.h +10 -0
  104. data/vendor/libgit2/include/git2/index.h +100 -15
  105. data/vendor/libgit2/include/git2/indexer.h +21 -4
  106. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  107. data/vendor/libgit2/include/git2/merge.h +50 -3
  108. data/vendor/libgit2/include/git2/message.h +2 -2
  109. data/vendor/libgit2/include/git2/net.h +3 -1
  110. data/vendor/libgit2/include/git2/notes.h +9 -6
  111. data/vendor/libgit2/include/git2/object.h +9 -8
  112. data/vendor/libgit2/include/git2/odb.h +91 -49
  113. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  114. data/vendor/libgit2/include/git2/oid.h +23 -25
  115. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  116. data/vendor/libgit2/include/git2/pack.h +13 -1
  117. data/vendor/libgit2/include/git2/patch.h +2 -3
  118. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  119. data/vendor/libgit2/include/git2/proxy.h +12 -3
  120. data/vendor/libgit2/include/git2/rebase.h +9 -6
  121. data/vendor/libgit2/include/git2/refdb.h +2 -2
  122. data/vendor/libgit2/include/git2/reflog.h +3 -2
  123. data/vendor/libgit2/include/git2/refs.h +9 -6
  124. data/vendor/libgit2/include/git2/refspec.h +14 -4
  125. data/vendor/libgit2/include/git2/remote.h +113 -25
  126. data/vendor/libgit2/include/git2/repository.h +57 -21
  127. data/vendor/libgit2/include/git2/reset.h +16 -3
  128. data/vendor/libgit2/include/git2/revert.h +9 -4
  129. data/vendor/libgit2/include/git2/revparse.h +3 -3
  130. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  131. data/vendor/libgit2/include/git2/signature.h +46 -1
  132. data/vendor/libgit2/include/git2/stash.h +17 -3
  133. data/vendor/libgit2/include/git2/status.h +10 -6
  134. data/vendor/libgit2/include/git2/stdint.h +87 -85
  135. data/vendor/libgit2/include/git2/strarray.h +2 -3
  136. data/vendor/libgit2/include/git2/submodule.h +20 -9
  137. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  138. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  139. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  140. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  141. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  142. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  143. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  144. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  145. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  146. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  147. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  148. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  149. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  150. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  151. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  152. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  153. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  154. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  155. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  156. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  157. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  158. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  159. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  160. data/vendor/libgit2/include/git2/tag.h +3 -1
  161. data/vendor/libgit2/include/git2/trace.h +9 -3
  162. data/vendor/libgit2/include/git2/transaction.h +3 -2
  163. data/vendor/libgit2/include/git2/transport.h +11 -3
  164. data/vendor/libgit2/include/git2/tree.h +16 -5
  165. data/vendor/libgit2/include/git2/types.h +19 -3
  166. data/vendor/libgit2/include/git2/version.h +46 -8
  167. data/vendor/libgit2/include/git2/worktree.h +16 -6
  168. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  169. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  170. data/vendor/libgit2/src/cli/cmd.c +1 -1
  171. data/vendor/libgit2/src/cli/cmd.h +4 -0
  172. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  173. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  174. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  175. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  176. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  177. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  178. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  179. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  180. data/vendor/libgit2/src/cli/common.c +168 -0
  181. data/vendor/libgit2/src/cli/common.h +63 -0
  182. data/vendor/libgit2/src/cli/error.h +1 -1
  183. data/vendor/libgit2/src/cli/main.c +52 -24
  184. data/vendor/libgit2/src/cli/opt.c +31 -5
  185. data/vendor/libgit2/src/cli/opt.h +21 -3
  186. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  187. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  188. data/vendor/libgit2/src/cli/progress.c +51 -2
  189. data/vendor/libgit2/src/cli/progress.h +12 -0
  190. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  191. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  192. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  193. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  194. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  195. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  196. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  197. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  198. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  199. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  200. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  201. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  202. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  203. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  204. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  205. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  206. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  207. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  208. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  209. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  210. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  211. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  212. data/vendor/libgit2/src/libgit2/config.c +390 -299
  213. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  214. data/vendor/libgit2/src/libgit2/config.h +9 -4
  215. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  216. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  217. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  218. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  219. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  220. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  221. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  222. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  223. data/vendor/libgit2/src/libgit2/delta.c +5 -1
  224. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  225. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  226. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  227. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  228. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  229. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  230. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  231. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  232. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  233. data/vendor/libgit2/src/libgit2/email.c +1 -0
  234. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  235. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  236. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  237. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  238. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  239. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  240. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  241. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  242. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  243. data/vendor/libgit2/src/libgit2/index.c +76 -98
  244. data/vendor/libgit2/src/libgit2/index.h +5 -2
  245. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  246. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  247. data/vendor/libgit2/src/libgit2/indexer.c +36 -40
  248. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  249. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  252. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  253. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  254. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  255. data/vendor/libgit2/src/libgit2/message.c +1 -1
  256. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  257. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  258. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  259. data/vendor/libgit2/src/libgit2/object.c +6 -5
  260. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  261. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  264. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  267. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  268. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  269. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  270. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/path.c +1 -1
  272. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  273. data/vendor/libgit2/src/libgit2/push.c +79 -28
  274. data/vendor/libgit2/src/libgit2/push.h +1 -0
  275. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  276. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  277. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  278. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  279. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  280. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  281. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  282. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  283. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  284. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  285. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  286. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  287. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  288. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  289. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  290. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  291. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  292. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  293. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  294. data/vendor/libgit2/src/libgit2/status.c +1 -1
  295. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  296. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  297. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  298. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  299. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  300. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  301. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  302. data/vendor/libgit2/src/libgit2/submodule.c +118 -68
  303. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  304. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  305. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  306. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  307. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  308. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  309. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  310. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  311. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  312. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  313. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  314. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  315. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  316. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  317. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  318. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  319. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  320. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
  321. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  322. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  323. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  324. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  325. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  326. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  327. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  328. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  329. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  330. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  331. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  332. data/vendor/libgit2/src/util/alloc.c +4 -1
  333. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  334. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  335. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  336. data/vendor/libgit2/src/util/array.h +18 -17
  337. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  338. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  339. data/vendor/libgit2/src/util/date.c +22 -14
  340. data/vendor/libgit2/src/util/date.h +12 -0
  341. data/vendor/libgit2/src/util/errors.c +401 -0
  342. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  343. data/vendor/libgit2/src/util/fs_path.c +81 -10
  344. data/vendor/libgit2/src/util/fs_path.h +29 -0
  345. data/vendor/libgit2/src/util/futils.c +6 -5
  346. data/vendor/libgit2/src/util/futils.h +24 -7
  347. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  348. data/vendor/libgit2/src/util/git2_util.h +6 -0
  349. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  350. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  351. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  352. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  353. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  354. data/vendor/libgit2/src/util/hashmap.h +425 -0
  355. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  356. data/vendor/libgit2/src/util/integer.h +3 -1
  357. data/vendor/libgit2/src/util/net.c +17 -11
  358. data/vendor/libgit2/src/util/net.h +2 -0
  359. data/vendor/libgit2/src/util/pool.c +1 -1
  360. data/vendor/libgit2/src/util/pool.h +5 -0
  361. data/vendor/libgit2/src/util/pqueue.h +1 -1
  362. data/vendor/libgit2/src/util/process.h +223 -0
  363. data/vendor/libgit2/src/util/rand.c +1 -7
  364. data/vendor/libgit2/src/util/regexp.c +1 -1
  365. data/vendor/libgit2/src/util/runtime.c +2 -2
  366. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  367. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  368. data/vendor/libgit2/src/util/str.c +20 -8
  369. data/vendor/libgit2/src/util/str.h +5 -3
  370. data/vendor/libgit2/src/util/strlist.c +108 -0
  371. data/vendor/libgit2/src/util/strlist.h +36 -0
  372. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  373. data/vendor/libgit2/src/util/unix/process.c +706 -0
  374. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  375. data/vendor/libgit2/src/util/util.c +18 -5
  376. data/vendor/libgit2/src/util/util.h +5 -38
  377. data/vendor/libgit2/src/util/vector.c +3 -3
  378. data/vendor/libgit2/src/util/vector.h +2 -2
  379. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  380. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  381. data/vendor/libgit2/src/util/win32/process.c +522 -0
  382. metadata +60 -32
  383. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  384. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  385. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  386. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  387. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  388. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  389. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  390. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  391. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  392. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  393. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  394. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  395. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  396. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  397. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  398. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  399. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  400. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  401. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  402. data/vendor/libgit2/src/util/khash.h +0 -615
  403. data/vendor/libgit2/src/util/strmap.c +0 -100
  404. data/vendor/libgit2/src/util/strmap.h +0 -131
  405. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "httpparser.h"
9
+
10
+ #include <string.h>
11
+
12
+ #if defined(GIT_HTTPPARSER_HTTPPARSER)
13
+
14
+ #include "http_parser.h"
15
+
16
+ static int on_message_begin(http_parser *p)
17
+ {
18
+ git_http_parser *parser = (git_http_parser *)p;
19
+ return parser->settings.on_message_begin(parser);
20
+ }
21
+
22
+ static int on_url(http_parser *p, const char *str, size_t len)
23
+ {
24
+ git_http_parser *parser = (git_http_parser *)p;
25
+ return parser->settings.on_url(parser, str, len);
26
+ }
27
+
28
+ static int on_header_field(http_parser *p, const char *str, size_t len)
29
+ {
30
+ git_http_parser *parser = (git_http_parser *)p;
31
+ return parser->settings.on_header_field(parser, str, len);
32
+ }
33
+
34
+ static int on_header_value(http_parser *p, const char *str, size_t len)
35
+ {
36
+ git_http_parser *parser = (git_http_parser *)p;
37
+ return parser->settings.on_header_value(parser, str, len);
38
+ }
39
+
40
+ static int on_headers_complete(http_parser *p)
41
+ {
42
+ git_http_parser *parser = (git_http_parser *)p;
43
+ return parser->settings.on_headers_complete(parser);
44
+ }
45
+
46
+ static int on_body(http_parser *p, const char *buf, size_t len)
47
+ {
48
+ git_http_parser *parser = (git_http_parser *)p;
49
+ return parser->settings.on_body(parser, buf, len);
50
+ }
51
+
52
+ static int on_message_complete(http_parser *p)
53
+ {
54
+ git_http_parser *parser = (git_http_parser *)p;
55
+ return parser->settings.on_message_complete(parser);
56
+ }
57
+
58
+ void git_http_parser_init(
59
+ git_http_parser *parser,
60
+ git_http_parser_t type,
61
+ git_http_parser_settings *settings)
62
+ {
63
+ http_parser_init(&parser->parser, (enum http_parser_type)type);
64
+ memcpy(&parser->settings, settings, sizeof(git_http_parser_settings));
65
+ }
66
+
67
+ size_t git_http_parser_execute(
68
+ git_http_parser *parser,
69
+ const char *data,
70
+ size_t len)
71
+ {
72
+ struct http_parser_settings settings_proxy;
73
+
74
+ memset(&settings_proxy, 0, sizeof(struct http_parser_settings));
75
+
76
+ settings_proxy.on_message_begin = parser->settings.on_message_begin ? on_message_begin : NULL;
77
+ settings_proxy.on_url = parser->settings.on_url ? on_url : NULL;
78
+ settings_proxy.on_header_field = parser->settings.on_header_field ? on_header_field : NULL;
79
+ settings_proxy.on_header_value = parser->settings.on_header_value ? on_header_value : NULL;
80
+ settings_proxy.on_headers_complete = parser->settings.on_headers_complete ? on_headers_complete : NULL;
81
+ settings_proxy.on_body = parser->settings.on_body ? on_body : NULL;
82
+ settings_proxy.on_message_complete = parser->settings.on_message_complete ? on_message_complete : NULL;
83
+
84
+ return http_parser_execute(&parser->parser, &settings_proxy, data, len);
85
+ }
86
+
87
+ #elif defined(GIT_HTTPPARSER_LLHTTP) || defined(GIT_HTTPPARSER_BUILTIN)
88
+
89
+ # include <llhttp.h>
90
+
91
+ size_t git_http_parser_execute(
92
+ git_http_parser *parser,
93
+ const char* data,
94
+ size_t len)
95
+ {
96
+ llhttp_errno_t error;
97
+ size_t parsed_len;
98
+
99
+ /*
100
+ * Unlike http_parser, which returns the number of parsed
101
+ * bytes in the _execute() call, llhttp returns an error
102
+ * code.
103
+ */
104
+
105
+ if (data == NULL || len == 0)
106
+ error = llhttp_finish(parser);
107
+ else
108
+ error = llhttp_execute(parser, data, len);
109
+
110
+ parsed_len = len;
111
+
112
+ /*
113
+ * Adjust number of parsed bytes in case of error.
114
+ */
115
+ if (error != HPE_OK) {
116
+ parsed_len = llhttp_get_error_pos(parser) - data;
117
+
118
+ /* This isn't a real pause, just a way to stop parsing early. */
119
+ if (error == HPE_PAUSED_UPGRADE)
120
+ llhttp_resume_after_upgrade(parser);
121
+ }
122
+
123
+ return parsed_len;
124
+ }
125
+
126
+ #else
127
+ # error unknown http-parser
128
+ #endif
@@ -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
@@ -41,6 +41,9 @@ typedef struct {
41
41
  git_vector refs;
42
42
  unsigned connected : 1,
43
43
  have_refs : 1;
44
+ #ifdef GIT_EXPERIMENTAL_SHA256
45
+ git_oid_t oid_type;
46
+ #endif
44
47
  } transport_local;
45
48
 
46
49
  static void free_head(git_remote_head *head)
@@ -58,7 +61,7 @@ static void free_heads(git_vector *heads)
58
61
  git_vector_foreach(heads, i, head)
59
62
  free_head(head);
60
63
 
61
- git_vector_free(heads);
64
+ git_vector_dispose(heads);
62
65
  }
63
66
 
64
67
  static int add_ref(transport_local *t, const char *name)
@@ -108,10 +111,6 @@ static int add_ref(transport_local *t, const char *name)
108
111
  return error;
109
112
  }
110
113
 
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
114
  if ((error = git_object_lookup(&obj, t->repo, &head->oid, GIT_OBJECT_ANY)) < 0)
116
115
  return error;
117
116
 
@@ -186,7 +185,7 @@ static int store_refs(transport_local *t)
186
185
  return 0;
187
186
 
188
187
  on_error:
189
- git_vector_free(&t->refs);
188
+ git_vector_dispose(&t->refs);
190
189
  git_strarray_dispose(&ref_names);
191
190
  return -1;
192
191
  }
@@ -235,6 +234,10 @@ static int local_connect(
235
234
 
236
235
  t->repo = repo;
237
236
 
237
+ #ifdef GIT_EXPERIMENTAL_SHA256
238
+ t->oid_type = repo->oid_type;
239
+ #endif
240
+
238
241
  if (store_refs(t) < 0)
239
242
  return -1;
240
243
 
@@ -271,7 +274,7 @@ static int local_oid_type(git_oid_t *out, git_transport *transport)
271
274
  {
272
275
  transport_local *t = (transport_local *)transport;
273
276
 
274
- *out = t->repo->oid_type;
277
+ *out = t->oid_type;
275
278
 
276
279
  return 0;
277
280
  }
@@ -303,6 +306,11 @@ static int local_negotiate_fetch(
303
306
 
304
307
  GIT_UNUSED(wants);
305
308
 
309
+ if (wants->depth) {
310
+ git_error_set(GIT_ERROR_NET, "shallow fetch is not supported by the local transport");
311
+ return GIT_ENOTSUPPORTED;
312
+ }
313
+
306
314
  /* Fill in the loids */
307
315
  git_vector_foreach(&t->refs, i, rhead) {
308
316
  git_object *obj;
@@ -453,7 +461,7 @@ static int local_push(
453
461
  default:
454
462
  last = git_error_last();
455
463
 
456
- if (last && last->message)
464
+ if (last->klass != GIT_ERROR_NONE)
457
465
  status->msg = git__strdup(last->message);
458
466
  else
459
467
  status->msg = git__strdup("Unspecified error encountered");
@@ -64,13 +64,13 @@ GIT_INLINE(int) git_smart__reset_stream(transport_smart *t, bool close_subtransp
64
64
 
65
65
  if (t->wrapped->close(t->wrapped) < 0)
66
66
  return -1;
67
- }
68
67
 
69
- git__free(t->caps.object_format);
70
- t->caps.object_format = NULL;
68
+ git__free(t->caps.object_format);
69
+ t->caps.object_format = NULL;
71
70
 
72
- git__free(t->caps.agent);
73
- t->caps.agent = NULL;
71
+ git__free(t->caps.agent);
72
+ t->caps.agent = NULL;
73
+ }
74
74
 
75
75
  return 0;
76
76
  }
@@ -124,7 +124,7 @@ static void free_symrefs(git_vector *symrefs)
124
124
  git__free(spec);
125
125
  }
126
126
 
127
- git_vector_free(symrefs);
127
+ git_vector_dispose(symrefs);
128
128
  }
129
129
 
130
130
  static int git_smart__connect(
@@ -249,6 +249,9 @@ static int git_smart__capabilities(unsigned int *capabilities, git_transport *tr
249
249
 
250
250
  *capabilities = 0;
251
251
 
252
+ if (t->caps.push_options)
253
+ *capabilities |= GIT_REMOTE_CAPABILITY_PUSH_OPTIONS;
254
+
252
255
  if (t->caps.want_tip_sha1)
253
256
  *capabilities |= GIT_REMOTE_CAPABILITY_TIP_OID;
254
257
 
@@ -370,17 +373,27 @@ static int git_smart__close(git_transport *transport)
370
373
  git_vector *common = &t->common;
371
374
  unsigned int i;
372
375
  git_pkt *p;
376
+ git_smart_service_t service;
373
377
  int ret;
374
378
  git_smart_subtransport_stream *stream;
375
379
  const char flush[] = "0000";
376
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
+
377
390
  /*
378
391
  * If we're still connected at this point and not using RPC,
379
392
  * we should say goodbye by sending a flush, or git-daemon
380
393
  * will complain that we disconnected unexpectedly.
381
394
  */
382
395
  if (t->connected && !t->rpc &&
383
- !t->wrapped->action(&stream, t->wrapped, t->url, GIT_SERVICE_UPLOADPACK)) {
396
+ !t->wrapped->action(&stream, t->wrapped, t->url, service)) {
384
397
  t->current_stream->write(t->current_stream, flush, 4);
385
398
  }
386
399
 
@@ -389,7 +402,7 @@ static int git_smart__close(git_transport *transport)
389
402
  git_vector_foreach(common, i, p)
390
403
  git_pkt_free(p);
391
404
 
392
- git_vector_free(common);
405
+ git_vector_dispose(common);
393
406
 
394
407
  if (t->url) {
395
408
  git__free(t->url);
@@ -414,11 +427,11 @@ static void git_smart__free(git_transport *transport)
414
427
  /* Free the subtransport */
415
428
  t->wrapped->free(t->wrapped);
416
429
 
417
- git_vector_free(&t->heads);
430
+ git_vector_dispose(&t->heads);
418
431
  git_vector_foreach(refs, i, p)
419
432
  git_pkt_free(p);
420
433
 
421
- git_vector_free(refs);
434
+ git_vector_dispose(refs);
422
435
 
423
436
  git_remote_connect_options_dispose(&t->connect_opts);
424
437
 
@@ -511,9 +524,8 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
511
524
  if (git_vector_init(&t->refs, 16, ref_name_cmp) < 0 ||
512
525
  git_vector_init(&t->heads, 16, ref_name_cmp) < 0 ||
513
526
  definition->callback(&t->wrapped, &t->parent, definition->param) < 0) {
514
- git_vector_free(&t->refs);
515
- git_vector_free(&t->heads);
516
- t->wrapped->free(t->wrapped);
527
+ git_vector_dispose(&t->refs);
528
+ git_vector_dispose(&t->heads);
517
529
  git__free(t);
518
530
  return -1;
519
531
  }
@@ -38,6 +38,7 @@
38
38
  #define GIT_CAP_SHALLOW "shallow"
39
39
  #define GIT_CAP_OBJECT_FORMAT "object-format="
40
40
  #define GIT_CAP_AGENT "agent="
41
+ #define GIT_CAP_PUSH_OPTIONS "push-options"
41
42
 
42
43
  extern bool git_smart__ofs_delta_enabled;
43
44
 
@@ -146,7 +147,8 @@ typedef struct transport_smart_caps {
146
147
  thin_pack:1,
147
148
  want_tip_sha1:1,
148
149
  want_reachable_sha1:1,
149
- shallow:1;
150
+ shallow:1,
151
+ push_options:1;
150
152
  char *object_format;
151
153
  char *agent;
152
154
  } transport_smart_caps;
@@ -203,7 +205,7 @@ int git_smart__update_heads(transport_smart *t, git_vector *symrefs);
203
205
  /* smart_pkt.c */
204
206
  typedef struct {
205
207
  git_oid_t oid_type;
206
- int seen_capabilities: 1;
208
+ unsigned int seen_capabilities: 1;
207
209
  } git_pkt_parse_data;
208
210
 
209
211
  int git_pkt_parse_line(git_pkt **head, const char **endptr, const char *line, size_t linelen, git_pkt_parse_data *data);
@@ -238,13 +238,13 @@ static int set_data(
238
238
 
239
239
  if (strncmp(caps, "object-format=", CONST_STRLEN("object-format=")) == 0)
240
240
  format_str = caps + CONST_STRLEN("object-format=");
241
- else if ((format_str = strstr(caps, " object-format=")) != NULL)
241
+ else if ((format_str = git__memmem(caps, len - (caps - line), " object-format=", CONST_STRLEN(" object-format="))) != NULL)
242
242
  format_str += CONST_STRLEN(" object-format=");
243
243
  }
244
244
 
245
245
  if (format_str) {
246
- if ((eos = strchr(format_str, ' ')) == NULL)
247
- eos = strchr(format_str, '\0');
246
+ if ((eos = memchr(format_str, ' ', len - (format_str - line))) == NULL)
247
+ eos = memchr(format_str, '\0', len - (format_str - line));
248
248
 
249
249
  GIT_ASSERT(eos);
250
250
 
@@ -536,10 +536,10 @@ static int parse_len(size_t *out, const char *line, size_t linelen)
536
536
  num[PKT_LEN_SIZE] = '\0';
537
537
 
538
538
  for (i = 0; i < PKT_LEN_SIZE; ++i) {
539
- if (!isxdigit(num[i])) {
539
+ if (!git__isxdigit(num[i])) {
540
540
  /* Make sure there are no special characters before passing to error message */
541
541
  for (k = 0; k < PKT_LEN_SIZE; ++k) {
542
- if(!isprint(num[k])) {
542
+ if(!git__isprint(num[k])) {
543
543
  num[k] = '.';
544
544
  }
545
545
  }
@@ -59,7 +59,7 @@ int git_smart__store_refs(transport_smart *t, int flushes)
59
59
  return recvd;
60
60
 
61
61
  if (recvd == 0) {
62
- git_error_set(GIT_ERROR_NET, "early EOF");
62
+ git_error_set(GIT_ERROR_NET, "could not read refs from remote repository");
63
63
  return GIT_EEOF;
64
64
  }
65
65
 
@@ -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);
@@ -285,7 +291,7 @@ static int recv_pkt(
285
291
  if ((ret = git_smart__recv(t)) < 0) {
286
292
  return ret;
287
293
  } else if (ret == 0) {
288
- git_error_set(GIT_ERROR_NET, "early EOF");
294
+ git_error_set(GIT_ERROR_NET, "could not read from remote repository");
289
295
  return GIT_EEOF;
290
296
  }
291
297
  } while (error);
@@ -311,6 +317,13 @@ static int store_common(transport_smart *t)
311
317
  if ((error = recv_pkt(&pkt, NULL, t)) < 0)
312
318
  return error;
313
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
+
314
327
  if (pkt->type != GIT_PKT_ACK) {
315
328
  git__free(pkt);
316
329
  return 0;
@@ -388,6 +401,7 @@ static int setup_shallow_roots(
388
401
 
389
402
  memcpy(out->ptr, wants->shallow_roots,
390
403
  sizeof(git_oid) * wants->shallow_roots_len);
404
+ out->size = wants->shallow_roots_len;
391
405
  }
392
406
 
393
407
  return 0;
@@ -427,6 +441,9 @@ int git_smart__negotiate_fetch(
427
441
  if ((error = git_smart__negotiation_step(&t->parent, data.ptr, data.size)) < 0)
428
442
  goto on_error;
429
443
 
444
+ if (!t->rpc)
445
+ git_str_clear(&data);
446
+
430
447
  while ((error = recv_pkt((git_pkt **)&pkt, NULL, t)) == 0) {
431
448
  bool complete = false;
432
449
 
@@ -778,33 +795,54 @@ done:
778
795
  static int gen_pktline(git_str *buf, git_push *push)
779
796
  {
780
797
  push_spec *spec;
798
+ char *option;
781
799
  size_t i, len;
782
- char old_id[GIT_OID_SHA1_HEXSIZE+1], new_id[GIT_OID_SHA1_HEXSIZE+1];
783
-
784
- 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;
785
802
 
786
803
  git_vector_foreach(&push->specs, i, spec) {
787
- len = 2*GIT_OID_SHA1_HEXSIZE + 7 + strlen(spec->refspec.dst);
804
+ len = strlen(spec->refspec.dst) + 7;
788
805
 
789
806
  if (i == 0) {
790
- ++len; /* '\0' */
807
+ /* Need a leading \0 */
808
+ ++len;
809
+
791
810
  if (push->report_status)
792
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
+
793
816
  len += strlen(GIT_CAP_SIDE_BAND_64K) + 1;
794
817
  }
795
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
+
796
824
  git_oid_fmt(old_id, &spec->roid);
825
+ old_id[old_id_len] = '\0';
826
+
797
827
  git_oid_fmt(new_id, &spec->loid);
828
+ new_id[new_id_len] = '\0';
798
829
 
799
- 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);
800
833
 
801
834
  if (i == 0) {
802
835
  git_str_putc(buf, '\0');
836
+
803
837
  /* Core git always starts their capabilities string with a space */
804
838
  if (push->report_status) {
805
839
  git_str_putc(buf, ' ');
806
840
  git_str_printf(buf, GIT_CAP_REPORT_STATUS);
807
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
+ }
808
846
  git_str_putc(buf, ' ');
809
847
  git_str_printf(buf, GIT_CAP_SIDE_BAND_64K);
810
848
  }
@@ -812,6 +850,13 @@ static int gen_pktline(git_str *buf, git_push *push)
812
850
  git_str_putc(buf, '\n');
813
851
  }
814
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
+
815
860
  git_str_puts(buf, "0000");
816
861
  return git_str_oom(buf) ? -1 : 0;
817
862
  }
@@ -940,7 +985,7 @@ static int parse_report(transport_smart *transport, git_push *push)
940
985
  }
941
986
 
942
987
  if (recvd == 0) {
943
- git_error_set(GIT_ERROR_NET, "early EOF");
988
+ git_error_set(GIT_ERROR_NET, "could not read report from remote repository");
944
989
  error = GIT_EEOF;
945
990
  goto done;
946
991
  }
@@ -1157,7 +1202,7 @@ int git_smart__push(git_transport *transport, git_push *push)
1157
1202
  #ifdef PUSH_DEBUG
1158
1203
  {
1159
1204
  git_remote_head *head;
1160
- 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';
1161
1206
 
1162
1207
  git_vector_foreach(&push->remote->refs, i, head) {
1163
1208
  git_oid_fmt(hex, &head->oid);