blob: c35c74ea3c4e26b23e2c036035049d2b0ffa80da [file] [log] [blame]
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -07001package modules
2
3import (
4 "bufio"
5 "fmt"
6 "io"
7 "io/ioutil"
8 "os"
Cosmos Nicolaou2cb05fb2014-10-23 13:37:32 -07009 "strings"
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070010)
11
12func newLogfile(prefix string) (*os.File, error) {
13 f, err := ioutil.TempFile("", "__modules__"+prefix)
14 if err != nil {
15 return nil, err
16 }
17 return f, nil
18}
19
20func readTo(r io.Reader, w io.Writer) {
21 if w == nil {
22 return
23 }
24 scanner := bufio.NewScanner(r)
25 for scanner.Scan() {
26 fmt.Fprintf(w, "%s\n", scanner.Text())
27 }
28}
Cosmos Nicolaou2cb05fb2014-10-23 13:37:32 -070029
30// envSliceToMap returns a map representation of a string slive
31// of environment variables.
32func envSliceToMap(env []string) map[string]string {
33 m := make(map[string]string)
34 if env == nil {
35 return m
36 }
37 for _, osv := range env {
38 if len(osv) == 0 {
39 continue
40 }
41 parts := strings.SplitN(osv, "=", 2)
42 key := parts[0]
43 if len(parts) == 2 {
44 m[key] = parts[1]
45 } else {
46 m[key] = ""
47 }
48 }
49 return m
50}
51
52// mergeMaps merges two maps, a & b, with b taking preference over a.
53func mergeMaps(a, b map[string]string) map[string]string {
54 if len(b) == 0 {
55 return a
56 }
57 merged := make(map[string]string)
58 for k, v := range a {
59 merged[k] = v
60 }
61 for k, v := range b {
62 merged[k] = v
63 }
64 return merged
65}