]> source.dussan.org Git - gitea.git/commitdiff
add update
authorLunny Xiao <xiaolunwen@gmail.com>
Sun, 16 Mar 2014 04:18:34 +0000 (12:18 +0800)
committerLunny Xiao <xiaolunwen@gmail.com>
Sun, 16 Mar 2014 04:18:34 +0000 (12:18 +0800)
gogs.go
models/action.go
serve.go
update.go [new file with mode: 0644]

diff --git a/gogs.go b/gogs.go
index e826ab9f360024bc3a19bf046736b36efb8f8402..3b33c4e3039c6feb395e7ded7a650f54a9e86fa6 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -49,6 +49,7 @@ func main() {
        app.Commands = []cli.Command{
                CmdWeb,
                CmdServ,
+               CmdUpdate,
        }
        app.Flags = append(app.Flags, []cli.Flag{
                cli.BoolFlag{"noterm", "disable color output"},
index 6a77d73003e8fd750320e7f353d6bbd665aa2ec5..93c1e2768f52ac3b9ebd2239915c8b9f5d9def00 100644 (file)
@@ -43,7 +43,22 @@ func (a Action) GetRepoName() string {
        return a.RepoName
 }
 
+func CommitRepoAction(userId int64, userName string,
+       repoId int64, repoName string, msg string) error {
+       _, err := orm.InsertOne(&Action{
+               UserId:      userId,
+               ActUserId:   userId,
+               ActUserName: userName,
+               OpType:      OP_COMMIT_REPO,
+               Content:     msg,
+               RepoId:      repoId,
+               RepoName:    repoName,
+       })
+       return err
+}
+
 // NewRepoAction inserts action for create repository.
+
 func NewRepoAction(user *User, repo *Repository) error {
        _, err := orm.InsertOne(&Action{
                UserId:      user.Id,
index 56105f2f806619d31446369f3457d04d2991dffe..50ec94a8d9a412a2fe0fe5db7bbbf20f7552f2f6 100644 (file)
--- a/serve.go
+++ b/serve.go
@@ -73,6 +73,17 @@ func runServ(*cli.Context) {
        if strings.HasSuffix(repoName, ".git") {
                repoName = repoName[:len(repoName)-4]
        }
+
+       os.Setenv("userName", user.Name)
+       os.Setenv("userId", strconv.Itoa(int(user.Id)))
+       repo, err := models.GetRepositoryByName(user, repoName)
+       if err != nil {
+               println("Unavilable repository", err)
+               return
+       }
+       os.Setenv("repoId", strconv.Itoa(int(repo.Id)))
+       os.Setenv("repoName", repoName)
+
        isWrite := In(verb, COMMANDS_WRITE)
        isRead := In(verb, COMMANDS_READONLY)
 
diff --git a/update.go b/update.go
new file mode 100644 (file)
index 0000000..339b3ab
--- /dev/null
+++ b/update.go
@@ -0,0 +1,51 @@
+package main
+
+import (
+       "os"
+       "strconv"
+
+       "github.com/gogits/gogs/models"
+
+       "github.com/codegangsta/cli"
+       git "github.com/gogits/git"
+)
+
+var CmdUpdate = cli.Command{
+       Name:  "update",
+       Usage: "This command just should be called by ssh shell",
+       Description: `
+gogs serv provide access auth for repositories`,
+       Action: runUpdate,
+       Flags:  []cli.Flag{},
+}
+
+func runUpdate(*cli.Context) {
+       userName := os.Getenv("userName")
+       userId := os.Getenv("userId")
+       repoId := os.Getenv("repoId")
+       repoName := os.Getenv("repoName")
+
+       f := models.RepoPath(userName, repoName)
+
+       repo, err := git.OpenRepository(f)
+       if err != nil {
+               return
+       }
+
+       ref, err := repo.LookupReference("HEAD")
+       if err != nil {
+               return
+       }
+
+       lastCommit, err := repo.LookupCommit(ref.Oid)
+       if err != nil {
+               return
+       }
+       sUserId, _ := strconv.Atoi(userId)
+       sRepoId, _ := strconv.Atoi(repoId)
+       err = models.CommitRepoAction(int64(sUserId), userName,
+               int64(sRepoId), repoName, lastCommit.Message())
+       if err != nil {
+               //TODO: log
+       }
+}