Skip to content

Commit

Permalink
Append -- to git checkout commands
Browse files Browse the repository at this point in the history
Checking out a branch or tag may not succeed if there is a path entry
with the same name. This commit appends -- to git checkout commands to
clarify that we're not referring to a file or a directory.

Close junegunn#602
  • Loading branch information
junegunn committed Feb 25, 2017
1 parent e3252aa commit 769192d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
8 changes: 4 additions & 4 deletions plug.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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') &&
Expand Down Expand Up @@ -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
Expand Down
13 changes: 13 additions & 0 deletions test/regressions.vader
Original file line number Diff line number Diff line change
Expand Up @@ -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).
[=]
2 changes: 2 additions & 0 deletions test/run
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
2 changes: 1 addition & 1 deletion test/workflow.vader
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down

0 comments on commit 769192d

Please sign in to comment.