mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 21:08:56 +00:00
Merge pull request #1557 from carlosmn/tagopt
remote: correctly interpret tagopt '--tags'
This commit is contained in:
commit
d6465e1a7d
12
src/fetch.c
12
src/fetch.c
@ -34,10 +34,16 @@ static int filter_ref__cb(git_remote_head *head, void *payload)
|
|||||||
|
|
||||||
if (!p->found_head && strcmp(head->name, GIT_HEAD_FILE) == 0)
|
if (!p->found_head && strcmp(head->name, GIT_HEAD_FILE) == 0)
|
||||||
p->found_head = 1;
|
p->found_head = 1;
|
||||||
else if (git_remote__matching_refspec(p->remote, head->name))
|
else if (p->remote->download_tags == GIT_REMOTE_DOWNLOAD_TAGS_ALL) {
|
||||||
|
/*
|
||||||
|
* If tagopt is --tags, then we only use the default
|
||||||
|
* tags refspec and ignore the remote's
|
||||||
|
*/
|
||||||
|
if (git_refspec_src_matches(p->tagspec, head->name))
|
||||||
match = 1;
|
match = 1;
|
||||||
else if (p->remote->download_tags == GIT_REMOTE_DOWNLOAD_TAGS_ALL &&
|
else
|
||||||
git_refspec_src_matches(p->tagspec, head->name))
|
return 0;
|
||||||
|
} else if (git_remote__matching_refspec(p->remote, head->name))
|
||||||
match = 1;
|
match = 1;
|
||||||
|
|
||||||
if (!match)
|
if (!match)
|
||||||
|
28
src/remote.c
28
src/remote.c
@ -957,30 +957,38 @@ on_error:
|
|||||||
|
|
||||||
int git_remote_update_tips(git_remote *remote)
|
int git_remote_update_tips(git_remote *remote)
|
||||||
{
|
{
|
||||||
git_refspec *spec;
|
git_refspec *spec, tagspec;
|
||||||
git_vector refs;
|
git_vector refs;
|
||||||
|
int error;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
|
||||||
|
if (git_refspec__parse(&tagspec, GIT_REFSPEC_TAGS, true) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (git_vector_init(&refs, 16, NULL) < 0)
|
if (git_vector_init(&refs, 16, NULL) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (git_remote_ls(remote, store_refs, &refs) < 0)
|
if ((error = git_remote_ls(remote, store_refs, &refs)) < 0)
|
||||||
goto on_error;
|
goto out;
|
||||||
|
|
||||||
|
if (remote->download_tags == GIT_REMOTE_DOWNLOAD_TAGS_ALL) {
|
||||||
|
error = update_tips_for_spec(remote, &tagspec, &refs);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
git_vector_foreach(&remote->refspecs, i, spec) {
|
git_vector_foreach(&remote->refspecs, i, spec) {
|
||||||
if (spec->push)
|
if (spec->push)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (update_tips_for_spec(remote, spec, &refs) < 0)
|
if ((error = update_tips_for_spec(remote, spec, &refs)) < 0)
|
||||||
goto on_error;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
git_refspec__free(&tagspec);
|
||||||
git_vector_free(&refs);
|
git_vector_free(&refs);
|
||||||
return 0;
|
return error;
|
||||||
|
|
||||||
on_error:
|
|
||||||
git_vector_free(&refs);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_remote_connected(git_remote *remote)
|
int git_remote_connected(git_remote *remote)
|
||||||
|
@ -141,3 +141,20 @@ void test_network_remote_local__shorthand_fetch_refspec1(void)
|
|||||||
|
|
||||||
cl_git_fail(git_reference_lookup(&ref, repo, "refs/tags/hard_tag"));
|
cl_git_fail(git_reference_lookup(&ref, repo, "refs/tags/hard_tag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_network_remote_local__tagopt(void)
|
||||||
|
{
|
||||||
|
git_reference *ref;
|
||||||
|
|
||||||
|
connect_to_local_repository(cl_fixture("testrepo.git"));
|
||||||
|
git_remote_set_autotag(remote, GIT_REMOTE_DOWNLOAD_TAGS_ALL);
|
||||||
|
|
||||||
|
cl_git_pass(git_remote_download(remote, NULL, NULL));
|
||||||
|
cl_git_pass(git_remote_update_tips(remote));
|
||||||
|
|
||||||
|
|
||||||
|
cl_git_fail(git_reference_lookup(&ref, repo, "refs/remotes/master"));
|
||||||
|
|
||||||
|
cl_git_pass(git_reference_lookup(&ref, repo, "refs/tags/hard_tag"));
|
||||||
|
git_reference_free(ref);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user