mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-11 04:53:45 -05:00
Extract Git dir cache keys to local variables
Allow for a non-string representation of the repository to replace the dir parameter.
This commit is contained in:
@@ -2044,48 +2044,49 @@ endfunction
|
|||||||
let s:trees = {}
|
let s:trees = {}
|
||||||
let s:indexes = {}
|
let s:indexes = {}
|
||||||
function! s:TreeInfo(dir, commit) abort
|
function! s:TreeInfo(dir, commit) abort
|
||||||
|
let key = s:GitDir(a:dir)
|
||||||
if a:commit =~# '^:\=[0-3]$'
|
if a:commit =~# '^:\=[0-3]$'
|
||||||
let index = get(s:indexes, a:dir, [])
|
let index = get(s:indexes, key, [])
|
||||||
let newftime = getftime(fugitive#Find('.git/index', a:dir))
|
let newftime = getftime(fugitive#Find('.git/index', a:dir))
|
||||||
if get(index, 0, -1) < newftime
|
if get(index, 0, -1) < newftime
|
||||||
let [lines, exec_error] = s:LinesError([a:dir, 'ls-files', '--stage', '--'])
|
let [lines, exec_error] = s:LinesError([a:dir, 'ls-files', '--stage', '--'])
|
||||||
let s:indexes[a:dir] = [newftime, {'0': {}, '1': {}, '2': {}, '3': {}}]
|
let s:indexes[key] = [newftime, {'0': {}, '1': {}, '2': {}, '3': {}}]
|
||||||
if exec_error
|
if exec_error
|
||||||
return [{}, -1]
|
return [{}, -1]
|
||||||
endif
|
endif
|
||||||
for line in lines
|
for line in lines
|
||||||
let [info, filename] = split(line, "\t")
|
let [info, filename] = split(line, "\t")
|
||||||
let [mode, sha, stage] = split(info, '\s\+')
|
let [mode, sha, stage] = split(info, '\s\+')
|
||||||
let s:indexes[a:dir][1][stage][filename] = [newftime, mode, 'blob', sha, -2]
|
let s:indexes[key][1][stage][filename] = [newftime, mode, 'blob', sha, -2]
|
||||||
while filename =~# '/'
|
while filename =~# '/'
|
||||||
let filename = substitute(filename, '/[^/]*$', '', '')
|
let filename = substitute(filename, '/[^/]*$', '', '')
|
||||||
let s:indexes[a:dir][1][stage][filename] = [newftime, '040000', 'tree', '', 0]
|
let s:indexes[key][1][stage][filename] = [newftime, '040000', 'tree', '', 0]
|
||||||
endwhile
|
endwhile
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
return [get(s:indexes[a:dir][1], a:commit[-1:-1], {}), newftime]
|
return [get(s:indexes[key][1], a:commit[-1:-1], {}), newftime]
|
||||||
elseif a:commit =~# '^\x\{40,\}$'
|
elseif a:commit =~# '^\x\{40,\}$'
|
||||||
if !has_key(s:trees, a:dir)
|
if !has_key(s:trees, key)
|
||||||
let s:trees[a:dir] = {}
|
let s:trees[key] = {}
|
||||||
endif
|
endif
|
||||||
if !has_key(s:trees[a:dir], a:commit)
|
if !has_key(s:trees[key], a:commit)
|
||||||
let ftime = s:ChompDefault('', [a:dir, 'log', '-1', '--pretty=format:%ct', a:commit, '--'])
|
let ftime = s:ChompDefault('', [a:dir, 'log', '-1', '--pretty=format:%ct', a:commit, '--'])
|
||||||
if empty(ftime)
|
if empty(ftime)
|
||||||
let s:trees[a:dir][a:commit] = [{}, -1]
|
let s:trees[key][a:commit] = [{}, -1]
|
||||||
return s:trees[a:dir][a:commit]
|
return s:trees[key][a:commit]
|
||||||
endif
|
endif
|
||||||
let s:trees[a:dir][a:commit] = [{}, +ftime]
|
let s:trees[key][a:commit] = [{}, +ftime]
|
||||||
let [lines, exec_error] = s:LinesError([a:dir, 'ls-tree', '-rtl', '--full-name', a:commit, '--'])
|
let [lines, exec_error] = s:LinesError([a:dir, 'ls-tree', '-rtl', '--full-name', a:commit, '--'])
|
||||||
if exec_error
|
if exec_error
|
||||||
return s:trees[a:dir][a:commit]
|
return s:trees[key][a:commit]
|
||||||
endif
|
endif
|
||||||
for line in lines
|
for line in lines
|
||||||
let [info, filename] = split(line, "\t")
|
let [info, filename] = split(line, "\t")
|
||||||
let [mode, type, sha, size] = split(info, '\s\+')
|
let [mode, type, sha, size] = split(info, '\s\+')
|
||||||
let s:trees[a:dir][a:commit][0][filename] = [+ftime, mode, type, sha, +size, filename]
|
let s:trees[key][a:commit][0][filename] = [+ftime, mode, type, sha, +size, filename]
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
return s:trees[a:dir][a:commit]
|
return s:trees[key][a:commit]
|
||||||
endif
|
endif
|
||||||
return [{}, -1]
|
return [{}, -1]
|
||||||
endfunction
|
endfunction
|
||||||
@@ -2209,10 +2210,11 @@ function! s:BlobTemp(url) abort
|
|||||||
if empty(file)
|
if empty(file)
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
if !has_key(s:blobdirs, dir)
|
let key = s:GitDir(dir)
|
||||||
let s:blobdirs[dir] = tempname()
|
if !has_key(s:blobdirs, key)
|
||||||
|
let s:blobdirs[key] = tempname()
|
||||||
endif
|
endif
|
||||||
let tempfile = s:blobdirs[dir] . '/' . commit . file
|
let tempfile = s:blobdirs[key] . '/' . commit . file
|
||||||
let tempparent = fnamemodify(tempfile, ':h')
|
let tempparent = fnamemodify(tempfile, ':h')
|
||||||
if !isdirectory(tempparent)
|
if !isdirectory(tempparent)
|
||||||
call mkdir(tempparent, 'p')
|
call mkdir(tempparent, 'p')
|
||||||
|
|||||||
Reference in New Issue
Block a user