aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Odding <peter@peterodding.com>2013-04-30 23:37:17 +0200
committerPeter Odding <peter@peterodding.com>2013-04-30 23:37:17 +0200
commit1aae392a30ed478f706c2e19e15df858991adb79 (patch)
tree7340b163c8690eb24765eccebf0d0eac11b5e8f3
parentc455d6e1beae13ccf2ddee925a5f9ab2008ef125 (diff)
downloadvim-easytags-1aae392a30ed478f706c2e19e15df858991adb79.tar.gz
Don't try to use dynamic tags files for non-writable directories (issue #29)
This fixes the problem described here: https://github.com/xolox/vim-easytags/issues/29
-rw-r--r--README.md2
-rw-r--r--autoload/xolox/easytags.vim9
-rw-r--r--doc/easytags.txt5
3 files changed, 12 insertions, 4 deletions
diff --git a/README.md b/README.md
index c8af518..51b0ab4 100644
--- a/README.md
+++ b/README.md
@@ -91,7 +91,7 @@ By default `:UpdateTags` only writes to the global tags file, but it can be conf
You can change the name of the tags file, the important thing is that it's relative to your working directory or the buffer (using a leading `./`). When `g:easytags_dynamic_files` is set to 1 the easytags plug-in will write to the first existing tags file seen by Vim (based on the ['tags' option] [tags_opt]). In other words: If a project specific tags file is found it will be used, otherwise the plug-in falls back to the global tags file (or a file type specific tags file).
-If you set `g:easytags_dynamic_files` to 2 the easytags plug-in will automatically create project specific tags based on the first name in the 'tags' option. This disables the global tags file and file type specific tags files.
+If you set `g:easytags_dynamic_files` to 2 the easytags plug-in will automatically create project specific tags based on the first name in the 'tags' option. In this mode the the global tags file or file type specific tags files are only used for directories where you don't have write permissions.
The ['tags' option] [tags_opt] is reevaluated each time the plug-in runs, so which tags file is selected can differ depending on the buffer and working directory.
diff --git a/autoload/xolox/easytags.vim b/autoload/xolox/easytags.vim
index c22f1cf..adf243c 100644
--- a/autoload/xolox/easytags.vim
+++ b/autoload/xolox/easytags.vim
@@ -3,7 +3,7 @@
" Last Change: April 30, 2013
" URL: http://peterodding.com/code/vim/easytags/
-let g:xolox#easytags#version = '3.1.7'
+let g:xolox#easytags#version = '3.1.8'
call xolox#misc#compat#check('easytags', 2)
@@ -651,6 +651,13 @@ function! xolox#easytags#get_tagsfile() " {{{2
let tagsfile = get(tagfiles(), 0, '')
elseif dynamic_files == 2
let tagsfile = xolox#misc#option#eval_tags(&tags, 1)
+ let directory = fnamemodify(tagsfile, ':h')
+ if filewritable(directory) != 2
+ " If the directory of the dynamic tags file is not writable, we fall
+ " back to a file type specific tags file or the global tags file.
+ call xolox#misc#msg#warn("easytags.vim %s: Dynamic tags files enabled but %s not writable so falling back.", g:xolox#easytags#version, directory)
+ let tagsfile = ''
+ endif
endif
" Check if a file type specific tags file is useful?
if empty(tagsfile) && !empty(g:easytags_by_filetype) && index(xolox#easytags#supported_filetypes(), &ft) >= 0
diff --git a/doc/easytags.txt b/doc/easytags.txt
index a5ca306..9c8ceec 100644
--- a/doc/easytags.txt
+++ b/doc/easytags.txt
@@ -229,8 +229,9 @@ file).
If you set |g:easytags_dynamic_files| to 2 the easytags plug-in will
automatically create project specific tags based on the first name in the
-'tags' option. This disables the global tags file and file type specific tags
-files.
+'tags' option. In this mode the the global tags file or file type specific
+tags files are only used for directories where you don't have write
+permissions.
The |'tags'| option is reevaluated each time the plug-in runs, so which tags
file is selected can differ depending on the buffer and working directory.