--- a/contrib/vim/hgcommand.vim
+++ b/contrib/vim/hgcommand.vim
@@ -171,7 +171,7 @@ function! s:HGCreateCommandBuffer(cmd, c
endif
let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " " . a:cmd
- echomsg "DBG :".hgCommand
+ "echomsg "DBG :".hgCommand
let hgOut = system(hgCommand)
" HACK: diff command does not return proper error codes
if v:shell_error && a:cmdName != 'hgdiff'
@@ -315,18 +315,27 @@ endfunction
function! s:HGGetStatusVars(revisionVar, branchVar, repositoryVar)
let hgBufferCheck=s:HGCurrentBufferCheck()
+ "echomsg "DBG : in HGGetStatusVars"
if hgBufferCheck == -1
return ""
endif
let fileName=bufname(hgBufferCheck)
- let realFileName = fnamemodify(s:HGResolveLink(fileName), ':t')
- let oldCwd=s:HGChangeToCurrentFileDir(fileName)
+ let fileNameWithoutLink=s:HGResolveLink(fileName)
+ let realFileName = fnamemodify(fileNameWithoutLink, ':t')
+ let oldCwd=s:HGChangeToCurrentFileDir(realFileName)
try
- ""TODO
- "if !filereadable('HG/Root')
- "return ""
- "endif
- let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " status -mardui " . fileName
+ let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " root "
+ let roottext=system(hgCommand)
+ " Suppress ending null char ! Does it work in window ?
+ let roottext=substitute(roottext,'^.*/\([^/\n\r]*\)\n\_.*$','\1','')
+ if match(getcwd()."/".fileNameWithoutLink, roottext) == -1
+ return ""
+ endif
+ let returnExpression = ""
+ if a:repositoryVar != ""
+ let returnExpression=returnExpression . " | let " . a:repositoryVar . "='" . roottext . "'"
+ endif
+ let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " status -mardui " . realFileName
let statustext=system(hgCommand)
if(v:shell_error)
return ""
@@ -339,32 +348,23 @@ function! s:HGGetStatusVars(revisionVar,
let revision="DELETED"
elseif match(statustext, '^[A]') >= 0
let revision="ADDED"
- endif
+ else
+ " The file is tracked, we can try to get is revision number
+ let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " parents -b "
+ let statustext=system(hgCommand)
+ if(v:shell_error)
+ return ""
+ endif
+ let revision=substitute(statustext, '^changeset:\s*\(\d\+\):.*\_$\_.*$', '\1', "")
- let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " parents -b "
- let statustext=system(hgCommand)
- if(v:shell_error)
- return ""
- endif
- if exists('revision')
- let returnExpression = "let " . a:revisionVar . "='" . revision . "'"
- else
- let revision=substitute(statustext, '^changeset:\s*\(\d\+\):.*\_$\_.*$', '\1', "")
- let returnExpression = "let " . a:revisionVar . "='" . revision . "'"
+ if a:branchVar != "" && match(statustext, '^\_.*\_^branch:') >= 0
+ let branch=substitute(statustext, '^\_.*\_^branch:\s*\(\S\+\)\n\_.*$', '\1', "")
+ let returnExpression=returnExpression . " | let " . a:branchVar . "='" . branch . "'"
+ endif
endif
-
- if a:branchVar != "" && match(statustext, '^\_.*\_^branch:') >= 0
- let branch=substitute(statustext, '^\_.*\_^branch:\s*\(\S\+\)\n\_.*$', '\1', "")
- let returnExpression=returnExpression . " | let " . a:branchVar . "='" . branch . "'"
+ if (exists('revision'))
+ let returnExpression = "let " . a:revisionVar . "='" . revision . "' " . returnExpression
endif
- if a:repositoryVar != ""
- let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " root "
- let roottext=system(hgCommand)
- let repository=substitute(roottext,'^.*/\([^/\n\r]*\)\n\_.*$','\1','')
- let returnExpression=returnExpression . " | let " . a:repositoryVar . "='" . repository . "'"
- endif
-
-
return returnExpression
finally
@@ -432,6 +432,11 @@ function! s:HGMarkOrigBufferForSetup(hgB
if origBuffer != a:hgBuffer
call setbufvar(origBuffer, "HGBufferSetup", 0)
endif
+ else
+ "We are presumably in the original buffer
+ let b:HGBufferSetup = 0
+ "We do the setup now as now event will be triggered allowing it later.
+ call s:HGSetupBuffer()
endif
return a:hgBuffer
endfunction
@@ -608,6 +613,7 @@ function! HGEnableBufferSetup()
augroup HGCommandPlugin
au!
au BufEnter * call s:HGSetupBuffer()
+ au BufWritePost * call s:HGSetupBuffer()
" Force resetting up buffer on external file change (HG update)
au FileChangedShell * call s:HGSetupBuffer(1)
augroup END
@@ -686,7 +692,7 @@ function! s:HGAnnotate(...)
endif
let resultBuffer=s:HGDoCommand('annotate -ndu -r ' . revision, 'hgannotate', revision)
- echomsg "DBG: ".resultBuffer
+ "echomsg "DBG: ".resultBuffer
if resultBuffer != -1
set filetype=HGAnnotate
endif
@@ -754,8 +760,7 @@ function! s:HGCommit(...)
\ ':call <SID>HGFinishCommit("' . messageFileName . '",' .
\ '"' . newCwd . '",' .
\ '"' . realFileName . '",' .
- \ hgBufferCheck . ')<CR>'.
- \ ':call <SID>HGBufferSetup(1)<CR>'
+ \ hgBufferCheck . ')<CR>'
silent 0put ='HG: ----------------------------------------------------------------------'
silent put =\"HG: Enter Log. Lines beginning with `HG:' are removed automatically\"
@@ -908,7 +913,6 @@ endfunction
" Function: s:HGUpdate() {{{2
function! s:HGUpdate()
return s:HGMarkOrigBufferForSetup(s:HGDoCommand('update', 'update', ''))
- call s:HGSetupBuffer(1)
endfunction
" Function: s:HGVimDiff(...) {{{2
@@ -1673,6 +1677,11 @@ 8. Known bugs *hgcommand-bugs
may still be bugs in here, depending on many configuration details.
==============================================================================
+
+9. TODO *hgcommand-todo*
+
+ Integrate symlink tracking once HG will support them.
+==============================================================================
=== END_DOC
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" v im:tw=78:ts=8:ft=help:norl: