fix: repo avatar generating (#6338)

This commit is contained in:
Snoweuph 2024-12-21 20:04:13 +01:00
parent 4e820ff795
commit be076c98d4
No known key found for this signature in database
GPG key ID: BEFC41DA223CEC55
2 changed files with 37 additions and 3 deletions

View file

@ -8,7 +8,6 @@ import (
"fmt" "fmt"
"io" "io"
"strconv" "strconv"
"strings"
"code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
@ -107,7 +106,18 @@ func RemoveRandomAvatars(ctx context.Context) error {
// generateAvatar generates the avatar from a template repository // generateAvatar generates the avatar from a template repository
func generateAvatar(ctx context.Context, templateRepo, generateRepo *repo_model.Repository) error { func generateAvatar(ctx context.Context, templateRepo, generateRepo *repo_model.Repository) error {
generateRepo.Avatar = strings.Replace(templateRepo.Avatar, strconv.FormatInt(templateRepo.ID, 10), strconv.FormatInt(generateRepo.ID, 10), 1) file, err := storage.RepoAvatars.Open(templateRepo.CustomAvatarRelativePath())
if err != nil {
return err
}
defer file.Close()
data, err := io.ReadAll(file)
if err != nil {
return err
}
generateRepo.Avatar = avatar.HashAvatar(generateRepo.ID, data)
if _, err := storage.Copy(storage.RepoAvatars, generateRepo.CustomAvatarRelativePath(), storage.RepoAvatars, templateRepo.CustomAvatarRelativePath()); err != nil { if _, err := storage.Copy(storage.RepoAvatars, generateRepo.CustomAvatarRelativePath(), storage.RepoAvatars, templateRepo.CustomAvatarRelativePath()); err != nil {
return err return err
} }

View file

@ -29,7 +29,7 @@ func TestUploadAvatar(t *testing.T) {
err := UploadAvatar(db.DefaultContext, repo, buff.Bytes()) err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, avatar.HashAvatar(10, buff.Bytes()), repo.Avatar) assert.Equal(t, avatar.HashAvatar(repo.ID, buff.Bytes()), repo.Avatar)
} }
func TestUploadBigAvatar(t *testing.T) { func TestUploadBigAvatar(t *testing.T) {
@ -62,3 +62,27 @@ func TestDeleteAvatar(t *testing.T) {
assert.Equal(t, "", repo.Avatar) assert.Equal(t, "", repo.Avatar)
} }
func TestTemplateGenerateAvatar(t *testing.T) {
// Generate image
myImage := image.NewRGBA(image.Rect(0, 0, 1, 1))
var buff bytes.Buffer
png.Encode(&buff, myImage)
require.NoError(t, unittest.PrepareTestDatabase())
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
// Upload Avatar
err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
require.NoError(t, err)
assert.Equal(t, avatar.HashAvatar(repo.ID, buff.Bytes()), repo.Avatar)
// Generate the Avatar for Another Repo
genRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 11})
err = generateAvatar(db.DefaultContext, repo, genRepo)
require.NoError(t, err)
assert.Equal(t, avatar.HashAvatar(genRepo.ID, buff.Bytes()), genRepo.Avatar)
// Make sure The 2 Hashes are not the same
assert.NotEqual(t, repo.Avatar, genRepo.Avatar)
}