Просмотр исходного кода

#1896 fatal when no needed update task

Unknwon лет назад: 8
Родитель
Сommit
f255b1e86d
10 измененных файлов с 66 добавлено и 46 удалено
  1. 3 3
      README.md
  2. 3 3
      README_ZH.md
  3. 39 31
      cmd/serve.go
  4. 1 3
      cmd/update.go
  5. 1 1
      gogs.go
  6. 13 0
      models/error.go
  7. 2 1
      models/update.go
  8. 2 2
      models/user.go
  9. 1 1
      modules/auth/ldap/ldap.go
  10. 1 1
      templates/.VERSION

+ 3 - 3
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
 
 <table>
     <tr>
@@ -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

+ 3 - 3
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)))
 
 ## 系统要求

+ 39 - 31
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.

+ 1 - 3
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],

+ 1 - 1
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())

+ 13 - 0
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)
+}
+
 //  __      __      ___.   .__                   __
 // /  \    /  \ ____\_ |__ |  |__   ____   ____ |  | __
 // \   \/\/   // __ \| __ \|  |  \ /  _ \ /  _ \|  |/ /

+ 2 - 1
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
 }

+ 2 - 2
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 {

+ 1 - 1
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
 	}

+ 1 - 1
templates/.VERSION

@@ -1 +1 @@
-0.6.25.1104 Beta
+0.6.26.1104 Beta