Commit Graph

157 Commits

Author SHA1 Message Date
Victor Hugo Borja
0e8e1f8f84 New feature: asdf extension commands
It's possible for plugins to define new asdf commands. This way plugins can extend asdf capabilities or expose utilities related to their managed tool.

For example, a `foo` plugin might expose the command `asdf foo bar` by providing an executable file at `bin/bar`.
If `bin/bar` is a file but has no executable bit set, then its considered a source-able bash script, and will be sourced
with all the functions in `$ASDF_DIR/lib/utils.sh` already loaded.

A good example of this feature is the `nodejs` plugin, where people must import the release team keyring before
installing a nodejs version. People can execute the following command without having to know where exactly is the plugin located.
2019-11-25 02:24:46 -06:00
Kevin Lane
c11409583f
Add unit tests for managing latest stable versions 2019-11-22 10:37:53 -08:00
Trevor Brown
72e876b0ae Handle dashes in executable names properly 2019-10-24 12:05:44 -04:00
Trevor Brown
edb5839239 Rename find_version to find_versions since it can return multiple versions 2019-10-22 19:03:05 -04:00
Trevor Brown
cea9b9574f Install multiple versions when multiple versions are present in a .tool-versions file 2019-10-22 18:58:30 -04:00
OZAWA Sakuro
bc309c0fe5 Remove quotes from --unset option 2019-09-02 11:55:42 +09:00
OZAWA Sakuro
503263a68d Add --unset option to shell command 2019-08-17 22:46:00 +09:00
Trevor Brown
549d86e733 Add tests for duplicate colon path issue 2019-08-14 19:31:23 -04:00
Trevor Brown
3516c08c6b Fix failing test 2019-06-17 20:38:17 -04:00
Leonid Shevtsov
d506aa183a tests for install command:
- remove test for install command edge case from parsing tool-versions (no longer relevant)
- add test for install command honoring legacy version files
- clean up test names to differentiate between installing a single version vs all dependencies
2019-06-01 07:48:17 +03:00
Daniel Perez
100776de93
Merge pull request #524 from paulswartz/517-prefix-versions
fix: check shims for the full version
2019-05-18 01:25:46 +01:00
Paul Swartz
4e9d04ccaa fix: also fix bug with cleaning up old versions
It had a similiar issue with removing plugins based on the prefix and not the
full version string.
2019-05-17 14:34:44 -04:00
Paul Swartz
e5863f3701 fix: check shims for the full version
The current behavior in shims is to check if there's an existing shim for
which the shim we're currently checking is a prefix. For example, if the shim
has

    # asdf-plugin: erlang 21.2.6

Then adding a shim for `erlang 21.2` will fail.

This updates the `grep` check to match the end of the line as well so we
always get a full version check.

Fixes #517
2019-05-17 14:30:05 -04:00
Daniel Perez
7876fcdd90 Fix fish test 2019-04-07 22:33:26 +01:00
Trevor Brown
ff553324a7 Add tests for code in asdf.fish 2019-04-07 15:01:19 -04:00
Trevor Brown
62015a750d Add test for not adding duplicate paths to PATH 2019-04-06 13:23:30 -04:00
Trevor Brown
13b3d14cac Add tests for code in asdf.sh 2019-04-06 12:43:39 -04:00
Daniel Perez
b8ee616318 Fix current when .tool-versions contains comments 2019-03-31 20:39:36 +01:00
Daniel Perez
f2674374b0
Merge pull request #502 from asdf-vm/use-exec
Revert to using exec when running a shim
2019-03-31 20:15:46 +01:00
Trevor Brown
28cf1a74b9 Create function for removing comments from .tool-versions files 2019-03-27 08:50:15 -04:00
Trevor Brown
1a4a9435f3 Make install command ignore comments 2019-03-27 08:50:15 -04:00
Daniel Perez
450660018c Revert to using exec when running a shim 2019-03-26 17:36:08 +00:00
Trevor Brown
bc1d9cb2c2
Merge pull request #497 from asdf-vm/rc-releases
Add support for RC releases
2019-03-25 08:19:30 -04:00
Trevor Brown
85057b6969 Add support for RC versions to asdf update command 2019-03-24 18:24:19 -04:00
Daniel Perez
81709db18a Fix shim_plugin_version 2019-03-23 21:21:55 +00:00
Trevor Brown
02f24df5e8 Improve output of where command when system version is set 2019-03-23 10:45:50 -04:00
Daniel Perez
1d43a052fe
Merge pull request #480 from jonmast/add-shell-command
Add "shell" subcommand for setting versions in shell session
2019-03-20 19:02:59 +00:00
Daniel Perez
0f0bbef50d Fix select version when multiple versions available
With the previous version, the following case would fail.
It would use python 2.7.15 when running pip
instead of version 3.7.2.

Shim for `pip`

```bash
exec /home/daniel/.asdf/bin/asdf exec "pip" "$@"
```

`.tool-versions`:

```
python 3.7.2 2.7.15 system
```
2019-03-20 17:20:01 +00:00
Daniel Perez
c06799cfca Fix legacy version and multi versions handling 2019-03-16 19:45:37 +00:00
Jonathan Mast
9116e8453d
Add "shell" subcommand for setting versions in shell session
Add a "shell" command similar to the existing "global" and "local"
commands, which sets the version in an environment variable instead of
writing it to a file. This was inspired by the similar functionality in
rbenv.

