From a3813a0a07eb55c91736f3265386b15e1a574227 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 23 Feb 2017 13:20:45 +0800 Subject: [PATCH] added back unmerged update command on #1006 --- cmd/hook.go | 46 ++++++++++++++++++++++------ cmd/update.go | 83 --------------------------------------------------- 2 files changed, 37 insertions(+), 92 deletions(-) delete mode 100644 cmd/update.go diff --git a/cmd/hook.go b/cmd/hook.go index 15ad74f8e0bd5..1222fbdfc53f7 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -7,8 +7,13 @@ package cmd import ( "fmt" "os" + "strconv" + "strings" + "code.gitea.io/git" "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" "github.com/urfave/cli" ) @@ -65,29 +70,52 @@ func runHookPreReceive(c *cli.Context) error { } func runHookUpdate(c *cli.Context) error { - if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 { - return nil + if c.IsSet("config") { + setting.CustomConf = c.String("config") } if err := setup("hooks/update.log"); err != nil { fail("Hook update init failed", fmt.Sprintf("setup: %v", err)) } + if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 { + log.GitLogger.Trace("SSH_ORIGINAL_COMMAND is empty") + return nil + } + args := c.Args() if len(args) != 3 { - fail("Arguments received are not equal to three", "Arguments received are not equal to three") + log.GitLogger.Fatal(2, "Arguments received are not equal to three") } else if len(args[0]) == 0 { - fail("First argument 'refName' is empty", "First argument 'refName' is empty") + log.GitLogger.Fatal(2, "First argument 'refName' is empty, shouldn't use") + } + + // protected branch check + branchName := strings.TrimPrefix(args[0], git.BranchPrefix) + repoID, _ := strconv.ParseInt(os.Getenv(models.ProtectedBranchRepoID), 10, 64) + log.GitLogger.Trace("pushing to %d %v", repoID, branchName) + accessMode := models.ParseAccessMode(os.Getenv(models.ProtectedBranchAccessMode)) + // skip admin or owner AccessMode + if accessMode == models.AccessModeWrite { + protectBranch, err := models.GetProtectedBranchBy(repoID, branchName) + if err != nil { + log.GitLogger.Fatal(2, "retrieve protected branches information failed") + } + + if protectBranch != nil { + log.GitLogger.Fatal(2, "protected branches can not be pushed to") + } } - uuid := os.Getenv(envUpdateTaskUUID) - if err := models.AddUpdateTask(&models.UpdateTask{ - UUID: uuid, + task := models.UpdateTask{ + UUID: os.Getenv(envUpdateTaskUUID), RefName: args[0], OldCommitID: args[1], NewCommitID: args[2], - }); err != nil { - fail("Internal error", "Fail to add update task '%s': %v", uuid, err) + } + + if err := models.AddUpdateTask(&task); err != nil { + log.GitLogger.Fatal(2, "AddUpdateTask: %v", err) } return nil diff --git a/cmd/update.go b/cmd/update.go deleted file mode 100644 index 58e60493d01fc..0000000000000 --- a/cmd/update.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package cmd - -import ( - "os" - "strconv" - "strings" - - "github.com/urfave/cli" - - "code.gitea.io/git" - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/setting" -) - -// CmdUpdate represents the available update sub-command. -var CmdUpdate = cli.Command{ - Name: "update", - Usage: "This command should only be called by Git hook", - Description: `Update get pushed info and insert into database`, - Action: runUpdate, - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "config, c", - Value: "custom/conf/app.ini", - Usage: "Custom configuration file path", - }, - }, -} - -func runUpdate(c *cli.Context) error { - if c.IsSet("config") { - setting.CustomConf = c.String("config") - } - - setup("update.log") - - if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 { - log.GitLogger.Trace("SSH_ORIGINAL_COMMAND is empty") - return nil - } - - args := c.Args() - if len(args) != 3 { - log.GitLogger.Fatal(2, "Arguments received are not equal to three") - } else if len(args[0]) == 0 { - log.GitLogger.Fatal(2, "First argument 'refName' is empty, shouldn't use") - } - - // protected branch check - branchName := strings.TrimPrefix(args[0], git.BranchPrefix) - repoID, _ := strconv.ParseInt(os.Getenv(models.ProtectedBranchRepoID), 10, 64) - log.GitLogger.Trace("pushing to %d %v", repoID, branchName) - accessMode := models.ParseAccessMode(os.Getenv(models.ProtectedBranchAccessMode)) - // skip admin or owner AccessMode - if accessMode == models.AccessModeWrite { - protectBranch, err := models.GetProtectedBranchBy(repoID, branchName) - if err != nil { - log.GitLogger.Fatal(2, "retrieve protected branches information failed") - } - - if protectBranch != nil { - log.GitLogger.Fatal(2, "protected branches can not be pushed to") - } - } - - task := models.UpdateTask{ - UUID: os.Getenv("GITEA_UUID"), - RefName: args[0], - OldCommitID: args[1], - NewCommitID: args[2], - } - - if err := models.AddUpdateTask(&task); err != nil { - log.GitLogger.Fatal(2, "AddUpdateTask: %v", err) - } - - return nil -}