From c08a8bddc9ff448d31da6b3a4c7dc9c9259df9e3 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Thu, 13 Aug 2015 17:19:16 +0100 Subject: [PATCH] More generic a solution, now works with any command that follows the same pattern of error message --- tests/rules/test_hadoop_dfs_missing_dash.py | 11 ++++++++--- thefuck/rules/hadoop_dfs_missing_dash.py | 13 ++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/tests/rules/test_hadoop_dfs_missing_dash.py b/tests/rules/test_hadoop_dfs_missing_dash.py index 8bb659de..d43216f9 100644 --- a/tests/rules/test_hadoop_dfs_missing_dash.py +++ b/tests/rules/test_hadoop_dfs_missing_dash.py @@ -22,9 +22,14 @@ def test_not_match(command): @pytest.mark.parametrize('command, new_command', [ - (Command('hdfs dfs ls'), 'hdfs dfs -ls'), - (Command('hdfs dfs ls /foo/bar'), 'hdfs dfs -ls /foo/bar'), - (Command('./bin/hdfs dfs ls -R /foo/bar'), './bin/hdfs dfs -ls -R /foo/bar')]) + (Command('hdfs dfs ls', + stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['hdfs dfs -ls']), + (Command('hdfs dfs rm /foo/bar', + stderr='rm: Unknown command\nDid you mean -rm? This command begins with a dash.'), ['hdfs dfs -rm /foo/bar']), + (Command('./bin/hdfs dfs ls -R /foo/bar', + stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -ls -R /foo/bar']), + (Command('./bin/hdfs dfs -Dtest=fred ls -R /foo/bar', + stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -Dtest=fred -ls -R /foo/bar'])]) def test_get_new_command(command, new_command): assert get_new_command(command, None) == new_command diff --git a/thefuck/rules/hadoop_dfs_missing_dash.py b/thefuck/rules/hadoop_dfs_missing_dash.py index e525c548..d8632251 100644 --- a/thefuck/rules/hadoop_dfs_missing_dash.py +++ b/thefuck/rules/hadoop_dfs_missing_dash.py @@ -1,10 +1,13 @@ +import re +from thefuck.utils import (replace_command, get_all_matched_commands) + def match(command, settings): - return ('hdfs dfs' in command.script - and "this command begins with a dash." in command.stderr.lower()) + return (re.search(r"([^:]*): Unknown command.*", command.stderr) != None + and re.search(r"Did you mean ([^?]*)?", command.stderr) != None) def get_new_command(command, settings): - data = command.script.split() - data[2] = '-' + data[2] - return ' '.join(data) + broken_cmd = re.findall(r"([^:]*): Unknown command.*", command.stderr)[0] + matched = re.findall(r"Did you mean ([^?]*)?", command.stderr) + return replace_command(command, broken_cmd, matched)