Skip to content

Fix database lock when use random repository fallback image #7166

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 12, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 10 additions & 11 deletions models/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool)
AllowRebase: allowRebase,
AllowRebaseMerge: allowRebaseMerge,
AllowSquash: allowSquash,
AvatarURL: repo.AvatarLink(),
AvatarURL: repo.avatarLink(e),
}
}

Expand Down Expand Up @@ -2528,11 +2528,7 @@ func (repo *Repository) CustomAvatarPath() string {
return filepath.Join(setting.RepositoryAvatarUploadPath, repo.Avatar)
}

// GenerateRandomAvatar generates a random avatar for repository.
func (repo *Repository) GenerateRandomAvatar() error {
return repo.generateRandomAvatar(x)
}

// generateRandomAvatar generates a random avatar for repository.
func (repo *Repository) generateRandomAvatar(e Engine) error {
idToString := fmt.Sprintf("%d", repo.ID)

Expand Down Expand Up @@ -2585,16 +2581,19 @@ func RemoveRandomAvatars() error {

// RelAvatarLink returns a relative link to the repository's avatar.
func (repo *Repository) RelAvatarLink() string {
return repo.relAvatarLink(x)
}

func (repo *Repository) relAvatarLink(e Engine) string {
// If no avatar - path is empty
avatarPath := repo.CustomAvatarPath()
if len(avatarPath) <= 0 || !com.IsFile(avatarPath) {
switch mode := setting.RepositoryAvatarFallback; mode {
case "image":
return setting.RepositoryAvatarFallbackImage
case "random":
if err := repo.GenerateRandomAvatar(); err != nil {
log.Error("GenerateRandomAvatar: %v", err)
if err := repo.generateRandomAvatar(e); err != nil {
log.Error("generateRandomAvatar: %v", err)
}
default:
// default behaviour: do not display avatar
Expand All @@ -2604,9 +2603,9 @@ func (repo *Repository) RelAvatarLink() string {
return setting.AppSubURL + "/repo-avatars/" + repo.Avatar
}

// AvatarLink returns user avatar absolute link.
func (repo *Repository) AvatarLink() string {
link := repo.RelAvatarLink()
// avatarLink returns user avatar absolute link.
func (repo *Repository) avatarLink(e Engine) string {
link := repo.relAvatarLink(e)
// link may be empty!
if len(link) > 0 {
if link[0] == '/' && link[1] != '/' {
Expand Down