diff --git a/README.md b/README.md index 806b6dcc..11378a71 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: * `tsuru_not_command` – fixes wrong `tsuru` commands like `tsuru shell`; * `tmux` – fixes `tmux` commands; * `unknown_command` – fixes hadoop hdfs-style "unknown command" for example adds missing '-' to the command on `hdfs dfs ls`; +* `vagrant_up` – starts up the vagrant instance; * `whois` – fixes `whois` command. Enabled by default only on specific platforms: diff --git a/tests/rules/test_vagrant_up.py b/tests/rules/test_vagrant_up.py new file mode 100644 index 00000000..1a7c9022 --- /dev/null +++ b/tests/rules/test_vagrant_up.py @@ -0,0 +1,35 @@ +import pytest +from thefuck.rules.vagrant_up import match, get_new_command +from tests.utils import Command + + +@pytest.mark.parametrize('command', [ + Command(script='vagrant ssh', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), + Command(script='vagrant ssh devbox', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), + Command(script='vagrant rdp', + stderr='VM must be created before running this command. Run `vagrant up` first.'), + Command(script='vagrant rdp devbox', + stderr='VM must be created before running this command. Run `vagrant up` first.')]) +def test_match(command): + assert match(command, None) + + +@pytest.mark.parametrize('command', [ + Command(script='vagrant ssh', stderr=''), + Command(script='vagrant ssh jeff', stderr='The machine with the name \'jeff\' was not found configured for this Vagrant environment.'), + Command(script='vagrant ssh', stderr='A Vagrant environment or target machine is required to run this command. Run `vagrant init` to create a new Vagrant environment. Or, get an ID of a target machine from `vagrant global-status` to run this command on. A final option is to change to a directory with a Vagrantfile and to try again.'), + Command()]) +def test_not_match(command): + assert not match(command, None) + + +@pytest.mark.parametrize('command, new_command', [ + (Command(script='vagrant ssh', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), 'vagrant up && vagrant ssh'), + (Command(script='vagrant ssh devbox', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), ['vagrant up devbox && vagrant ssh devbox', 'vagrant up && vagrant ssh devbox']), + (Command(script='vagrant rdp', + stderr='VM must be created before running this command. Run `vagrant up` first.'), 'vagrant up && vagrant rdp'), + (Command(script='vagrant rdp devbox', + stderr='VM must be created before running this command. Run `vagrant up` first.'), ['vagrant up devbox && vagrant rdp devbox', 'vagrant up && vagrant rdp devbox'])]) +def test_get_new_command(command, new_command): + assert get_new_command(command, None) == new_command + diff --git a/thefuck/rules/vagrant_up.py b/thefuck/rules/vagrant_up.py new file mode 100644 index 00000000..9c0a1e40 --- /dev/null +++ b/thefuck/rules/vagrant_up.py @@ -0,0 +1,18 @@ +from thefuck import shells + + +def match(command, settings): + return command.script.startswith('vagrant ') and 'run `vagrant up`' in command.stderr.lower() + + +def get_new_command(command, settings): + cmds = command.script.split(' ') + machine = None + if len(cmds) >= 3: + machine = cmds[2] + + startAllInstances = shells.and_("vagrant up", command.script) + if machine is None: + return startAllInstances + else: + return [ shells.and_("vagrant up " + machine, command.script), startAllInstances]