Skip to content

Commit d096b9b

Browse files
Move copying avatar part to a function
Signed-off-by: Masudur Rahman <[email protected]>
1 parent 819db1c commit d096b9b

File tree

1 file changed

+29
-34
lines changed

1 file changed

+29
-34
lines changed

models/migrations/v115.go

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,66 +22,50 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
2222
defer sess.Close()
2323

2424
type User struct {
25-
ID int64 `xorm:"pk autoincr"`
26-
Avatar string
25+
ID int64 `xorm:"pk autoincr"`
26+
LowerName string `xorm:"UNIQUE NOT NULL"`
27+
Avatar string
2728
}
2829
deleteList := make(map[string]struct{})
2930
start := 0
3031
for {
3132
if err := sess.Begin(); err != nil {
3233
return fmt.Errorf("session.Begin: %v", err)
3334
}
34-
users := make([]User, 0, 50)
35+
users := make([]*User, 0, 50)
3536
if err := sess.Table("user").Asc("id").Limit(50, start).Find(&users); err != nil {
3637
return fmt.Errorf("select users from id [%d]: %v", start, err)
3738
}
3839
if len(users) == 0 {
3940
break
4041
}
42+
4143
log.Info("select users [%d - %d]", start, start+len(users))
4244
start += 50
4345

4446
for _, user := range users {
4547
oldAvatar := user.Avatar
4648
newAvatar := fmt.Sprintf("%x", md5.Sum([]byte(fmt.Sprintf("%d-%s", user.ID, user.Avatar))))
4749
if _, err := os.Stat(filepath.Join(setting.AvatarUploadPath, oldAvatar)); err != nil {
48-
log.Warn("os.Stat: %v", err)
50+
log.Warn("[user: %s] os.Stat: %v", user.LowerName, err)
51+
// avatar doesn't exist in the storage
52+
// no need to move avatar and update database
53+
// we can just skip this
4954
continue
5055
}
5156

52-
fr, err := os.Open(filepath.Join(setting.AvatarUploadPath, oldAvatar))
53-
if err != nil {
54-
if err := commitSession(sess); err != nil {
55-
return fmt.Errorf("commit session: %v", err)
56-
}
57-
return fmt.Errorf("os.Open: %v", err)
58-
}
59-
defer fr.Close()
60-
61-
fw, err := os.Create(filepath.Join(setting.AvatarUploadPath, newAvatar))
62-
if err != nil {
63-
if err := commitSession(sess); err != nil {
64-
return fmt.Errorf("commit session: %v", err)
65-
}
66-
return fmt.Errorf("os.Create: %v", err)
67-
}
68-
defer fw.Close()
69-
70-
if _, err := io.Copy(fw, fr); err != nil {
71-
if err := commitSession(sess); err != nil {
72-
return fmt.Errorf("commit session: %v", err)
73-
}
74-
return fmt.Errorf("io.Copy: %v", err)
57+
if err := copyAvatar(oldAvatar, newAvatar); err != nil {
58+
return fmt.Errorf("[user: %s] %v", user.LowerName, err)
7559
}
7660

7761
user.Avatar = newAvatar
78-
if _, err := sess.ID(user.ID).Update(&user); err != nil {
79-
return fmt.Errorf("user table update: %v", err)
62+
if _, err := sess.ID(user.ID).Update(user); err != nil {
63+
return fmt.Errorf("[user: %s] user table update: %v", user.LowerName, err)
8064
}
8165

8266
deleteList[filepath.Join(setting.AvatarUploadPath, oldAvatar)] = struct{}{}
8367
}
84-
if err := commitSession(sess); err != nil {
68+
if err := sess.Commit(); err != nil {
8569
return fmt.Errorf("commit session: %v", err)
8670
}
8771
}
@@ -94,10 +78,21 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
9478
return nil
9579
}
9680

97-
func commitSession(sess *xorm.Session) error {
98-
if err := sess.Commit(); err != nil {
99-
_ = sess.Rollback()
100-
return err
81+
func copyAvatar(oldAvatar, newAvatar string) error {
82+
fr, err := os.Open(filepath.Join(setting.AvatarUploadPath, oldAvatar))
83+
if err != nil {
84+
return fmt.Errorf("os.Open: %v", err)
85+
}
86+
defer fr.Close()
87+
88+
fw, err := os.Create(filepath.Join(setting.AvatarUploadPath, newAvatar))
89+
if err != nil {
90+
return fmt.Errorf("os.Create: %v", err)
91+
}
92+
defer fw.Close()
93+
94+
if _, err := io.Copy(fw, fr); err != nil {
95+
return fmt.Errorf("io.Copy: %v", err)
10196
}
10297
return nil
10398
}

0 commit comments

Comments
 (0)