Skip to content
This repository has been archived by the owner on Mar 18, 2024. It is now read-only.

Added 5 second delay to posting patch set created #1

Merged
merged 1 commit into from
Apr 23, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion events/patchsetCreated.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package events
import (
"fmt"
"strings"
"time"

gerrit "github.com/andygrunwald/go-gerrit"
"github.com/levenlabs/gerrit-slack/gerritssh"
Expand Down Expand Up @@ -58,7 +59,7 @@ func (PatchSetCreated) Ignore(e gerritssh.Event, pcfg project.Config) (bool, err
}

// Message implements the EventHandler interface
func (PatchSetCreated) Message(e gerritssh.Event, _ project.Config, c *gerrit.Client) (Message, error) {
func (PatchSetCreated) Message(e gerritssh.Event, pcfg project.Config, c *gerrit.Client) (Message, error) {
// we let the owner know their change was merged
var m Message
action := "Proposed"
Expand All @@ -74,6 +75,10 @@ func (PatchSetCreated) Message(e gerritssh.Event, _ project.Config, c *gerrit.Cl
action = fmt.Sprintf("%s %s", e.Uploader.Name, action)
m.Pretext = DefaultPretext(action, e)

if !pcfg.PublishPatchSetCreatedImmediately {
time.Sleep(5 * time.Second)
}

// get the list of reviewers for the reviewers field
rs, _, err := c.Changes.ListReviewers(gerritssh.ChangeIDWithProjectNumber(e.Change.Project, e.Change.Number))
if err != nil {
Expand Down
60 changes: 31 additions & 29 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,37 +97,39 @@ func main() {

func listenForEvents(client *gerrit.Client, ech <-chan gerritssh.Event, sch chan webhookSubmit) {
for e := range ech {
var pcfg project.Config
if e.Change.Project != "" {
var err error
pcfg, err = project.LoadConfig(client, e.Change.Project)
go func() {
var pcfg project.Config
if e.Change.Project != "" {
var err error
pcfg, err = project.LoadConfig(client, e.Change.Project)
if err != nil {
llog.Error("error loading config", llog.ErrKV(err), e.KV())
return
}
}
h, ok := events.Handler(e, pcfg)
if !ok {
llog.Info("no handlers for event", e.KV())
return
}
ignore, err := h.Ignore(e, pcfg)
if err != nil {
llog.Error("error loading config", llog.ErrKV(err), e.KV())
continue
llog.Error("error handling event", llog.ErrKV(err), e.KV(), llog.KV{"handler": h.Type()})
return
}
}
h, ok := events.Handler(e, pcfg)
if !ok {
llog.Info("no handlers for event", e.KV())
continue
}
ignore, err := h.Ignore(e, pcfg)
if err != nil {
llog.Error("error handling event", llog.ErrKV(err), e.KV(), llog.KV{"handler": h.Type()})
continue
}
if ignore {
continue
}
msg, err := h.Message(e, pcfg, client)
if err != nil {
llog.Error("error generating message for event", llog.ErrKV(err), e.KV(), llog.KV{"handler": h.Type()})
continue
}
sch <- webhookSubmit{
Message: msg,
WebhookURL: pcfg.WebhookURL,
}
if ignore {
return
}
msg, err := h.Message(e, pcfg, client)
if err != nil {
llog.Error("error generating message for event", llog.ErrKV(err), e.KV(), llog.KV{"handler": h.Type()})
return
}
sch <- webhookSubmit{
Message: msg,
WebhookURL: pcfg.WebhookURL,
}
}()
}
}

Expand Down
6 changes: 6 additions & 0 deletions project/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ type Config struct {
// because https://bugs.chromium.org/p/gerrit/issues/detail?id=10042
PublishPatchSetReviewersAdded bool `ini:"publish-patch-set-reviewers-added"`

// PublishPatchSetCreatedImmediately changes the patch-set-created event to fire
// immediately against slack instead of waiting 5 seconds before publishing to
// collect any automatically added reviewers. This is necessary because of the same
// bug as above.
PublishPatchSetCreatedImmediately bool `ini:"publish-patch-set-created-immediately"`

// PublishOnWipReady and PublishOnPrivateToPublic default to the value of
// PublishOnPatchSetCreated but since we can't determine if they were false
// or not set, we use a pointer and then fill in the regular values later
Expand Down