diff options
author | Junio C Hamano <junkio@cox.net> | 2006-12-27 02:43:46 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-27 02:43:46 -0800 |
commit | 37818d7db070f67a20df58ac7d5e04cc63ef1867 (patch) | |
tree | 1b1b2b71afab1c4ad29666f56fa8d2560b7855c6 /builtin-push.c | |
parent | 4bcb310c2539b66d535e87508d1b7a90fe29c083 (diff) | |
parent | ae72f685418b79bbd67e1017c5b1ac7d731c042e (diff) | |
download | git-37818d7db070f67a20df58ac7d5e04cc63ef1867.tar.gz |
Merge branch 'master' into js/shallow
This is to adjust to:
count-objects -v: show number of packs as well.
which will break a test in this series.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-push.c')
-rw-r--r-- | builtin-push.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/builtin-push.c b/builtin-push.c index d23974e708..b7412e8293 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 <tag> shorthand without <tag>"); + 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(); } |