mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 20:50:04 +08:00
50 lines
1.4 KiB
VimL
50 lines
1.4 KiB
VimL
let s:Git = vital#gina#import('Git')
|
|
let s:Path = vital#gina#import('System.Filepath')
|
|
let s:Store = vital#gina#import('System.Store')
|
|
|
|
|
|
function! gina#core#repo#abspath(git, expr) abort
|
|
return gina#core#path#abspath(a:expr, a:git.worktree)
|
|
endfunction
|
|
|
|
function! gina#core#repo#relpath(git, expr) abort
|
|
let path = gina#core#path#expand(a:expr)
|
|
if s:Path.is_relative(s:Path.realpath(path))
|
|
return path
|
|
endif
|
|
let path = gina#core#path#relpath(path, a:git.worktree)
|
|
if path ==# path && path !=# resolve(path)
|
|
return gina#core#path#relpath(resolve(path), a:git.worktree)
|
|
endif
|
|
return path
|
|
endfunction
|
|
|
|
function! gina#core#repo#config(git) abort
|
|
let slug = eval(s:Store.get_slug_expr())
|
|
let store = s:Store.of(s:Git.resolve(a:git, 'config'))
|
|
let config = store.get(slug, {})
|
|
if !empty(config)
|
|
return config
|
|
endif
|
|
let result = gina#process#call(a:git, ['config', '--list'])
|
|
if result.status
|
|
throw gina#process#errormsg(result)
|
|
endif
|
|
let config = {}
|
|
for record in filter(copy(result.stdout), '!empty(v:val)')
|
|
call s:extend_config(config, record)
|
|
endfor
|
|
call store.set(slug, config)
|
|
return config
|
|
endfunction
|
|
|
|
|
|
" Private --------------------------------------------------------------------
|
|
function! s:extend_config(config, record) abort
|
|
let m = matchlist(a:record, '^\(.\+\)=\(.*\)$')
|
|
if empty(m)
|
|
return
|
|
endif
|
|
let a:config[tolower(m[1])] = m[2]
|
|
endfunction
|