183 lines
7.3 KiB
Ruby
183 lines
7.3 KiB
Ruby
class Thefuck < Formula
|
||
desc "Programatically correct mistyped console commands"
|
||
homepage "https://github.com/nvbn/thefuck"
|
||
url "https://pypi.python.org/packages/source/t/thefuck/thefuck-3.4.tar.gz"
|
||
sha256 "4e1a6e8ea154d7aae67f0935e5eeab1b243451a5537b70e919fec6f823a680b6"
|
||
|
||
head "https://github.com/nvbn/thefuck.git"
|
||
|
||
bottle do
|
||
cellar :any_skip_relocation
|
||
revision 1
|
||
sha256 "41470126eee1cf91235ab62a91d373b588e1cc350417ab2f43c5b211e0cf95da" => :el_capitan
|
||
sha256 "47e5ea23e7dc1e74026fbdd8332c9c7c926b51eed59989474039af6034fb0ae7" => :yosemite
|
||
sha256 "c1ba06e1c3065ba355bc2c30610a499f8881366f485ded57090e2c375fff4127" => :mavericks
|
||
end
|
||
|
||
depends_on :python if MacOS.version <= :snow_leopard
|
||
|
||
resource "psutil" do
|
||
url "https://pypi.python.org/packages/source/p/psutil/psutil-3.2.1.tar.gz"
|
||
sha256 "7f6bea8bfe2e5cfffd0f411aa316e837daadced1893b44254bb9a38a654340f7"
|
||
end
|
||
|
||
resource "pathlib" do
|
||
url "https://pypi.python.org/packages/source/p/pathlib/pathlib-1.0.1.tar.gz"
|
||
sha256 "6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f"
|
||
end
|
||
|
||
resource "colorama" do
|
||
url "https://pypi.python.org/packages/source/c/colorama/colorama-0.3.3.tar.gz"
|
||
sha256 "eb21f2ba718fbf357afdfdf6f641ab393901c7ca8d9f37edd0bee4806ffa269c"
|
||
end
|
||
|
||
resource "six" do
|
||
url "https://pypi.python.org/packages/source/s/six/six-1.9.0.tar.gz"
|
||
sha256 "e24052411fc4fbd1f672635537c3fc2330d9481b18c0317695b46259512c91d5"
|
||
end
|
||
|
||
resource "setuptools" do
|
||
url "https://pypi.python.org/packages/source/s/setuptools/setuptools-18.2.tar.gz"
|
||
sha256 "0994a58df27ea5dc523782a601357a2198b7493dcc99a30d51827a23585b5b1d"
|
||
end
|
||
|
||
resource "decorator" do
|
||
url "https://pypi.python.org/packages/source/d/decorator/decorator-4.0.2.tar.gz"
|
||
sha256 "1a089279d5de2471c47624d4463f2e5b3fc6a2cf65045c39bf714fc461a25206"
|
||
end
|
||
|
||
resource "pip" do
|
||
url "https://pypi.python.org/packages/source/p/pip/pip-8.0.3.tar.gz"
|
||
sha256 "30f98b66f3fe1069c529a491597d34a1c224a68640c82caf2ade5f88aa1405e8"
|
||
end
|
||
|
||
# FIXME: Remove all these patches in 3.5!
|
||
#
|
||
#
|
||
# Patch sent to upstream: https://github.com/nvbn/thefuck/pull/473
|
||
#
|
||
# Why this patch is needed: when switching to/from a virtualenv while using
|
||
# this software might turn its cache file incompatible between system's and
|
||
# virtualenv's Python. The database packages used when creating and reading
|
||
# the cache file must be the very same. If this package – e.g. gdbm – isn't
|
||
# available – mostly when using system's Python – an ImportError is raised.
|
||
#
|
||
#
|
||
# Patch sent to upstream: https://github.com/nvbn/thefuck/pull/474
|
||
#
|
||
# Why this patch is needed: the local environment variables should be declared
|
||
# in order for they become available to `thefuck` command. Fish Shell alias is
|
||
# not affected by this regression.
|
||
#
|
||
patch :DATA
|
||
|
||
def install
|
||
xy = Language::Python.major_minor_version "python"
|
||
ENV.prepend_create_path "PYTHONPATH", libexec/"vendor/lib/python#{xy}/site-packages"
|
||
%w[setuptools pathlib psutil colorama six decorator pip].each do |r|
|
||
resource(r).stage do
|
||
system "python", *Language::Python.setup_install_args(libexec/"vendor")
|
||
end
|
||
end
|
||
|
||
ENV.prepend_create_path "PYTHONPATH", libexec/"lib/python#{xy}/site-packages"
|
||
system "python", *Language::Python.setup_install_args(libexec)
|
||
|
||
bin.install Dir["#{libexec}/bin/*"]
|
||
bin.env_script_all_files(libexec/"bin", :PYTHONPATH => ENV["PYTHONPATH"])
|
||
end
|
||
|
||
def caveats; <<-EOS.undent
|
||
Add the following to your .bash_profile, .bashrc or .zshrc:
|
||
|
||
eval "$(thefuck --alias)"
|
||
|
||
For other shells, check https://github.com/nvbn/thefuck/wiki/Shell-aliases
|
||
EOS
|
||
end
|
||
|
||
test do
|
||
ENV["THEFUCK_REQUIRE_CONFIRMATION"] = "false"
|
||
assert_match /The Fuck #{version} using Python [0-9\.]+/, shell_output("#{bin}/thefuck --version 2>&1").chomp
|
||
assert_match /.+TF_ALIAS.+thefuck.+/, shell_output("#{bin}/thefuck --alias").chomp
|
||
assert_match /git branch/, shell_output("#{bin}/thefuck git branchh").chomp
|
||
assert_match /echo ok/, shell_output("#{bin}/thefuck echho ok").chomp
|
||
assert_match /^Seems like .+fuck.+ alias isn't configured.+/, shell_output("#{bin}/fuck").chomp
|
||
end
|
||
end
|
||
|
||
__END__
|
||
diff --git a/thefuck/utils.py b/thefuck/utils.py
|
||
index b1bbd42..4ae5898 100644
|
||
--- a/thefuck/utils.py
|
||
+++ b/thefuck/utils.py
|
||
@@ -228,7 +228,7 @@ def cache(*depends_on):
|
||
value = fn(*args, **kwargs)
|
||
db[key] = {'etag': etag, 'value': value}
|
||
return value
|
||
- except shelve_open_error:
|
||
+ except (shelve_open_error, ImportError):
|
||
# Caused when going from Python 2 to Python 3 and vice-versa
|
||
warn("Removing possibly out-dated cache")
|
||
os.remove(cache_path)
|
||
diff --git a/thefuck/shells/bash.py b/thefuck/shells/bash.py
|
||
index d6e9b2c..8f4e0e1 100644
|
||
--- a/thefuck/shells/bash.py
|
||
+++ b/thefuck/shells/bash.py
|
||
@@ -6,9 +6,11 @@ from .generic import Generic
|
||
|
||
class Bash(Generic):
|
||
def app_alias(self, fuck):
|
||
- alias = "TF_ALIAS={0}" \
|
||
- " alias {0}='PYTHONIOENCODING=utf-8" \
|
||
- " TF_CMD=$(TF_SHELL_ALIASES=$(alias) thefuck $(fc -ln -1)) && " \
|
||
+ # It is VERY important to have the variables declared WITHIN the alias
|
||
+ alias = "alias {0}='TF_CMD=$(TF_ALIAS={0}" \
|
||
+ " PYTHONIOENCODING=utf-8" \
|
||
+ " TF_SHELL_ALIASES=$(alias)" \
|
||
+ " thefuck $(fc -ln -1)) &&" \
|
||
" eval $TF_CMD".format(fuck)
|
||
|
||
if settings.alter_history:
|
||
diff --git a/thefuck/shells/fish.py b/thefuck/shells/fish.py
|
||
index fff003b..bc2b2ec 100644
|
||
--- a/thefuck/shells/fish.py
|
||
+++ b/thefuck/shells/fish.py
|
||
@@ -14,6 +14,7 @@ class Fish(Generic):
|
||
return ['cd', 'grep', 'ls', 'man', 'open']
|
||
|
||
def app_alias(self, fuck):
|
||
+ # It is VERY important to have the variables declared WITHIN the alias
|
||
return ('function {0} -d "Correct your previous console command"\n'
|
||
' set -l fucked_up_command $history[1]\n'
|
||
' env TF_ALIAS={0} PYTHONIOENCODING=utf-8'
|
||
diff --git a/thefuck/shells/zsh.py b/thefuck/shells/zsh.py
|
||
index a8c0587..e522d6a 100644
|
||
--- a/thefuck/shells/zsh.py
|
||
+++ b/thefuck/shells/zsh.py
|
||
@@ -7,10 +7,11 @@ from .generic import Generic
|
||
|
||
class Zsh(Generic):
|
||
def app_alias(self, alias_name):
|
||
- alias = "alias {0}='TF_ALIAS={0}" \
|
||
+ # It is VERY important to have the variables declared WITHIN the alias
|
||
+ alias = "alias {0}='TF_CMD=$(TF_ALIAS={0}" \
|
||
" PYTHONIOENCODING=utf-8" \
|
||
- ' TF_SHELL_ALIASES=$(alias)' \
|
||
- " TF_CMD=$(thefuck $(fc -ln -1 | tail -n 1)) &&" \
|
||
+ " TF_SHELL_ALIASES=$(alias)" \
|
||
+ " thefuck $(fc -ln -1 | tail -n 1)) &&" \
|
||
" eval $TF_CMD".format(alias_name)
|
||
|
||
if settings.alter_history:
|
||
diff --git a/thefuck/types.py b/thefuck/types.py
|
||
index dcd99b6..81a7d1b 100644
|
||
--- a/thefuck/types.py
|
||
+++ b/thefuck/types.py
|
||
@@ -282,5 +282,5 @@ class CorrectedCommand(object):
|
||
compatibility_call(self.side_effect, old_cmd, self.script)
|
||
# This depends on correct setting of PYTHONIOENCODING by the alias:
|
||
logs.debug(u'PYTHONIOENCODING: {}'.format(
|
||
- os.environ.get('PYTHONIOENCODING', '>-not-set-<')))
|
||
+ os.environ.get('PYTHONIOENCODING', '!!not-set!!')))
|
||
print(self.script)
|