From 45d5155c43d00ae41806dd886168e1e1201b900e Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 15:22:49 -0500 Subject: [PATCH 1/8] let options override --- autoload/vundle/config.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index 0e32183..53c772c 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -23,7 +23,7 @@ func! vundle#config#require(bundles) abort endf func! vundle#config#init_bundle(name, opts) - let opts = extend(s:parse_options(a:opts), s:parse_name(substitute(a:name,"['".'"]\+','','g'))) + let opts = extend(s:parse_options(a:opts), s:parse_name(substitute(a:name,"['".'"]\+','','g')), 'keep') return extend(opts, copy(s:bundle)) endf From 5b4e238ad9d47dce5d209add59f786bafd1e8eed Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 15:39:02 -0500 Subject: [PATCH 2/8] Bundle cmd may have 2 arguments only - uri/name [revision] - option_hash ie: Bundle 'gmarik/vundle master', {'rtp':'test/'} --- autoload/vundle/config.vim | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index 53c772c..a1420a6 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -28,14 +28,12 @@ func! vundle#config#init_bundle(name, opts) endf func! s:parse_options(opts) - " TODO: improve this - if len(a:opts) != 1 | return {} | endif - - if type(a:opts[0]) == type({}) + " ignore everything except first argument + " which supposed to be option hash + if len(a:opts) == 1 && type(a:opts[0]) == type({}) return a:opts[0] - else - return {'rev': a:opts[0]} endif + return {} endf func! s:parse_name(arg) From 2d0909b816dccd67033a97745926e5ea60f800d6 Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 15:42:31 -0500 Subject: [PATCH 3/8] name may have revision specified - as SHA1/symbolic-ref/tag separated by space Ie Bundle 'gmarik/vundle test' or Bundle 'gmarik/vundle 5b4e238' --- autoload/vundle/config.vim | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index a1420a6..8362209 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -37,7 +37,15 @@ func! s:parse_options(opts) endf func! s:parse_name(arg) - let arg = a:arg + let args = split(a:arg, '\s\+') + let arg = args[0] + let opts = {} + + if len(args) == 2 + let revision = args[1] + let opts = {'v': revision} + end + if arg =~? '^\s*\(gh\|github\):\S\+' \ || arg =~? '^[a-z0-9][a-z0-9-]*/[^/]\+$' let uri = 'https://github.com/'.split(arg, ':')[-1] @@ -51,7 +59,7 @@ func! s:parse_name(arg) let name = arg let uri = 'https://github.com/vim-scripts/'.name.'.git' endif - return {'name': name, 'uri': uri } + return extend(opts, {'name': name, 'uri': uri }) endf func! s:rtp_rm_a() From a0124f066af13dbdeba77f56b3ed910ff5f5df92 Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 17:27:53 -0500 Subject: [PATCH 4/8] use Vim's lcd to change directories - and get rid of shell equivalents - profit: portable code (no MSwin specific stuff) --- autoload/vundle/installer.vim | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index a226092..8966a63 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -69,14 +69,11 @@ endf func! s:sync(bang, bundle) abort let git_dir = expand(a:bundle.path().'/.git/') + if isdirectory(git_dir) if !(a:bang) | return [0, 'skip'] | endif - let cmd = 'cd '.shellescape(a:bundle.path()).' && git pull' - - if (has('win32') || has('win64')) - let cmd = substitute(cmd, '^cd ','cd /d ','') " add /d switch to change drives - let cmd = '"'.cmd.'"' " enclose in quotes - endif + lcd `=a:bundle.path()` + let cmd = 'git pull' else let cmd = 'git clone '.a:bundle.uri.' '.shellescape(a:bundle.path()) endif @@ -87,6 +84,7 @@ func! s:sync(bang, bundle) abort echohl Error | echo 'Error installing "'.a:bundle.name.'". Failed cmd: '.cmd | echohl None return [v:shell_error, 'error'] end + return [0, 'ok'] endf @@ -94,7 +92,13 @@ func! s:install(bang, bundles) abort let [installed, errors] = [[],[]] for b in a:bundles - let [err_code, status] = s:sync(a:bang, b) + let cwd = getcwd() + try + let [err_code, status] = s:sync(a:bang, b) + finally + lcd `=cwd` + endtry + if 0 == err_code if 'ok' == status | call add(installed, b) | endif else From 49e4ca7bb772c210e36d9b0d087a4d1e662bbaec Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 18:43:02 -0500 Subject: [PATCH 5/8] do not override default opts - modify instead --- autoload/vundle/config.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index 8362209..f94662a 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -43,7 +43,7 @@ func! s:parse_name(arg) if len(args) == 2 let revision = args[1] - let opts = {'v': revision} + let opts['v'] = revision end if arg =~? '^\s*\(gh\|github\):\S\+' From 0925acd8223456098912225af410ebbc7638f5da Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 18:43:46 -0500 Subject: [PATCH 6/8] display Bundle's spec instead just name - disambiguation - also adds support for revision numbers --- autoload/vundle/config.vim | 2 +- autoload/vundle/installer.vim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index f94662a..54a9cd0 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -39,7 +39,7 @@ endf func! s:parse_name(arg) let args = split(a:arg, '\s\+') let arg = args[0] - let opts = {} + let opts = {'spec': a:arg} if len(args) == 2 let revision = args[1] diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index 8966a63..1ec1c10 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -11,7 +11,7 @@ func! vundle#installer#install(bang, ...) abort let msg = 'No new bundles were installed' if (!empty(installed)) - let msg = "Installed bundles:\n".join(map(installed, 'v:val.name'),"\n") + let msg = "Installed bundles:\n".join(map(installed, 'v:val.spec'),"\n") endif call s:log(msg) From 0debd50db3e24427fed4f82eabcf61938ed035f1 Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 18:46:31 -0500 Subject: [PATCH 7/8] when pulling use remote uri; also merge defaults --- autoload/vundle/installer.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index 1ec1c10..f724ea2 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -73,7 +73,7 @@ func! s:sync(bang, bundle) abort if isdirectory(git_dir) if !(a:bang) | return [0, 'skip'] | endif lcd `=a:bundle.path()` - let cmd = 'git pull' + let cmd = 'git pull '.a:bundle.uri.' master:master' else let cmd = 'git clone '.a:bundle.uri.' '.shellescape(a:bundle.path()) endif From 191de1ffe7330bf84310caa3cd9d733e097a9304 Mon Sep 17 00:00:00 2001 From: gmarik Date: Sat, 23 Jul 2011 18:47:25 -0500 Subject: [PATCH 8/8] support checking out specified revision - master by default --- autoload/vundle/installer.vim | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index f724ea2..7efcc2b 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -85,6 +85,24 @@ func! s:sync(bang, bundle) abort return [v:shell_error, 'error'] end + " checkout revision + " master by default + let revision = 'master' + + if has_key(a:bundle, 'v') && !empty(a:bundle['v']) + let revision = a:bundle['v'] + end + + lcd `=a:bundle.path()` + let cmd = 'git checkout '.revision + + silent exec '!'.cmd + + if 0 != v:shell_error + echohl Error | echo 'Error checking out "'.a:bundle.name.' '.revision.'". Failed cmd: '.cmd | echohl None + return [v:shell_error, 'error'] + end + return [0, 'ok'] endf