// Git configures a new Git service routine. func Setup(c *setup.Controller) (middleware.Middleware, error) { git, err := parse(c) if err != nil { return nil, err } // repos configured with webhooks var hookRepos []*Repo // functions to execute at startup var startupFuncs []func() error // loop through all repos and and start monitoring for i := range git { repo := git.Repo(i) // If a HookUrl is set, we switch to event based pulling. // Install the url handler if repo.HookUrl != "" { hookRepos = append(hookRepos, repo) startupFuncs = append(startupFuncs, func() error { return repo.Pull() }) } else { startupFuncs = append(startupFuncs, func() error { // Start service routine in background Start(repo) // Do a pull right away to return error return repo.Pull() }) } } // ensure the functions are executed once per server block // for cases like server1.com, server2.com { ... } c.OncePerServerBlock(func() error { c.Startup = append(c.Startup, startupFuncs...) return nil }) // if there are repo(s) with webhook // return handler if len(hookRepos) > 0 { webhook := &WebHook{Repos: hookRepos} return func(next middleware.Handler) middleware.Handler { webhook.Next = next return webhook }, err } return nil, err }