It works by adding a wrapper function for the asdf command. It forwards
to a "sh-shell" command that returns the exports as shell code which is
then evaled by the wrapper. This is a little gross, but we need to run
the code in the shell context in order to set variables.

Resolves #378
2019-03-09 13:19:33 -05:00
Victor Hugo Borja
4b40e80776 Test that command being executed can see other tools shims on path 2019-01-23 22:18:18 -06:00
Victor Hugo Borja
0260c442cc Test to ensure asdf exec and asdf env use plugin custom exec-env 2019-01-21 01:33:52 -06:00
Victor Hugo Borja
ab59e5618f Move common functionality to utils.sh
- Make shim-exec, shim-env, and which use the same logic to look for commands
- Make sure shim-exec and which use a plugin exec-path hook as documented
  (the hook takes a relative path to the executable and returns also
   a relative path, possibly modified)
- Fix shellchecks
2019-01-20 14:02:22 -06:00
Victor Hugo Borja
9cac0ac50a Faster exec times. Load commands only when nedded.
When testing, use `run asdf` to actually test the command
as the user would invoke it, so that we might catch possible
errors on `bin/asdf`.
2019-01-20 02:13:20 -06:00
Victor Hugo Borja
8927a4a09f Add asdf env command 2019-01-19 20:59:27 -06:00
Victor Hugo Borja
6da747b6ce Test that asdf exec works even if asdf shims are not in PATH. 2019-01-19 20:09:53 -06:00
Victor Hugo Borja
e51f778b61 Move bin/private/asdf-tool-exec to be asdf exec command
This way the code for executing shims can also be invoked via
`asdf exec <tool> [args..]` and can be linted.
2019-01-19 20:02:14 -06:00
Victor Hugo Borja
a46eaf3b4a Merge remote-tracking branch 'origin/shim-versions-command' into 0.6.4-dev 2019-01-19 13:56:56 -06:00
Victor Hugo Borja
9420ca1aec Add hooks for plugin uninstall 2019-01-19 13:48:21 -06:00
Victor Hugo Borja
dcc3727cab Add pre-install and pre-reshim hooks 2019-01-19 13:32:07 -06:00
Victor Hugo Borja
9a79ac9526 user configurable pre-post command hooks
Suppose a `foo` plugin is installed and provides a `bar` executable.
The following hooks will be executed when set in `.asdfrc`:

```shell
post_asdf_install_foo = echo installed foo version ${1}
post_asdf_reshim_foo = echo reshimmed foo version ${1}

pre_foo_bar = echo about to execute command bar from foo with args: ${@}
post_foo_bar = echo just executed command bar from foo with args: ${@}
```
2019-01-19 13:32:07 -06:00
Victor Hugo Borja
7fda291df0 Add asdf shim-versions command (#380)
For example `asdf shim-versions npm` will list the plugins and their
versions on which the `npm` command is available.

Based on #432
2019-01-19 13:31:26 -06:00
Victor Hugo Borja
9b27848d07 New shim metadata to allow many plugins with same executable names
Features

* New shim version meta-data allows shims to not depend on a particular plugin
  nor on its relative executable path (#431)
  Upgrading requires shim re-generation and should happen automatically
  by `asdf-exec`:
    `rm -rf ~/.asdf/shims/` followed by `asdf reshim`
* Added lots of tests for shim execution.
  We now make sure that shim execution obeys plugins hooks like
  `list-bin-paths` and `exec-path`.
* Shim exec is now performed by a new `bin/private/asdf-tool-exec` that might
  be faster for most common use case: (versions on local .tool-versions file)
  but fallbacks to slower `get_preset_version_for` which takes legacy formats
  into account.
* Shim exec recommends which plugins or versions to set when command is
  not found.

Fixed Bugs

* Allow many plugins to provide shims with same executable name (#431)
2019-01-19 13:22:12 -06:00
Trevor Brown
8bcf8caba4 Write test for the exec-path functionality in the which command 2019-01-05 10:54:02 -05:00
Raphx
ec6662d4c0
Continue list even when version is not found
Previous implementation exits abruptly when no version is installed for
a plugin. This prevented the list command from listing the versions for
some other plugins.

This commit allows list command to continue executing even when no
version is installed for some plugins.

Example, plugin a with 1.0, b with none, and c with 2.0.

Previous implementation:

```
$ asdf list

a
  1.0
b
No versions installed
```

After commit changes:

```
$ asdf list

a
  1.0
b
No versions installed
c
  2.0
```
2018-12-28 09:21:43 +08:00
Trevor Brown
54fc0f43dd Add tests for versions set by environment variables
Fixes #327
2018-12-22 15:11:28 -05:00
Trevor Brown
7ca88746a8
Merge pull request #411 from rliebz/update
Fix issues with update command
2018-12-02 14:12:23 -05:00
Robert Liebowitz
321e3b0e46 Exit 1 for failed update 2018-12-01 21:17:27 -05:00
Robert Liebowitz
697772fe8c Fix git dir for update and add error handling 2018-12-01 21:07:44 -05:00
Robert Liebowitz
76c3d426c1 Fix update test setup
Rather than using the project's current `.git` directory, create a new
one. This avoids issues with submodules and potentially other problems.
2018-12-01 21:05:58 -05:00