diff options
author | Danilo 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 |
commit | f47f9ceadeb673d418856137829233d4126dd5ee (patch) | |
tree | c15cd9e1c19baebca8bb4de02f0f11c63dbf6597 /models | |
parent | 81effe674dfe5d0bfd242112ffa61051a20580e8 (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.go | 71 |
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, |