From 4df056a14ecaad3ff9d963599fff8c8d7ebe87e9 Mon Sep 17 00:00:00 2001 From: Giteabot Date: Tue, 16 Jan 2024 15:33:33 +0800 Subject: [PATCH] Use refname:strip-2 instead of refname:short when syncing tags (#28797) (#28811) Backport #28797 by @lunny Fix #28694 Generally, `refname:short` should be equal to `refname:lstrip=2` except `core.warnAmbiguousRefs is used to select the strict abbreviation mode.` ref: https://git-scm.com/docs/git-for-each-ref#Documentation/git-for-each-ref.txt-refname Co-authored-by: Lunny Xiao (cherry picked from commit 4746291b0863eaf9c629c944bd48295ca2f69d2f) --- modules/git/foreachref/format_test.go | 4 ++-- modules/git/repo_tag.go | 6 ++++-- modules/git/repo_tag_test.go | 18 +++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/git/foreachref/format_test.go b/modules/git/foreachref/format_test.go index 392a95a4e6..8ff239323c 100644 --- a/modules/git/foreachref/format_test.go +++ b/modules/git/foreachref/format_test.go @@ -49,9 +49,9 @@ func TestFormat_Flag(t *testing.T) { { name: "multiple fields", - givenFormat: foreachref.NewFormat("refname:short", "objecttype", "objectname"), + givenFormat: foreachref.NewFormat("refname:lstrip=2", "objecttype", "objectname"), - wantFlag: "refname:short %(refname:short)%00objecttype %(objecttype)%00objectname %(objectname)%00%00", + wantFlag: "refname:lstrip=2 %(refname:lstrip=2)%00objecttype %(objecttype)%00objectname %(objectname)%00%00", }, } diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go index ae877f0211..b138d0a620 100644 --- a/modules/git/repo_tag.go +++ b/modules/git/repo_tag.go @@ -112,7 +112,9 @@ func (repo *Repository) GetTagWithID(idStr, name string) (*Tag, error) { // GetTagInfos returns all tag infos of the repository. func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error) { - forEachRefFmt := foreachref.NewFormat("objecttype", "refname:short", "object", "objectname", "creator", "contents", "contents:signature") + // Generally, refname:short should be equal to refname:lstrip=2 except core.warnAmbiguousRefs is used to select the strict abbreviation mode. + // https://git-scm.com/docs/git-for-each-ref#Documentation/git-for-each-ref.txt-refname + forEachRefFmt := foreachref.NewFormat("objecttype", "refname:lstrip=2", "object", "objectname", "creator", "contents", "contents:signature") stdoutReader, stdoutWriter := io.Pipe() defer stdoutReader.Close() @@ -162,7 +164,7 @@ func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error) { func parseTagRef(ref map[string]string) (tag *Tag, err error) { tag = &Tag{ Type: ref["objecttype"], - Name: ref["refname:short"], + Name: ref["refname:lstrip=2"], } tag.ID, err = NewIDFromString(ref["objectname"]) diff --git a/modules/git/repo_tag_test.go b/modules/git/repo_tag_test.go index fb6a7cdd1a..11a1c543f7 100644 --- a/modules/git/repo_tag_test.go +++ b/modules/git/repo_tag_test.go @@ -209,8 +209,8 @@ func TestRepository_parseTagRef(t *testing.T) { name: "lightweight tag", givenRef: map[string]string{ - "objecttype": "commit", - "refname:short": "v1.9.1", + "objecttype": "commit", + "refname:lstrip=2": "v1.9.1", // object will be empty for lightweight tags "object": "", "objectname": "ab23e4b7f4cd0caafe0174c0e7ef6d651ba72889", @@ -238,8 +238,8 @@ func TestRepository_parseTagRef(t *testing.T) { name: "annotated tag", givenRef: map[string]string{ - "objecttype": "tag", - "refname:short": "v0.0.1", + "objecttype": "tag", + "refname:lstrip=2": "v0.0.1", // object will refer to commit hash for annotated tag "object": "3325fd8a973321fd59455492976c042dde3fd1ca", "objectname": "8c68a1f06fc59c655b7e3905b159d761e91c53c9", @@ -267,11 +267,11 @@ func TestRepository_parseTagRef(t *testing.T) { name: "annotated tag with signature", givenRef: map[string]string{ - "objecttype": "tag", - "refname:short": "v0.0.1", - "object": "3325fd8a973321fd59455492976c042dde3fd1ca", - "objectname": "8c68a1f06fc59c655b7e3905b159d761e91c53c9", - "creator": "Foo Bar 1565789218 +0300", + "objecttype": "tag", + "refname:lstrip=2": "v0.0.1", + "object": "3325fd8a973321fd59455492976c042dde3fd1ca", + "objectname": "8c68a1f06fc59c655b7e3905b159d761e91c53c9", + "creator": "Foo Bar 1565789218 +0300", "contents": `Add changelog of v1.9.1 (#7859) * add changelog of v1.9.1