mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-30 22:54:14 +00:00 
			
		
		
		
	| @@ -198,6 +198,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: | |||||||
| * `switch_lang` – switches command from your local layout to en; | * `switch_lang` – switches command from your local layout to en; | ||||||
| * `systemctl` – correctly orders parameters of confusing `systemctl`; | * `systemctl` – correctly orders parameters of confusing `systemctl`; | ||||||
| * `test.py` – runs `py.test` instead of `test.py`; | * `test.py` – runs `py.test` instead of `test.py`; | ||||||
|  | * `touch` – creates missing directories before "touching"; | ||||||
| * `tsuru_login` – runs `tsuru login` if not authenticated or session expired; | * `tsuru_login` – runs `tsuru login` if not authenticated or session expired; | ||||||
| * `tsuru_not_command` – fixes wrong `tsuru` commands like `tsuru shell`; | * `tsuru_not_command` – fixes wrong `tsuru` commands like `tsuru shell`; | ||||||
| * `tmux` – fixes `tmux` commands; | * `tmux` – fixes `tmux` commands; | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								tests/test_touch.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								tests/test_touch.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | import pytest | ||||||
|  | from thefuck.rules.touch import match, get_new_command | ||||||
|  | from tests.utils import Command | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.fixture | ||||||
|  | def stderr(): | ||||||
|  |     return "touch: cannot touch '/a/b/c':" \ | ||||||
|  |            " No such file or directory" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_match(stderr): | ||||||
|  |     command = Command( | ||||||
|  |         'touch /a/b/c', stderr=stderr) | ||||||
|  |     assert match(command) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.mark.parametrize('command', [ | ||||||
|  |     Command('touch /a/b/c'), | ||||||
|  |     Command('touch /a/b/c', stdout=stderr()), | ||||||
|  |     Command('ls /a/b/c', stderr=stderr())]) | ||||||
|  | def test_not_match(command): | ||||||
|  |     assert not match(command) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_get_new_command(stderr): | ||||||
|  |     command = Command('touch /a/b/c', stderr=stderr) | ||||||
|  |     fixed_command = get_new_command(command) | ||||||
|  |     assert fixed_command == 'mkdir -p /a/b && touch /a/b/c' | ||||||
							
								
								
									
										13
									
								
								thefuck/rules/touch.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								thefuck/rules/touch.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | import re | ||||||
|  | from thefuck.utils import for_app | ||||||
|  | from thefuck.shells import and_ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @for_app('touch') | ||||||
|  | def match(command): | ||||||
|  |     return 'No such file or directory' in command.stderr | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_new_command(command): | ||||||
|  |     path = re.findall(r"touch: cannot touch '(.+)/.+':", command.stderr)[0] | ||||||
|  |     return and_(u'mkdir -p {}'.format(path), command.script) | ||||||
		Reference in New Issue
	
	Block a user