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 (if a pattern, only the part outside of the wildcards); 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 "".

This parsing can be done to an array of strings to give an array of
struct refpsecs with parse_ref_spec().

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.

`remote`::

	The struct remote for that remote.

`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)
