fix: Code review fixes for multiple Python files

Fixed the following issues:

1. gitstatus.py:
   - Fixed broad IOError exception handling to catch specific OSError/FileNotFoundError
   - Fixed unused variable warning by using _ for ignored stderr

2. proxy.py:
   - Fixed os.path.expandvars usage that doesn't expand ~, changed to os.path.expanduser
   - Fixed check_output call that was incorrectly passing a file path instead of command list
   - Fixed missing space in env variable assignment for aliases

3. update_emoji.py:
   - Fixed file handle leaks by using with statements for file operations
   - Removed unnecessary .keys() call in dict iteration

4. cheatsheet.py:
   - Fixed parse() function to handle lines without '=' character
   - Fixed inefficient list comprehension using any() instead
   - Fixed shadowing of built-in 'cheatsheet' function name

5. ssh-agent.py:
   - Modernized string formatting from .format() to f-string

6. ssh-proxy.py:
   - Fixed next() call without default value that crashes when no proxy env vars set
   - Fixed missing exit code propagation from subprocess.call

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jiayang lai 2026-04-19 16:33:21 +08:00
commit cc0f7eee90
6 changed files with 103 additions and 97 deletions

View file

@ -5,10 +5,13 @@ import termcolor
import argparse
def parse(line):
left = line[0:line.find('=')].strip()
right = line[line.find('=')+1:].strip('\'"\n ')
eq_pos = line.find('=')
if eq_pos == -1:
return (line.strip(), "", "")
left = line[0:eq_pos].strip()
right = line[eq_pos+1:].strip('\'"\n ')
try:
cmd = next(part for part in right.split() if len([char for char in '=<>' if char in part])==0)
cmd = next(part for part in right.split() if not any(char in part for char in '=<>'))
except StopIteration:
cmd = right
return (left, right, cmd)
@ -16,17 +19,17 @@ def parse(line):
def cheatsheet(lines):
exps = [ parse(line) for line in lines ]
exps.sort(key=lambda exp:exp[2])
cheatsheet = {'_default': []}
cheatsheet_data = {'_default': []}
for key, group in itertools.groupby(exps, lambda exp:exp[2]):
group_list = [ item for item in group ]
if len(group_list)==1:
target_aliases = cheatsheet['_default']
target_aliases = cheatsheet_data['_default']
else:
if key not in cheatsheet:
cheatsheet[key] = []
target_aliases = cheatsheet[key]
if key not in cheatsheet_data:
cheatsheet_data[key] = []
target_aliases = cheatsheet_data[key]
target_aliases.extend(group_list)
return cheatsheet
return cheatsheet_data
def pretty_print_group(key, aliases, highlight=None, only_groupname=False):
if len(aliases) == 0: