Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 174 lines (142 sloc) 5.867 kb
9b28851 Push code for transport library
Daniel Barkalow authored
1 #ifndef TRANSPORT_H
2 #define TRANSPORT_H
3
4 #include "cache.h"
5 #include "remote.h"
6
aa5af97 Refactor git transport options parsing
Ilari Liusvaara authored
7 struct git_transport_options {
8 unsigned thin : 1;
9 unsigned keep : 1;
10 unsigned followtags : 1;
11 int depth;
12 const char *uploadpack;
13 const char *receivepack;
14 };
15
9b28851 Push code for transport library
Daniel Barkalow authored
16 struct transport {
17 struct remote *remote;
18 const char *url;
19 void *data;
4577370 Miscellaneous const changes and utilities
Daniel Barkalow authored
20 const struct ref *remote_refs;
9b28851 Push code for transport library
Daniel Barkalow authored
21
22 /**
b0d66e1 @rctay transport: add got_remote_refs flag
rctay authored
23 * Indicates whether we already called get_refs_list(); set by
24 * transport.c::transport_get_remote_refs().
25 */
26 unsigned got_remote_refs : 1;
27
28 /**
9b28851 Push code for transport library
Daniel Barkalow authored
29 * Returns 0 if successful, positive if the option is not
30 * recognized or is inapplicable, and negative if the option
31 * is applicable but the value is invalid.
32 **/
33 int (*set_option)(struct transport *connection, const char *name,
34 const char *value);
35
3714831 Allow fetch to modify refs
Daniel Barkalow authored
36 /**
37 * Returns a list of the remote side's refs. In order to allow
38 * the transport to try to share connections, for_push is a
39 * hint as to whether the ultimate operation is a push or a fetch.
40 *
41 * If the transport is able to determine the remote hash for
42 * the ref without a huge amount of effort, it should store it
43 * in the ref's old_sha1 field; otherwise it should be all 0.
44 **/
64fcef2 Move push matching and reporting logic into transport.c
Daniel Barkalow authored
45 struct ref *(*get_refs_list)(struct transport *transport, int for_push);
3714831 Allow fetch to modify refs
Daniel Barkalow authored
46
47 /**
48 * Fetch the objects for the given refs. Note that this gets
49 * an array, and should ignore the list structure.
50 *
51 * If the transport did not get hashes for refs in
52 * get_refs_list(), it should set the old_sha1 fields in the
53 * provided refs now.
54 **/
55 int (*fetch)(struct transport *transport, int refs_nr, struct ref **refs);
56
57 /**
58 * Push the objects and refs. Send the necessary objects, and
59 * then, for any refs where peer_ref is set and
60 * peer_ref->new_sha1 is different from old_sha1, tell the
61 * remote side to update each ref in the list from old_sha1 to
62 * peer_ref->new_sha1.
63 *
64 * Where possible, set the status for each ref appropriately.
65 *
66 * The transport must modify new_sha1 in the ref to the new
67 * value if the remote accepted the change. Note that this
68 * could be a different value from peer_ref->new_sha1 if the
69 * process involved generating new commits.
70 **/
64fcef2 Move push matching and reporting logic into transport.c
Daniel Barkalow authored
71 int (*push_refs)(struct transport *transport, struct ref *refs, int flags);
9b28851 Push code for transport library
Daniel Barkalow authored
72 int (*push)(struct transport *connection, int refspec_nr, const char **refspec, int flags);
b236752 Support remote archive from all smart transports
Ilari Liusvaara authored
73 int (*connect)(struct transport *connection, const char *name,
74 const char *executable, int fd[2]);
9b28851 Push code for transport library
Daniel Barkalow authored
75
3714831 Allow fetch to modify refs
Daniel Barkalow authored
76 /** get_refs_list(), fetch(), and push_refs() can keep
77 * resources (such as a connection) reserved for futher
78 * use. disconnect() releases these resources.
79 **/
9b28851 Push code for transport library
Daniel Barkalow authored
80 int (*disconnect)(struct transport *connection);
824d577 @spearce Refactor struct transport_ops inlined into struct transport
spearce authored
81 char *pack_lockfile;
cff7123 @spearce fetch: Allow transport -v -v -v to set verbosity to 3
spearce authored
82 signed verbose : 3;
d01b3c0 @rctay transport->progress: use flag authoritatively
rctay authored
83 /**
84 * Transports should not set this directly, and should use this
85 * value without having to check isatty(2), -q/--quiet
86 * (transport->verbose < 0), etc. - checking has already been done
87 * in transport_set_verbosity().
88 **/
21188b1 Implement git clone -v
Miklos Vajna authored
89 unsigned progress : 1;
aa5af97 Refactor git transport options parsing
Ilari Liusvaara authored
90 /*
91 * If transport is at least potentially smart, this points to
92 * git_transport_options structure to use in case transport
93 * actually turns out to be smart.
94 */
95 struct git_transport_options *smart_options;
9b28851 Push code for transport library
Daniel Barkalow authored
96 };
97
824d577 @spearce Refactor struct transport_ops inlined into struct transport
spearce authored
98 #define TRANSPORT_PUSH_ALL 1
99 #define TRANSPORT_PUSH_FORCE 2
2e13e5d @spearce Merge branch 'master' into db/fetch-pack
spearce authored
100 #define TRANSPORT_PUSH_DRY_RUN 4
94c89ba @awhitcroft git-push: plumb in --mirror mode
awhitcroft authored
101 #define TRANSPORT_PUSH_MIRROR 8
212cfe1 @rctay transport: update flags to be in running order
rctay authored
102 #define TRANSPORT_PUSH_PORCELAIN 16
103 #define TRANSPORT_PUSH_SET_UPSTREAM 32
d2b17b3 @iveqy push: Don't push a repository with unpushed submodules
iveqy authored
104 #define TRANSPORT_RECURSE_SUBMODULES_CHECK 64
824d577 @spearce Refactor struct transport_ops inlined into struct transport
spearce authored
105
f1863d0 @michaellukashov refactor duplicated code in builtin-send-pack.c and transport.c
michaellukashov authored
106 #define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
824d577 @spearce Refactor struct transport_ops inlined into struct transport
spearce authored
107
9b28851 Push code for transport library
Daniel Barkalow authored
108 /* Returns a transport suitable for the url */
e5f4e21 @spearce Remove unnecessary 'fetch' argument from transport_get API
spearce authored
109 struct transport *transport_get(struct remote *, const char *);
9b28851 Push code for transport library
Daniel Barkalow authored
110
111 /* Transport options which apply to git:// and scp-style URLs */
112
c29727d Add fetch methods to transport library.
Daniel Barkalow authored
113 /* The program to use on the remote side to send a pack */
114 #define TRANS_OPT_UPLOADPACK "uploadpack"
115
9b28851 Push code for transport library
Daniel Barkalow authored
116 /* The program to use on the remote side to receive a pack */
117 #define TRANS_OPT_RECEIVEPACK "receivepack"
118
119 /* Transfer the data as a thin pack if not null */
120 #define TRANS_OPT_THIN "thin"
121
c29727d Add fetch methods to transport library.
Daniel Barkalow authored
122 /* Keep the pack that was transferred if not null */
123 #define TRANS_OPT_KEEP "keep"
124
125 /* Limit the depth of the fetch if not null */
126 #define TRANS_OPT_DEPTH "depth"
127
41fa7d2 @spearce Teach git-fetch to exploit server side automatic tag following
spearce authored
128 /* Aggressively fetch annotated tags if possible */
129 #define TRANS_OPT_FOLLOWTAGS "followtags"
130
9b28851 Push code for transport library
Daniel Barkalow authored
131 /**
132 * Returns 0 if the option was used, non-zero otherwise. Prints a
133 * message to stderr if the option is not used.
134 **/
135 int transport_set_option(struct transport *transport, const char *name,
136 const char *value);
d01b3c0 @rctay transport->progress: use flag authoritatively
rctay authored
137 void transport_set_verbosity(struct transport *transport, int verbosity,
138 int force_progress);
9b28851 Push code for transport library
Daniel Barkalow authored
139
140 int transport_push(struct transport *connection,
07436e4 @moy push: point to 'git pull' and 'git push --force' in case of non-fast for...
moy authored
141 int refspec_nr, const char **refspec, int flags,
142 int * nonfastforward);
9b28851 Push code for transport library
Daniel Barkalow authored
143
4577370 Miscellaneous const changes and utilities
Daniel Barkalow authored
144 const struct ref *transport_get_remote_refs(struct transport *transport);
c29727d Add fetch methods to transport library.
Daniel Barkalow authored
145
3714831 Allow fetch to modify refs
Daniel Barkalow authored
146 int transport_fetch_refs(struct transport *transport, struct ref *refs);
1788c39 @spearce Remove pack.keep after ref updates in git-fetch
spearce authored
147 void transport_unlock_pack(struct transport *transport);
9b28851 Push code for transport library
Daniel Barkalow authored
148 int transport_disconnect(struct transport *transport);
47abd85 @ageric fetch: Strip usernames from url's before storing them
ageric authored
149 char *transport_anonymize_url(const char *url);
61b075b Support taking over transports
Ilari Liusvaara authored
150 void transport_take_over(struct transport *transport,
151 struct child_process *child);
9b28851 Push code for transport library
Daniel Barkalow authored
152
b236752 Support remote archive from all smart transports
Ilari Liusvaara authored
153 int transport_connect(struct transport *transport, const char *name,
154 const char *exec, int fd[2]);
155
6eb996b Add support for external programs for handling native fetches
Daniel Barkalow authored
156 /* Transport methods defined outside transport.c */
c9e388b Make the "traditionally-supported" URLs a special case
Daniel Barkalow authored
157 int transport_helper_init(struct transport *transport, const char *name);
419f37d Add bidirectional_transfer_loop()
Ilari Liusvaara authored
158 int bidirectional_transfer_loop(int input, int output);
6eb996b Add support for external programs for handling native fetches
Daniel Barkalow authored
159
f1863d0 @michaellukashov refactor duplicated code in builtin-send-pack.c and transport.c
michaellukashov authored
160 /* common methods used by transport.c and builtin-send-pack.c */
161 void transport_verify_remote_names(int nr_heads, const char **heads);
162
163 void transport_update_tracking_ref(struct remote *remote, struct ref *ref, int verbose);
164
165 int transport_refs_pushed(struct ref *ref);
166
167 void transport_print_push_status(const char *dest, struct ref *refs,
168 int verbose, int porcelain, int *nonfastforward);
169
36cfda1 @gitster refs_from_alternate: helper to use refs from alternates
authored
170 typedef void alternate_ref_fn(const struct ref *, void *);
114a6a8 @peff refactor refs_from_alternate_cb to allow passing extra data
peff authored
171 extern void for_each_alternate_ref(alternate_ref_fn, void *);
36cfda1 @gitster refs_from_alternate: helper to use refs from alternates
authored
172
9b28851 Push code for transport library
Daniel Barkalow authored
173 #endif
Something went wrong with that request. Please try again.