Smart push over HTTP: client side

The git-remote-curl backend detects if the remote server supports
the git-receive-pack service, and if so, runs git-send-pack in a
pipe to dump the command and pack data as a single POST request.

The advertisements from the server that were obtained during the
discovery are passed into git-send-pack before the POST request
starts.  This permits git-send-pack to operate largely unmodified.

For smaller packs (those under 1 MiB) a HTTP/1.0 POST with a
Content-Length is used, permitting interaction with any server.
The 1 MiB limit is arbitrary, but is sufficent to fit most deltas
created by human authors against text sources with the occasional
small binary file (e.g. few KiB icon image).  The configuration
option http.postBuffer can be used to increase (or shink) this
buffer if the default is not sufficient.

For larger packs which cannot be spooled entirely into the helper's
memory space (due to http.postBuffer being too small), the POST
request requires HTTP/1.1 and sets "Transfer-Encoding: chunked".
This permits the client to upload an unknown amount of data in one
HTTP transaction without needing to pregenerate the entire pack
file locally.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
CC: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 files changed
tree: 9aa2f8b91e1106c23644481b6aadee11b3386ae7
  1. block-sha1/
  2. compat/
  3. contrib/
  4. Documentation/
  5. git-gui/
  6. gitk-git/
  7. gitweb/
  8. perl/
  9. ppc/
  10. t/
  11. templates/
  12. xdiff/
  13. .gitattributes
  14. .gitignore
  15. .mailmap
  16. abspath.c
  17. advice.c
  18. advice.h
  19. alias.c
  20. alloc.c
  21. archive-tar.c
  22. archive-zip.c
  23. archive.c
  24. archive.h
  25. attr.c
  26. attr.h
  27. base85.c
  28. bisect.c
  29. bisect.h
  30. blob.c
  31. blob.h
  32. branch.c
  33. branch.h
  34. builtin-add.c
  35. builtin-annotate.c
  36. builtin-apply.c
  37. builtin-archive.c
  38. builtin-bisect--helper.c
  39. builtin-blame.c
  40. builtin-branch.c
  41. builtin-bundle.c
  42. builtin-cat-file.c
  43. builtin-check-attr.c
  44. builtin-check-ref-format.c
  45. builtin-checkout-index.c
  46. builtin-checkout.c
  47. builtin-clean.c
  48. builtin-clone.c
  49. builtin-commit-tree.c
  50. builtin-commit.c
  51. builtin-config.c
  52. builtin-count-objects.c
  53. builtin-describe.c
  54. builtin-diff-files.c
  55. builtin-diff-index.c
  56. builtin-diff-tree.c
  57. builtin-diff.c
  58. builtin-fast-export.c
  59. builtin-fetch--tool.c
  60. builtin-fetch-pack.c
  61. builtin-fetch.c
  62. builtin-fmt-merge-msg.c
  63. builtin-for-each-ref.c
  64. builtin-fsck.c
  65. builtin-gc.c
  66. builtin-grep.c
  67. builtin-help.c
  68. builtin-init-db.c
  69. builtin-log.c
  70. builtin-ls-files.c
  71. builtin-ls-remote.c
  72. builtin-ls-tree.c
  73. builtin-mailinfo.c
  74. builtin-mailsplit.c
  75. builtin-merge-base.c
  76. builtin-merge-file.c
  77. builtin-merge-ours.c
  78. builtin-merge-recursive.c
  79. builtin-merge.c
  80. builtin-mktree.c
  81. builtin-mv.c
  82. builtin-name-rev.c
  83. builtin-pack-objects.c
  84. builtin-pack-refs.c
  85. builtin-prune-packed.c
  86. builtin-prune.c
  87. builtin-push.c
  88. builtin-read-tree.c
  89. builtin-receive-pack.c
  90. builtin-reflog.c
  91. builtin-remote.c
  92. builtin-replace.c
  93. builtin-rerere.c
  94. builtin-reset.c
  95. builtin-rev-list.c
  96. builtin-rev-parse.c
  97. builtin-revert.c
  98. builtin-rm.c
  99. builtin-send-pack.c
  100. builtin-shortlog.c
  101. builtin-show-branch.c
  102. builtin-show-ref.c
  103. builtin-stripspace.c
  104. builtin-symbolic-ref.c
  105. builtin-tag.c
  106. builtin-tar-tree.c
  107. builtin-unpack-objects.c
  108. builtin-update-index.c
  109. builtin-update-ref.c
  110. builtin-update-server-info.c
  111. builtin-upload-archive.c
  112. builtin-verify-pack.c
  113. builtin-verify-tag.c
  114. builtin-write-tree.c
  115. builtin.h
  116. bundle.c
  117. bundle.h
  118. cache-tree.c
  119. cache-tree.h
  120. cache.h
  121. check-builtins.sh
  122. check-racy.c
  123. check_bindir
  124. color.c
  125. color.h
  126. combine-diff.c
  127. command-list.txt
  128. commit.c
  129. commit.h
  130. config.c
  131. config.mak.in
  132. configure.ac
  133. connect.c
  134. convert.c
  135. copy.c
  136. COPYING
  137. csum-file.c
  138. csum-file.h
  139. ctype.c
  140. daemon.c
  141. date.c
  142. decorate.c
  143. decorate.h
  144. delta.h
  145. diff-delta.c
  146. diff-lib.c
  147. diff-no-index.c
  148. diff.c
  149. diff.h
  150. diffcore-break.c
  151. diffcore-delta.c
  152. diffcore-order.c
  153. diffcore-pickaxe.c
  154. diffcore-rename.c
  155. diffcore.h
  156. dir.c
  157. dir.h
  158. editor.c
  159. entry.c
  160. environment.c
  161. exec_cmd.c
  162. exec_cmd.h
  163. fast-import.c
  164. fetch-pack.h
  165. fixup-builtins
  166. fsck.c
  167. fsck.h
  168. generate-cmdlist.sh
  169. git-add--interactive.perl
  170. git-am.sh
  171. git-archimport.perl
  172. git-bisect.sh
  173. git-compat-util.h
  174. git-cvsexportcommit.perl
  175. git-cvsimport.perl
  176. git-cvsserver.perl
  177. git-difftool--helper.sh
  178. git-difftool.perl
  179. git-filter-branch.sh
  180. git-instaweb.sh
  181. git-lost-found.sh
  182. git-merge-octopus.sh
  183. git-merge-one-file.sh
  184. git-merge-resolve.sh
  185. git-mergetool--lib.sh
  186. git-mergetool.sh
  187. git-parse-remote.sh
  188. git-pull.sh
  189. git-quiltimport.sh
  190. git-rebase--interactive.sh
  191. git-rebase.sh
  192. git-relink.perl
  193. git-repack.sh
  194. git-request-pull.sh
  195. git-send-email.perl
  196. git-sh-setup.sh
  197. git-stash.sh
  198. git-submodule.sh
  199. git-svn.perl
  200. GIT-VERSION-GEN
  201. git-web--browse.sh
  202. git.c
  203. git.spec.in
  204. graph.c
  205. graph.h
  206. grep.c
  207. grep.h
  208. hash-object.c
  209. hash.c
  210. hash.h
  211. help.c
  212. help.h
  213. http-backend.c
  214. http-fetch.c
  215. http-push.c
  216. http-walker.c
  217. http.c
  218. http.h
  219. ident.c
  220. imap-send.c
  221. index-pack.c
  222. INSTALL
  223. levenshtein.c
  224. levenshtein.h
  225. list-objects.c
  226. list-objects.h
  227. ll-merge.c
  228. ll-merge.h
  229. lockfile.c
  230. log-tree.c
  231. log-tree.h
  232. mailmap.c
  233. mailmap.h
  234. Makefile
  235. match-trees.c
  236. merge-file.c
  237. merge-index.c
  238. merge-recursive.c
  239. merge-recursive.h
  240. merge-tree.c
  241. mktag.c
  242. name-hash.c
  243. object.c
  244. object.h
  245. pack-check.c
  246. pack-redundant.c
  247. pack-refs.c
  248. pack-refs.h
  249. pack-revindex.c
  250. pack-revindex.h
  251. pack-write.c
  252. pack.h
  253. pager.c
  254. parse-options.c
  255. parse-options.h
  256. patch-delta.c
  257. patch-id.c
  258. patch-ids.c
  259. patch-ids.h
  260. path.c
  261. pkt-line.c
  262. pkt-line.h
  263. preload-index.c
  264. pretty.c
  265. progress.c
  266. progress.h
  267. quote.c
  268. quote.h
  269. reachable.c
  270. reachable.h
  271. read-cache.c
  272. README
  273. reflog-walk.c
  274. reflog-walk.h
  275. refs.c
  276. refs.h
  277. remote-curl.c
  278. remote.c
  279. remote.h
  280. replace_object.c
  281. rerere.c
  282. rerere.h
  283. revision.c
  284. revision.h
  285. run-command.c
  286. run-command.h
  287. send-pack.h
  288. server-info.c
  289. setup.c
  290. sha1-lookup.c
  291. sha1-lookup.h
  292. sha1_file.c
  293. sha1_name.c
  294. shallow.c
  295. shell.c
  296. shortlog.h
  297. show-index.c
  298. sideband.c
  299. sideband.h
  300. sigchain.c
  301. sigchain.h
  302. strbuf.c
  303. strbuf.h
  304. string-list.c
  305. string-list.h
  306. symlinks.c
  307. tag.c
  308. tag.h
  309. tar.h
  310. test-chmtime.c
  311. test-ctype.c
  312. test-date.c
  313. test-delta.c
  314. test-dump-cache-tree.c
  315. test-genrandom.c
  316. test-match-trees.c
  317. test-parse-options.c
  318. test-path-utils.c
  319. test-sha1.c
  320. test-sha1.sh
  321. test-sigchain.c
  322. thread-utils.c
  323. thread-utils.h
  324. trace.c
  325. transport-helper.c
  326. transport.c
  327. transport.h
  328. tree-diff.c
  329. tree-walk.c
  330. tree-walk.h
  331. tree.c
  332. tree.h
  333. unimplemented.sh
  334. unpack-file.c
  335. unpack-trees.c
  336. unpack-trees.h
  337. upload-pack.c
  338. usage.c
  339. userdiff.c
  340. userdiff.h
  341. utf8.c
  342. utf8.h
  343. var.c
  344. walker.c
  345. walker.h
  346. wrapper.c
  347. write_or_die.c
  348. ws.c
  349. wt-status.c
  350. wt-status.h
  351. xdiff-interface.c
  352. xdiff-interface.h