| 70 | static struct string_list push_options_config = STRING_LIST_INIT_DUP; |
| 71 | |
| 72 | static void refspec_append_mapped(struct refspec *refspec, const char *ref, |
| 73 | struct remote *remote, struct ref *matched) |
| 74 | { |
| 75 | const char *branch_name; |
| 76 | |
| 77 | if (remote->push.nr) { |
| 78 | struct refspec_item query = { |
| 79 | .src = matched->name, |
| 80 | }; |
| 81 | |
| 82 | if (!refspec_find_match(&remote->push, &query) && query.dst) { |
| 83 | refspec_appendf(refspec, "%s%s:%s", |
| 84 | query.force ? "+" : "", |
| 85 | query.src, query.dst); |
| 86 | free(query.dst); |
| 87 | return; |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | if (push_default == PUSH_DEFAULT_UPSTREAM && |
| 92 | skip_prefix(matched->name, "refs/heads/", &branch_name)) { |
| 93 | struct branch *branch = branch_get(branch_name); |
| 94 | if (branch->merge_nr == 1 && branch->merge[0]->src) { |
| 95 | refspec_appendf(refspec, "%s:%s", |
| 96 | ref, branch->merge[0]->src); |
| 97 | return; |
| 98 | } |
| 99 | } |
| 100 | |
| 101 | refspec_append(refspec, ref); |
| 102 | } |
| 103 | |
| 104 | static void set_refspecs(const char **refs, int nr, struct remote *remote) |
| 105 | { |
no test coverage detected