Extract current file logic from s:GF

This commit is contained in:
Tim Pope
2015-10-06 21:45:40 -04:00
parent 1e755064e9
commit cec56ef5ff

View File

@@ -2724,7 +2724,7 @@ function! s:JumpInit() abort
endif endif
endfunction endfunction
function! s:GF(mode) abort function! s:cfile() abort
try try
let buffer = s:buffer() let buffer = s:buffer()
let myhash = buffer.sha1() let myhash = buffer.sha1()
@@ -2734,12 +2734,10 @@ function! s:GF(mode) abort
if buffer.type('tree') if buffer.type('tree')
let showtree = (getline(1) =~# '^tree ' && getline(2) == "") let showtree = (getline(1) =~# '^tree ' && getline(2) == "")
if showtree && line('.') == 1 if showtree && line('.') > 2
return "" return [buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(getline('.'),'/$','')]
elseif showtree && line('.') > 2
return s:Edit(a:mode,0,buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(getline('.'),'/$',''))
elseif getline('.') =~# '^\d\{6\} \l\{3,8\} \x\{40\}\t' elseif getline('.') =~# '^\d\{6\} \l\{3,8\} \x\{40\}\t'
return s:Edit(a:mode,0,buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(matchstr(getline('.'),'\t\zs.*'),'/$','')) return [buffer.commit().':'.s:buffer().path().(buffer.path() =~# '^$\|/$' ? '' : '/').s:sub(matchstr(getline('.'),'\t\zs.*'),'/$','')]
endif endif
elseif buffer.type('blob') elseif buffer.type('blob')
@@ -2749,7 +2747,7 @@ function! s:GF(mode) abort
catch /^fugitive:/ catch /^fugitive:/
endtry endtry
if exists('sha1') if exists('sha1')
return s:Edit(a:mode,0,ref) return [ref]
endif endif
else else
@@ -2758,29 +2756,29 @@ function! s:GF(mode) abort
if getline('.') =~# '^\d\{6\} \x\{40\} \d\t' if getline('.') =~# '^\d\{6\} \x\{40\} \d\t'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
let file = ':'.s:sub(matchstr(getline('.'),'\d\t.*'),'\t',':') let file = ':'.s:sub(matchstr(getline('.'),'\d\t.*'),'\t',':')
return s:Edit(a:mode,0,file) return [file]
elseif getline('.') =~# '^#\trenamed:.* -> ' elseif getline('.') =~# '^#\trenamed:.* -> '
let file = '/'.matchstr(getline('.'),' -> \zs.*') let file = '/'.matchstr(getline('.'),' -> \zs.*')
return s:Edit(a:mode,0,file) return [file]
elseif getline('.') =~# '^#\t[[:alpha:] ]\+: *.' elseif getline('.') =~# '^#\t[[:alpha:] ]\+: *.'
let file = '/'.matchstr(getline('.'),': *\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$') let file = '/'.matchstr(getline('.'),': *\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$')
return s:Edit(a:mode,0,file) return [file]
elseif getline('.') =~# '^#\t.' elseif getline('.') =~# '^#\t.'
let file = '/'.matchstr(getline('.'),'#\t\zs.*') let file = '/'.matchstr(getline('.'),'#\t\zs.*')
return s:Edit(a:mode,0,file) return [file]
elseif getline('.') =~# ': needs merge$' elseif getline('.') =~# ': needs merge$'
let file = '/'.matchstr(getline('.'),'.*\ze: needs merge$') let file = '/'.matchstr(getline('.'),'.*\ze: needs merge$')
return s:Edit(a:mode,0,file).'|Gdiff' return [file, 'Gdiff']
elseif getline('.') ==# '# Not currently on any branch.' elseif getline('.') ==# '# Not currently on any branch.'
return s:Edit(a:mode,0,'HEAD') return ['HEAD']
elseif getline('.') =~# '^# On branch ' elseif getline('.') =~# '^# On branch '
let file = 'refs/heads/'.getline('.')[12:] let file = 'refs/heads/'.getline('.')[12:]
return s:Edit(a:mode,0,file) return [file]
elseif getline('.') =~# "^# Your branch .*'" elseif getline('.') =~# "^# Your branch .*'"
let file = matchstr(getline('.'),"'\\zs\\S\\+\\ze'") let file = matchstr(getline('.'),"'\\zs\\S\\+\\ze'")
return s:Edit(a:mode,0,file) return [file]
endif endif
let showtree = (getline(1) =~# '^tree ' && getline(2) == "") let showtree = (getline(1) =~# '^tree ' && getline(2) == "")
@@ -2790,7 +2788,7 @@ function! s:GF(mode) abort
elseif getline('.') =~# '^commit \x\{40\}\>' elseif getline('.') =~# '^commit \x\{40\}\>'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
return s:Edit(a:mode,0,ref) return [ref]
elseif getline('.') =~# '^parent \x\{40\}\>' elseif getline('.') =~# '^parent \x\{40\}\>'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
@@ -2800,21 +2798,21 @@ function! s:GF(mode) abort
let parent += 1 let parent += 1
let line -= 1 let line -= 1
endwhile endwhile
return s:Edit(a:mode,0,ref) return [ref]
elseif getline('.') =~ '^tree \x\{40\}$' elseif getline('.') =~ '^tree \x\{40\}$'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
if s:repo().rev_parse(myhash.':') == ref if s:repo().rev_parse(myhash.':') == ref
let ref = myhash.':' let ref = myhash.':'
endif endif
return s:Edit(a:mode,0,ref) return [ref]
elseif getline('.') =~# '^object \x\{40\}$' && getline(line('.')+1) =~ '^type \%(commit\|tree\|blob\)$' elseif getline('.') =~# '^object \x\{40\}$' && getline(line('.')+1) =~ '^type \%(commit\|tree\|blob\)$'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
let type = matchstr(getline(line('.')+1),'type \zs.*') let type = matchstr(getline(line('.')+1),'type \zs.*')
elseif getline('.') =~# '^\l\{3,8\} '.myhash.'$' elseif getline('.') =~# '^\l\{3,8\} '.myhash.'$'
return '' let ref = buffer.rev()
elseif getline('.') =~# '^\l\{3,8\} \x\{40\}\>' elseif getline('.') =~# '^\l\{3,8\} \x\{40\}\>'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
@@ -2835,7 +2833,7 @@ function! s:GF(mode) abort
endwhile endwhile
let offset += matchstr(getline(lnum), type.'\zs\d\+') let offset += matchstr(getline(lnum), type.'\zs\d\+')
let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1] let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1]
let dcmd = '+'.offset.'|normal! zv' let dcmd = offset.'|normal!zv'
let dref = '' let dref = ''
elseif getline('.') =~# '^rename from ' elseif getline('.') =~# '^rename from '
@@ -2858,7 +2856,7 @@ function! s:GF(mode) abort
let ref = getline('.') let ref = getline('.')
elseif expand('<cword>') =~# '^\x\{7,40\}\>' elseif expand('<cword>') =~# '^\x\{7,40\}\>'
return s:Edit(a:mode,0,expand('<cword>')) return [expand('<cword>')]
else else
let ref = '' let ref = ''
@@ -2884,16 +2882,29 @@ function! s:GF(mode) abort
endif endif
if exists('dref') if exists('dref')
return s:Edit(a:mode,0,ref) . '|'.dcmd.' '.s:fnameescape(dref) return [ref, dcmd] + (empty(dref) ? [] : [dref])
elseif ref != "" elseif ref != ""
return s:Edit(a:mode,0,ref) return [ref]
endif endif
endif endif
return '' return []
endtry
endfunction
function! s:GF(mode) abort
try
let results = s:cfile()
catch /^fugitive:/ catch /^fugitive:/
return 'echoerr v:errmsg' return 'echoerr v:errmsg'
endtry endtry
if len(results) > 1
return s:Edit(a:mode, 0, results[0]).'|'.results[1].join(map(results[2:-1], '" ".s:fnameescape(v:val)'), '')
elseif len(results)
return s:Edit(a:mode, 0, results[0])
else
return ''
endif
endfunction endfunction
" Section: Statusline " Section: Statusline