git-gutter-plus icon indicating copy to clipboard operation
git-gutter-plus copied to clipboard

Handling of symlinked files

Open dhaley opened this issue 10 years ago • 9 comments

Very similar to issue #1, I am getting a stack trace when accessing a symlink (in a git repo) that references a file in another git repo.

This happens with the latest HEAD.

https://gist.github.com/dhaley/9691309

dhaley avatar Mar 21 '14 17:03 dhaley

Could you create a minimal scenario where the bug can be reproduced? (Or maybe a shell script that creates such a scenario.)

nonsequitur avatar Mar 21 '14 17:03 nonsequitur

Here's the script to create the two repos:

https://gist.github.com/dhaley/9692370

then:

/Applications/Emacs.app/Contents/MacOS/Emacs -Q &

(add-to-list 'load-path "~/.emacs.d/site-lisp/git-gutter-plus") (add-to-list 'load-path "~/.emacs.d/site-lisp/git-gutter-fringe-plus") (add-to-list 'load-path "~/.emacs.d/site-lisp/git-modes") (add-to-list 'load-path "~/.emacs.d/site-lisp/fringe-helper") (require 'git-gutter+) (require 'git-commit-mode) (require 'fringe-helper) (require 'git-gutter-fringe+)

(global-git-gutter+-mode t)

M-x toggle-debug-on-error

(find-file "/tmp/repo2/cu.aliases.drushrc.php")

Then make changes to cu.aliases.drushrc.php and a save should trigger the backtrace.

Also all libraries mentioned are the latest HEAD from github.

dhaley avatar Mar 21 '14 18:03 dhaley

For now, I've disabled git-gutter+ on symlinked files.

Transparently forwarding all git-gutter+ operations to the linked file would require respecting the foreign file path and directory in all git calls and passing them to all (temp) buffers created by git-gutter+ that might depend on it. I'd like to avoid all the complexities involved.

To all users: Would such a link forwarding feature be a huge help? Then please let me know and I'll give it another thought.

Another possible solution: An option to automatically open the original file when global-git-gutter+-mode encounters a symlinked file. Would that be acceptable?

nonsequitur avatar Jun 04 '15 12:06 nonsequitur

To all users: Would such a link forwarding feature be a huge help? Then please let me know and I'll give it another thought.

Count me in. My life is full of configuration files that are checked into git and that live in /etc only by virtue of a symbolic link.

domq avatar Jun 04 '15 13:06 domq

Hi,

i think opening the original would be the best choice. I've recently switched to spacemacs with has some git-gutter as well, and it asks when it finds a symbolic link..

buster avatar Jun 04 '15 13:06 buster

it asks when it finds a symbolic link

Could you check where this is implemented? Searching the spacemacs and the original emacs-git-gutter repos for symlink or truename gave no relevant hits.

nonsequitur avatar Jun 04 '15 13:06 nonsequitur

It appears to be what is mentioned here: http://stackoverflow.com/questions/15390178/emacs-and-symbolic-links which seems to be some standard emacs configuration: https://www.gnu.org/software/emacs/manual/html_node/emacs/General-VC-Options.html

Atleast in spacemacs i have not seen any problems with symlinks, but i am not sure if this is truely related to the git-gutter+ problem (as far as i can see, spacemacs uses plain git-gutter).

buster avatar Jun 04 '15 13:06 buster

Thanks! So this is a feature of vc.el. The link resolution is offered when vc-follow-symlinks is non-nil. (And when the symlink itself isn't inside a Git repo.)

@domq: Does this help in your case?

@buster

spacemacs uses plain git-gutter

git-gutter just silently fails on symlinked files. (No diffs are shown.)

nonsequitur avatar Jun 04 '15 14:06 nonsequitur

vc-follow-symlinks does help, but only in the case where the symlink is the final component of the path. (I.e. vc-follow-symlinks seems to behave like file-chase-links rather than file-truename).

Maybe git-gutter+ could change to rely more on vc and vc-git's code to deal with paths, symlinks and tramp? In my current workflow, all vc commands work fine even in the "worst case" (remote file w/ symlinks in directory part of their paths).

domq avatar Jun 09 '15 07:06 domq