Merge branch 'bw/ref-prefix-for-configured-refspec'
[gitweb.git] / transport.c
index fe96c0b8077ec6dd634a03a85134b6f2686c54c6..a32da30dee6f4e38433b68d7c9f7e9404aa58858 100644 (file)
@@ -269,7 +269,7 @@ static struct ref *get_refs_via_connect(struct transport *transport, int for_pus
        switch (data->version) {
        case protocol_v2:
                get_remote_refs(data->fd[1], &reader, &refs, for_push,
-                               ref_prefixes);
+                               ref_prefixes, transport->server_options);
                break;
        case protocol_v1:
        case protocol_v0:
@@ -317,6 +317,7 @@ static int fetch_refs_via_pack(struct transport *transport,
        args.no_dependents = data->options.no_dependents;
        args.filter_options = data->options.filter_options;
        args.stateless_rpc = transport->stateless_rpc;
+       args.server_options = transport->server_options;
 
        if (!data->got_remote_heads)
                refs_tmp = get_refs_via_connect(transport, 0, NULL);
@@ -714,7 +715,7 @@ void transport_take_over(struct transport *transport,
        struct git_transport_data *data;
 
        if (!transport->smart_options)
-               die("BUG: taking over transport requires non-NULL "
+               BUG("taking over transport requires non-NULL "
                    "smart_options field.");
 
        data = xcalloc(1, sizeof(*data));
@@ -839,7 +840,7 @@ int is_transport_allowed(const char *type, int from_user)
                return from_user;
        }
 
-       die("BUG: invalid protocol_allow_config type");
+       BUG("invalid protocol_allow_config type");
 }
 
 void transport_check_allowed(const char *type)
@@ -1088,30 +1089,11 @@ int transport_push(struct transport *transport,
                int pretend = flags & TRANSPORT_PUSH_DRY_RUN;
                int push_ret, ret, err;
                struct argv_array ref_prefixes = ARGV_ARRAY_INIT;
-               int i;
 
-               if (check_push_refs(local_refs, rs->raw_nr, rs->raw) < 0)
+               if (check_push_refs(local_refs, rs) < 0)
                        return -1;
 
-               for (i = 0; i < rs->nr; i++) {
-                       const struct refspec_item *item = &rs->items[i];
-                       const char *prefix = NULL;
-
-                       if (item->dst)
-                               prefix = item->dst;
-                       else if (item->src && !item->exact_sha1)
-                               prefix = item->src;
-
-                       if (prefix) {
-                               const char *glob = strchr(prefix, '*');
-                               if (glob)
-                                       argv_array_pushf(&ref_prefixes, "%.*s",
-                                                        (int)(glob - prefix),
-                                                        prefix);
-                               else
-                                       expand_ref_prefix(&ref_prefixes, prefix);
-                       }
-               }
+               refspec_ref_prefixes(rs, &ref_prefixes);
 
                remote_refs = transport->vtable->get_refs_list(transport, 1,
                                                               &ref_prefixes);
@@ -1127,10 +1109,8 @@ int transport_push(struct transport *transport,
                if (flags & TRANSPORT_PUSH_FOLLOW_TAGS)
                        match_flags |= MATCH_REFS_FOLLOW_TAGS;
 
-               if (match_push_refs(local_refs, &remote_refs,
-                                   rs->raw_nr, rs->raw, match_flags)) {
+               if (match_push_refs(local_refs, &remote_refs, rs, match_flags))
                        return -1;
-               }
 
                if (transport->smart_options &&
                    transport->smart_options->cas &&
@@ -1159,7 +1139,7 @@ int transport_push(struct transport *transport,
 
                        if (!push_unpushed_submodules(&commits,
                                                      transport->remote,
-                                                     rs->raw, rs->raw_nr,
+                                                     rs,
                                                      transport->push_options,
                                                      pretend)) {
                                oid_array_clear(&commits);