summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-03-15fetch-pack: support shallow requestsLibravatar Brandon Williams4-8/+105
Enable shallow clones and deepen requests using protocol version 2 if the server 'fetch' command supports the 'shallow' feature. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15fetch-pack: perform a fetch using v2Libravatar Brandon Williams10-48/+548
When communicating with a v2 server, perform a fetch by requesting the 'fetch' command. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15upload-pack: introduce fetch server commandLibravatar Brandon Williams5-0/+400
Introduce the 'fetch' server command. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15push: pass ref prefixes when pushingLibravatar Brandon Williams1-1/+28
Construct a list of ref prefixes to be passed to 'get_refs_list()' from the refspec to be used during the push. This list of ref prefixes will be used to allow the server to filter the ref advertisement when communicating using protocol v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15fetch: pass ref prefixes when fetchingLibravatar Brandon Williams1-1/+18
Construct a list of ref prefixes to be passed to 'transport_get_remote_refs()' from the refspec to be used during the fetch. This list of ref prefixes will be used to allow the server to filter the ref advertisement when communicating using protocol v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15ls-remote: pass ref prefixes when requesting a remote's refsLibravatar Brandon Williams4-2/+60
Construct an argv_array of ref prefixes based on the patterns supplied via the command line and pass them to 'transport_get_remote_refs()' to be used when communicating protocol v2 so that the server can limit the ref advertisement based on those prefixes. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15transport: convert transport_get_remote_refs to take a list of ref prefixesLibravatar Brandon Williams6-8/+21
Teach transport_get_remote_refs() to accept a list of ref prefixes, which will be sent to the server for use in filtering when using protocol v2. (This list will be ignored when not using protocol v2.) Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15transport: convert get_refs_list to take a list of ref prefixesLibravatar Brandon Williams3-10/+24
Convert the 'struct transport' virtual function 'get_refs_list()' to optionally take an argv_array of ref prefixes. When communicating with a server using protocol v2 these ref prefixes can be sent when requesting a listing of their refs allowing the server to filter the refs it sends based on the sent prefixes. This list will be ignored when not using protocol v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15connect: request remote refs using v2Libravatar Brandon Williams6-11/+204
Teach the client to be able to request a remote's refs using protocol v2. This is done by having a client issue a 'ls-refs' request to a v2 server. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15ls-refs: introduce ls-refs server commandLibravatar Brandon Williams6-0/+261
Introduce the ls-refs server command. In protocol v2, the ls-refs command is used to request the ref advertisement from the server. Since it is a command which can be requested (as opposed to mandatory in v1), a client can sent a number of parameters in its request to limit the ref advertisement based on provided ref-prefixes. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-15serve: introduce git-serveLibravatar Brandon Williams10-0/+528
Introduce git-serve, the base server for protocol version 2. Protocol version 2 is intended to be a replacement for Git's current wire protocol. The intention is that it will be a simpler, less wasteful protocol which can evolve over time. Protocol version 2 improves upon version 1 by eliminating the initial ref advertisement. In its place a server will export a list of capabilities and commands which it supports in a capability advertisement. A client can then request that a particular command be executed by providing a number of capabilities and command specific parameters. At the completion of a command, a client can request that another command be executed or can terminate the connection by sending a flush packet. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14test-pkt-line: introduce a packet-line test helperLibravatar Brandon Williams2-0/+65
Introduce a packet-line test helper which can either pack or unpack an input stream into packet-lines and writes out the result to stdout. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14protocol: introduce enum protocol_version value protocol_v2Libravatar Brandon Williams9-0/+36
Introduce protocol_v2, a new value for 'enum protocol_version'. Subsequent patches will fill in the implementation of protocol_v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14transport: store protocol versionLibravatar Brandon Williams1-9/+26
Once protocol_v2 is introduced requesting a fetch or a push will need to be handled differently depending on the protocol version. Store the protocol version the server is speaking in 'struct git_transport_data' and use it to determine what to do in the case of a fetch or a push. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14connect: discover protocol version outside of get_remote_headsLibravatar Brandon Williams7-29/+83
In order to prepare for the addition of protocol_v2 push the protocol version discovery outside of 'get_remote_heads()'. This will allow for keeping the logic for processing the reference advertisement for protocol_v1 and protocol_v0 separate from the logic for protocol_v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14connect: convert get_remote_heads to use struct packet_readerLibravatar Brandon Williams1-78/+95
In order to allow for better control flow when protocol_v2 is introduced convert 'get_remote_heads()' to use 'struct packet_reader' to read packet lines. This enables a client to be able to peek the first line of a server's response (without consuming it) in order to determine the protocol version its speaking and then passing control to the appropriate handler. This is needed because the initial response from a server speaking protocol_v0 includes the first ref, while subsequent protocol versions respond with a version line. We want to be able to read this first line without consuming the first ref sent in the protocol_v0 case so that the protocol version the server is speaking can be determined outside of 'get_remote_heads()' in a future patch. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14transport: use get_refs_via_connect to get refsLibravatar Brandon Williams1-14/+4
Remove code duplication and use the existing 'get_refs_via_connect()' function to retrieve a remote's heads in 'fetch_refs_via_pack()' and 'git_transport_push()'. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14upload-pack: factor out processing linesLibravatar Brandon Williams1-39/+74
Factor out the logic for processing shallow, deepen, deepen_since, and deepen_not lines into their own functions to simplify the 'receive_needs()' function in addition to making it easier to reuse some of this logic when implementing protocol_v2. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14upload-pack: convert to a builtinLibravatar Brandon Williams6-83/+109
In order to allow for code sharing with the server-side of fetch in protocol-v2 convert upload-pack to be a builtin. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14pkt-line: add delim packet supportLibravatar Brandon Williams2-0/+19
One of the design goals of protocol-v2 is to improve the semantics of flush packets. Currently in protocol-v1, flush packets are used both to indicate a break in a list of packet lines as well as an indication that one side has finished speaking. This makes it particularly difficult to implement proxies as a proxy would need to completely understand git protocol instead of simply looking for a flush packet. To do this, introduce the special deliminator packet '0001'. A delim packet can then be used as a deliminator between lists of packet lines while flush packets can be reserved to indicate the end of a response. Documentation for how this packet will be used in protocol v2 will included in a future patch. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14pkt-line: allow peeking a packet line without consuming itLibravatar Brandon Williams2-0/+108
Sometimes it is advantageous to be able to peek the next packet line without consuming it (e.g. to be able to determine the protocol version a server is speaking). In order to do that introduce 'struct packet_reader' which is an abstraction around the normal packet reading logic. This enables a caller to be able to peek a single line at a time using 'packet_reader_peek()' and having a caller consume a line by calling 'packet_reader_read()'. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-03-14pkt-line: introduce packet_read_with_statusLibravatar Brandon Williams2-14/+53
The current pkt-line API encodes the status of a pkt-line read in the length of the read content. An error is indicated with '-1', a flush with '0' (which can be confusing since a return value of '0' can also indicate an empty pkt-line), and a positive integer for the length of the read content otherwise. This doesn't leave much room for allowing the addition of additional special packets in the future. To solve this introduce 'packet_read_with_status()' which reads a packet and returns the status of the read encoded as an 'enum packet_status' type. This allows for easily identifying between special and normal packets as well as errors. It also enables easily adding a new special packet in the future. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-12-28Git 2.16-rc0Libravatar Junio C Hamano2-1/+32
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-12-28Merge branch 'sb/describe-blob'Libravatar Junio C Hamano8-52/+277
"git describe" was taught to dig trees deeper to find a <commit-ish>:<path> that refers to a given blob object. * sb/describe-blob: builtin/describe.c: describe a blob builtin/describe.c: factor out describe_commit builtin/describe.c: print debug statements earlier builtin/describe.c: rename `oid` to avoid variable shadowing revision.h: introduce blob/tree walking in order of the commits list-objects.c: factor out traverse_trees_and_blobs t6120: fix typo in test name
2017-12-28Merge branch 'hi/merge-verify-sig-config'Libravatar Junio C Hamano4-0/+132
"git merge" learned to pay attention to merge.verifySignatures configuration variable and pretend as if '--verify-signatures' option was given from the command line. * hi/merge-verify-sig-config: t5573, t7612: clean up after unexpected success of 'pull' and 'merge' t: add tests for pull --verify-signatures merge: add config option for verifySignatures
2017-12-28Merge branch 'ws/curl-http-proxy-over-https'Libravatar Junio C Hamano1-0/+5
Git has been taught to support an https:// URL used for http.proxy when using recent versions of libcurl. * ws/curl-http-proxy-over-https: http: support CURLPROXY_HTTPS
2017-12-28Merge branch 'ks/doc-previous-checkout'Libravatar Junio C Hamano1-7/+12
Doc update. * ks/doc-previous-checkout: Doc/check-ref-format: clarify information about @{-N} syntax
2017-12-28Merge branch 'ks/rebase-error-messages'Libravatar Junio C Hamano1-10/+25
Error messages from "git rebase" have been somewhat cleaned up. * ks/rebase-error-messages: rebase: rebasing can also be done when HEAD is detached rebase: distinguish user input by quoting it rebase: consistently use branch_name variable
2017-12-28Merge branch 'sr/http-sslverify-config-doc'Libravatar Junio C Hamano1-2/+2
Docfix. * sr/http-sslverify-config-doc: config: document default value of http.sslVerify
2017-12-28Merge branch 'nm/imap-send-quote-server-folder-name'Libravatar Junio C Hamano1-1/+7
"git imap-send" did not correctly quote the folder name when making a request to the server, which has been corrected. * nm/imap-send-quote-server-folder-name: imap-send: URI encode server folder
2017-12-28Merge branch 'bp/fsmonitor'Libravatar Junio C Hamano1-2/+1
Test fix. * bp/fsmonitor: p7519: improve check for prerequisite WATCHMAN
2017-12-28Merge branch 'jh/partial-clone-doc'Libravatar Junio C Hamano1-0/+324
* jh/partial-clone-doc: partial-clone: design doc
2017-12-28Merge branch 'jt/transport-hide-vtable'Libravatar Junio C Hamano6-93/+120
Code clean-up. * jt/transport-hide-vtable: transport: make transport vtable more private clone, fetch: remove redundant transport check
2017-12-28Merge branch 'js/enhanced-version-info'Libravatar Junio C Hamano4-1/+20
"git version --build-options" learned to report the host CPU and the exact commit object name the binary was built from. * js/enhanced-version-info: version --build-options: report commit, too, if possible version --build-options: also report host CPU
2017-12-28Merge branch 'tz/lib-git-svn-svnserve-tests'Libravatar Junio C Hamano1-11/+13
* tz/lib-git-svn-svnserve-tests: t/lib-git-svn.sh: improve svnserve tests with parallel make test t/lib-git-svn: cleanup inconsistent tab/space usage
2017-12-28Merge branch 'ew/svn-crlf'Libravatar Junio C Hamano2-0/+28
"git svn" has been updated to strip CRs in the commit messages, as recent versions of Subversion rejects them. * ew/svn-crlf: git-svn: convert CRLF to LF in commit message to SVN
2017-12-28Merge branch 'cc/skip-to-optional-val'Libravatar Junio C Hamano5-90/+126
Introduce a helper to simplify code to parse a common pattern that expects either "--key" or "--key=<something>". * cc/skip-to-optional-val: t4045: reindent to make helpers readable diff: add tests for --relative without optional prefix value diff: use skip_to_optional_arg_default() in parsing --relative diff: use skip_to_optional_arg_default() diff: use skip_to_optional_arg() index-pack: use skip_to_optional_arg() git-compat-util: introduce skip_to_optional_arg()
2017-12-28Merge branch 'ra/prompt-eread-fix'Libravatar Junio C Hamano1-3/+4
Update the shell prompt script (in contrib/) to strip trailing CR from strings read from various "state" files. * ra/prompt-eread-fix: git-prompt: fix reading files with windows line endings git-prompt: make __git_eread intended use explicit
2017-12-28Merge branch 'bw/path-doc'Libravatar Junio C Hamano1-21/+112
Doc updates. * bw/path-doc: path: document path functions
2017-12-27RelNotes: the eleventh batchLibravatar Junio C Hamano1-0/+41
Hopefully the last one before -rc0 Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-12-27Merge branch 'rb/quick-install-doc'Libravatar Junio C Hamano2-6/+8
The build procedure now allows not just the repositories but also the refs to be used to take pre-formatted manpages and html documents to install. * rb/quick-install-doc: install-doc-quick: allow specifying what ref to install
2017-12-27Merge branch 'jt/transport-no-more-rsync'Libravatar Junio C Hamano2-9/+1
Code clean-up. * jt/transport-no-more-rsync: transport: remove unused "push" in vtable
2017-12-27Merge branch 'sg/travis-fixes'Libravatar Junio C Hamano3-29/+39
Assorted updates for TravisCI integration. * sg/travis-fixes: travis-ci: use 'set -x' in 'ci/*' scripts for extra tracing output travis-ci: set GIT_TEST_HTTPD in 'ci/lib-travisci.sh' travis-ci: move setting environment variables to 'ci/lib-travisci.sh' travis-ci: introduce a $jobname variable for 'ci/*' scripts
2017-12-27Merge branch 'sb/test-helper-excludes'Libravatar Junio C Hamano1-41/+5
Simplify the ignore rules for t/helper directory. * sb/test-helper-excludes: t/helper: ignore everything but sources
2017-12-27Merge branch 'ot/pretty'Libravatar Junio C Hamano6-84/+136
Code clean-up. * ot/pretty: format: create docs for pretty.h format: create pretty.h file
2017-12-27Merge branch 'bw/submodule-sans-cache-compat'Libravatar Junio C Hamano5-23/+31
Code clean-up. * bw/submodule-sans-cache-compat: submodule: convert get_next_submodule to not rely on the_index submodule: used correct index in is_staging_gitmodules_ok submodule: convert stage_updated_gitmodules to take a struct index_state
2017-12-27Merge branch 'es/clone-shared-worktree'Libravatar Junio C Hamano2-1/+8
"git clone --shared" to borrow from a (secondary) worktree did not work, even though "git clone --local" did. Both are now accepted. * es/clone-shared-worktree: clone: support 'clone --shared' from a worktree
2017-12-27Merge branch 'tb/delimit-pretty-trailers-args-with-comma'Libravatar Junio C Hamano1-5/+7
Doc updates. * tb/delimit-pretty-trailers-args-with-comma: docs/pretty-formats: mention commas in %(trailers) syntax
2017-12-27Merge branch 'rs/fmt-merge-msg-leakfix'Libravatar Junio C Hamano1-2/+5
Leakfix. * rs/fmt-merge-msg-leakfix: transport-helper: plug strbuf and string_list leaks
2017-12-27Merge branch 'jt/decorate-api'Libravatar Junio C Hamano8-25/+146
A few structures and variables that are implementation details of the decorate API have been renamed and then the API got documented better. * jt/decorate-api: decorate: clean up and document API