From f255b1e86dae17dc0221b537d85f25bfa72a7912 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Wed, 4 Nov 2015 21:57:10 -0500 Subject: [PATCH] #1896 fatal when no needed update task --- README.md | 6 ++-- README_ZH.md | 6 ++-- cmd/serve.go | 70 ++++++++++++++++++++++----------------- cmd/update.go | 4 +-- gogs.go | 2 +- models/error.go | 13 ++++++++ models/update.go | 3 +- models/user.go | 4 +-- modules/auth/ldap/ldap.go | 2 +- templates/.VERSION | 2 +- 10 files changed, 66 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index cc163860109..216a9b7db49 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](public/img/gogs-large-resize.png) -##### Current version: 0.6.25 Beta +##### Current version: 0.6.26 Beta @@ -42,7 +42,7 @@ The goal of this project is to make the easiest, fastest, and most painless way ## Overview -- Please see the [Documentation](http://gogs.io/docs/intro) for project design, known issues, and change log. +- Please see the [Documentation](http://gogs.io/docs/intro) for common usages and change log. - See the [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team. - Want to try it before doing anything else? Do it [online](https://try.gogs.io/gogs/gogs) or go down to the **Installation -> Install from binary** section! - Having trouble? Get help with [Troubleshooting](http://gogs.io/docs/intro/troubleshooting.html). @@ -63,7 +63,7 @@ The goal of this project is to make the easiest, fastest, and most painless way - Mail service - Administration panel - CI integration: [Drone](https://github.com/drone/drone) -- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb) +- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb) (experimental) - Multi-language support ([14 languages](https://crowdin.com/project/gogs)) ## System Requirements diff --git a/README_ZH.md b/README_ZH.md index 71858ebc901..606fb220ca0 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -1,7 +1,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?branch=master)](https://travis-ci.org/gogits/gogs) ===================== -Gogs (Go Git Service) 是一款可轻易搭建的自助 Git 服务。 +Gogs (Go Git Service) 是一款极易搭建的自助 Git 服务。 ## 开发目的 @@ -9,7 +9,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自 ## 项目概览 -- 有关项目设计、已知问题和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。 +- 有关基本用法和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。 - 您可以到 [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) 跟随开发团队的脚步。 - 想要先睹为快?通过 [在线体验](https://try.gogs.io/gogs/gogs) 或查看 **安装部署 -> 二进制安装** 小节。 - 使用过程中遇到问题?尝试从 [故障排查](http://gogs.io/docs/intro/troubleshooting.html) 页面获取帮助。 @@ -30,7 +30,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自 - 支持邮件服务 - 支持后台管理面板 - 支持 CI 集成:[Drone](https://github.com/drone/drone) -- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb) 数据库 +- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb)(实验性支持) 数据库 - 支持多语言本地化([14 种语言]([more](https://crowdin.com/project/gogs))) ## 系统要求 diff --git a/cmd/serve.go b/cmd/serve.go index b99ab8fcd61..c3c66318dae 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -77,6 +77,43 @@ func fail(userMessage, logMessage string, args ...interface{}) { log.GitLogger.Fatal(3, logMessage, args...) } +func handleUpdateTask(uuid string, user *models.User, repoUserName, repoName string) { + task, err := models.GetUpdateTaskByUUID(uuid) + if err != nil { + if models.IsErrUpdateTaskNotExist(err) { + log.GitLogger.Trace("No update task is presented: %s", uuid) + return + } + log.GitLogger.Fatal(2, "GetUpdateTaskByUUID: %v", err) + } + + if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID, + user.Name, repoUserName, repoName, user.Id); err != nil { + log.GitLogger.Error(2, "Update: %v", err) + } + + if err = models.DeleteUpdateTaskByUUID(uuid); err != nil { + log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err) + } + + // Ask for running deliver hook and test pull request tasks. + reqURL := setting.AppUrl + repoUserName + "/" + repoName + "/tasks/trigger?branch=" + + strings.TrimPrefix(task.RefName, "refs/heads/") + log.GitLogger.Trace("Trigger task: %s", reqURL) + + resp, err := httplib.Head(reqURL).SetTLSClientConfig(&tls.Config{ + InsecureSkipVerify: true, + }).Response() + if err == nil { + resp.Body.Close() + if resp.StatusCode/100 != 2 { + log.GitLogger.Error(2, "Fail to trigger task: not 2xx response code") + } + } else { + log.GitLogger.Error(2, "Fail to trigger task: %v", err) + } +} + func runServ(c *cli.Context) { if c.IsSet("config") { setting.CustomConf = c.String("config") @@ -162,7 +199,7 @@ func runServ(c *cli.Context) { fail("Internal error", "UpdateDeployKey: %v", err) } } else { - user, err = models.GetUserByKeyId(key.ID) + user, err = models.GetUserByKeyID(key.ID) if err != nil { fail("internal error", "Failed to get user by key ID(%d): %v", keyID, err) } @@ -201,36 +238,7 @@ func runServ(c *cli.Context) { } if requestedMode == models.ACCESS_MODE_WRITE { - task, err := models.GetUpdateTaskByUUID(uuid) - if err != nil { - log.GitLogger.Fatal(2, "GetUpdateTaskByUUID: %v", err) - } - - if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID, - user.Name, repoUserName, repoName, user.Id); err != nil { - log.GitLogger.Error(2, "Update: %v", err) - } - - if err = models.DeleteUpdateTaskByUUID(uuid); err != nil { - log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err) - } - - // Ask for running deliver hook and test pull request tasks. - reqURL := setting.AppUrl + repoUserName + "/" + repoName + "/tasks/trigger?branch=" + - strings.TrimPrefix(task.RefName, "refs/heads/") - log.GitLogger.Trace("Trigger task: %s", reqURL) - - resp, err := httplib.Head(reqURL).SetTLSClientConfig(&tls.Config{ - InsecureSkipVerify: true, - }).Response() - if err == nil { - resp.Body.Close() - if resp.StatusCode/100 != 2 { - log.GitLogger.Error(2, "Fail to trigger task: not 2xx response code") - } - } else { - log.GitLogger.Error(2, "Fail to trigger task: %v", err) - } + handleUpdateTask(uuid, user, repoUserName, repoName) } // Update user key activity. diff --git a/cmd/update.go b/cmd/update.go index 64093b8177b..289aedbf61e 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -42,10 +42,8 @@ func runUpdate(c *cli.Context) { log.GitLogger.Fatal(2, "refName is empty, shouldn't use") } - uuid := os.Getenv("uuid") - task := models.UpdateTask{ - UUID: uuid, + UUID: os.Getenv("uuid"), RefName: args[0], OldCommitID: args[1], NewCommitID: args[2], diff --git a/gogs.go b/gogs.go index 8fe723fbda6..cdf761c86dd 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.6.25.1104 Beta" +const APP_VER = "0.6.26.1104 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/error.go b/models/error.go index 7c893731838..8f508598a1a 100644 --- a/models/error.go +++ b/models/error.go @@ -275,6 +275,19 @@ func (err ErrInvalidCloneAddr) Error() string { err.IsURLError, err.IsInvalidPath, err.IsPermissionDenied) } +type ErrUpdateTaskNotExist struct { + UUID string +} + +func IsErrUpdateTaskNotExist(err error) bool { + _, ok := err.(ErrUpdateTaskNotExist) + return ok +} + +func (err ErrUpdateTaskNotExist) Error() string { + return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID) +} + // __ __ ___. .__ __ // / \ / \ ____\_ |__ | |__ ____ ____ | | __ // \ \/\/ // __ \| __ \| | \ / _ \ / _ \| |/ / diff --git a/models/update.go b/models/update.go index 9e8e5c916f0..0ca202213cb 100644 --- a/models/update.go +++ b/models/update.go @@ -28,6 +28,7 @@ func AddUpdateTask(task *UpdateTask) error { return err } +// GetUpdateTaskByUUID returns update task by given UUID. func GetUpdateTaskByUUID(uuid string) (*UpdateTask, error) { task := &UpdateTask{ UUID: uuid, @@ -36,7 +37,7 @@ func GetUpdateTaskByUUID(uuid string) (*UpdateTask, error) { if err != nil { return nil, err } else if !has { - return nil, fmt.Errorf("task does not exist: %s", uuid) + return nil, ErrUpdateTaskNotExist{uuid} } return task, nil } diff --git a/models/user.go b/models/user.go index 516c4249884..4f9095ed1f3 100644 --- a/models/user.go +++ b/models/user.go @@ -728,9 +728,9 @@ func UserPath(userName string) string { return filepath.Join(setting.RepoRootPath, strings.ToLower(userName)) } -func GetUserByKeyId(keyId int64) (*User, error) { +func GetUserByKeyID(keyID int64) (*User, error) { user := new(User) - has, err := x.Sql("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyId).Get(user) + has, err := x.Sql("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyID).Get(user) if err != nil { return nil, err } else if !has { diff --git a/modules/auth/ldap/ldap.go b/modules/auth/ldap/ldap.go index 74a36d5e654..a00bcf85146 100644 --- a/modules/auth/ldap/ldap.go +++ b/modules/auth/ldap/ldap.go @@ -130,7 +130,7 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str l, err := ldapDial(ls) if err != nil { - log.Error(4, "LDAP Connect error, %s:%v", ls.Host, err) + log.Error(4, "LDAP Connect error (%s): %v", ls.Host, err) ls.Enabled = false return "", "", "", false, false } diff --git a/templates/.VERSION b/templates/.VERSION index f116ce5caac..59a9512a907 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.6.25.1104 Beta \ No newline at end of file +0.6.26.1104 Beta \ No newline at end of file