From a2892144318bec9c0840b253e02e03cc11d46e43 Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Mon, 16 Feb 2015 21:50:34 -0500 Subject: [PATCH 1/8] Added dependency support. - Closes #7 --- autoload/vundle/config.vim | 10 ++++++++++ autoload/vundle/installer.vim | 12 ++++++++++++ autoload/vundle/scripts.vim | 15 +++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index 5ecb30b..670844c 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -18,6 +18,16 @@ func! vundle#config#bundle(arg, ...) call s:rtp_add_a() call s:rtp_add_defaults() endif + + 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 + return bundle endf diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index 614b64b..997bde4 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -443,6 +443,18 @@ func! s:sync(bang, bundle) abort return 'error' end + 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) + if (s:sync(a:bang, newbundle) == 'error') + return 'error' + endif + endif + endfor + endif + if empty(initial_sha) return 'new' endif diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index d7409a1..d665516 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -254,4 +254,19 @@ 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 !empty(glob(a:bundle['rtpath'] . '/depends.txt')) + return eval("['" . join(readfile(a:bundle['rtpath'] . '/depends.txt'), "','") . "']") + else + return [] + endif +endf + " vim: set expandtab sts=2 ts=2 sw=2 tw=78 norl: From e2795042770676656ffa7478810facae95f45e51 Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Tue, 17 Feb 2015 12:38:50 -0500 Subject: [PATCH 2/8] Changed dependency format to `addon-info.json`. - Same format as VAM --- autoload/vundle/scripts.vim | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index d665516..ec695b5 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -262,8 +262,11 @@ endf " return -- List of bundle names. " --------------------------------------------------------------------------- func! vundle#scripts#getdeps(bundle) - if !empty(glob(a:bundle['rtpath'] . '/depends.txt')) - return eval("['" . join(readfile(a:bundle['rtpath'] . '/depends.txt'), "','") . "']") + if !empty(glob(a:bundle['rtpath'] . '/addon-info.json')) + let true = 1 + let false = 0 + let null = '' + return keys(get(eval(join(readfile(a:bundle['rtpath'] . '/addon-info.json'), '')), 'dependencies', {})) else return [] endif From de66e4a0f92a98e7f8a33c3cd986c57a78ab3585 Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Wed, 18 Feb 2015 10:16:08 -0500 Subject: [PATCH 3/8] Added option to make dependencies optional. - Closes #384 - Users can set `g:vundle_no_deps` to disable dependency support if they want to. --- autoload/vundle/config.vim | 16 +++++++++------- autoload/vundle/installer.vim | 20 +++++++++++--------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index 670844c..55bf2a4 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -19,13 +19,15 @@ func! vundle#config#bundle(arg, ...) call s:rtp_add_defaults() endif - 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 + 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 diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index 997bde4..c8c4154 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -443,16 +443,18 @@ func! s:sync(bang, bundle) abort return 'error' end - 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) - if (s:sync(a:bang, newbundle) == 'error') - return 'error' + 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) + if (s:sync(a:bang, newbundle) == 'error') + return 'error' + endif endif - endif - endfor + endfor + endif endif if empty(initial_sha) From 73bdbc784e5e0bb8402702920da91b380fa2adaa Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Wed, 18 Feb 2015 15:08:31 -0500 Subject: [PATCH 4/8] Added documentation for dependency support. --- doc/vundle.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/vundle.txt b/doc/vundle.txt index 198584b..c04ba06 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| @@ -315,6 +316,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* @@ -368,6 +383,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!* From 40890790f674b39b2f3a90f22adca10a011ce006 Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Wed, 18 Feb 2015 19:56:45 -0500 Subject: [PATCH 5/8] Added support for VAM git repository URLs. --- autoload/vundle/scripts.vim | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index ec695b5..f203956 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -266,7 +266,18 @@ func! vundle#scripts#getdeps(bundle) let true = 1 let false = 0 let null = '' - return keys(get(eval(join(readfile(a:bundle['rtpath'] . '/addon-info.json'), '')), 'dependencies', {})) + let dependencyentries = get(eval(join(readfile(a:bundle['rtpath'] . '/addon-info.json'), '')), 'dependencies', {}) + let bundles_needed = [] + for information in keys(dependencyentries) + if !empty(dependencyentries[information]) + if dependencyentries[information]['type'] == 'git' + let bundles_needed += [dependencyentries[information]['url']] + endif + else + let bundles_needed += [information] + endif + endfor + return bundles_needed else return [] endif From 242f0ae933bc9935b3b8d242eb139996dbd68c9c Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Thu, 19 Feb 2015 09:52:15 -0500 Subject: [PATCH 6/8] Add log entry for each dependency. --- autoload/vundle/installer.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index c8c4154..f29efce 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -23,7 +23,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. " @@ -449,6 +449,7 @@ func! s:sync(bang, bundle) abort 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 From 1884910eab75ddf3db7662f727fd4fcc3dcf8221 Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Thu, 19 Feb 2015 09:56:41 -0500 Subject: [PATCH 7/8] Made changes suggested by @jdevera --- autoload/vundle/scripts.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index f203956..b35c40d 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -262,19 +262,19 @@ endf " return -- List of bundle names. " --------------------------------------------------------------------------- func! vundle#scripts#getdeps(bundle) - if !empty(glob(a:bundle['rtpath'] . '/addon-info.json')) + 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 information in keys(dependencyentries) - if !empty(dependencyentries[information]) - if dependencyentries[information]['type'] == 'git' - let bundles_needed += [dependencyentries[information]['url']] + for dep_name in keys(dependencyentries) + if !empty(dependencyentries[dep_name]) + if dependencyentries[dep_name]['type'] == 'git' + let bundles_needed += [dependencyentries[dep_name]['url']] endif else - let bundles_needed += [information] + let bundles_needed += [dep_name] endif endfor return bundles_needed From 4d011b7dc7691122b72f1c0ce165d42cfc5796bf Mon Sep 17 00:00:00 2001 From: Brian Nash Date: Thu, 19 Feb 2015 10:14:45 -0500 Subject: [PATCH 8/8] Fixed `addon-info.json` parser. --- autoload/vundle/scripts.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index b35c40d..33c2e4a 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -270,8 +270,10 @@ func! vundle#scripts#getdeps(bundle) let bundles_needed = [] for dep_name in keys(dependencyentries) if !empty(dependencyentries[dep_name]) - if dependencyentries[dep_name]['type'] == 'git' - let bundles_needed += [dependencyentries[dep_name]['url']] + 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]