Remotes configuration API
=========================

The API in remote.h gives access to the configuration related to
remotes. It handles all three configuration mechanisms historically
and currently used by Git, and presents the information in a uniform
fashion. Note that the code also handles plain URLs without any
configuration, giving them just the default information.

struct remote
-------------

`name`::

	The user's nickname for the remote

`url`::

	An array of all of the url_nr URLs configured for the remote

`pushurl`::

	An array of all of the pushurl_nr push URLs configured for the remote

`push`::

	 An array of refspecs configured for pushing, with
	 push_refspec being the literal strings, and push_refspec_nr
	 being the quantity.

`fetch`::

	An array of refspecs configured for fetching, with
	fetch_refspec being the literal strings, and fetch_refspec_nr
	being the quantity.

`fetch_tags`::

	The setting for whether to fetch tags (as a separate rule from
	the configured refspecs); -1 means never to fetch tags, 0
	means to auto-follow tags based on the default heuristic, 1
	means to always auto-follow tags, and 2 means to fetch all
	tags.

`receivepack`, `uploadpack`::

	The configured helper programs to run on the remote side, for
	Git-native protocols.

`http_proxy`::

	The proxy to use for curl (http, https, ftp, etc.) URLs.

struct remotes can be found by name with remote_get(), and iterated
through with for_each_remote(). remote_get(NULL) will return the
default remote, given the current branch and configuration.

struct refspec
--------------

A struct refspec holds the parsed interpretation of a refspec.  If it
will force updates (starts with a '+'), force is true.  If it is a
pattern (sides end with '*') pattern is true.  src and dest are the
two sides (including '*' characters if present); if there is only one
side, it is src, and dst is NULL; if sides exist but are empty (i.e.,
the refspec either starts or ends with ':'), the corresponding side is
"".

An array of strings can be parsed into an array of struct refspecs
using parse_fetch_refspec() or parse_push_refspec().

remote_find_tracking(), given a remote and a struct refspec with
either src or dst filled out, will fill out the other such that the
result is in the "fetch" specification for the remote (note that this
evaluates patterns and returns a single result).

struct branch
-------------

Note that this may end up moving to branch.h

struct branch holds the configuration for a branch. It can be looked
up with branch_get(name) for "refs/heads/{name}", or with
branch_get(NULL) for HEAD.

It contains:

`name`::

	The short name of the branch.

`refname`::

	The full path for the branch ref.

`remote_name`::

	The name of the remote listed in the configuration.

`merge_name`::

	An array of the "merge" lines in the configuration.

`merge`::

	An array of the struct refspecs used for the merge lines. That
	is, merge[i]->dst is a local tracking ref which should be
	merged into this branch by default.

`merge_nr`::

	The number of merge configurations

branch_has_merge_config() returns true if the given branch has merge
configuration given.

Other stuff
-----------

There is other stuff in remote.h that is related, in general, to the
process of interacting with remotes.

(Daniel Barkalow)
