@@ -7,7 +7,7 @@ package migrations
77import (
88 "crypto/md5"
99 "fmt"
10- "io"
10+ "io/ioutil "
1111 "os"
1212 "path/filepath"
1313
@@ -46,7 +46,7 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
4646
4747 for _ , user := range users {
4848 oldAvatar := user .Avatar
49- newAvatar := fmt . Sprintf ( "%x" , md5 . Sum ([] byte ( fmt . Sprintf ( "%d-%s" , user . ID , user . Avatar ))))
49+
5050 if _ , err := os .Stat (filepath .Join (setting .AvatarUploadPath , oldAvatar )); err != nil {
5151 log .Warn ("[user: %s] os.Stat: %v" , user .LowerName , err )
5252 // avatar doesn't exist in the storage
@@ -55,7 +55,8 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
5555 continue
5656 }
5757
58- if err := copyAvatar (oldAvatar , newAvatar ); err != nil {
58+ newAvatar , err := copyOldAvatarToNewLocation (user .ID , oldAvatar )
59+ if err != nil {
5960 _ = sess .Rollback ()
6061 return fmt .Errorf ("[user: %s] %v" , user .LowerName , err )
6162 }
@@ -82,21 +83,25 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
8283 return nil
8384}
8485
85- func copyAvatar (oldAvatar , newAvatar string ) error {
86+ // copyOldAvatarToNewLocation copies oldAvatar to newAvatarLocation
87+ // and returns newAvatar location
88+ func copyOldAvatarToNewLocation (userID int64 , oldAvatar string ) (string , error ) {
8689 fr , err := os .Open (filepath .Join (setting .AvatarUploadPath , oldAvatar ))
8790 if err != nil {
88- return fmt .Errorf ("os.Open: %v" , err )
91+ return "" , fmt .Errorf ("os.Open: %v" , err )
8992 }
9093 defer fr .Close ()
9194
92- fw , err := os . Create ( filepath . Join ( setting . AvatarUploadPath , newAvatar ) )
95+ data , err := ioutil . ReadAll ( fr )
9396 if err != nil {
94- return fmt .Errorf ("os.Create : %v" , err )
97+ return "" , fmt .Errorf ("ioutil.ReadAll : %v" , err )
9598 }
96- defer fw .Close ()
9799
98- if _ , err := io .Copy (fw , fr ); err != nil {
99- return fmt .Errorf ("io.Copy: %v" , err )
100+ newAvatar := fmt .Sprintf ("%x" , md5 .Sum ([]byte (fmt .Sprintf ("%d-%x" , userID , md5 .Sum (data )))))
101+
102+ if err := ioutil .WriteFile (filepath .Join (setting .AvatarUploadPath , newAvatar ), data , 0666 ); err != nil {
103+ return "" , fmt .Errorf ("ioutil.WriteFile: %v" , err )
100104 }
101- return nil
105+
106+ return newAvatar , nil
102107}
0 commit comments