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
e284c451
Commit
e284c451
authored
Oct 28, 2014
by
Pierre-Olivier Latour
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changed GIT_REMOTE_DOWNLOAD_TAGS_ALL to behave like git 1.9.0
parent
02bc5233
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 @
e284c451
...
...
@@ -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 @
e284c451
...
...
@@ -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 @
e284c451
...
...
@@ -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 @
e284c451
...
...
@@ -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