From 6575bd65b1b6bc780e1d2913cfdbcf75d7f7b64d Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 8 Oct 2016 23:32:48 +0900 Subject: [PATCH] Improve git URI validation Close #530 --- plug.vim | 12 +++++++++--- test/test.vader | 3 ++- test/workflow.vader | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/plug.vim b/plug.vim index 2d22299..1da64a9 100644 --- a/plug.vim +++ b/plug.vim @@ -1873,9 +1873,15 @@ function! s:progress_bar(line, bar, total) endfunction function! s:compare_git_uri(a, b) - let a = substitute(a:a, 'git:\{1,2}@', '', '') - let b = substitute(a:b, 'git:\{1,2}@', '', '') - return a ==# b + " See `git help clone' + " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] + " [git@] github.com[:port] : junegunn/vim-plug [.git] + " file:// / junegunn/vim-plug [/] + " / junegunn/vim-plug [/] + let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' + let ma = matchlist(a:a, pat) + let mb = matchlist(a:b, pat) + return ma[1:2] ==# mb[1:2] endfunction function! s:format_message(bullet, name, message) diff --git a/test/test.vader b/test/test.vader index 7a73032..a52b8a0 100644 --- a/test/test.vader +++ b/test/test.vader @@ -15,7 +15,8 @@ Execute (Initialize test environment): " Temporarily patch plug.vim call system('cp "$PLUG_SRC" "$PLUG_TMP"') call writefile(extend(readfile($PLUG_TMP), - \ ['function! ResetPlug()', 'let s:loaded = {}', 'endfunction']), $PLUG_TMP) + \ ['function! ResetPlug()', 'let s:loaded = {}', 'endfunction', + \ 'function! CompareURI(a, b)', 'return s:compare_git_uri(a:a, a:b)', 'endfunction']), $PLUG_TMP) set t_Co=256 colo default diff --git a/test/workflow.vader b/test/workflow.vader index 274927b..bb062dc 100644 --- a/test/workflow.vader +++ b/test/workflow.vader @@ -1493,3 +1493,30 @@ Execute (#427 - Tag option with wildcard (requires git 1.9.2 or above)): q AssertEqual '2.9.7', GitTag('vim-easy-align') endif + +Execute (#530 - Comparison of compatible git URIs): + " .git suffix + Assert CompareURI('https://github.com/junegunn/vim-plug.git', 'https://github.com/junegunn/vim-plug') + + " user@ + Assert CompareURI('https://github.com/junegunn/vim-plug.git', 'https://user@github.com/junegunn/vim-plug.git') + + " git::@ + Assert CompareURI('https://github.com/junegunn/vim-plug.git', 'https://git::@github.com/junegunn/vim-plug.git') + + " https and ssh + Assert CompareURI('https://github.com/junegunn/vim-plug.git', 'git@github.com:junegunn/vim-plug.git') + + " file:// + Assert CompareURI('file:///tmp/vim-plug', '/tmp/vim-plug') + Assert CompareURI('file:///tmp/vim-plug', '/tmp/vim-plug/') + +Execute (#530 - Comparison of incompatible git URIs): + " Different hostname + Assert !CompareURI('https://github.com/junegunn/vim-plug.git', 'https://bitbucket.com/junegunn/vim-plug.git') + + " Different repository + Assert !CompareURI('https://github.com/junegunn/vim-plug.git', 'https://github.com/junegunn/emacs-plug.git') + + " Different port + Assert !CompareURI('https://github.com/junegunn/vim-plug.git', 'https://github.com:12345/junegunn/vim-plug.git')