diff --git a/remote.c b/remote.c
index 30abdbb4d9fdeeb39241a88754a7e511cc2e94eb..500ca4d968753485ac38d44e238e93ab86372c1c 100644 (file)
--- a/remote.c
+++ b/remote.c
for (weak_match = match = 0; refs; refs = refs->next) {
char *name = refs->name;
int namelen = strlen(name);
- int weak_match;
if (namelen < patlen ||
memcmp(name + namelen - patlen, pattern, patlen))
errs = 1;
if (dst_value == NULL)
- dst_value = rs->src;
+ dst_value = matched_src->name;
switch (count_refspec_match(dst_value, dst, &matched_dst)) {
case 1:
case 0:
if (!memcmp(dst_value, "refs/", 5))
matched_dst = make_dst(dst_value, dst_tail);
- else if (!strcmp(rs->src, dst_value) && matched_src)
- /* pushing "master:master" when
- * remote does not have master yet.
- */
- matched_dst = make_dst(matched_src->name, dst_tail);
else
error("dst refspec %s does not match any "
"existing ref on the remote and does "
}
if (pat) {
- dst_name = xmalloc(strlen(pat->dst) +
+ const char *dst_side = pat->dst ? pat->dst : pat->src;
+ dst_name = xmalloc(strlen(dst_side) +
strlen(src->name) -
strlen(pat->src) + 2);
- strcpy(dst_name, pat->dst);
+ strcpy(dst_name, dst_side);
strcat(dst_name, src->name + strlen(pat->src));
} else
- dst_name = strdup(src->name);
+ dst_name = xstrdup(src->name);
dst_peer = find_ref_by_name(dst, dst_name);
if (dst_peer && dst_peer->peer_ref)
/* We're already sending something to this ref. */