@@ -11,6 +11,7 @@ import (
11
11
"os"
12
12
"path/filepath"
13
13
14
+ "code.gitea.io/gitea/modules/log"
14
15
"code.gitea.io/gitea/modules/setting"
15
16
16
17
"xorm.io/xorm"
@@ -19,71 +20,75 @@ import (
19
20
func renameExistingUserAvatarName (x * xorm.Engine ) error {
20
21
sess := x .NewSession ()
21
22
defer sess .Close ()
22
- if err := sess .Begin (); err != nil {
23
- return err
24
- }
25
23
26
24
type User struct {
27
25
ID int64 `xorm:"pk autoincr"`
28
26
Avatar string
29
27
}
30
-
31
- users := make ([]User , 0 )
32
- if err := sess .Find (& users ); err != nil {
33
- return err
34
- }
35
-
36
28
deleteList := make (map [string ]struct {})
37
- sessionOpCount := 0
38
- for _ , user := range users {
39
- oldAvatar := user .Avatar
40
- newAvatar := fmt .Sprintf ("%x" , md5 .Sum ([]byte (fmt .Sprintf ("%d-%s" , user .ID , user .Avatar ))))
41
- if _ , err := os .Stat (filepath .Join (setting .AvatarUploadPath , oldAvatar )); err != nil {
42
- continue
29
+ start := 0
30
+ for {
31
+ if err := sess .Begin (); err != nil {
32
+ return fmt .Errorf ("session.Begin: %v" , err )
43
33
}
44
-
45
- fr , err := os .Open (filepath .Join (setting .AvatarUploadPath , oldAvatar ))
46
- if err != nil {
47
- _ = commitSession (sess )
48
- return fmt .Errorf ("os.Open: %v" , err )
34
+ users := make ([]User , 0 , 50 )
35
+ if err := sess .Table ("user" ).Asc ("id" ).Limit (50 , start ).Find (& users ); err != nil {
36
+ return fmt .Errorf ("select users from id [%d]: %v" , start , err )
49
37
}
50
- defer fr .Close ()
51
-
52
- fw , err := os .Create (filepath .Join (setting .AvatarUploadPath , newAvatar ))
53
- if err != nil {
54
- _ = commitSession (sess )
55
- return fmt .Errorf ("os.Create: %v" , err )
38
+ if len (users ) == 0 {
39
+ break
56
40
}
57
- defer fw .Close ()
41
+ log .Info ("select users [%d - %d]" , start , start + len (users ))
42
+ start += 50
58
43
59
- if _ , err := io .Copy (fw , fr ); err != nil {
60
- _ = commitSession (sess )
61
- return fmt .Errorf ("io.Copy: %v" , err )
62
- }
44
+ for _ , user := range users {
45
+ oldAvatar := user .Avatar
46
+ newAvatar := fmt .Sprintf ("%x" , md5 .Sum ([]byte (fmt .Sprintf ("%d-%s" , user .ID , user .Avatar ))))
47
+ if _ , err := os .Stat (filepath .Join (setting .AvatarUploadPath , oldAvatar )); err != nil {
48
+ log .Warn ("os.Stat: %v" , err )
49
+ continue
50
+ }
63
51
64
- user .Avatar = newAvatar
65
- if _ , err := sess .ID (user .ID ).Update (& user ); err != nil {
66
- return fmt .Errorf ("user table update: %v" , err )
67
- }
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 ()
68
60
69
- deleteList [filepath .Join (setting .AvatarUploadPath , oldAvatar )] = struct {}{}
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 ()
70
69
71
- if sessionOpCount ++ ; sessionOpCount >= 100 {
72
- if err := commitSession (sess ); err != nil {
73
- return err
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 )
74
75
}
75
- sessionOpCount = 0
76
- if err := sess .Begin (); err != nil {
77
- return err
76
+
77
+ user .Avatar = newAvatar
78
+ if _ , err := sess .ID (user .ID ).Update (& user ); err != nil {
79
+ return fmt .Errorf ("user table update: %v" , err )
78
80
}
81
+
82
+ deleteList [filepath .Join (setting .AvatarUploadPath , oldAvatar )] = struct {}{}
83
+ }
84
+ if err := commitSession (sess ); err != nil {
85
+ return fmt .Errorf ("commit session: %v" , err )
79
86
}
80
87
}
81
- if err := commitSession (sess ); err != nil {
82
- return err
83
- }
88
+
84
89
for file := range deleteList {
85
90
if err := os .Remove (file ); err != nil {
86
- return fmt . Errorf ("os.Remove: %v" , err )
91
+ log . Warn ("os.Remove: %v" , err )
87
92
}
88
93
}
89
94
return nil
@@ -92,7 +97,7 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
92
97
func commitSession (sess * xorm.Session ) error {
93
98
if err := sess .Commit (); err != nil {
94
99
_ = sess .Rollback ()
95
- return fmt . Errorf ( "db update: %v" , err )
100
+ return err
96
101
}
97
102
return nil
98
103
}
0 commit comments