1#ifndef REMOTE_H
2#define REMOTE_H
34
struct remote {
5const char *name;
67
const char **url;
8int url_nr;
9int url_alloc;
1011
const char **push_refspec;
12struct refspec *push;
13int push_refspec_nr;
14int push_refspec_alloc;
1516
const char **fetch_refspec;
17struct refspec *fetch;
18int fetch_refspec_nr;
19int fetch_refspec_alloc;
2021
/*
22* -1 to never fetch tags
23* 0 to auto-follow tags on heuristic (default)
24* 1 to always auto-follow tags
25* 2 to always fetch tags
26*/
27int fetch_tags;
28int skip_default_update;
29int mirror;
3031
const char *receivepack;
32const char *uploadpack;
3334
/*
35* for curl remotes only
36*/
37char *http_proxy;
38};
3940
struct remote *remote_get(const char *name);
4142
typedef int each_remote_fn(struct remote *remote, void *priv);
43int for_each_remote(each_remote_fn fn, void *priv);
4445
int remote_has_url(struct remote *remote, const char *url);
4647
struct refspec {
48unsigned force : 1;
49unsigned pattern : 1;
50unsigned matching : 1;
5152
char *src;
53char *dst;
54};
5556
extern const struct refspec *tag_refspec;
5758
struct ref *alloc_ref(unsigned namelen);
5960
struct ref *alloc_ref_from_str(const char* str);
6162
struct ref *copy_ref_list(const struct ref *ref);
6364
int check_ref_type(const struct ref *ref, int flags);
6566
/*
67* Frees the entire list and peers of elements.
68*/
69void free_refs(struct ref *ref);
7071
int resolve_remote_symref(struct ref *ref, struct ref *list);
7273
/*
74* Removes and frees any duplicate refs in the map.
75*/
76void ref_remove_duplicates(struct ref *ref_map);
7778
int valid_fetch_refspec(const char *refspec);
79struct refspec *parse_fetch_refspec(int nr_refspec, const char **refspec);
80struct refspec *parse_push_refspec(int nr_refspec, const char **refspec);
8182
int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
83int nr_refspec, const char **refspec, int all);
8485
/*
86* Given a list of the remote refs and the specification of things to
87* fetch, makes a (separate) list of the refs to fetch and the local
88* refs to store into.
89*
90* *tail is the pointer to the tail pointer of the list of results
91* beforehand, and will be set to the tail pointer of the list of
92* results afterward.
93*
94* missing_ok is usually false, but when we are adding branch.$name.merge
95* it is Ok if the branch is not at the remote anymore.
96*/
97int get_fetch_map(const struct ref *remote_refs, const struct refspec *refspec,
98struct ref ***tail, int missing_ok);
99100
struct ref *get_remote_ref(const struct ref *remote_refs, const char *name);
101102
/*
103* For the given remote, reads the refspec's src and sets the other fields.
104*/
105int remote_find_tracking(struct remote *remote, struct refspec *refspec);
106107
struct branch {
108const char *name;
109const char *refname;
110111
const char *remote_name;
112struct remote *remote;
113114
const char **merge_name;
115struct refspec **merge;
116int merge_nr;
117int merge_alloc;
118};
119120
struct branch *branch_get(const char *name);
121122
int branch_has_merge_config(struct branch *branch);
123int branch_merge_matches(struct branch *, int n, const char *);
124125
/* Flags to match_refs. */
126enum match_refs_flags {
127MATCH_REFS_NONE = 0,
128MATCH_REFS_ALL = (1 << 0),
129MATCH_REFS_MIRROR = (1 << 1),
130};
131132
/* Reporting of tracking info */
133int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs);
134int format_tracking_info(struct branch *branch, struct strbuf *sb);
135136
#endif