X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=builtin-push.c;h=b7412e82937a240776cdda07da05797b0b2acb0b;hb=08a19d873c16aa6127bf4c40cf99a9dd19558a0c;hp=d23974e708cb744f75efbb9f1acbf37606e92b05;hpb=dc8302d27439b38cb3042b2d1c1106d8ef99e3f2;p=git.git diff --git a/builtin-push.c b/builtin-push.c index d23974e70..b7412e829 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -57,11 +57,36 @@ static void expand_refspecs(void) static void set_refspecs(const char **refs, int nr) { if (nr) { - size_t bytes = nr * sizeof(char *); - - refspec = xrealloc(refspec, bytes); - memcpy(refspec, refs, bytes); - refspec_nr = nr; + int pass; + for (pass = 0; pass < 2; pass++) { + /* pass 0 counts and allocates, pass 1 fills */ + int i, cnt; + for (i = cnt = 0; i < nr; i++) { + if (!strcmp("tag", refs[i])) { + int len; + char *tag; + if (nr <= ++i) + die("tag shorthand without "); + if (pass) { + len = strlen(refs[i]) + 11; + tag = xmalloc(len); + strcpy(tag, "refs/tags/"); + strcat(tag, refs[i]); + refspec[cnt] = tag; + } + cnt++; + continue; + } + if (pass) + refspec[cnt] = refs[i]; + cnt++; + } + if (!pass) { + size_t bytes = cnt * sizeof(char *); + refspec_nr = cnt; + refspec = xrealloc(refspec, bytes); + } + } } expand_refspecs(); }