Skip to content

Commit e958c75

Browse files
Add migration renameExistingUserAvatarName
1 parent 66cead0 commit e958c75

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

models/migrations/migrations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,8 @@ var migrations = []Migration{
284284
NewMigration("new feature: change target branch of pull requests", featureChangeTargetBranch),
285285
// v114 -> v115
286286
NewMigration("Remove authentication credentials from stored URL", sanitizeOriginalURL),
287+
// v115 -> v116
288+
NewMigration("add user_id prefix to existing user avatar name", renameExistingUserAvatarName),
287289
}
288290

289291
// Migrate database to current version

models/migrations/v115.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package migrations
6+
7+
import (
8+
"fmt"
9+
"io"
10+
"os"
11+
"path/filepath"
12+
"strconv"
13+
"strings"
14+
15+
"code.gitea.io/gitea/models"
16+
"code.gitea.io/gitea/modules/setting"
17+
18+
"xorm.io/xorm"
19+
)
20+
21+
func renameExistingUserAvatarName(x *xorm.Engine) error {
22+
sess := x.NewSession()
23+
defer sess.Close()
24+
if err := sess.Begin(); err != nil {
25+
return err
26+
}
27+
28+
users := make([]models.User, 0)
29+
if err := sess.Find(&users); err != nil {
30+
return err
31+
}
32+
33+
deleteList := make([]string, 0, len(users))
34+
for _, user := range users {
35+
if !strings.HasPrefix(user.Avatar, strconv.FormatInt(user.ID, 10)+"-") {
36+
oldAvatar := user.Avatar
37+
newAvatar := fmt.Sprintf("%d-%s", user.ID, user.Avatar)
38+
39+
if _, err := os.Stat(filepath.Join(setting.AvatarUploadPath, oldAvatar)); err != nil {
40+
continue
41+
}
42+
43+
fr, err := os.Open(filepath.Join(setting.AvatarUploadPath, oldAvatar))
44+
if err != nil {
45+
return err
46+
}
47+
defer fr.Close()
48+
49+
fw, err := os.Create(filepath.Join(setting.AvatarUploadPath, newAvatar))
50+
if err != nil {
51+
return err
52+
}
53+
defer fw.Close()
54+
55+
if _, err := io.Copy(fw, fr); err != nil {
56+
return err
57+
}
58+
59+
user.Avatar = newAvatar
60+
if _, err := sess.ID(user.ID).Update(&user); err != nil {
61+
return err
62+
}
63+
64+
deleteList = append(deleteList, filepath.Join(setting.AvatarUploadPath, oldAvatar))
65+
}
66+
}
67+
for _, file := range deleteList {
68+
if err := os.Remove(file); err != nil {
69+
return err
70+
}
71+
}
72+
return sess.Commit()
73+
}

0 commit comments

Comments
 (0)