// makeSnapHookEnv returns an environment suitable for passing to // os/exec.Cmd.Env // // The returned environment contains additional SNAP_* variables that // are required when calling a meta/hook/ script and that will override // any already existing SNAP_* variables in os.Environment() func makeSnapHookEnv(part *SnapPart) (env []string) { desc := struct { AppName string AppArch string AppPath string Version string UdevAppName string Origin string }{ part.Name(), helpers.UbuntuArchitecture(), part.basedir, part.Version(), QualifiedName(part), part.Origin(), } snapEnv := helpers.MakeMapFromEnvList(helpers.GetBasicSnapEnvVars(desc)) // merge regular env and new snapEnv envMap := helpers.MakeMapFromEnvList(os.Environ()) for k, v := range snapEnv { envMap[k] = v } // flatten for k, v := range envMap { env = append(env, fmt.Sprintf("%s=%s", k, v)) } return env }
// makeSnapHookEnv returns an environment suitable for passing to // os/exec.Cmd.Env // // The returned environment contains additional SNAP_* variables that // are required when calling a meta/hook/ script and that will override // any already existing SNAP_* variables in os.Environment() func makeSnapHookEnv(part *SnapPart) (env []string) { desc := struct { AppName string AppArch string AppPath string Version string UdevAppName string Origin string }{ part.Name(), arch.UbuntuArchitecture(), part.basedir, part.Version(), QualifiedName(part), part.Origin(), } vars := helpers.GetBasicSnapEnvVars(desc) vars = append(vars, helpers.GetDeprecatedBasicSnapEnvVars(desc)...) snapEnv := helpers.MakeMapFromEnvList(vars) // merge regular env and new snapEnv envMap := helpers.MakeMapFromEnvList(os.Environ()) for k, v := range snapEnv { envMap[k] = v } // force default locale envMap["LC_ALL"] = "C.UTF-8" // flatten for k, v := range envMap { env = append(env, fmt.Sprintf("%s=%s", k, v)) } return env }
func (s *SnapTestSuite) TestMakeConfigEnv(c *C) { yamlFile, err := makeInstalledMockSnap(s.tempdir, "") c.Assert(err, IsNil) snap, err := NewInstalledSnapPart(yamlFile, "sergiusens") c.Assert(err, IsNil) c.Assert(snap, NotNil) os.Setenv("SNAP_NAME", "override-me") defer os.Setenv("SNAP_NAME", "") env := makeSnapHookEnv(snap) // now ensure that the environment we get back is what we want envMap := helpers.MakeMapFromEnvList(env) // regular env is unaltered c.Assert(envMap["PATH"], Equals, os.Getenv("PATH")) // SNAP_* is overriden c.Assert(envMap["SNAP_NAME"], Equals, "hello-app") c.Assert(envMap["SNAP_VERSION"], Equals, "1.10") }