sequencer: lib'ify checkout_fast_forward()
[gitweb.git] / transport.h
index 4336dd33eb301306ff2a57c4c2c4f8c45d61fc50..6fe3485325dfccfba3b018c8c25b89a6d4643a12 100644 (file)
@@ -18,6 +18,12 @@ struct git_transport_options {
        struct push_cas_option *cas;
 };
 
+enum transport_family {
+       TRANSPORT_FAMILY_ALL = 0,
+       TRANSPORT_FAMILY_IPV4,
+       TRANSPORT_FAMILY_IPV6
+};
+
 struct transport {
        struct remote *remote;
        const char *url;
@@ -42,6 +48,12 @@ struct transport {
         */
        unsigned cloning : 1;
 
+       /*
+        * These strings will be passed to the {pre, post}-receive hook,
+        * on the remote side, if both sides support the push options capability.
+        */
+       const struct string_list *push_options;
+
        /**
         * Returns 0 if successful, positive if the option is not
         * recognized or is inapplicable, and negative if the option
@@ -74,15 +86,15 @@ struct transport {
        /**
         * Push the objects and refs. Send the necessary objects, and
         * then, for any refs where peer_ref is set and
-        * peer_ref->new_sha1 is different from old_sha1, tell the
-        * remote side to update each ref in the list from old_sha1 to
-        * peer_ref->new_sha1.
+        * peer_ref->new_oid is different from old_oid, tell the
+        * remote side to update each ref in the list from old_oid to
+        * peer_ref->new_oid.
         *
         * Where possible, set the status for each ref appropriately.
         *
         * The transport must modify new_sha1 in the ref to the new
         * value if the remote accepted the change. Note that this
-        * could be a different value from peer_ref->new_sha1 if the
+        * could be a different value from peer_ref->new_oid if the
         * process involved generating new commits.
         **/
        int (*push_refs)(struct transport *transport, struct ref *refs, int flags);
@@ -110,6 +122,8 @@ struct transport {
         * actually turns out to be smart.
         */
        struct git_transport_options *smart_options;
+
+       enum transport_family family;
 };
 
 #define TRANSPORT_PUSH_ALL 1
@@ -126,6 +140,7 @@ struct transport {
 #define TRANSPORT_PUSH_CERT_ALWAYS 2048
 #define TRANSPORT_PUSH_CERT_IF_ASKED 4096
 #define TRANSPORT_PUSH_ATOMIC 8192
+#define TRANSPORT_PUSH_OPTIONS 16384
 
 #define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
 #define TRANSPORT_SUMMARY(x) (int)(TRANSPORT_SUMMARY_WIDTH + strlen(x) - gettext_width(x)), (x)