forked from Joffref/genz
/
helper.go
53 lines (48 loc) · 1.2 KB
/
helper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package utils
import (
"fmt"
"golang.org/x/tools/go/packages"
"log"
"os"
"os/exec"
"strings"
)
func LoadPackage(patterns []string, tags []string) *packages.Package {
cfg := &packages.Config{
Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax,
Tests: false,
BuildFlags: []string{fmt.Sprintf("-tags=%s", strings.Join(tags, " "))},
}
pkgs, err := packages.Load(cfg, patterns...)
if err != nil {
log.Fatal(err)
}
if len(pkgs) != 1 {
log.Fatalf("error: %d packages matching %v", len(pkgs), strings.Join(patterns, " "))
}
return pkgs[0]
}
func IsDirectory(name string) bool {
info, err := os.Stat(name)
if err != nil {
log.Fatal(err)
}
return info.IsDir()
}
// RunCommand runs a command and returns an error if it fails.
// If verbose is true, the command output is printed.
func RunCommand(command []string, verbose bool) error {
cmd := exec.Command(command[0], command[1:]...)
if verbose {
cmd.Stdout = log.Writer()
cmd.Stderr = log.Writer()
}
if err := cmd.Run(); err != nil {
var commandStr string
for _, c := range command {
commandStr += c + " "
}
return fmt.Errorf("failed to run %s: %w", commandStr, err)
}
return nil
}