grim/convey

remove dev-convey.yml

2020-03-02, Gary Kramlich
e577abd976e0
remove dev-convey.yml
// Convey
// Copyright 2016-2018 Gary Kramlich <grim@reaperworld.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Package environment provides utilities for managing environment variables.
package environment
import (
"fmt"
"os"
"strings"
"sync"
)
type EnvironmentReader interface {
ReadEnvironment() []string
}
type Environment struct {
mutex sync.Mutex
items []string
expandables []string
delimiter string
}
// splitEqual takes a string like "foo=bar" and returns it as ("foo", "bar")
func splitEqual(value string) (string, string) {
parts := strings.SplitN(value, "=", 2)
if len(parts) == 1 {
return parts[0], ""
}
return parts[0], parts[1]
}
func New(items ...string) *Environment {
if items == nil {
items = []string{}
}
return &Environment{
items: items,
}
}
func (e *Environment) Copy() *Environment {
return New(e.Items()...)
}
func NewExpandable(expandables []string, delimiter string, items ...string) *Environment {
return &Environment{
items: items,
expandables: expandables,
delimiter: delimiter,
}
}
func (e *Environment) Items() []string {
return e.items
}
func (e *Environment) Set(name, value string) {
if err := os.Setenv(name, value); err != nil {
fmt.Printf("error setting environment variable '%s': %s\n", name, err)
} else {
e.mutex.Lock()
e.items = append(e.items, name)
e.mutex.Unlock()
}
}
// Prune removes items from the environment if they don't have a value and are
// not in the OS's environment.
func (e *Environment) Prune() *Environment {
e.mutex.Lock()
defer e.mutex.Unlock()
pruned := []string{}
for _, val := range e.items {
k, v := splitEqual(val)
if v == "" && os.Getenv(k) == "" {
continue
}
pruned = append(pruned, val)
}
e.items = pruned
return e
}
// Merge will merge another environment into the current environment
func (e *Environment) Merge(env *Environment) *Environment {
return e.MergeSlice(env.items)
}
func (e *Environment) MergeSlice(items []string) *Environment {
e.items = Merge(e.items, items)
return e
}
func (e *Environment) MapSlice(slice []string) ([]string, error) {
return SliceMapper(slice, e.Items())
}
func (e *Environment) Map(key string) string {
return Map(key, e.Items())
}