code: func setup(c *caddy.Controller) error {
  	git, err := parse(c)
  	if err != nil {
  		return 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.Hook.URL != "" {
  
  			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 {
  		for i := range startupFuncs {
  			c.OnStartup(startupFuncs[i])
  		}
  		return nil
  	})
  
  	// if there are repo(s) with webhook
  	// return handler
  	if len(hookRepos) > 0 {
  		webhook := &WebHook{Repos: hookRepos}
  		httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler {
  			webhook.Next = next
  			return webhook
  		})
  	}
  
  	return nil
  }
docs: // setup configures a new Git service routine.