|
@@ -26,6 +26,7 @@ import (
|
|
|
|
|
|
type ActionType int
|
|
|
|
|
|
+// To maintain backward compatibility only append to the end of list
|
|
|
const (
|
|
|
ACTION_CREATE_REPO ActionType = iota + 1 // 1
|
|
|
ACTION_RENAME_REPO // 2
|
|
@@ -42,6 +43,9 @@ const (
|
|
|
ACTION_REOPEN_ISSUE // 13
|
|
|
ACTION_CLOSE_PULL_REQUEST // 14
|
|
|
ACTION_REOPEN_PULL_REQUEST // 15
|
|
|
+ ACTION_CREATE_BRANCH // 16
|
|
|
+ ACTION_DELETE_BRANCH // 17
|
|
|
+ ACTION_DELETE_TAG // 18
|
|
|
)
|
|
|
|
|
|
var (
|
|
@@ -66,7 +70,7 @@ func init() {
|
|
|
// Action represents user operation type and other information to repository,
|
|
|
// it implemented interface base.Actioner so that can be used in template render.
|
|
|
type Action struct {
|
|
|
- ID int64 `xorm:"pk autoincr"`
|
|
|
+ ID int64
|
|
|
UserID int64 // Receiver user id.
|
|
|
OpType ActionType
|
|
|
ActUserID int64 // Action user id.
|
|
@@ -485,30 +489,32 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
|
|
return fmt.Errorf("Marshal: %v", err)
|
|
|
}
|
|
|
|
|
|
+ defer func() {
|
|
|
+ // It's safe to fail when the whole function is called during hook execution
|
|
|
+ // because resource released after exit.
|
|
|
+ go HookQueue.Add(repo.ID)
|
|
|
+ }()
|
|
|
+
|
|
|
refName := git.RefEndName(opts.RefFullName)
|
|
|
- if err = NotifyWatchers(&Action{
|
|
|
+ action := &Action{
|
|
|
ActUserID: pusher.ID,
|
|
|
ActUserName: pusher.Name,
|
|
|
- OpType: opType,
|
|
|
Content: string(data),
|
|
|
RepoID: repo.ID,
|
|
|
RepoUserName: repo.MustOwner().Name,
|
|
|
RepoName: repo.Name,
|
|
|
RefName: refName,
|
|
|
IsPrivate: repo.IsPrivate,
|
|
|
- }); err != nil {
|
|
|
- return fmt.Errorf("NotifyWatchers: %v", err)
|
|
|
}
|
|
|
|
|
|
- defer func() {
|
|
|
- go HookQueue.Add(repo.ID)
|
|
|
- }()
|
|
|
-
|
|
|
apiRepo := repo.APIFormat(nil)
|
|
|
apiPusher := pusher.APIFormat()
|
|
|
switch opType {
|
|
|
case ACTION_COMMIT_REPO: // Push
|
|
|
if isDelRef {
|
|
|
+ action.OpType = ACTION_DELETE_BRANCH
|
|
|
+ MustNotifyWatchers(action)
|
|
|
+
|
|
|
if err = PrepareWebhooks(repo, HOOK_EVENT_DELETE, &api.DeletePayload{
|
|
|
Ref: refName,
|
|
|
RefType: "branch",
|
|
@@ -525,6 +531,9 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
|
|
|
|
|
compareURL := setting.AppUrl + opts.Commits.CompareURL
|
|
|
if isNewRef {
|
|
|
+ action.OpType = ACTION_CREATE_BRANCH
|
|
|
+ MustNotifyWatchers(action)
|
|
|
+
|
|
|
compareURL = ""
|
|
|
if err = PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{
|
|
|
Ref: refName,
|
|
@@ -537,6 +546,8 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ action.OpType = ACTION_COMMIT_REPO
|
|
|
+ MustNotifyWatchers(action)
|
|
|
if err = PrepareWebhooks(repo, HOOK_EVENT_PUSH, &api.PushPayload{
|
|
|
Ref: opts.RefFullName,
|
|
|
Before: opts.OldCommitID,
|
|
@@ -552,6 +563,9 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
|
|
|
|
|
case ACTION_PUSH_TAG: // Tag
|
|
|
if isDelRef {
|
|
|
+ action.OpType = ACTION_DELETE_TAG
|
|
|
+ MustNotifyWatchers(action)
|
|
|
+
|
|
|
if err = PrepareWebhooks(repo, HOOK_EVENT_DELETE, &api.DeletePayload{
|
|
|
Ref: refName,
|
|
|
RefType: "tag",
|
|
@@ -564,6 +578,8 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+ action.OpType = ACTION_PUSH_TAG
|
|
|
+ MustNotifyWatchers(action)
|
|
|
if err = PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{
|
|
|
Ref: refName,
|
|
|
RefType: "tag",
|