diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index 0e02b11..abad3a8 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -18,6 +18,18 @@ func! vundle#config#bundle(arg, ...) call s:rtp_add_a() call s:rtp_add_defaults() endif + + if !exists('g:vundle_no_deps') || !g:vundle_no_deps + let deps = vundle#scripts#getdeps(bundle) + if !empty(deps) + for dependency in deps + if !has_key(g:bundle_names, dependency) + call vundle#config#bundle(dependency) + endif + endfor + endif + endif + return bundle endf diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index 472271a..c56a698 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -36,7 +36,7 @@ func! vundle#installer#new(bang, ...) abort endf -" --------------------------------------------------------------------------- +" ---------------------------------------------------------------------------dep " Iterate over all lines in a Vundle window and execute the given command for " every line. Used by the installation and cleaning functions. " @@ -456,6 +456,21 @@ func! s:sync(bang, bundle) abort return 'error' end + if !exists('g:vundle_no_deps') || !g:vundle_no_deps + let deps = vundle#scripts#getdeps(a:bundle) + if !empty(deps) + for dependency in deps + if !has_key(g:bundle_names, dependency) + let newbundle = vundle#config#bundle(dependency) + call s:log("Dependency '" . dependency . "'") + if (s:sync(a:bang, newbundle) == 'error') + return 'error' + endif + endif + endfor + endif + endif + if empty(initial_sha) return 'new' endif diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index f789762..af6c25a 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -277,4 +277,35 @@ func! s:load_scripts(bang) return eval(readfile(f, 'b')[0]) endf + +" --------------------------------------------------------------------------- +" Get the dependencies of the given bundle. +" +" bundle -- The bundle to check. (must be installed) +" return -- List of bundle names. +" --------------------------------------------------------------------------- +func! vundle#scripts#getdeps(bundle) + if filereadable(a:bundle['rtpath'] . '/addon-info.json') + let true = 1 + let false = 0 + let null = '' + let dependencyentries = get(eval(join(readfile(a:bundle['rtpath'] . '/addon-info.json'), '')), 'dependencies', {}) + let bundles_needed = [] + for dep_name in keys(dependencyentries) + if !empty(dependencyentries[dep_name]) + if get(dependencyentries[dep_name], 'type', '') == 'git' + let bundles_needed += [get(dependencyentries[dep_name], 'url', dep_name)] + else + let bundles_needed += [dep_name] + endif + else + let bundles_needed += [dep_name] + endif + endfor + return bundles_needed + else + return [] + endif +endf + " vim: set expandtab sts=2 ts=2 sw=2 tw=78 norl: diff --git a/doc/vundle.txt b/doc/vundle.txt index 81a5f66..b554361 100644 --- a/doc/vundle.txt +++ b/doc/vundle.txt @@ -12,6 +12,7 @@ 3.5. Searching Plugins |vundle-plugins-search| 3.6. Listing Plugins |vundle-plugins-list| 3.7. Cleaning Up |vundle-plugins-cleanup| + 3.8. Dependencies |vundle-plugins-dependencies| 4. Interactive Mode |vundle-interactive| 5. Key Mappings |vundle-keymappings| 6. Options |vundle-options| @@ -329,6 +330,20 @@ in your `.vimrc` but present in your bundle installation directory Automatically confirm removal of unused bundles. +3.8 DEPENDENCIES ~ + *vundle-plugins-dependencies* + +By default, Vundle automatically reads plugin dependencies from +`addon-info.json` if it is found in the root of a plugin folder. This aims to +be compatible with vim-addon-manager. + +This behavior can be disabled by adding the following line to your `.vimrc` +before the first call to Vundle: +> + let g:vundle_no_deps = 1 +< +For more information, see |vundle-options|. + ============================================================================= 4. INTERACTIVE MODE ~ *vundle-interactive* @@ -382,6 +397,12 @@ KEY | DESCRIPTION > Plugin 'sjl/gundo.vim' -> git@github.com:sjl/gundo.git +> + let g:vundle_no_deps = 1 +< + This option makes Vundle ignore any dependencies stated by a plugin, + preventing these dependencies from being installed automatically. + ============================================================================= 7. VUNDLE INTERFACE CHANGE ~ *vundle-interface-change* *:Bundle* *:BundleInstall!*