diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2014-04-11 10:27:13 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2014-04-11 10:27:13 +0800 |
commit | db39e58a139ef8581b4b61d2d4a68b4e5324acdf (patch) | |
tree | 7c73c2b6fa71ec1a970fe17f67e10af49e6ec9c9 /models | |
parent | 8faa0dbcd77ec17bbf88041f46e2fc48f6ca6f31 (diff) | |
download | gitea-db39e58a139ef8581b4b61d2d4a68b4e5324acdf.tar.gz gitea-db39e58a139ef8581b4b61d2d4a68b4e5324acdf.zip |
add actions for http push
Diffstat (limited to 'models')
-rw-r--r-- | models/update.go | 93 |
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) + } +} |