func ExecuteQuery(w *Workspace, q Query, dryRun bool, verbose int) error {
	matches := q.search(w)
	if len(matches) == 0 {
		return errors.New("no task matched: " + q.Raw)
	}
	for _, match := range matches {
		e := Execution{
			Workspace: w,
			Query:     &q,
			Project:   &match.Project,
			Task:      &match.Task,
			DryRun:    dryRun,
			Verbose:   verbose,
		}
		err := e.Execute()
		if err != nil {
			return err
		}
	}
	return nil
}
ExecuteQuery executes the given query in the workspace
package core
import (
	"github.com/apex/log"
	"github.com/kardianos/osext"
	"github.com/pkg/errors"
	"os"
	"os/exec"
	"strings"
	"time"
)
type Execution struct {
	Workspace *Workspace
	Query     *Query
	Project   *Project
	Task      *Task
	DryRun    bool
	Verbose   int
}