fix: don't export from within function
Also, don't explode on command function which has "export" in the name! See coop-cloud/organising#498
This commit is contained in:
		@ -8,6 +8,7 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/Autonomic-Cooperative/godotenv"
 | 
			
		||||
@ -149,22 +150,32 @@ func ReadAbraShEnvVars(abraSh string) (map[string]string, error) {
 | 
			
		||||
		}
 | 
			
		||||
		return envVars, err
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
	exportRegex, err := regexp.Compile(`^export\s+(\w+=\w+)`)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return envVars, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	scanner := bufio.NewScanner(file)
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
		if strings.Contains(line, "export") {
 | 
			
		||||
			splitVals := strings.Split(line, "export ")
 | 
			
		||||
		txt := scanner.Text()
 | 
			
		||||
		if exportRegex.MatchString(txt) {
 | 
			
		||||
			splitVals := strings.Split(txt, "export ")
 | 
			
		||||
			envVarDef := splitVals[len(splitVals)-1]
 | 
			
		||||
			keyVal := strings.Split(envVarDef, "=")
 | 
			
		||||
			if len(keyVal) != 2 {
 | 
			
		||||
				return envVars, fmt.Errorf("couldn't parse %s", line)
 | 
			
		||||
				return envVars, fmt.Errorf("couldn't parse %s", txt)
 | 
			
		||||
			}
 | 
			
		||||
			envVars[keyVal[0]] = keyVal[1]
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	logrus.Debugf("read %s from %s", envVars, abraSh)
 | 
			
		||||
	if len(envVars) > 0 {
 | 
			
		||||
		logrus.Debugf("read %s from %s", envVars, abraSh)
 | 
			
		||||
	} else {
 | 
			
		||||
		logrus.Debugf("read 0 env var exports from %s", abraSh)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return envVars, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -46,8 +46,6 @@ var ExpectedAppFiles = map[string]config.AppFile{
 | 
			
		||||
	AppName: ExpectedAppFile,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// var expectedServerNames = []string{"evil.corp"}
 | 
			
		||||
 | 
			
		||||
func TestGetAllFoldersInDirectory(t *testing.T) {
 | 
			
		||||
	folders, err := config.GetAllFoldersInDirectory(TestFolder)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -87,3 +85,37 @@ func TestReadEnv(t *testing.T) {
 | 
			
		||||
		)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestReadAbraShEnvVars(t *testing.T) {
 | 
			
		||||
	if err := catalogue.EnsureCatalogue(); err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	offline := true
 | 
			
		||||
	r, err := recipe.Get("abra-integration-test-recipe", offline)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	abraShPath := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, r.Name, "abra.sh")
 | 
			
		||||
	abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(abraShEnv) == 0 {
 | 
			
		||||
		t.Error("at least one env var should be exported")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, ok := abraShEnv["INNER_FOO"]; ok {
 | 
			
		||||
		t.Error("INNER_FOO should not be exported")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, ok := abraShEnv["INNER_BAZ"]; ok {
 | 
			
		||||
		t.Error("INNER_BAZ should not be exported")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, ok := abraShEnv["OUTER_FOO"]; !ok {
 | 
			
		||||
		t.Error("OUTER_FOO should be exported")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user