Procházet zdrojové kódy

PlugDiff: Press enter on the name of a plugin to see the full diff

Close #1174
Junegunn Choi před 3 roky
rodič
revize
8fdabfba0b
2 změnil soubory, kde provedl 22 přidání a 6 odebrání
  1. 14 6
      plug.vim
  2. 8 0
      test/workflow.vader

+ 14 - 6
plug.vim

@@ -2621,26 +2621,34 @@ function! s:preview_commit()
 
   let sha = matchstr(getline('.'), '^  \X*\zs[0-9a-f]\{7,9}')
   if empty(sha)
-    return
+    let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
+    if empty(name)
+      return
+    endif
+    let title = 'HEAD@{1}..'
+    let command = 'git diff --no-color HEAD@{1}'
+  else
+    let title = sha
+    let command = 'git show --no-color --pretty=medium '.sha
+    let name = s:find_name(line('.'))
   endif
 
-  let name = s:find_name(line('.'))
   if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
     return
   endif
 
   if exists('g:plug_pwindow') && !s:is_preview_window_open()
     execute g:plug_pwindow
-    execute 'e' sha
+    execute 'e' title
   else
-    execute 'pedit' sha
+    execute 'pedit' title
     wincmd P
   endif
-  setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
+  setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
   let batchfile = ''
   try
     let [sh, shellcmdflag, shrd] = s:chsh(1)
-    let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
+    let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
     if s:is_win
       let [batchfile, cmd] = s:batchfile(cmd)
     endif

+ 8 - 0
test/workflow.vader

@@ -393,6 +393,14 @@ Execute (New commits on remote, PlugUpdate, then PlugDiff):
   let lnum = line('.')
   AssertEqual 3, col('.')
 
+  " Open full diff (empty)
+  execute "normal \<cr>"
+  wincmd P
+  AssertEqual 1, &previewwindow
+  AssertEqual 'git', &filetype
+  AssertEqual [''], getline(1, '$')
+  pclose
+
   " Open commit preview
   execute "normal j\<cr>"
   wincmd P