mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-31 07:04:12 +00:00 
			
		
		
		
	Merge pull request #196 from mcarton/no-such-file
Add a `no_such_file` rule
This commit is contained in:
		| @@ -161,6 +161,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: | ||||
| * `lein_not_task` – fixes wrong `lein` tasks like `lein rpl`; | ||||
| * `mkdir_p` – adds `-p` when you trying to create directory without parent; | ||||
| * `no_command` – fixes wrong console commands, for example `vom/vim`; | ||||
| * `no_such_file` – creates missing directories with `mv` and `cp` commands; | ||||
| * `man_no_space` – fixes man commands without spaces, for example `mandiff`; | ||||
| * `pacman` – installs app with `pacman` or `yaourt` if it is not installed; | ||||
| * `pip_unknown_command` – fixes wrong pip commands, for example `pip instatl/pip install`; | ||||
|   | ||||
							
								
								
									
										19
									
								
								tests/rules/test_no_such_file.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tests/rules/test_no_such_file.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| import pytest | ||||
| from thefuck.rules.no_such_file import match, get_new_command | ||||
| from tests.utils import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mv foo bar/foo', stderr="mv: cannot move 'foo' to 'bar/foo': No such file or directory"), | ||||
|     Command(script='mv foo bar/', stderr="mv: cannot move 'foo' to 'bar/': No such file or directory"), | ||||
|     ]) | ||||
| def test_match(command): | ||||
|     assert match(command, None) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command(script='mv foo bar/foo', stderr="mv: cannot move 'foo' to 'bar/foo': No such file or directory"), 'mkdir -p bar && mv foo bar/foo'), | ||||
|     (Command(script='mv foo bar/', stderr="mv: cannot move 'foo' to 'bar/': No such file or directory"), 'mkdir -p bar && mv foo bar/'), | ||||
|     ]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command, None) == new_command | ||||
							
								
								
									
										28
									
								
								thefuck/rules/no_such_file.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								thefuck/rules/no_such_file.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| import re | ||||
|  | ||||
|  | ||||
| patterns = ( | ||||
|     r"mv: cannot move '[^']*' to '([^']*)': No such file or directory", | ||||
|     r"mv: cannot move '[^']*' to '([^']*)': Not a directory", | ||||
|     r"cp: cannot create regular file '([^']*)': No such file or directory", | ||||
|     r"cp: cannot create regular file '([^']*)': Not a directory", | ||||
| ) | ||||
|  | ||||
|  | ||||
| def match(command, settings): | ||||
|     for pattern in patterns: | ||||
|         if re.search(pattern, command.stderr): | ||||
|             return True | ||||
|  | ||||
|     return False | ||||
|  | ||||
|  | ||||
| def get_new_command(command, settings): | ||||
|     for pattern in patterns: | ||||
|         file = re.findall(pattern, command.stderr) | ||||
|  | ||||
|         if file: | ||||
|             file = file[0] | ||||
|             dir = file[0:file.rfind('/')] | ||||
|  | ||||
|             return 'mkdir -p {} && {}'.format(dir, command.script) | ||||
		Reference in New Issue
	
	Block a user