mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-12-19 18:05:02 -07:00
Merge pull request #95 from asdf-vm/tb/version-improvements
feat(golang-rewrite): misc. version improvements
This commit is contained in:
commit
fdd342185d
53
cli/cli.go
53
cli/cli.go
@ -65,10 +65,17 @@ func Execute(version string) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "current",
|
Name: "current",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "no-header",
|
||||||
|
Usage: "Whether or not to print a header line",
|
||||||
|
},
|
||||||
|
},
|
||||||
Action: func(cCtx *cli.Context) error {
|
Action: func(cCtx *cli.Context) error {
|
||||||
tool := cCtx.Args().Get(0)
|
tool := cCtx.Args().Get(0)
|
||||||
|
|
||||||
return currentCommand(logger, tool)
|
noHeader := cCtx.Bool("no-header")
|
||||||
|
return currentCommand(logger, tool, noHeader)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -286,7 +293,7 @@ func Execute(version string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This function is a whole mess and needs to be refactored
|
// This function is a whole mess and needs to be refactored
|
||||||
func currentCommand(logger *log.Logger, tool string) error {
|
func currentCommand(logger *log.Logger, tool string, noHeader bool) error {
|
||||||
conf, err := config.LoadConfig()
|
conf, err := config.LoadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Printf("error loading config: %s", err)
|
logger.Printf("error loading config: %s", err)
|
||||||
@ -301,6 +308,9 @@ func currentCommand(logger *log.Logger, tool string) error {
|
|||||||
|
|
||||||
// settings here to match legacy implementation
|
// settings here to match legacy implementation
|
||||||
w := tabwriter.NewWriter(os.Stdout, 16, 0, 1, ' ', 0)
|
w := tabwriter.NewWriter(os.Stdout, 16, 0, 1, ' ', 0)
|
||||||
|
if !noHeader {
|
||||||
|
writeHeader(w)
|
||||||
|
}
|
||||||
|
|
||||||
if tool == "" {
|
if tool == "" {
|
||||||
// show all
|
// show all
|
||||||
@ -358,23 +368,38 @@ func getVersionInfo(conf config.Config, plugin plugins.Plugin, currentDir string
|
|||||||
return toolversion, found, installed
|
return toolversion, found, installed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func writeHeader(w *tabwriter.Writer) {
|
||||||
|
fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", "Name", "Version", "Source", "Installed")
|
||||||
|
}
|
||||||
|
|
||||||
func formatCurrentVersionLine(w *tabwriter.Writer, plugin plugins.Plugin, toolversion resolve.ToolVersions, found bool, installed bool, err error) error {
|
func formatCurrentVersionLine(w *tabwriter.Writer, plugin plugins.Plugin, toolversion resolve.ToolVersions, found bool, installed bool, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(w, "%s\t%s\t%s\n", plugin.Name, formatVersions(toolversion.Versions), formatSource(toolversion, plugin, found, installed))
|
// columns are: name, version, source, installed
|
||||||
|
version := formatVersions(toolversion.Versions)
|
||||||
|
source := formatSource(toolversion, found)
|
||||||
|
installedStatus := formatInstalled(toolversion, plugin.Name, found, installed)
|
||||||
|
fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", plugin.Name, version, source, installedStatus)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatSource(toolversion resolve.ToolVersions, plugin plugins.Plugin, found bool, installed bool) string {
|
func formatInstalled(toolversion resolve.ToolVersions, name string, found, installed bool) string {
|
||||||
|
if !found {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if !installed {
|
||||||
|
return fmt.Sprintf("false - Run `asdf install %s %s`", name, toolversion.Versions[0])
|
||||||
|
}
|
||||||
|
return "true"
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatSource(toolversion resolve.ToolVersions, found bool) string {
|
||||||
if found {
|
if found {
|
||||||
if !installed {
|
|
||||||
return fmt.Sprintf("Not installed. Run \"asdf install %s %s\"", plugin.Name, toolversion.Versions[0])
|
|
||||||
}
|
|
||||||
return filepath.Join(toolversion.Directory, toolversion.Source)
|
return filepath.Join(toolversion.Directory, toolversion.Source)
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("No version is set. Run \"asdf <global|shell|local> %s <version>\"", plugin.Name)
|
return "______"
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatVersions(versions []string) string {
|
func formatVersions(versions []string) string {
|
||||||
@ -693,13 +718,13 @@ func pluginListCommand(cCtx *cli.Context, logger *log.Logger) error {
|
|||||||
// logic
|
// logic
|
||||||
for _, plugin := range plugins {
|
for _, plugin := range plugins {
|
||||||
if urls && refs {
|
if urls && refs {
|
||||||
logger.Printf("%s\t\t%s\t%s\n", plugin.Name, plugin.URL, plugin.Ref)
|
fmt.Printf("%s\t\t%s\t%s\n", plugin.Name, plugin.URL, plugin.Ref)
|
||||||
} else if refs {
|
} else if refs {
|
||||||
logger.Printf("%s\t\t%s\n", plugin.Name, plugin.Ref)
|
fmt.Printf("%s\t\t%s\n", plugin.Name, plugin.Ref)
|
||||||
} else if urls {
|
} else if urls {
|
||||||
logger.Printf("%s\t\t%s\n", plugin.Name, plugin.URL)
|
fmt.Printf("%s\t\t%s\n", plugin.Name, plugin.URL)
|
||||||
} else {
|
} else {
|
||||||
logger.Printf("%s\n", plugin.Name)
|
fmt.Printf("%s\n", plugin.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1370,7 +1395,7 @@ func whereCommand(logger *log.Logger, tool, versionStr string) error {
|
|||||||
versionStruct := toolversions.Version{Type: "version", Value: versions.Versions[0]}
|
versionStruct := toolversions.Version{Type: "version", Value: versions.Versions[0]}
|
||||||
if installs.IsInstalled(conf, plugin, versionStruct) {
|
if installs.IsInstalled(conf, plugin, versionStruct) {
|
||||||
installPath := installs.InstallPath(conf, plugin, versionStruct)
|
installPath := installs.InstallPath(conf, plugin, versionStruct)
|
||||||
logger.Printf("%s", installPath)
|
fmt.Printf("%s", installPath)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1387,7 +1412,7 @@ func whereCommand(logger *log.Logger, tool, versionStr string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
installPath := installs.InstallPath(conf, plugin, version)
|
installPath := installs.InstallPath(conf, plugin, version)
|
||||||
logger.Printf("%s", installPath)
|
fmt.Printf("%s", installPath)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,16 @@ not an executable. The new rewrite removes all shell code from asdf, and it is
|
|||||||
now a binary rather than a shell function, so setting environment variables
|
now a binary rather than a shell function, so setting environment variables
|
||||||
directly in the shell is no longer possible.
|
directly in the shell is no longer possible.
|
||||||
|
|
||||||
|
### `asdf current` has changed
|
||||||
|
|
||||||
|
Instead of three columns in the output, with the last being either the location
|
||||||
|
the version is set or a suggested command that could be run to set or install a
|
||||||
|
version. The third column has been split into two columns. The third column now
|
||||||
|
only indicates the source of the version if it is set (typically either version
|
||||||
|
file or environment variable) and the fourth is a boolean indicating whether
|
||||||
|
the specified version is actually installed. If it is not installed, a
|
||||||
|
suggested install command is shown.
|
||||||
|
|
||||||
### Plugin extension commands must now be prefixed with `cmd`
|
### Plugin extension commands must now be prefixed with `cmd`
|
||||||
|
|
||||||
Previously plugin extension commands could be run like this:
|
Previously plugin extension commands could be run like this:
|
||||||
|
@ -20,42 +20,62 @@ teardown() {
|
|||||||
@test "current should derive from the current .tool-versions" {
|
@test "current should derive from the current .tool-versions" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo 'dummy 1.1.0' >>"$PROJECT_DIR/.tool-versions"
|
echo 'dummy 1.1.0' >>"$PROJECT_DIR/.tool-versions"
|
||||||
expected="dummy 1.1.0 $PROJECT_DIR/.tool-versions"
|
expected="Name Version Source Installed
|
||||||
|
dummy 1.1.0 $PROJECT_DIR/.tool-versions true"
|
||||||
|
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' <<<"$output")"
|
||||||
|
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "$output" = "$expected" ]
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "current should handle long version name" {
|
@test "current should handle long version name" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo "dummy nightly-2000-01-01" >>"$PROJECT_DIR/.tool-versions"
|
echo "dummy nightly-2000-01-01" >>"$PROJECT_DIR/.tool-versions"
|
||||||
expected="dummy nightly-2000-01-01 $PROJECT_DIR/.tool-versions"
|
expected="Name Version Source Installed
|
||||||
|
dummy nightly-2000-01-01 $PROJECT_DIR/.tool-versions true"
|
||||||
|
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' <<<"$output")"
|
||||||
|
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "$output" = "$expected" ]
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "current should handle multiple versions" {
|
@test "current should handle multiple versions" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo "dummy 1.2.0 1.1.0" >>"$PROJECT_DIR/.tool-versions"
|
echo "dummy 1.2.0 1.1.0" >>"$PROJECT_DIR/.tool-versions"
|
||||||
expected="dummy 1.2.0 1.1.0 $PROJECT_DIR/.tool-versions"
|
expected="Name Version Source Installed
|
||||||
|
dummy 1.2.0 1.1.0 $PROJECT_DIR/.tool-versions true"
|
||||||
|
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' <<<"$output")"
|
||||||
|
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "$output" = "$expected" ]
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "current should derive from the legacy file if enabled" {
|
@test "current should derive from the legacy file if enabled" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo 'legacy_version_file = yes' >"$HOME/.asdfrc"
|
echo 'legacy_version_file = yes' >"$HOME/.asdfrc"
|
||||||
echo '1.2.0' >>"$PROJECT_DIR/.dummy-version"
|
echo '1.2.0' >>"$PROJECT_DIR/.dummy-version"
|
||||||
expected="dummy 1.2.0 $PROJECT_DIR/.dummy-version"
|
expected="Name Version Source Installed
|
||||||
|
dummy 1.2.0 $PROJECT_DIR/.dummy-version true"
|
||||||
|
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' <<<"$output")"
|
||||||
|
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "$output" = "$expected" ]
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO: Need to fix plugin error as well
|
# TODO: Need to fix plugin error as well
|
||||||
@ -69,21 +89,33 @@ teardown() {
|
|||||||
|
|
||||||
@test "current should error when no version is set" {
|
@test "current should error when no version is set" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
expected="dummy ______ No version is set. Run \"asdf <global|shell|local> dummy <version>\""
|
expected="Name Version Source Installed
|
||||||
|
dummy ______ ______ "
|
||||||
|
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' <<<"$output")"
|
||||||
|
|
||||||
[ "$status" -eq 126 ]
|
[ "$status" -eq 126 ]
|
||||||
[ "$output" = "$expected" ]
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "current should error when a version is set that isn't installed" {
|
@test "current should error when a version is set that isn't installed" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo 'dummy 9.9.9' >>"$PROJECT_DIR/.tool-versions"
|
echo 'dummy 9.9.9' >>"$PROJECT_DIR/.tool-versions"
|
||||||
expected="dummy 9.9.9 Not installed. Run \"asdf install dummy 9.9.9\""
|
expected="Name Version Source Installed
|
||||||
|
dummy 9.9.9 $PROJECT_DIR/.tool-versions false - Run \`asdf install dummy 9.9.9\`"
|
||||||
|
|
||||||
|
asdf uninstall dummy 9.9.9 || true
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' -e 's/ $//g' <<<"$output")"
|
||||||
|
|
||||||
[ "$status" -eq 1 ]
|
[ "$status" -eq 1 ]
|
||||||
[ "$output" = "$expected" ]
|
|
||||||
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "should output all plugins when no plugin passed" {
|
@test "should output all plugins when no plugin passed" {
|
||||||
@ -99,13 +131,17 @@ teardown() {
|
|||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo 'dummy 1.1.0' >>"$PROJECT_DIR/.tool-versions"
|
echo 'dummy 1.1.0' >>"$PROJECT_DIR/.tool-versions"
|
||||||
echo 'foobar 1.0.0' >>"$PROJECT_DIR/.tool-versions"
|
echo 'foobar 1.0.0' >>"$PROJECT_DIR/.tool-versions"
|
||||||
|
expected="Name Version Source Installed
|
||||||
|
baz ______ ______
|
||||||
|
dummy 1.1.0 $PROJECT_DIR/.tool-versions true
|
||||||
|
foobar 1.0.0 $PROJECT_DIR/.tool-versions true"
|
||||||
|
|
||||||
run asdf current
|
run asdf current
|
||||||
expected="baz ______ No version is set. Run \"asdf <global|shell|local> baz <version>\"
|
|
||||||
dummy 1.1.0 $PROJECT_DIR/.tool-versions
|
|
||||||
foobar 1.0.0 $PROJECT_DIR/.tool-versions"
|
|
||||||
|
|
||||||
[ "$expected" = "$output" ]
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' -e 's/ $//g' <<<"$output")"
|
||||||
|
|
||||||
|
[ "$expected" = "$condensed_output" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "should always match the tool name exactly" {
|
@test "should always match the tool name exactly" {
|
||||||
@ -136,9 +172,12 @@ foobar 1.0.0 $PROJECT_DIR/.tool-versions"
|
|||||||
@test "current should handle comments" {
|
@test "current should handle comments" {
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
echo "dummy 1.2.0 # this is a comment" >>"$PROJECT_DIR/.tool-versions"
|
echo "dummy 1.2.0 # this is a comment" >>"$PROJECT_DIR/.tool-versions"
|
||||||
expected="dummy 1.2.0 $PROJECT_DIR/.tool-versions"
|
expected="Name Version Source Installed
|
||||||
|
dummy 1.2.0 $PROJECT_DIR/.tool-versions true"
|
||||||
|
|
||||||
run asdf current "dummy"
|
run asdf current "dummy"
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "$output" = "$expected" ]
|
# shellcheck disable=SC2001
|
||||||
|
condensed_output="$(sed -e 's/ [ ]*/ /g' <<<"$output")"
|
||||||
|
[ "$condensed_output" = "$expected" ]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user