git-push: accept tag <tag> as advertised.
The documentation talked about "git push $URL tag <tag>" as a short-hand for refs/tags/<tag>:refs/tags/<tag> for a long time but that was never the case (the short-hand was for "git fetch"). Instead of fixing the documentation, just add a bit of code to match it since it is easy to do and would make it more consistent. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
7ef0435088
commit
411fb8baa6
@ -57,11 +57,36 @@ static void expand_refspecs(void)
|
|||||||
static void set_refspecs(const char **refs, int nr)
|
static void set_refspecs(const char **refs, int nr)
|
||||||
{
|
{
|
||||||
if (nr) {
|
if (nr) {
|
||||||
size_t bytes = nr * sizeof(char *);
|
int pass;
|
||||||
|
for (pass = 0; pass < 2; pass++) {
|
||||||
refspec = xrealloc(refspec, bytes);
|
/* pass 0 counts and allocates, pass 1 fills */
|
||||||
memcpy(refspec, refs, bytes);
|
int i, cnt;
|
||||||
refspec_nr = nr;
|
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();
|
expand_refspecs();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user