Closes#15705
When opening a file from the terminal, if the file path is relative, we
attempt to guess all possible paths where the file could be. This
involves generating paths for each worktree, the current terminal
directory, etc. For example, if we have two worktrees, `dotfiles` and
`example`, and `foo.txt` in `example/a`, the generated paths might look
like this:
- `/home/tims/dotfiles/../example/a/foo.txt` from the `dotfiles`
worktree
- `/home/tims/example/../example/a/foo.txt` from the `example` worktree
- `/home/tims/example/a/foo.txt` from the current terminal directory
(This is already canonicalized)
Note that there should only be a single path, but multiple paths are
created due to missing canonicalization.
Later, when opening these paths, the worktree prefix is stripped, and
the remaining path is used to open the file in its respective worktree.
As a result, the above three paths would resolve like this:
- `../example/a/foo.txt` as the filename in the `dotfiles` worktree
(Ghost file)
- `../example/a/foo.txt` as the filename in the `example` worktree
(Ghost file)
- `foo.txt` as the filename in the `a` directory of the `example`
worktree (This opens the file)
This PR fixes the issue by canonicalizing these paths before adding them
to the HashSet.
Before:

After:

Release Notes:
- Fixed ghost files appearing in the project panel when clicking
relative paths in the terminal.