summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2014-04-11 10:27:13 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2014-04-11 10:27:13 +0800
commitdb39e58a139ef8581b4b61d2d4a68b4e5324acdf (patch)
tree7c73c2b6fa71ec1a970fe17f67e10af49e6ec9c9 /models
parent8faa0dbcd77ec17bbf88041f46e2fc48f6ca6f31 (diff)
downloadgitea-db39e58a139ef8581b4b61d2d4a68b4e5324acdf.tar.gz
gitea-db39e58a139ef8581b4b61d2d4a68b4e5324acdf.zip
add actions for http push
Diffstat (limited to 'models')
-rw-r--r--models/update.go93
1 files changed, 93 insertions, 0 deletions
diff --git a/models/update.go b/models/update.go
new file mode 100644
index 0000000000..2ceac271a7
--- /dev/null
+++ b/models/update.go
@@ -0,0 +1,93 @@
+package models
+
+import (
+ "container/list"
+ "os/exec"
+ "strings"
+
+ "github.com/gogits/git"
+ "github.com/gogits/gogs/modules/base"
+ qlog "github.com/qiniu/log"
+)
+
+func Update(refName, oldCommitId, newCommitId, userName, repoName string, userId int64) {
+ isNew := strings.HasPrefix(oldCommitId, "0000000")
+ if isNew &&
+ strings.HasPrefix(newCommitId, "0000000") {
+ qlog.Fatal("old rev and new rev both 000000")
+ }
+
+ f := RepoPath(userName, repoName)
+
+ gitUpdate := exec.Command("git", "update-server-info")
+ gitUpdate.Dir = f
+ gitUpdate.Run()
+
+ repo, err := git.OpenRepository(f)
+ if err != nil {
+ qlog.Fatalf("runUpdate.Open repoId: %v", err)
+ }
+
+ newOid, err := git.NewOidFromString(newCommitId)
+ if err != nil {
+ qlog.Fatalf("runUpdate.Ref repoId:%v err: %v", newCommitId, err)
+ }
+
+ newCommit, err := repo.LookupCommit(newOid)
+ if err != nil {
+ qlog.Fatalf("runUpdate.Ref repoId: %v", err)
+ }
+
+ var l *list.List
+ // if a new branch
+ if isNew {
+ l, err = repo.CommitsBefore(newCommit.Id())
+ if err != nil {
+ qlog.Fatalf("Find CommitsBefore erro:", err)
+ }
+ } else {
+ oldOid, err := git.NewOidFromString(oldCommitId)
+ if err != nil {
+ qlog.Fatalf("runUpdate.Ref repoId: %v", err)
+ }
+
+ oldCommit, err := repo.LookupCommit(oldOid)
+ if err != nil {
+ qlog.Fatalf("runUpdate.Ref repoId: %v", err)
+ }
+ l = repo.CommitsBetween(newCommit, oldCommit)
+ }
+
+ if err != nil {
+ qlog.Fatalf("runUpdate.Commit repoId: %v", err)
+ }
+
+ repos, err := GetRepositoryByName(userId, repoName)
+ if err != nil {
+ qlog.Fatalf("runUpdate.GetRepositoryByName userId: %v", err)
+ }
+
+ commits := make([]*base.PushCommit, 0)
+ var maxCommits = 3
+ var actEmail string
+ for e := l.Front(); e != nil; e = e.Next() {
+ commit := e.Value.(*git.Commit)
+ if actEmail == "" {
+ actEmail = commit.Committer.Email
+ }
+ commits = append(commits,
+ &base.PushCommit{commit.Id().String(),
+ commit.Message(),
+ commit.Author.Email,
+ commit.Author.Name})
+ if len(commits) >= maxCommits {
+ break
+ }
+ }
+
+ //commits = append(commits, []string{lastCommit.Id().String(), lastCommit.Message()})
+ if err = CommitRepoAction(userId, userName, actEmail,
+ repos.Id, repoName, git.BranchName(refName), &base.PushCommits{l.Len(), commits}); err != nil {
+ qlog.Fatalf("runUpdate.models.CommitRepoAction: %v", err)
+ }
+}