diff --git a/plug.vim b/plug.vim index 7819a5a..3a227e2 100644 --- a/plug.vim +++ b/plug.vim @@ -868,7 +868,7 @@ function! s:checkout(spec) let output = s:system('git rev-parse HEAD', a:spec.dir) if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) let output = s:system( - \ 'git fetch --depth 999999 && git checkout '.s:esc(sha), a:spec.dir) + \ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir) endif return output endfunction @@ -1067,11 +1067,11 @@ function! s:update_finish() endif endif call s:log4(name, 'Checking out '.tag) - let out = s:system('git checkout -q '.s:esc(tag).' 2>&1', spec.dir) + let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir) else let branch = s:esc(get(spec, 'branch', 'master')) call s:log4(name, 'Merging origin/'.branch) - let out = s:system('git checkout -q '.branch.' 2>&1' + let out = s:system('git checkout -q '.branch.' -- 2>&1' \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only origin/'.branch.' 2>&1')), spec.dir) endif if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && @@ -2390,7 +2390,7 @@ function! s:revert() return endif - call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch), g:plugs[name].dir) + call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir) setlocal modifiable normal! "_dap setlocal nomodifiable diff --git a/test/regressions.vader b/test/regressions.vader index 3f7d0b0..2b76693 100644 --- a/test/regressions.vader +++ b/test/regressions.vader @@ -341,3 +341,16 @@ Execute (#593 Add plugin to &rtp before running post-update hook with : prefix): call plug#end() PlugInstall! AssertEqual ['a', 'b'], g:bar + +********************************************************************** +Execute (#602 Confusion with branch name and path name): + call plug#begin() + Plug expand('file:////tmp/vim-plug-test/new-branch'), { 'branch': 'plugin' } + call plug#end() + PlugUpdate + call PlugStatusSorted() + +Expect: + - new-branch: OK + Finished. 0 error(s). + [=] diff --git a/test/run b/test/run index ff50936..133859c 100755 --- a/test/run +++ b/test/run @@ -95,6 +95,8 @@ DOC echo 'let g:foo = 1' > plugin/foo.vim git add plugin/foo.vim git commit -m initial + git checkout -b plugin + git checkout master cd "$BASE" } diff --git a/test/workflow.vader b/test/workflow.vader index 0cc28ae..721b8db 100644 --- a/test/workflow.vader +++ b/test/workflow.vader @@ -1473,7 +1473,7 @@ Execute (Commit hash support): PlugUpdate Log getline(1, '$') AssertEqual 'x goyo.vim:', getline(5) - AssertEqual ' error: pathspec ''ffffffff'' did not match any file(s) known to git.', getline(6) + AssertEqual ' fatal: invalid reference: ffffffff', getline(6) AssertEqual 0, stridx(getline(7), '- vim-emoji: HEAD is now at 9db7fcf...') let hash = system(printf('cd %s && git rev-parse HEAD', g:plugs['vim-emoji'].dir))[:-2]