Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _safe(fn, fallback):
try:
return fn()
except OSError:
return fallback
tf_alias = get_alias()
tf_entry_points = ['thefuck', 'fuck']
bins = [exe.name.decode('utf8') if six.PY2 else exe.name
for path in os.environ.get('PATH', '').split(os.pathsep)
for exe in _safe(lambda: list(Path(path).iterdir()), [])
if not _safe(exe.is_dir, True)
and exe.name not in tf_entry_points]
aliases = [alias.decode('utf8') if six.PY2 else alias
for alias in shell.get_aliases() if alias != tf_alias]
return bins + aliases
def get_new_command(command):
packages = get_pkgfile(command.script)
formatme = shell.and_('{} -S {}', '{}')
return [formatme.format(pacman, package, command.script)
for package in packages]
# which is recommended to be used with `alias git=hub`
# but at this point, shell aliases have already been resolved
if not is_app(command, 'git', 'hub'):
return False
# perform git aliases expansion
if 'trace: alias expansion:' in command.output:
search = re.search("trace: alias expansion: ([^ ]*) => ([^\n]*)",
command.output)
alias = search.group(1)
# by default git quotes everything, for example:
# 'commit' '--amend'
# which is surprising and does not allow to easily test for
# eg. 'git commit'
expansion = ' '.join(shell.quote(part)
for part in shell.split_command(search.group(2)))
new_script = command.script.replace(alias, expansion)
command = command.update(script=new_script)
return fn(command)
def get_new_command(command):
port = _get_used_port(command)
pid = _get_pid_by_port(port)
return shell.and_(u'kill {}'.format(pid), command.script)
def get_new_command(command):
formatme = shell.and_('git stash', '{}')
return formatme.format(command.script)
def _get_all_absolute_paths_from_history(command):
counter = Counter()
for line in get_valid_history_without_current(command):
splitted = shell.split_command(line)
for param in splitted[1:]:
if param.startswith('/') or param.startswith('~'):
if param.endswith('/'):
param = param[:-1]
counter[param] += 1
return (path for path, _ in counter.most_common(None))
def _get_previous_command():
history = shell.get_history()
if history:
return history[-1]
else:
return None
def _get_alias(known_args):
if six.PY2:
warn("The Fuck will drop Python 2 support soon, more details "
"https://github.com/nvbn/thefuck/issues/685")
alias = shell.app_alias(known_args.alias)
if known_args.enable_experimental_instant_mode:
if six.PY2:
warn("Instant mode requires Python 3")
elif not which('script'):
warn("Instant mode requires `script` app")
else:
return shell.instant_mode_alias(known_args.alias)
return alias
def get_new_command(command):
dir = shell.quote(_tar_file(command.script_parts)[1])
return shell.and_('mkdir -p {dir}', '{cmd} -C {dir}') \
.format(dir=dir, cmd=command.script)