@@ -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