Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
4865cc3f
Commit
4865cc3f
authored
Nov 08, 2014
by
Edward Thomson
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2673 from swisspol/2672
Fixed GIT_REMOTE_DOWNLOAD_TAGS_ALL to behave like git 1.9.0+
parents
02bc5233
e284c451
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
25 additions
and
19 deletions
+25
-19
CHANGELOG.md
+4
-0
src/fetch.c
+6
-6
src/remote.c
+14
-12
tests/network/remote/local.c
+1
-1
No files found.
CHANGELOG.md
View file @
4865cc3f
...
...
@@ -118,3 +118,7 @@ v0.21 + 1
*
git_status_file now takes an exact path. Use git_status_list_new if
pathspec searching is needed.
*
The fetch behavior of remotes with autotag set to GIT_REMOTE_DOWNLOAD_TAGS_ALL
has been changed to match git 1.9.0 and later. In this mode, libgit2 now
fetches all tags in addition to whatever else needs to be fetched.
src/fetch.c
View file @
4865cc3f
...
...
@@ -28,15 +28,15 @@ static int maybe_want(git_remote *remote, git_remote_head *head, git_odb *odb, g
if
(
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 tagopt is --tags,
always request tags
*
in addition to the remote's refspec
s
*/
if
(
git_refspec_src_matches
(
tagspec
,
head
->
name
))
match
=
1
;
else
return
0
;
}
else
if
(
git_remote__matching_refspec
(
remote
,
head
->
name
))
match
=
1
;
}
if
(
!
match
&&
git_remote__matching_refspec
(
remote
,
head
->
name
))
match
=
1
;
if
(
!
match
)
return
0
;
...
...
src/remote.c
View file @
4865cc3f
...
...
@@ -1098,24 +1098,26 @@ static int update_tips_for_spec(
if
(
!
git_reference_is_valid_name
(
head
->
name
))
continue
;
if
(
git_refspec_src_matches
(
spec
,
head
->
name
)
&&
spec
->
dst
)
{
if
(
git_refspec_transform
(
&
refname
,
spec
,
head
->
name
)
<
0
)
goto
on_error
;
}
else
if
(
remote
->
download_tags
!=
GIT_REMOTE_DOWNLOAD_TAGS_NONE
)
{
if
(
git_refspec_src_matches
(
&
tagspec
,
head
->
name
))
{
if
(
remote
->
download_tags
!=
GIT_REMOTE_DOWNLOAD_TAGS_NONE
)
{
if
(
remote
->
download_tags
!=
GIT_REMOTE_DOWNLOAD_TAGS_ALL
)
autotag
=
1
;
if
(
remote
->
download_tags
==
GIT_REMOTE_DOWNLOAD_TAGS_AUTO
)
autotag
=
1
;
if
(
!
git_refspec_src_matches
(
&
tagspec
,
head
->
name
))
git_buf_clear
(
&
refname
);
if
(
git_buf_puts
(
&
refname
,
head
->
name
)
<
0
)
goto
on_error
;
}
else
{
continue
;
git_buf_clear
(
&
refname
);
if
(
git_
buf_puts
(
&
refname
,
head
->
name
)
<
0
)
}
}
else
if
(
git_refspec_src_matches
(
spec
,
head
->
name
)
&&
spec
->
dst
)
{
if
(
git_
refspec_transform
(
&
refname
,
spec
,
head
->
name
)
<
0
)
goto
on_error
;
}
else
{
continue
;
}
/* In autotag mode, only create tags for objects already in db */
if
(
autotag
&&
!
git_odb_exists
(
odb
,
&
head
->
oid
))
continue
;
...
...
@@ -1276,8 +1278,8 @@ int git_remote_update_tips(
goto
out
;
if
(
remote
->
download_tags
==
GIT_REMOTE_DOWNLOAD_TAGS_ALL
)
{
error
=
update_tips_for_spec
(
remote
,
&
tagspec
,
&
refs
,
signature
,
reflog_message
);
goto
out
;
if
((
error
=
update_tips_for_spec
(
remote
,
&
tagspec
,
&
refs
,
signature
,
reflog_message
))
<
0
)
goto
out
;
}
git_vector_foreach
(
&
remote
->
active_refspecs
,
i
,
spec
)
{
...
...
tests/network/remote/local.c
View file @
4865cc3f
...
...
@@ -171,7 +171,7 @@ void test_network_remote_local__tagopt(void)
git_remote_set_autotag
(
remote
,
GIT_REMOTE_DOWNLOAD_TAGS_ALL
);
cl_git_pass
(
git_remote_fetch
(
remote
,
NULL
,
NULL
,
NULL
));
cl_git_
fail
(
git_reference_lookup
(
&
ref
,
repo
,
"refs/remotes/tagopt/master"
));
cl_git_
pass
(
git_reference_lookup
(
&
ref
,
repo
,
"refs/remotes/tagopt/master"
));
cl_git_pass
(
git_reference_lookup
(
&
ref
,
repo
,
"refs/tags/hard_tag"
));
git_reference_free
(
ref
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment