Skip to content

Commit fb4e7f3

Browse files
committed
improve codes
1 parent 5e1888f commit fb4e7f3

File tree

7 files changed

+66
-35
lines changed

7 files changed

+66
-35
lines changed

models/migrations/v99.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func addTaskTable(x *xorm.Engine) error {
2727
}
2828

2929
type Repository struct {
30-
Status int
30+
Status int `xorm:"NOT NULL DEFAULT 0"`
3131
}
3232

3333
return x.Sync2(new(Task), new(Repository))

modules/migrations/migrate.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package migrations
77

88
import (
9+
"fmt"
10+
911
"code.gitea.io/gitea/models"
1012
"code.gitea.io/gitea/modules/log"
1113
"code.gitea.io/gitea/modules/migrations/base"
@@ -58,6 +60,10 @@ func MigrateRepository(doer *models.User, ownerName string, opts base.MigrateOpt
5860
if err1 := uploader.Rollback(); err1 != nil {
5961
log.Error("rollback failed: %v", err1)
6062
}
63+
64+
if err2 := models.CreateRepositoryNotice(fmt.Sprintf("Migrate repository from %s failed: %v", opts.CloneAddr, err)); err2 != nil {
65+
log.Error("create respotiry notice failed: ", err2)
66+
}
6167
return nil, err
6268
}
6369

modules/task/queue.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ import "code.gitea.io/gitea/models"
1010
type Queue interface {
1111
Run() error
1212
Push(*models.Task) error
13+
Stop()
1314
}

modules/task/queue_channel.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
package task
66

77
import (
8-
"time"
9-
108
"code.gitea.io/gitea/models"
119
"code.gitea.io/gitea/modules/log"
1210
)
@@ -29,20 +27,21 @@ func NewChannelQueue(queueLen int) *ChannelQueue {
2927

3028
// Run starts to run the queue
3129
func (c *ChannelQueue) Run() error {
32-
for {
33-
select {
34-
case task := <-c.queue:
35-
err := Run(task)
36-
if err != nil {
37-
log.Error("Run task failed: %s", err.Error())
38-
}
39-
case <-time.After(time.Millisecond * 100):
30+
for task := range c.queue {
31+
err := Run(task)
32+
if err != nil {
33+
log.Error("Run task failed: %s", err.Error())
4034
}
4135
}
36+
return nil
4237
}
4338

4439
// Push will push the task ID to queue
4540
func (c *ChannelQueue) Push(task *models.Task) error {
4641
c.queue <- task
4742
return nil
4843
}
44+
45+
func (c *ChannelQueue) Stop() {
46+
close(c.queue)
47+
}

modules/task/queue_redis.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type redisClient interface {
3131
type RedisQueue struct {
3232
client redisClient
3333
queueName string
34+
closeChan chan bool
3435
}
3536

3637
func parseConnStr(connStr string) (addrs, password string, dbIdx int, err error) {
@@ -60,6 +61,7 @@ func NewRedisQueue(addrs string, password string, dbIdx int) (*RedisQueue, error
6061
dbs := strings.Split(addrs, ",")
6162
var queue = RedisQueue{
6263
queueName: "task_queue",
64+
closeChan: make(chan bool),
6365
}
6466
if len(dbs) == 0 {
6567
return nil, errors.New("no redis host found")
@@ -85,6 +87,11 @@ func NewRedisQueue(addrs string, password string, dbIdx int) (*RedisQueue, error
8587
// Run starts to run the queue
8688
func (r *RedisQueue) Run() error {
8789
for {
90+
select {
91+
case <-r.closeChan:
92+
return nil
93+
}
94+
8895
bs, err := r.client.LPop(r.queueName).Bytes()
8996
if err != nil {
9097
if err != redis.Nil {
@@ -117,3 +124,7 @@ func (r *RedisQueue) Push(task *models.Task) error {
117124
}
118125
return r.client.RPush(r.queueName, bs).Err()
119126
}
127+
128+
func (r *RedisQueue) Stop() {
129+
r.closeChan <- true
130+
}

routers/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func GlobalInit() {
104104
models.InitDeliverHooks()
105105
models.InitTestPullRequests()
106106
if err := task.Init(); err != nil {
107-
log.Fatal("Failed to initialize task: %v", err)
107+
log.Fatal("Failed to initialize task scheduler: %v", err)
108108
}
109109
}
110110
if setting.EnableSQLite3 {

routers/repo/repo.go

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,6 @@ func Create(ctx *context.Context) {
134134

135135
func handleCreateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form interface{}) {
136136
switch {
137-
case migrations.IsRateLimitError(err):
138-
ctx.RenderWithErr(ctx.Tr("form.visit_rate_limit"), tpl, form)
139137
case models.IsErrReachLimitOfRepo(err):
140138
ctx.RenderWithErr(ctx.Tr("repo.form.reach_limit_of_creation", owner.MaxCreationLimit()), tpl, form)
141139
case models.IsErrRepoAlreadyExist(err):
@@ -222,6 +220,40 @@ func Migrate(ctx *context.Context) {
222220
ctx.HTML(200, tplMigrate)
223221
}
224222

223+
func handleMigrateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form *auth.MigrateRepoForm) {
224+
switch {
225+
case migrations.IsRateLimitError(err):
226+
ctx.RenderWithErr(ctx.Tr("form.visit_rate_limit"), tpl, form)
227+
case migrations.IsTwoFactorAuthError(err):
228+
ctx.RenderWithErr(ctx.Tr("form.2fa_auth_required"), tpl, form)
229+
case models.IsErrReachLimitOfRepo(err):
230+
ctx.RenderWithErr(ctx.Tr("repo.form.reach_limit_of_creation", owner.MaxCreationLimit()), tpl, form)
231+
case models.IsErrRepoAlreadyExist(err):
232+
ctx.Data["Err_RepoName"] = true
233+
ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tpl, form)
234+
case models.IsErrNameReserved(err):
235+
ctx.Data["Err_RepoName"] = true
236+
ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tpl, form)
237+
case models.IsErrNamePatternNotAllowed(err):
238+
ctx.Data["Err_RepoName"] = true
239+
ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tpl, form)
240+
default:
241+
remoteAddr, _ := form.ParseRemoteAddr(owner)
242+
err = util.URLSanitizedError(err, remoteAddr)
243+
if strings.Contains(err.Error(), "Authentication failed") ||
244+
strings.Contains(err.Error(), "Bad credentials") ||
245+
strings.Contains(err.Error(), "could not read Username") {
246+
ctx.Data["Err_Auth"] = true
247+
ctx.RenderWithErr(ctx.Tr("form.auth_failed", err.Error()), tpl, form)
248+
} else if strings.Contains(err.Error(), "fatal:") {
249+
ctx.Data["Err_CloneAddr"] = true
250+
ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", err.Error()), tpl, form)
251+
} else {
252+
ctx.ServerError(name, err)
253+
}
254+
}
255+
}
256+
225257
// MigratePost response for migrating from external git repository
226258
func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
227259
ctx.Data["Title"] = ctx.Tr("new_migrate")
@@ -285,26 +317,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
285317

286318
err = models.CheckCreateRepository(ctx.User, ctxUser, opts.RepoName)
287319
if err != nil {
288-
if models.IsErrRepoAlreadyExist(err) {
289-
ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tplMigrate, &form)
290-
return
291-
}
292-
293-
// remoteAddr may contain credentials, so we sanitize it
294-
err = util.URLSanitizedError(err, remoteAddr)
295-
296-
if strings.Contains(err.Error(), "Authentication failed") ||
297-
strings.Contains(err.Error(), "could not read Username") {
298-
ctx.Data["Err_Auth"] = true
299-
ctx.RenderWithErr(ctx.Tr("form.auth_failed", err.Error()), tplMigrate, &form)
300-
return
301-
} else if strings.Contains(err.Error(), "fatal:") {
302-
ctx.Data["Err_CloneAddr"] = true
303-
ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", err.Error()), tplMigrate, &form)
304-
return
305-
}
306-
307-
handleCreateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form)
320+
handleMigrateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form)
308321
return
309322
}
310323

@@ -313,7 +326,8 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
313326
ctx.Redirect(setting.AppSubURL + "/" + ctxUser.Name + "/" + opts.RepoName)
314327
return
315328
}
316-
ctx.ServerError("MigrateRepository", err)
329+
330+
handleMigrateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form)
317331
}
318332

319333
// Action response for actions to a repository

0 commit comments

Comments
 (0)