darrenburns / dunk

Prettier git diffs in the terminal 🎨
758 stars 15 forks source link

Fails when a project has a dirty submodule #19

Open vilhok opened 1 year ago

vilhok commented 1 year ago

Here is a minimum example the causes the crash:

cd /tmp
mkdir dunk-submodule-fail
cd dunk-submodule-fail
git init
mkdir this-is-submodule
cd this-is-submodule
git init 
echo "test" > myfile.txt && git add --all && git commit -m "initial-sub"
cd ..
# git submodule add ./this-is-submodule # not actually needed.
git add --all && git commit -m "initial-parent"

# have an uncommitted changed file in the submodule
echo "breaking change" > this-is-submodule/myfile.txt

git diff | dunk  

traceback

Traceback (most recent call last):
  File "/home/user/.local/bin/dunk", line 8, in <module>
    sys.exit(main())
  File "/home/user/.local/pipx/venvs/dunk/lib/python3.10/site-packages/dunk/dunk.py", line 119, in main
    target_code = target_file.read_text()
  File "/usr/lib/python3.10/pathlib.py", line 1134, in read_text
    with self.open(mode='r', encoding=encoding, errors=errors) as f:
  File "/usr/lib/python3.10/pathlib.py", line 1119, in open
    return self._accessor.open(self, mode, buffering, encoding, errors,
IsADirectoryError: [Errno 21] Is a directory: '/tmp/dunk-submodule-fail/this-is-submodule'