Skip to content

Commit e710ce0

Browse files
committed
fix(nushell): cannot switch version
1 parent 1d28bc7 commit e710ce0

File tree

6 files changed

+43
-25
lines changed

6 files changed

+43
-25
lines changed

cmd/commands/activate.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,15 @@ func activateCmd(ctx *cli.Context) error {
4444
manager := internal.NewSdkManager()
4545
defer manager.Close()
4646

47-
sdkEnvs, err := manager.FullEnvKeys()
47+
sdkEnvs, err := manager.GlobalEnvKeys()
4848
if err != nil {
4949
return err
5050
}
5151

52-
envKeys := sdkEnvs.ToEnvs()
53-
54-
exportEnvs := make(env.Vars)
55-
for k, v := range envKeys.Variables {
56-
exportEnvs[k] = v
57-
}
52+
exportEnvs := sdkEnvs.ToExportEnvs()
5853

5954
_ = os.Setenv(env.HookFlag, name)
6055
exportEnvs[env.HookFlag] = &name
61-
osPaths := env.NewPaths(env.OsPaths)
62-
pathsStr := envKeys.Paths.Merge(osPaths).String()
63-
exportEnvs["PATH"] = &pathsStr
6456
exportEnvs[internal.HookCurTmpPath] = &manager.PathMeta.CurTmpPath
6557

6658
path := manager.PathMeta.ExecutablePath

cmd/commands/cd.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package commands
22

33
import (
44
"fmt"
5+
"os"
6+
57
"github.com/urfave/cli/v2"
68
"github.com/version-fox/vfox/internal"
79
"github.com/version-fox/vfox/internal/env"
810
"github.com/version-fox/vfox/internal/shell"
9-
"os"
1011
)
1112

1213
var Cd = &cli.Command{

cmd/commands/env.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,13 @@ func envFlag(ctx *cli.Context, mode string) error {
127127
var sdkEnvs internal.SdkEnvs
128128
var err error
129129
if mode == "full" {
130-
sdkEnvs, err = manager.FullEnvKeys()
130+
sdkEnvs, err = manager.SessionEnvKeys(internal.SessionEnvOptions{
131+
WithGlobalEnv: true,
132+
})
131133
} else {
132-
sdkEnvs, err = manager.AggregateEnvKeys()
134+
sdkEnvs, err = manager.SessionEnvKeys(internal.SessionEnvOptions{
135+
WithGlobalEnv: false,
136+
})
133137
}
134138

135139
if err != nil {
@@ -140,16 +144,7 @@ func envFlag(ctx *cli.Context, mode string) error {
140144
return nil
141145
}
142146

143-
envKeys := sdkEnvs.ToEnvs()
144-
145-
exportEnvs := make(env.Vars)
146-
for k, v := range envKeys.Variables {
147-
exportEnvs[k] = v
148-
}
149-
150-
osPaths := env.NewPaths(env.OsPaths)
151-
pathsStr := envKeys.Paths.Merge(osPaths).String()
152-
exportEnvs["PATH"] = &pathsStr
147+
exportEnvs := sdkEnvs.ToExportEnvs()
153148

154149
exportStr := s.Export(exportEnvs)
155150
fmt.Println(exportStr)

internal/manager.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ type Manager struct {
7070
Config *config.Config
7171
}
7272

73-
func (m *Manager) FullEnvKeys() (SdkEnvs, error) {
73+
func (m *Manager) GlobalEnvKeys() (SdkEnvs, error) {
7474
workToolVersion, err := toolset.NewToolVersion(m.PathMeta.WorkingDirectory)
7575
if err != nil {
7676
return nil, err
@@ -93,7 +93,11 @@ func (m *Manager) FullEnvKeys() (SdkEnvs, error) {
9393
}, ShellLocation)
9494
}
9595

96-
func (m *Manager) AggregateEnvKeys() (SdkEnvs, error) {
96+
type SessionEnvOptions struct {
97+
WithGlobalEnv bool
98+
}
99+
100+
func (m *Manager) SessionEnvKeys(opt SessionEnvOptions) (SdkEnvs, error) {
97101
workToolVersion, err := toolset.NewToolVersion(m.PathMeta.WorkingDirectory)
98102
if err != nil {
99103
return nil, err
@@ -122,6 +126,14 @@ func (m *Manager) AggregateEnvKeys() (SdkEnvs, error) {
122126
}
123127
defer flushCache.Close()
124128

129+
if opt.WithGlobalEnv {
130+
homeToolVersion, err := toolset.NewToolVersion(m.PathMeta.HomePath)
131+
if err != nil {
132+
return nil, err
133+
}
134+
tvs = append(toolset.MultiToolVersions{homeToolVersion}, tvs...)
135+
}
136+
125137
var sdkEnvs []*SdkEnv
126138

127139
tvs.FilterTools(func(name, version string) bool {

internal/sdk.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,21 @@ func (d *SdkEnvs) ToEnvs() *env.Envs {
6464
return envs
6565
}
6666

67+
func (d *SdkEnvs) ToExportEnvs() env.Vars {
68+
envKeys := d.ToEnvs()
69+
70+
exportEnvs := make(env.Vars)
71+
for k, v := range envKeys.Variables {
72+
exportEnvs[k] = v
73+
}
74+
75+
osPaths := env.NewPaths(env.OsPaths)
76+
pathsStr := envKeys.Paths.Merge(osPaths).String()
77+
exportEnvs["PATH"] = &pathsStr
78+
79+
return exportEnvs
80+
}
81+
6782
type Sdk struct {
6883
sdkManager *Manager
6984
Plugin *LuaPlugin

internal/shell/nushell.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ const nushellConfig = `
2222
export-env {
2323
def --env updateVfoxEnvironment [] {
2424
let envData = (^'{{.SelfPath}}' env -s nushell --full | from json)
25+
if ($envData | is-empty) {
26+
return
27+
}
2528
load-env $envData.envsToSet
2629
hide-env ...$envData.envsToUnset
2730
}

0 commit comments

Comments
 (0)