From 61a8eb1829f9d1b873f83b168e9fa73a3b44d18b Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Fri, 18 Feb 2022 17:09:45 -0500 Subject: [PATCH] fix: don't block on git push waiting for config reload --- internal/config/config.go | 4 ++++ internal/config/git.go | 16 +++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index eb6d3bcc907921df387c24f3917cc93a2476ecf7..ef96c9549f2c3232390b551c19fcb3ccfc012951 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -4,6 +4,7 @@ import ( "os/exec" "path/filepath" "strings" + "sync" "golang.org/x/crypto/ssh" "gopkg.in/yaml.v2" @@ -28,6 +29,7 @@ type Config struct { Repos []Repo `yaml:"repos"` Source *git.RepoSource Cfg *config.Config + reloadMtx sync.Mutex } // User contains user-level configuration for a repository. @@ -107,6 +109,8 @@ func NewConfig(cfg *config.Config) (*Config, error) { // Reload reloads the configuration. func (cfg *Config) Reload() error { + cfg.reloadMtx.Lock() + defer cfg.reloadMtx.Unlock() err := cfg.Source.LoadRepos() if err != nil { return err diff --git a/internal/config/git.go b/internal/config/git.go index 063a098d3cbfbb842783c80fcffe8318c426dad6..e7f39248e5e64e9cec126e44865db02a250eb07c 100644 --- a/internal/config/git.go +++ b/internal/config/git.go @@ -10,13 +10,15 @@ import ( // Push registers Git push functionality for the given repo and key. func (cfg *Config) Push(repo string, pk ssh.PublicKey) { - err := cfg.Reload() - if err != nil { - log.Printf("error reloading after push: %s", err) - } - if cfg.Cfg.Callbacks != nil { - cfg.Cfg.Callbacks.Push(repo) - } + go func() { + err := cfg.Reload() + if err != nil { + log.Printf("error reloading after push: %s", err) + } + if cfg.Cfg.Callbacks != nil { + cfg.Cfg.Callbacks.Push(repo) + } + }() } // Fetch registers Git fetch functionality for the given repo and key.