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.
pull/5585/head
Danilo Riecken P. de Morais 2018-11-15 05:03:03 +01:00 committed by 无闻
parent 81effe674d
commit f47f9ceade
1 changed files with 48 additions and 23 deletions

View File

@ -5,6 +5,7 @@
package models package models
import ( import (
"container/list"
"fmt" "fmt"
"net/url" "net/url"
"strings" "strings"
@ -211,7 +212,6 @@ func parseRemoteUpdateOutput(output string) []*mirrorSyncResult {
} }
refName := lines[i][idx+3:] refName := lines[i][idx+3:]
switch { switch {
case strings.HasPrefix(lines[i], " * "): // New reference case strings.HasPrefix(lines[i], " * "): // New reference
results = append(results, &mirrorSyncResult{ results = append(results, &mirrorSyncResult{
@ -403,14 +403,6 @@ func SyncMirrors() {
continue 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 // Delete reference
if result.newCommitID == GIT_SHORT_EMPTY_SHA { if result.newCommitID == GIT_SHORT_EMPTY_SHA {
if err = MirrorSyncDeleteAction(m.Repo, result.refName); err != nil { if err = MirrorSyncDeleteAction(m.Repo, result.refName); err != nil {
@ -419,22 +411,55 @@ func SyncMirrors() {
continue 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
}
// Push commits // Push commits
oldCommitID, err := git.GetFullCommitID(gitRepo.Path, result.oldCommitID) var commits *list.List
var oldCommitID string
var newCommitID string
if !isNewRef {
oldCommitID, err = git.GetFullCommitID(gitRepo.Path, result.oldCommitID)
if err != nil { if err != nil {
log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err) log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
continue continue
} }
newCommitID, err := git.GetFullCommitID(gitRepo.Path, result.newCommitID) newCommitID, err = git.GetFullCommitID(gitRepo.Path, result.newCommitID)
if err != nil { if err != nil {
log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err) log.Error(2, "GetFullCommitID [%d]: %v", m.RepoID, err)
continue continue
} }
commits, err := gitRepo.CommitsBetweenIDs(newCommitID, oldCommitID) commits, err = gitRepo.CommitsBetweenIDs(newCommitID, oldCommitID)
if err != nil { if err != nil {
log.Error(2, "CommitsBetweenIDs [repo_id: %d, new_commit_id: %s, old_commit_id: %s]: %v", m.RepoID, newCommitID, oldCommitID, err) log.Error(2, "CommitsBetweenIDs [repo_id: %d, new_commit_id: %s, old_commit_id: %s]: %v", m.RepoID, newCommitID, oldCommitID, err)
continue 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{ if err = MirrorSyncPushAction(m.Repo, MirrorSyncPushActionOptions{
RefName: result.refName, RefName: result.refName,
OldCommitID: oldCommitID, OldCommitID: oldCommitID,