1Remotes configuration API 2========================= 3 4The API in remote.h gives access to the configuration related to 5remotes. It handles all three configuration mechanisms historically 6and currently used by Git, and presents the information in a uniform 7fashion. Note that the code also handles plain URLs without any 8configuration, giving them just the default information. 9 10struct remote 11------------- 12 13`name`:: 14 15 The user's nickname for the remote 16 17`url`:: 18 19 An array of all of the url_nr URLs configured for the remote 20 21`pushurl`:: 22 23 An array of all of the pushurl_nr push URLs configured for the remote 24 25`push`:: 26 27 An array of refspecs configured for pushing, with 28 push_refspec being the literal strings, and push_refspec_nr 29 being the quantity. 30 31`fetch`:: 32 33 An array of refspecs configured for fetching, with 34 fetch_refspec being the literal strings, and fetch_refspec_nr 35 being the quantity. 36 37`fetch_tags`:: 38 39 The setting for whether to fetch tags (as a separate rule from 40 the configured refspecs); -1 means never to fetch tags, 0 41 means to auto-follow tags based on the default heuristic, 1 42 means to always auto-follow tags, and 2 means to fetch all 43 tags. 44 45`receivepack`, `uploadpack`:: 46 47 The configured helper programs to run on the remote side, for 48 Git-native protocols. 49 50`http_proxy`:: 51 52 The proxy to use for curl (http, https, ftp, etc.) URLs. 53 54struct remotes can be found by name with remote_get(), and iterated 55through with for_each_remote(). remote_get(NULL) will return the 56default remote, given the current branch and configuration. 57 58struct refspec 59-------------- 60 61A struct refspec holds the parsed interpretation of a refspec. If it 62will force updates (starts with a '+'), force is true. If it is a 63pattern (sides end with '*') pattern is true. src and dest are the two 64sides (if a pattern, only the part outside of the wildcards); if there 65is only one side, it is src, and dst is NULL; if sides exist but are 66empty (i.e., the refspec either starts or ends with ':'), the 67corresponding side is "". 68 69This parsing can be done to an array of strings to give an array of 70struct refpsecs with parse_ref_spec(). 71 72remote_find_tracking(), given a remote and a struct refspec with 73either src or dst filled out, will fill out the other such that the 74result is in the "fetch" specification for the remote (note that this 75evaluates patterns and returns a single result). 76 77struct branch 78------------- 79 80Note that this may end up moving to branch.h 81 82struct branch holds the configuration for a branch. It can be looked 83up with branch_get(name) for "refs/heads/{name}", or with 84branch_get(NULL) for HEAD. 85 86It contains: 87 88`name`:: 89 90 The short name of the branch. 91 92`refname`:: 93 94 The full path for the branch ref. 95 96`remote_name`:: 97 98 The name of the remote listed in the configuration. 99 100`remote`:: 101 102 The struct remote for that remote. 103 104`merge_name`:: 105 106 An array of the "merge" lines in the configuration. 107 108`merge`:: 109 110 An array of the struct refspecs used for the merge lines. That 111 is, merge[i]->dst is a local tracking ref which should be 112 merged into this branch by default. 113 114`merge_nr`:: 115 116 The number of merge configurations 117 118branch_has_merge_config() returns true if the given branch has merge 119configuration given. 120 121Other stuff 122----------- 123 124There is other stuff in remote.h that is related, in general, to the 125process of interacting with remotes. 126 127(Daniel Barkalow)