2014-04-10 22:20:58 +04:00
// 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.
2014-05-02 05:21:46 +04:00
package cmd
2014-04-10 22:20:58 +04:00
import (
"os"
"path"
"strconv"
"github.com/codegangsta/cli"
2014-04-21 14:37:57 +04:00
qlog "github.com/qiniu/log"
2014-04-10 22:20:58 +04:00
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
)
var CmdUpdate = cli . Command {
2014-05-05 08:55:17 +04:00
Name : "update" ,
Usage : "This command should only be called by SSH shell" ,
Description : ` Update get pushed info and insert into database ` ,
Action : runUpdate ,
Flags : [ ] cli . Flag { } ,
2014-04-10 22:20:58 +04:00
}
func newUpdateLogger ( execDir string ) {
logPath := execDir + "/log/update.log"
os . MkdirAll ( path . Dir ( logPath ) , os . ModePerm )
f , err := os . OpenFile ( logPath , os . O_WRONLY | os . O_APPEND | os . O_CREATE , os . ModePerm )
if err != nil {
qlog . Fatal ( err )
}
qlog . SetOutput ( f )
qlog . Info ( "Start logging update..." )
}
2014-04-11 06:27:13 +04:00
func updateEnv ( refName , oldCommitId , newCommitId string ) {
os . Setenv ( "refName" , refName )
os . Setenv ( "oldCommitId" , oldCommitId )
os . Setenv ( "newCommitId" , newCommitId )
qlog . Error ( "set envs:" , refName , oldCommitId , newCommitId )
2014-04-10 22:20:58 +04:00
}
// for command: ./gogs update
func runUpdate ( c * cli . Context ) {
2014-04-11 06:27:13 +04:00
cmd := os . Getenv ( "SSH_ORIGINAL_COMMAND" )
if cmd == "" {
return
}
2014-04-10 22:20:58 +04:00
execDir , _ := base . ExecDir ( )
newUpdateLogger ( execDir )
base . NewConfigContext ( )
models . LoadModelsConfig ( )
if models . UseSQLite3 {
os . Chdir ( execDir )
}
models . SetEngine ( )
args := c . Args ( )
if len ( args ) != 3 {
qlog . Fatal ( "received less 3 parameters" )
}
2014-04-11 06:27:13 +04:00
if args [ 0 ] == "" {
2014-04-10 22:20:58 +04:00
qlog . Fatal ( "refName is empty, shouldn't use" )
}
2014-04-11 06:27:13 +04:00
//updateEnv(args[0], args[1], args[2])
userName := os . Getenv ( "userName" )
2014-05-03 09:37:49 +04:00
userId , _ := strconv . ParseInt ( os . Getenv ( "userId" ) , 10 , 64 )
2014-04-11 06:27:13 +04:00
//repoId := os.Getenv("repoId")
2014-05-03 09:37:49 +04:00
repoUserName := os . Getenv ( "repoUserName" )
2014-04-11 06:27:13 +04:00
repoName := os . Getenv ( "repoName" )
2014-05-03 09:37:49 +04:00
models . Update ( args [ 0 ] , args [ 1 ] , args [ 2 ] , userName , repoUserName , repoName , userId )
2014-04-10 22:20:58 +04:00
}