aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorDanilo Riecken P. de Morais <danilo.riecken@gmail.com>2018-11-15 05:03:03 +0100
committer无闻 <u@gogs.io>2018-11-14 23:03:03 -0500
commitf47f9ceadeb673d418856137829233d4126dd5ee (patch)
treec15cd9e1c19baebca8bb4de02f0f11c63dbf6597 /models
parent81effe674dfe5d0bfd242112ffa61051a20580e8 (diff)
mirror: trigger additional push webhook on new branch (#5508)
This commit fixes issue #5473 and makes a new branch behave like a push event and trigger the appropriate webhook.
Diffstat (limited to 'models')
-rw-r--r--models/mirror.go71
1 files changed, 48 insertions, 23 deletions
diff --git a/models/mirror.go b/models/mirror.go
index 653079ea..287664a6 100644
--- a/models/mirror.go
+++ b/models/mirror.go
@@ -5,6 +5,7 @@
package models
import (
+ "container/list"
"fmt"
"net/url"
"strings"
@@ -211,7 +212,6 @@ func parseRemoteUpdateOutput(output string) []*mirrorSyncResult {
}
refName := lines[i][idx+3:]
-
switch {
case strings.HasPrefix(lines[i], " * "): // New reference
results = append(results, &mirrorSyncResult{
@@ -403,14 +403,6 @@ func SyncMirrors() {
continue
}
- // Create reference
- if result.oldCommitID == GIT_SHORT_EMPTY_SHA {
- if err = MirrorSyncCreateAction(m.Repo, result.refName); err != nil {
- log.Error(2, "MirrorSyncCreateAction [repo_id: %d]: %v", m.RepoID, err)
- }
- continue
- }
-
// Delete reference
if result.newCommitID == GIT_SHORT_EMPTY_SHA {
if err = MirrorSyncDeleteAction(m.Repo, result.refName); err != nil {
@@ -419,21 +411,54 @@ func SyncMirrors() {
continue
}
- // Push commits
- oldCommitID, err := git.GetFullCommitID(gitRepo.Path, result.oldCommitID)
- if err != nil {
- log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
- continue
- }
- newCommitID, err := git.GetFullCommitID(gitRepo.Path, result.newCommitID)
- if err != nil {
- log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
- continue
+ // New reference
+ isNewRef := false
+ if result.oldCommitID == GIT_SHORT_EMPTY_SHA {
+ if err = MirrorSyncCreateAction(m.Repo, result.refName); err != nil {
+ log.Error(2, "MirrorSyncCreateAction [repo_id: %d]: %v", m.RepoID, err)
+ continue
+ }
+ isNewRef = true
}
- commits, err := gitRepo.CommitsBetweenIDs(newCommitID, oldCommitID)
- if err != nil {
- log.Error(2, "CommitsBetweenIDs [repo_id: %d, new_commit_id: %s, old_commit_id: %s]: %v", m.RepoID, newCommitID, oldCommitID, err)
- continue
+
+ // Push commits
+ var commits *list.List
+ var oldCommitID string
+ var newCommitID string
+ if !isNewRef {
+ oldCommitID, err = git.GetFullCommitID(gitRepo.Path, result.oldCommitID)
+ if err != nil {
+ log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
+ continue
+ }
+ newCommitID, err = git.GetFullCommitID(gitRepo.Path, result.newCommitID)
+ if err != nil {
+ log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
+ continue
+ }
+ commits, err = gitRepo.CommitsBetweenIDs(newCommitID, oldCommitID)
+ if err != nil {
+ log.Error(2, "CommitsBetweenIDs [repo_id: %d, new_commit_id: %s, old_commit_id: %s]: %v", m.RepoID, newCommitID, oldCommitID, err)
+ continue
+ }
+ } else {
+ refNewCommitID, err := gitRepo.GetBranchCommitID(result.refName)
+ if err != nil {
+ log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
+ continue
+ }
+ if newCommit, err := gitRepo.GetCommit(refNewCommitID); err != nil {
+ log.Error(2, "GetCommit [repo_id: %d, commit_id: %s]: %v", m.RepoID, refNewCommitID, err)
+ continue
+ } else {
+ // TODO: Get the commits for the new ref until the closest ancestor branch like Github does
+ commits, err = newCommit.CommitsBeforeLimit(10)
+ if err != nil {
+ log.Error(2, "CommitsBeforeLimit [repo_id: %d, commit_id: %s]: %v", m.RepoID, refNewCommitID, err)
+ }
+ oldCommitID = git.EMPTY_SHA
+ newCommitID = refNewCommitID
+ }
}
if err = MirrorSyncPushAction(m.Repo, MirrorSyncPushActionOptions{
RefName: result.refName,