File tree Expand file tree Collapse file tree 2 files changed +19
-1
lines changed
Expand file tree Collapse file tree 2 files changed +19
-1
lines changed Original file line number Diff line number Diff line change @@ -1360,7 +1360,13 @@ int git_reference_peel(
13601360 return peel_error (error , ref , "Cannot resolve reference" );
13611361 }
13621362
1363- if (!git_oid_iszero (& resolved -> peel )) {
1363+ /*
1364+ * If we try to peel an object to a tag, we cannot use
1365+ * the fully peeled object, as that will always resolve
1366+ * to a commit. So we only want to use the peeled value
1367+ * if it is not zero and the target is not a tag.
1368+ */
1369+ if (target_type != GIT_OBJ_TAG && !git_oid_iszero (& resolved -> peel )) {
13641370 error = git_object_lookup (& target ,
13651371 git_reference_owner (ref ), & resolved -> peel , GIT_OBJ_ANY );
13661372 } else {
Original file line number Diff line number Diff line change @@ -117,3 +117,15 @@ void test_refs_peel__can_peel_fully_peeled_packed_refs(void)
117117 "0df1a5865c8abfc09f1f2182e6a31be550e99f07" ,
118118 GIT_OBJ_COMMIT );
119119}
120+
121+ void test_refs_peel__can_peel_fully_peeled_tag_to_tag (void )
122+ {
123+ assert_peel_generic (g_peel_repo ,
124+ "refs/tags/tag-inside-tags" , GIT_OBJ_TAG ,
125+ "c2596aa0151888587ec5c0187f261e63412d9e11" ,
126+ GIT_OBJ_TAG );
127+ assert_peel_generic (g_peel_repo ,
128+ "refs/foo/tag-outside-tags" , GIT_OBJ_TAG ,
129+ "c2596aa0151888587ec5c0187f261e63412d9e11" ,
130+ GIT_OBJ_TAG );
131+ }
You can’t perform that action at this time.
0 commit comments