Remove global trigger channel
Instead change syncRepo to return a boolean which is whether a change occured.
This commit is contained in:
parent
5c63dc9cb5
commit
96714ebed2
|
|
@ -200,13 +200,14 @@ func main() {
|
|||
log.V(0).Infof("starting up: %q", os.Args)
|
||||
|
||||
// Startup webhooks goroutine
|
||||
go ServeWebhooks()
|
||||
webhookTriggerChan := make(chan struct{})
|
||||
go ServeWebhooks(webhookTriggerChan)
|
||||
|
||||
initialSync := true
|
||||
failCount := 0
|
||||
for {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*time.Duration(*flSyncTimeout))
|
||||
if err := syncRepo(ctx, *flRepo, *flBranch, *flRev, *flDepth, *flRoot, *flDest); err != nil {
|
||||
if changed, err := syncRepo(ctx, *flRepo, *flBranch, *flRev, *flDepth, *flRoot, *flDest); err != nil {
|
||||
if initialSync || (*flMaxSyncFailures != -1 && failCount >= *flMaxSyncFailures) {
|
||||
log.Errorf("error syncing repo: %v", err)
|
||||
os.Exit(1)
|
||||
|
|
@ -218,6 +219,9 @@ func main() {
|
|||
cancel()
|
||||
time.Sleep(waitTime(*flWait))
|
||||
continue
|
||||
} else if changed {
|
||||
// Trigger webhooks to be called
|
||||
webhookTriggerChan <- struct{}{}
|
||||
}
|
||||
if initialSync {
|
||||
if *flOneTime {
|
||||
|
|
@ -304,9 +308,6 @@ func updateSymlink(ctx context.Context, gitRoot, link, newDir string) error {
|
|||
log.V(1).Infof("pruned old worktrees")
|
||||
}
|
||||
|
||||
// Trigger webhooks to be called
|
||||
WebhookCallTriggerChannel <- struct{}{}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -407,7 +408,8 @@ func revIsHash(ctx context.Context, rev, gitRoot string) (bool, error) {
|
|||
}
|
||||
|
||||
// syncRepo syncs the branch of a given repository to the destination at the given rev.
|
||||
func syncRepo(ctx context.Context, repo, branch, rev string, depth int, gitRoot, dest string) error {
|
||||
// returns (1) whether a change occured and (2) an error if one happened
|
||||
func syncRepo(ctx context.Context, repo, branch, rev string, depth int, gitRoot, dest string) (bool, error) {
|
||||
target := path.Join(gitRoot, dest)
|
||||
gitRepoPath := path.Join(target, ".git")
|
||||
hash := rev
|
||||
|
|
@ -416,18 +418,18 @@ func syncRepo(ctx context.Context, repo, branch, rev string, depth int, gitRoot,
|
|||
case os.IsNotExist(err):
|
||||
err = cloneRepo(ctx, repo, branch, rev, depth, gitRoot)
|
||||
if err != nil {
|
||||
return err
|
||||
return false, err
|
||||
}
|
||||
hash, err = hashForRev(ctx, rev, gitRoot)
|
||||
if err != nil {
|
||||
return err
|
||||
return false, err
|
||||
}
|
||||
case err != nil:
|
||||
return fmt.Errorf("error checking if repo exists %q: %v", gitRepoPath, err)
|
||||
return false, fmt.Errorf("error checking if repo exists %q: %v", gitRepoPath, err)
|
||||
default:
|
||||
local, remote, err := getRevs(ctx, target, branch, rev)
|
||||
if err != nil {
|
||||
return err
|
||||
return false, err
|
||||
}
|
||||
log.V(2).Infof("local hash: %s", local)
|
||||
log.V(2).Infof("remote hash: %s", remote)
|
||||
|
|
@ -436,11 +438,11 @@ func syncRepo(ctx context.Context, repo, branch, rev string, depth int, gitRoot,
|
|||
hash = remote
|
||||
} else {
|
||||
log.V(1).Infof("no update required")
|
||||
return nil
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
|
||||
return addWorktreeAndSwap(ctx, gitRoot, dest, branch, rev, hash)
|
||||
return true, addWorktreeAndSwap(ctx, gitRoot, dest, branch, rev, hash)
|
||||
}
|
||||
|
||||
// getRevs returns the local and upstream hashes for rev.
|
||||
|
|
|
|||
|
|
@ -8,10 +8,6 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
// Trigger channel for webhook requests. If anything is received into this channel
|
||||
// it triggers the webhook goroutine to send new requests.
|
||||
var WebhookCallTriggerChannel = make(chan struct{})
|
||||
|
||||
// Webhook collection
|
||||
var WebhookArray = []Webhook{}
|
||||
|
||||
|
|
@ -66,10 +62,10 @@ func (w *Webhook) Do() error {
|
|||
}
|
||||
|
||||
// Wait for trigger events from the channel, and send webhooks when triggered
|
||||
func ServeWebhooks() {
|
||||
func ServeWebhooks(ch chan struct{}) {
|
||||
for {
|
||||
// Wait for trigger
|
||||
<-WebhookCallTriggerChannel
|
||||
<-ch
|
||||
|
||||
// Calling webhook - one after another
|
||||
for _, v := range WebhookArray {
|
||||
|
|
|
|||
Loading…
Reference in New Issue