mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-28 20:39:40 -08:00
feat(python): use parent directory as name when "venv" or ".venv"
This commit is contained in:
parent
4b1fbb8860
commit
91fb561de7
|
@ -89,6 +89,7 @@ require (
|
||||||
github.com/shopspring/decimal v1.3.1 // indirect
|
github.com/shopspring/decimal v1.3.1 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||||
github.com/zclconf/go-cty v1.13.1 // indirect
|
github.com/zclconf/go-cty v1.13.1 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
|
||||||
golang.org/x/sync v0.4.0 // indirect
|
golang.org/x/sync v0.4.0 // indirect
|
||||||
golang.org/x/term v0.13.0 // indirect
|
golang.org/x/term v0.13.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||||
|
|
|
@ -203,8 +203,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
|
||||||
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||||
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
|
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
|
||||||
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
|
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
|
||||||
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
|
||||||
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
|
||||||
golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
|
golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
|
||||||
golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
|
golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/platform"
|
"github.com/jandedobbeleer/oh-my-posh/src/platform"
|
||||||
|
@ -72,13 +73,26 @@ func (p *Python) loadContext() {
|
||||||
"CONDA_ENV_PATH",
|
"CONDA_ENV_PATH",
|
||||||
"CONDA_DEFAULT_ENV",
|
"CONDA_DEFAULT_ENV",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defaultVenvNames := []string{
|
||||||
|
".venv",
|
||||||
|
"venv",
|
||||||
|
}
|
||||||
|
|
||||||
var venv string
|
var venv string
|
||||||
for _, venvVar := range venvVars {
|
for _, venvVar := range venvVars {
|
||||||
venv = p.language.env.Getenv(venvVar)
|
venv = p.language.env.Getenv(venvVar)
|
||||||
if len(venv) == 0 {
|
if len(venv) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
name := platform.Base(p.language.env, venv)
|
name := platform.Base(p.language.env, venv)
|
||||||
|
|
||||||
|
if slices.Contains(defaultVenvNames, name) {
|
||||||
|
venv = strings.TrimSuffix(venv, name)
|
||||||
|
name = platform.Base(p.language.env, venv)
|
||||||
|
}
|
||||||
|
|
||||||
if p.canUseVenvName(name) {
|
if p.canUseVenvName(name) {
|
||||||
p.Venv = name
|
p.Venv = name
|
||||||
break
|
break
|
||||||
|
|
|
@ -149,3 +149,29 @@ func TestPythonPythonInContext(t *testing.T) {
|
||||||
assert.Equal(t, tc.Expected, python.inContext())
|
assert.Equal(t, tc.Expected, python.inContext())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPythonVirtualEnvIgnoreDefaultVenvNames(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
VirtualEnvName string
|
||||||
|
}{
|
||||||
|
{VirtualEnvName: "/path/to/folder/.venv"},
|
||||||
|
{VirtualEnvName: "/path/to/folder/venv"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
env := new(mock.MockedEnvironment)
|
||||||
|
env.On("GOOS").Return("")
|
||||||
|
env.On("PathSeparator").Return("/")
|
||||||
|
env.On("CommandPath", mock2.Anything).Return("")
|
||||||
|
env.On("HasFilesInDir", mock2.Anything, "pyvenv.cfg").Return(false)
|
||||||
|
env.On("Getenv", "VIRTUAL_ENV").Return(tc.VirtualEnvName)
|
||||||
|
env.On("Getenv", "CONDA_ENV_PATH").Return("")
|
||||||
|
env.On("Getenv", "CONDA_DEFAULT_ENV").Return("")
|
||||||
|
env.On("Getenv", "PYENV_VERSION").Return("")
|
||||||
|
env.On("HasParentFilePath", ".python-version").Return(&platform.FileInfo{}, errors.New("no match at root level"))
|
||||||
|
python := &Python{}
|
||||||
|
python.Init(properties.Map{}, env)
|
||||||
|
python.loadContext()
|
||||||
|
assert.Equal(t, "folder", python.Venv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ sidebar_label: Python
|
||||||
Display the currently active python version and virtualenv.
|
Display the currently active python version and virtualenv.
|
||||||
Supports conda, virtualenv and pyenv (if python points to pyenv shim).
|
Supports conda, virtualenv and pyenv (if python points to pyenv shim).
|
||||||
|
|
||||||
|
If your virtual environment is a directory named `venv` or `.venv`, the virtual environment's name will be the parent directory.
|
||||||
|
|
||||||
## Sample Configuration
|
## Sample Configuration
|
||||||
|
|
||||||
import Config from '@site/src/components/Config.js';
|
import Config from '@site/src/components/Config.js';
|
||||||
|
|
Loading…
Reference in a new issue