@@ -22,66 +22,50 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
22
22
defer sess .Close ()
23
23
24
24
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
27
28
}
28
29
deleteList := make (map [string ]struct {})
29
30
start := 0
30
31
for {
31
32
if err := sess .Begin (); err != nil {
32
33
return fmt .Errorf ("session.Begin: %v" , err )
33
34
}
34
- users := make ([]User , 0 , 50 )
35
+ users := make ([]* User , 0 , 50 )
35
36
if err := sess .Table ("user" ).Asc ("id" ).Limit (50 , start ).Find (& users ); err != nil {
36
37
return fmt .Errorf ("select users from id [%d]: %v" , start , err )
37
38
}
38
39
if len (users ) == 0 {
39
40
break
40
41
}
42
+
41
43
log .Info ("select users [%d - %d]" , start , start + len (users ))
42
44
start += 50
43
45
44
46
for _ , user := range users {
45
47
oldAvatar := user .Avatar
46
48
newAvatar := fmt .Sprintf ("%x" , md5 .Sum ([]byte (fmt .Sprintf ("%d-%s" , user .ID , user .Avatar ))))
47
49
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
49
54
continue
50
55
}
51
56
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 )
75
59
}
76
60
77
61
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 )
80
64
}
81
65
82
66
deleteList [filepath .Join (setting .AvatarUploadPath , oldAvatar )] = struct {}{}
83
67
}
84
- if err := commitSession ( sess ); err != nil {
68
+ if err := sess . Commit ( ); err != nil {
85
69
return fmt .Errorf ("commit session: %v" , err )
86
70
}
87
71
}
@@ -94,10 +78,21 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
94
78
return nil
95
79
}
96
80
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 )
101
96
}
102
97
return nil
103
98
}
0 commit comments