// getMostRecentCommit gets the hash of the most recent commit to the // repository. Useful for checking if changes occur. func (r *Repo) mostRecentCommit() (string, error) { command := gitBinary + ` --no-pager log -n 1 --pretty=format:"%H"` c, args, err := middleware.SplitCommandAndArgs(command) if err != nil { return "", err } return runCmdOutput(c, args, r.Path) }
// execThen executes r.Then. // It is trigged after successful git pull func (r *Repo) execThen() error { if r.Then == "" { return nil } c, args, err := middleware.SplitCommandAndArgs(r.Then) if err != nil { return err } if err = runCmd(c, args, r.Path); err == nil { Logger().Printf("Command %v successful.\n", r.Then) } return err }
// getLatestTag retrieves the most recent tag in the repository. func (r *Repo) fetchLatestTag() (string, error) { // fetch updates to get latest tag params := []string{"fetch", "origin", "--tags"} err := r.gitCmd(params, r.Path) if err != nil { return "", err } // retrieve latest tag command := gitBinary + ` describe origin --abbrev=0 --tags` c, args, err := middleware.SplitCommandAndArgs(command) if err != nil { return "", err } return runCmdOutput(c, args, r.Path) }
// registerCallback registers a callback function to execute by // using c to parse the line. It appends the callback function // to the list of callback functions passed in by reference. func registerCallback(c *Controller, list *[]func() error) error { var funcs []func() error for c.Next() { args := c.RemainingArgs() if len(args) == 0 { return c.ArgErr() } nonblock := false if len(args) > 1 && args[len(args)-1] == "&" { // Run command in background; non-blocking nonblock = true args = args[:len(args)-1] } command, args, err := middleware.SplitCommandAndArgs(strings.Join(args, " ")) if err != nil { return c.Err(err.Error()) } fn := func() error { cmd := exec.Command(command, args...) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if nonblock { return cmd.Start() } return cmd.Run() } funcs = append(funcs, fn) } return c.OncePerServerBlock(func() error { *list = append(*list, funcs...) return nil }) }
func webSocketParse(c *Controller) ([]websockets.Config, error) { var websocks []websockets.Config var respawn bool optionalBlock := func() (hadBlock bool, err error) { for c.NextBlock() { hadBlock = true if c.Val() == "respawn" { respawn = true } else { return true, c.Err("Expected websocket configuration parameter in block") } } return } for c.Next() { var val, path, command string // Path or command; not sure which yet if !c.NextArg() { return nil, c.ArgErr() } val = c.Val() // Extra configuration may be in a block hadBlock, err := optionalBlock() if err != nil { return nil, err } if !hadBlock { // The next argument on this line will be the command or an open curly brace if c.NextArg() { path = val command = c.Val() } else { path = "/" command = val } // Okay, check again for optional block hadBlock, err = optionalBlock() if err != nil { return nil, err } } // Split command into the actual command and its arguments cmd, args, err := middleware.SplitCommandAndArgs(command) if err != nil { return nil, err } websocks = append(websocks, websockets.Config{ Path: path, Command: cmd, Arguments: args, Respawn: respawn, // TODO: This isn't used currently }) } return websocks, nil }