From e56d772ecf6ed75480a50b39332f720fe9af86b0 Mon Sep 17 00:00:00 2001 From: Matt Furden Date: Fri, 20 Apr 2012 12:40:16 -0700 Subject: [PATCH] Return bundle status without using git output text Instead checking for specific text in the output of the git commands, determine the status of the bundle by comparing the sha of HEAD before and after the git pull command. --- autoload/vundle/installer.vim | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index 5a1a5ee..38a2436 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -212,8 +212,12 @@ func! s:sync(bang, bundle) abort let cmd = substitute(cmd, '^cd ','cd /d ','') " add /d switch to change drives let cmd = '"'.cmd.'"' " enclose in quotes endif + + let get_current_sha = 'cd '.shellescape(a:bundle.path()).' && git rev-parse HEAD' + let initial_sha = s:system(get_current_sha)[0:15] else let cmd = 'git clone '.a:bundle.uri.' '.shellescape(a:bundle.path()) + let initial_sha = '' endif let out = s:system(cmd) @@ -226,13 +230,17 @@ func! s:sync(bang, bundle) abort return 'error' end - if out =~# 'Cloning into ' + if empty(initial_sha) return 'new' - elseif out =~# 'up-to-date' + endif + + let updated_sha = s:system(get_current_sha)[0:15] + + if initial_sha == updated_sha return 'todate' endif - call s:add_to_updated_bundles(out, a:bundle) + call add(g:updated_bundles, [initial_sha, updated_sha, a:bundle]) return 'updated' endf @@ -240,17 +248,6 @@ func! s:system(cmd) abort return system(a:cmd) endf -func! s:add_to_updated_bundles(out, bundle) abort - let git_pull_shas = matchlist(a:out, 'Updating \(\w\+\)..\(\w\+\)') - - if (empty(git_pull_shas)) | return | endif - - let initial_sha = git_pull_shas[1] - let updated_sha = git_pull_shas[2] - - call add(g:updated_bundles, [initial_sha, updated_sha, a:bundle]) -endfunc - func! s:log(str) abort let fmt = '%y%m%d %H:%M:%S' call add(g:vundle_log, '['.strftime(fmt).'] '.a:str)