" Location: autoload/fugitive.vim " Maintainer: Tim Pope if exists('g:autoloaded_fugitive') finish endif let g:autoloaded_fugitive = 1 if !exists('g:fugitive_git_executable') let g:fugitive_git_executable = 'git' endif " Section: Utility function! s:function(name) abort return function(substitute(a:name,'^s:',matchstr(expand(''), '\d\+_'),'')) endfunction function! s:sub(str,pat,rep) abort return substitute(a:str,'\v\C'.a:pat,a:rep,'') endfunction function! s:gsub(str,pat,rep) abort return substitute(a:str,'\v\C'.a:pat,a:rep,'g') endfunction function! s:Uniq(list) abort let i = 0 let seen = {} while i < len(a:list) let str = string(a:list[i]) if has_key(seen, str) call remove(a:list, i) else let seen[str] = 1 let i += 1 endif endwhile return a:list endfunction function! s:winshell() abort return has('win32') && &shellcmdflag !~# '^-' endfunction function! s:shellesc(arg) abort if a:arg =~ '^[A-Za-z0-9_/.-]\+$' return a:arg elseif s:winshell() return '"'.s:gsub(s:gsub(a:arg, '"', '""'), '\%', '"%"').'"' else return shellescape(a:arg) endif endfunction let s:fnameescape = " \t\n*?[{`$\\%#'\"|!<" function! s:fnameescape(file) abort if exists('*fnameescape') return fnameescape(a:file) else return escape(a:file, s:fnameescape) endif endfunction function! s:throw(string) abort let v:errmsg = 'fugitive: '.a:string throw v:errmsg endfunction function! s:warn(str) abort echohl WarningMsg echomsg a:str echohl None let v:warningmsg = a:str endfunction function! s:Mods(mods, ...) abort let mods = a:mods ==# '' || empty(a:mods) ? '' : a:mods . ' ' if a:0 && mods !~# 'aboveleft\|belowright\|leftabove\|rightbelow\|topleft\|botright\|tab' let mods = a:1 . ' ' . mods endif return mods endfunction function! s:Slash(path) abort if exists('+shellslash') return tr(a:path, '\', '/') else return a:path endif endfunction function! s:PlatformSlash(path) abort if exists('+shellslash') && !&shellslash return tr(a:path, '/', '\') else return a:path endif endfunction function! s:Resolve(path) abort let path = resolve(a:path) if has('win32') let path = s:PlatformSlash(fnamemodify(fnamemodify(path, ':h'), ':p') . fnamemodify(path, ':t')) endif return path endfunction function! s:cpath(path, ...) abort if exists('+fileignorecase') && &fileignorecase let path = s:PlatformSlash(tolower(a:path)) else let path = s:PlatformSlash(a:path) endif return a:0 ? path ==# s:cpath(a:1) : path endfunction function! s:Cd(...) abort let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd' : exists(':tcd') && haslocaldir(-1) ? 'tcd' : 'cd' if !a:0 return cd endif let cwd = getcwd() if s:cpath(cwd, a:1) return '' endif exe cd s:fnameescape(a:1) return cd . ' ' . s:fnameescape(cwd) endfunction let s:executables = {} function! s:executable(binary) abort if !has_key(s:executables, a:binary) let s:executables[a:binary] = executable(a:binary) endif return s:executables[a:binary] endfunction function! s:map(mode, lhs, rhs, ...) abort let flags = (a:0 ? a:1 : '') . (a:rhs =~# '' ? '' : '