提交 ed368546 编写于 作者: D Daniel Johnson 提交者: Junio C Hamano

fetch: allow command line --tags to override config

Originally, if remote.<name>.tagopt was set, the --tags and option would
have no effect when given to git fetch. So if
tagopt="--no-tags"

	git fetch --tags

would not actually fetch tags.

This patch changes this behavior to only follow what is written in the
config if there is no option passed by the command line.
Signed-off-by: NDaniel Johnson <ComputerDruid@gmail.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 64fdc08d
...@@ -1623,7 +1623,9 @@ remote.<name>.tagopt:: ...@@ -1623,7 +1623,9 @@ remote.<name>.tagopt::
Setting this value to \--no-tags disables automatic tag following when Setting this value to \--no-tags disables automatic tag following when
fetching from remote <name>. Setting it to \--tags will fetch every fetching from remote <name>. Setting it to \--tags will fetch every
tag from remote <name>, even if they are not reachable from remote tag from remote <name>, even if they are not reachable from remote
branch heads. branch heads. Passing these flags directly to linkgit:git-fetch[1] can
override this setting. See options \--tags and \--no-tags of
linkgit:git-fetch[1].
remote.<name>.vcs:: remote.<name>.vcs::
Setting this to a value <vcs> will cause git to interact with Setting this to a value <vcs> will cause git to interact with
......
...@@ -49,7 +49,9 @@ ifndef::git-pull[] ...@@ -49,7 +49,9 @@ ifndef::git-pull[]
endif::git-pull[] endif::git-pull[]
By default, tags that point at objects that are downloaded By default, tags that point at objects that are downloaded
from the remote repository are fetched and stored locally. from the remote repository are fetched and stored locally.
This option disables this automatic tag following. This option disables this automatic tag following. The default
behavior for a remote may be specified with the remote.<name>.tagopt
setting. See linkgit:git-config[1].
-t:: -t::
--tags:: --tags::
...@@ -58,7 +60,9 @@ endif::git-pull[] ...@@ -58,7 +60,9 @@ endif::git-pull[]
objects reachable from the branch heads that are being objects reachable from the branch heads that are being
tracked will not be fetched by this mechanism. This tracked will not be fetched by this mechanism. This
flag lets all tags and their associated objects be flag lets all tags and their associated objects be
downloaded. downloaded. The default behavior for a remote may be
specified with the remote.<name>.tagopt setting. See
linkgit:git-config[1].
-u:: -u::
--update-head-ok:: --update-head-ok::
......
...@@ -675,10 +675,12 @@ static int do_fetch(struct transport *transport, ...@@ -675,10 +675,12 @@ static int do_fetch(struct transport *transport,
for_each_ref(add_existing, &existing_refs); for_each_ref(add_existing, &existing_refs);
if (transport->remote->fetch_tags == 2 && tags != TAGS_UNSET) if (tags == TAGS_DEFAULT) {
tags = TAGS_SET; if (transport->remote->fetch_tags == 2)
if (transport->remote->fetch_tags == -1) tags = TAGS_SET;
tags = TAGS_UNSET; if (transport->remote->fetch_tags == -1)
tags = TAGS_UNSET;
}
if (!transport->get_refs_list || !transport->fetch) if (!transport->get_refs_list || !transport->fetch)
die("Don't know how to fetch from %s", transport->url); die("Don't know how to fetch from %s", transport->url);
......
#!/bin/sh
test_description='tagopt variable affects "git fetch" and is overridden by commandline.'
. ./test-lib.sh
setup_clone () {
git clone --mirror . $1 &&
git remote add remote_$1 $1 &&
(cd $1 &&
git tag tag_$1)
}
test_expect_success setup '
test_commit test &&
setup_clone one &&
git config remote.remote_one.tagopt --no-tags &&
setup_clone two &&
git config remote.remote_two.tagopt --tags
'
test_expect_success "fetch with tagopt=--no-tags does not get tag" '
git fetch remote_one &&
test_must_fail git show-ref tag_one
'
test_expect_success "fetch --tags with tagopt=--no-tags gets tag" '
git fetch --tags remote_one &&
git show-ref tag_one
'
test_expect_success "fetch --no-tags with tagopt=--tags does not get tag" '
git fetch --no-tags remote_two &&
test_must_fail git show-ref tag_two
'
test_expect_success "fetch with tagopt=--tags gets tag" '
git fetch remote_two &&
git show-ref tag_two
'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册