diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2023-07-27 17:24:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-27 09:24:22 +0000 |
commit | bd7b5e61aa8d8f8a7dfd1ce4b49bf6461fce57b8 (patch) | |
tree | 6eeaf4879452c687cecc78c94a36f463a4a24c97 | |
parent | 8baa42c8d749381649404ecb194b8510af11ba0a (diff) | |
download | gitea-bd7b5e61aa8d8f8a7dfd1ce4b49bf6461fce57b8.tar.gz gitea-bd7b5e61aa8d8f8a7dfd1ce4b49bf6461fce57b8.zip |
Release attachments duplicated check (#26176)
-rw-r--r-- | models/repo/release.go | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/models/repo/release.go b/models/repo/release.go index c63b324457..a00585111e 100644 --- a/models/repo/release.go +++ b/models/repo/release.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/models/db" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/container" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" @@ -336,6 +337,17 @@ func (s releaseMetaSearch) Less(i, j int) bool { return s.ID[i] < s.ID[j] } +func hasDuplicateName(attaches []*Attachment) bool { + attachSet := container.Set[string]{} + for _, attachment := range attaches { + if attachSet.Contains(attachment.Name) { + return true + } + attachSet.Add(attachment.Name) + } + return false +} + // GetReleaseAttachments retrieves the attachments for releases func GetReleaseAttachments(ctx context.Context, rels ...*Release) (err error) { if len(rels) == 0 { @@ -360,7 +372,7 @@ func GetReleaseAttachments(ctx context.Context, rels ...*Release) (err error) { err = db.GetEngine(ctx). Asc("release_id", "name"). In("release_id", sortedRels.ID). - Find(&attachments, Attachment{}) + Find(&attachments) if err != nil { return err } @@ -381,21 +393,8 @@ func GetReleaseAttachments(ctx context.Context, rels ...*Release) (err error) { continue } - // Check if there are two or more attachments with the same name - hasDuplicates := false - foundNames := make(map[string]bool) - for _, attachment := range release.Attachments { - _, found := foundNames[attachment.Name] - if found { - hasDuplicates = true - break - } else { - foundNames[attachment.Name] = true - } - } - // If the names unique, use the URL with the Name instead of the UUID - if !hasDuplicates { + if !hasDuplicateName(release.Attachments) { for _, attachment := range release.Attachments { attachment.CustomDownloadURL = release.Repo.HTMLURL() + "/releases/download/" + url.PathEscape(release.TagName) + "/" + url.PathEscape(attachment.Name) } |