Skip to content

master and symlinks #69

@simmel

Description

@simmel

When using a symlink in the repo dotfiles thinks that it should follow the symlink and dotfiles considers all files in the symlink target.

One of the strengths of the old dotfiles version is that it can handle symlinks and just add the symlink not all files IMO.

sarena:~$ env | grep DOTFILES
DOTFILES_REPO=/tmp/dotfiles-repo
DOTFILES_DOT=0
sarena:~$ tree -a /tmp/dotfiles-repo -I .git
/tmp/dotfiles-repo
└── .config
    └── nvim -> /home/simmel/.vim

2 directories, 0 files
sarena:~$ dotfiles status
E .config/nvim/.netrwhist
? .config/nvim/autoload/pathogen.vim
? .config/nvim/bundle/DetectIndent/doc/detectindent.txt
E .config/nvim/bundle/DetectIndent/doc/tags
? .config/nvim/bundle/DetectIndent/plugin/detectindent.vim
? .config/nvim/bundle/gnupg/plugin/gnupg.vim
? .config/nvim/bundle/logstash/LICENSE
? .config/nvim/bundle/logstash/ftdetect/logstash.vim
? .config/nvim/bundle/logstash/syntax/logstash.vim
? .config/nvim/bundle/matchit/doc/matchit.txt
E .config/nvim/bundle/matchit/doc/tags
? .config/nvim/bundle/matchit/plugin/matchit.vim
? .config/nvim/bundle/openssl/plugin/openssl.vim
E .config/nvim/bundle/rcs/doc/rcs.txt
E .config/nvim/bundle/rcs/doc/tags
? .config/nvim/bundle/rcs/plugin/rcs.vim
? .config/nvim/bundle/rust.vim/LICENSE-APACHE
? .config/nvim/bundle/rust.vim/LICENSE-MIT
? .config/nvim/bundle/rust.vim/after/syntax/rust.vim
? .config/nvim/bundle/rust.vim/autoload/cargo.vim
? .config/nvim/bundle/rust.vim/autoload/rust.vim
? .config/nvim/bundle/rust.vim/autoload/rustfmt.vim
? .config/nvim/bundle/rust.vim/compiler/cargo.vim
? .config/nvim/bundle/rust.vim/compiler/rustc.vim
? .config/nvim/bundle/rust.vim/doc/rust.txt
E .config/nvim/bundle/rust.vim/doc/tags
? .config/nvim/bundle/rust.vim/ftdetect/rust.vim
? .config/nvim/bundle/rust.vim/ftplugin/rust.vim
? .config/nvim/bundle/rust.vim/indent/rust.vim
? .config/nvim/bundle/rust.vim/plugin/rust.vim
? .config/nvim/bundle/rust.vim/syntax/rust.vim
? .config/nvim/bundle/rust.vim/syntax_checkers/rust/cargo.vim
? .config/nvim/bundle/rust.vim/syntax_checkers/rust/rustc.vim
? .config/nvim/bundle/surround/doc/surround.txt
E .config/nvim/bundle/surround/doc/tags
? .config/nvim/bundle/surround/plugin/surround.vim
? .config/nvim/bundle/tcomment_vim/CHANGES.TXT
? .config/nvim/bundle/tcomment_vim/addon-info.json
? .config/nvim/bundle/tcomment_vim/autoload/tcomment.vim
E .config/nvim/bundle/tcomment_vim/doc/tags
? .config/nvim/bundle/tcomment_vim/doc/tcomment.txt
? .config/nvim/bundle/tcomment_vim/plugin/tcomment.vim
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30.vim
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30_sel=exclusive.vim
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30_sel=inclusive.vim
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30_test.c
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30_test_1.c
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30_test_2.c
? .config/nvim/bundle/tcomment_vim/spec/tcomment/issue30_test_3.c
? .config/nvim/bundle/vim-json/ftdetect/json.vim
? .config/nvim/bundle/vim-json/ftplugin/json.vim
? .config/nvim/bundle/vim-json/indent/json.vim
? .config/nvim/bundle/vim-json/json-test.json
? .config/nvim/bundle/vim-json/jsonp-test.jsonp
? .config/nvim/bundle/vim-json/readme.md
? .config/nvim/bundle/vim-json/syntax/json.vim
? .config/nvim/bundle/vim-makeshift/doc/makeshift.txt
E .config/nvim/bundle/vim-makeshift/doc/tags
? .config/nvim/bundle/vim-makeshift/plugin/makeshift.vim
? .config/nvim/bundle/vim-pastie/doc/pastie.txt
E .config/nvim/bundle/vim-pastie/doc/tags
? .config/nvim/bundle/vim-pastie/plugin/pastie.vim
E .config/nvim/bundle/vim-ptpb/plugin/ptpb.vim
? .config/nvim/bundle/vim-tmux/CHANGELOG.md
? .config/nvim/bundle/vim-tmux/autoload/tmux.vim
? .config/nvim/bundle/vim-tmux/compiler/tmux.vim
? .config/nvim/bundle/vim-tmux/doc/tmux.vim
? .config/nvim/bundle/vim-tmux/ftdetect/tmux.vim
? .config/nvim/bundle/vim-tmux/ftplugin/tmux.vim
? .config/nvim/bundle/vim-tmux/indent/tmux.vim
? .config/nvim/bundle/vim-tmux/syntax/tmux.vim
? .config/nvim/bundle/vimclojure/autoload/vimclojure.vim
? .config/nvim/bundle/vimclojure/autoload/vimclojure/util.vim
? .config/nvim/bundle/vimclojure/bin/clj
? .config/nvim/bundle/vimclojure/bin/clj.bat
? .config/nvim/bundle/vimclojure/bin/ng-server
? .config/nvim/bundle/vimclojure/bin/ng-server.bat
? .config/nvim/bundle/vimclojure/doc/LICENSE.txt
? .config/nvim/bundle/vimclojure/doc/clojure.txt
E .config/nvim/bundle/vimclojure/doc/tags
? .config/nvim/bundle/vimclojure/ftdetect/clojure.vim
? .config/nvim/bundle/vimclojure/ftplugin/clojure.vim
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.core.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.data.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.inspector.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.java.browse.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.java.io.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.java.javadoc.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.java.shell.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.main.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.pprint.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.repl.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.set.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.stacktrace.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.string.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.template.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.test.junit.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.test.tap.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.test.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.walk.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.xml.txt
? .config/nvim/bundle/vimclojure/ftplugin/clojure/completions-clojure.zip.txt
? .config/nvim/bundle/vimclojure/indent/clojure.vim
? .config/nvim/bundle/vimclojure/plugin/clojure.vim
? .config/nvim/bundle/vimclojure/syntax/clojure.vim
? .config/nvim/init.vim
sarena:~$

