Skip to content

Commit

Permalink
fix(nushell): cannot switch version
Browse files Browse the repository at this point in the history
  • Loading branch information
bytemain committed Feb 22, 2025
1 parent 1d28bc7 commit e710ce0
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 25 deletions.
12 changes: 2 additions & 10 deletions cmd/commands/activate.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,23 +44,15 @@ func activateCmd(ctx *cli.Context) error {
manager := internal.NewSdkManager()
defer manager.Close()

sdkEnvs, err := manager.FullEnvKeys()
sdkEnvs, err := manager.GlobalEnvKeys()
if err != nil {
return err
}

envKeys := sdkEnvs.ToEnvs()

exportEnvs := make(env.Vars)
for k, v := range envKeys.Variables {
exportEnvs[k] = v
}
exportEnvs := sdkEnvs.ToExportEnvs()

_ = os.Setenv(env.HookFlag, name)
exportEnvs[env.HookFlag] = &name
osPaths := env.NewPaths(env.OsPaths)
pathsStr := envKeys.Paths.Merge(osPaths).String()
exportEnvs["PATH"] = &pathsStr
exportEnvs[internal.HookCurTmpPath] = &manager.PathMeta.CurTmpPath

path := manager.PathMeta.ExecutablePath
Expand Down
3 changes: 2 additions & 1 deletion cmd/commands/cd.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ package commands

import (
"fmt"
"os"

"github.com/urfave/cli/v2"
"github.com/version-fox/vfox/internal"
"github.com/version-fox/vfox/internal/env"
"github.com/version-fox/vfox/internal/shell"
"os"
)

var Cd = &cli.Command{
Expand Down
19 changes: 7 additions & 12 deletions cmd/commands/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,13 @@ func envFlag(ctx *cli.Context, mode string) error {
var sdkEnvs internal.SdkEnvs
var err error
if mode == "full" {
sdkEnvs, err = manager.FullEnvKeys()
sdkEnvs, err = manager.SessionEnvKeys(internal.SessionEnvOptions{
WithGlobalEnv: true,
})
} else {
sdkEnvs, err = manager.AggregateEnvKeys()
sdkEnvs, err = manager.SessionEnvKeys(internal.SessionEnvOptions{
WithGlobalEnv: false,
})
}

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

envKeys := sdkEnvs.ToEnvs()

exportEnvs := make(env.Vars)
for k, v := range envKeys.Variables {
exportEnvs[k] = v
}

osPaths := env.NewPaths(env.OsPaths)
pathsStr := envKeys.Paths.Merge(osPaths).String()
exportEnvs["PATH"] = &pathsStr
exportEnvs := sdkEnvs.ToExportEnvs()

exportStr := s.Export(exportEnvs)
fmt.Println(exportStr)
Expand Down
16 changes: 14 additions & 2 deletions internal/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ type Manager struct {
Config *config.Config
}

func (m *Manager) FullEnvKeys() (SdkEnvs, error) {
func (m *Manager) GlobalEnvKeys() (SdkEnvs, error) {
workToolVersion, err := toolset.NewToolVersion(m.PathMeta.WorkingDirectory)
if err != nil {
return nil, err
Expand All @@ -93,7 +93,11 @@ func (m *Manager) FullEnvKeys() (SdkEnvs, error) {
}, ShellLocation)
}

func (m *Manager) AggregateEnvKeys() (SdkEnvs, error) {
type SessionEnvOptions struct {
WithGlobalEnv bool
}

func (m *Manager) SessionEnvKeys(opt SessionEnvOptions) (SdkEnvs, error) {
workToolVersion, err := toolset.NewToolVersion(m.PathMeta.WorkingDirectory)
if err != nil {
return nil, err
Expand Down Expand Up @@ -122,6 +126,14 @@ func (m *Manager) AggregateEnvKeys() (SdkEnvs, error) {
}
defer flushCache.Close()

if opt.WithGlobalEnv {
homeToolVersion, err := toolset.NewToolVersion(m.PathMeta.HomePath)
if err != nil {
return nil, err
}
tvs = append(toolset.MultiToolVersions{homeToolVersion}, tvs...)
}

var sdkEnvs []*SdkEnv

tvs.FilterTools(func(name, version string) bool {
Expand Down
15 changes: 15 additions & 0 deletions internal/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,21 @@ func (d *SdkEnvs) ToEnvs() *env.Envs {
return envs
}

func (d *SdkEnvs) ToExportEnvs() env.Vars {
envKeys := d.ToEnvs()

exportEnvs := make(env.Vars)
for k, v := range envKeys.Variables {
exportEnvs[k] = v
}

osPaths := env.NewPaths(env.OsPaths)
pathsStr := envKeys.Paths.Merge(osPaths).String()
exportEnvs["PATH"] = &pathsStr

return exportEnvs
}

type Sdk struct {
sdkManager *Manager
Plugin *LuaPlugin
Expand Down
3 changes: 3 additions & 0 deletions internal/shell/nushell.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ const nushellConfig = `
export-env {
def --env updateVfoxEnvironment [] {
let envData = (^'{{.SelfPath}}' env -s nushell --full | from json)
if ($envData | is-empty) {
return
}
load-env $envData.envsToSet
hide-env ...$envData.envsToUnset
}
Expand Down

0 comments on commit e710ce0

Please sign in to comment.