Likewise using add on a link:

sarena:~$ ln -s ~/.vim ~/.config/nvim
sarena:~$ dotfiles add ~/.config/nvim
Traceback (most recent call last):
  File "/home/simmel/.local/lib/python3.5/site-packages/py/_error.py", line 66, in checked_call
    return func(*args, **kwargs)
FileExistsError: [Errno 17] File exists: '../../../../../../../home/simmel/code/code/config/.config/nvim/bundle/DetectIndent/doc/tags' -> '/tmp/dotfiles-repo/.config/nvim/bundle/DetectIndent/doc/tags'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/simmel/.local/bin/dotfiles", line 11, in <module>
    load_entry_point('dotfiles==0.9.dev0', 'console_scripts', 'dotfiles')()
  File "/home/simmel/.local/lib/python3.5/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/simmel/.local/lib/python3.5/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/simmel/.local/lib/python3.5/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/simmel/.local/lib/python3.5/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/simmel/.local/lib/python3.5/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/simmel/.local/lib/python3.5/site-packages/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/home/simmel/.local/lib/python3.5/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/simmel/.local/lib/python3.5/site-packages/dotfiles/cli.py", line 65, in add
    perform('add', files, repo, debug)
  File "/home/simmel/.local/lib/python3.5/site-packages/dotfiles/cli.py", line 29, in perform
    getattr(dotfile, method)(debug)
  File "/home/simmel/.local/lib/python3.5/site-packages/dotfiles/dotfile.py", line 99, in add
    self._link(debug)
  File "/home/simmel/.local/lib/python3.5/site-packages/dotfiles/dotfile.py", line 51, in _link
    source.mksymlinkto(target, absolute=0)
  File "/home/simmel/.local/lib/python3.5/site-packages/py/_path/local.py", line 90, in mksymlinkto
    py.error.checked_call(os.symlink, target, self.strpath)
  File "/home/simmel/.local/lib/python3.5/site-packages/py/_error.py", line 86, in checked_call
    raise cls("%s%r" % (func.__name__, args))
py.error.EEXIST: [File exists]: symlink('../../../../../../../home/simmel/code/code/config/.config/nvim/bundle/DetectIndent/doc/tags', '/tmp/dotfiles-repo/.config/nvim/bundle/DetectIndent/doc/tags')

makes dotfiles go haywire.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions