diff --git a/contrib/vim/hgcommand.vim b/contrib/vim/hgcommand.vim --- a/contrib/vim/hgcommand.vim +++ b/contrib/vim/hgcommand.vim @@ -1,77 +1,44 @@ " vim600: set foldmethod=marker: " -" Vim plugin to assist in working with CVS-controlled files. +" Vim plugin to assist in working with HG-controlled files. " " Last Change: 2006/02/22 " Version: 1.76 -" Maintainer: Bob Hiestand +" Maintainer: Mathieu Clabaut " License: This file is placed in the public domain. " Credits: {{{1 -" Mathieu Clabaut for many suggestions and improvements. -" -" Suresh Govindachar and Jeeva Chelladhurai for finding waaaay -" too many bugs. -" -" Suresh Govindachar (again!) for finding the -" fully-folded-last-line-delete bug. -" -" Albrecht Gass for the Delete-on-Hide behavior suggestion. -" -" Joe MacDonald for finding the CVS log message header bug and -" pointing out that buffer refreshes are needed after CVS -" \%(un\)\?edit. -" -" Srinath Avadhanula for the suggestion and original patch for -" the CVSCommitOnWrite option and mapping hot key. -" -" John Sivak for helping to debug Windows issues and suggesting -" the CVSEditors and CVSWatchers commands. -" -" Igor Levko for the patch to recognize numerical sticky tags. -" -" Domink Strasser for the patch to correct the status line for -" CVSAdd'd files. -" -" Weerapong Sirikanya for finding a bug with CVSCommit and -" autochdir. -" -" David Gotz for finding a bug with CVSVimDiff buffer splitting -" and original buffer restoration. -" -" CJ van den Berg for the patch to not change working directory -" when editing a non-CVS file. -" -" Luca Gerli for noticing bad behavior for keywords in files -" after commit if split windows are used. +" Bob Hiestand for the fabulous +" cvscommand.vim from which this script was directly created by +" means of sed commands and minor tweaks. " Section: Documentation {{{1 " -" Provides functions to invoke various CVS commands on the current file +" Provides functions to invoke various HG commands on the current file " (either the current buffer, or, in the case of an directory buffer, the file " on the current line). The output of the commands is captured in a new -" scratch window. For convenience, if the functions are invoked on a CVS -" output window, the original file is used for the cvs operation instead after -" the window is split. This is primarily useful when running CVSCommit and -" you need to see the changes made, so that CVSDiff is usable and shows up in +" scratch window. For convenience, if the functions are invoked on a HG +" output window, the original file is used for the hg operation instead after +" the window is split. This is primarily useful when running HGCommit and +" you need to see the changes made, so that HGDiff is usable and shows up in " another window. " " Command documentation {{{2 " -" CVSAdd Performs "cvs add" on the current file. +" HGAdd Performs "hg add" on the current file. " -" CVSAnnotate Performs "cvs annotate" on the current file. If an +" HGAnnotate Performs "hg annotate" on the current file. If an " argument is given, the argument is used as a revision " number to display. If not given an argument, it uses the " most recent version of the file on the current branch. -" Additionally, if the current buffer is a CVSAnnotate buffer +" Additionally, if the current buffer is a HGAnnotate buffer " already, the version number on the current line is used. " -" If the 'CVSCommandAnnotateParent' variable is set to a +" If the 'HGCommandAnnotateParent' variable is set to a " non-zero value, the version previous to the one on the " current line is used instead. This allows one to navigate " back to examine the previous version of a line. " -" CVSCommit[!] If called with arguments, this performs "cvs commit" using +" HGCommit[!] If called with arguments, this performs "hg commit" using " the arguments as the log message. " " If '!' is used, an empty log message is committed. @@ -83,40 +50,34 @@ " message. The commit can be abandoned if the log message " buffer is deleted or wiped before being written. " -" CVSDiff With no arguments, this performs "cvs diff" on the current -" file. With one argument, "cvs diff" is performed on the +" HGDiff With no arguments, this performs "hg diff" on the current +" file. With one argument, "hg diff" is performed on the " current file against the specified revision. With two -" arguments, cvs diff is performed between the specified +" arguments, hg diff is performed between the specified " revisions of the current file. This command uses the -" 'CVSCommandDiffOpt' variable to specify diff options. If +" 'HGCommandDiffOpt' variable to specify diff options. If " that variable does not exist, then 'wbBc' is assumed. If " you wish to have no options, then set it to the empty " string. " -" CVSEdit Performs "cvs edit" on the current file. -" -" CVSEditors Performs "cvs editors" on the current file. +" HGGotoOriginal Returns the current window to the source buffer if the +" current buffer is a HG output buffer. " -" CVSGotoOriginal Returns the current window to the source buffer if the -" current buffer is a CVS output buffer. +" HGLog Performs "hg log" on the current file. " -" CVSLog Performs "cvs log" on the current file. -" -" CVSRevert Replaces the modified version of the current file with the +" HGRevert Replaces the modified version of the current file with the " most recent version from the repository. " -" CVSReview Retrieves a particular version of the current file. If no +" HGReview Retrieves a particular version of the current file. If no " argument is given, the most recent version of the file on " the current branch is retrieved. The specified revision is " retrieved into a new buffer. " -" CVSStatus Performs "cvs status" on the current file. -" -" CVSUnedit Performs "cvs unedit" on the current file. +" HGStatus Performs "hg status" on the current file. " -" CVSUpdate Performs "cvs update" on the current file. +" HGUpdate Performs "hg update" on the current file. " -" CVSVimDiff With no arguments, this prompts the user for a revision and +" HGVimDiff With no arguments, this prompts the user for a revision and " then uses vimdiff to display the differences between the " current file and the specified revision. If no revision is " specified, the most recent version of the file on the @@ -139,171 +100,150 @@ " command on a different file will close the previous vimdiff " buffers. " -" CVSWatch Takes an argument which must be one of [on|off|add|remove]. -" Performs "cvs watch" with the given argument on the current -" file. -" -" CVSWatchers Performs "cvs watchers" on the current file. -" -" CVSWatchAdd Alias for "CVSWatch add" -" -" CVSWatchOn Alias for "CVSWatch on" -" -" CVSWatchOff Alias for "CVSWatch off" -" -" CVSWatchRemove Alias for "CVSWatch remove" " " Mapping documentation: {{{2 " " By default, a mapping is defined for each command. User-provided mappings " can be used instead by mapping to CommandName, for instance: " -" nnoremap ,ca CVSAdd +" nnoremap ,ca HGAdd " " The default mappings are as follow: " -" ca CVSAdd -" cn CVSAnnotate -" cc CVSCommit -" cd CVSDiff -" ce CVSEdit -" ci CVSEditors -" cg CVSGotoOriginal -" cG CVSGotoOriginal! -" cl CVSLog -" cr CVSReview -" cs CVSStatus -" ct CVSUnedit -" cu CVSUpdate -" cv CVSVimDiff -" cwv CVSWatchers -" cwa CVSWatchAdd -" cwn CVSWatchOn -" cwa CVSWatchOff -" cwr CVSWatchRemove +" hga HGAdd +" hgn HGAnnotate +" hgc HGCommit +" hgd HGDiff +" hgg HGGotoOriginal +" hgG HGGotoOriginal! +" hgl HGLog +" hgr HGReview +" hgs HGStatus +" hgu HGUpdate +" hgv HGVimDiff " " Options documentation: {{{2 " " Several variables are checked by the script to determine behavior as follow: " -" CVSCommandAnnotateParent +" HGCommandAnnotateParent " This variable, if set to a non-zero value, causes the zero-argument form -" of CVSAnnotate when invoked on a CVSAnnotate buffer to go to the version +" of HGAnnotate when invoked on a HGAnnotate buffer to go to the version " previous to that displayed on the current line. If not set, it defaults " to 0. " -" CVSCommandCommitOnWrite -" This variable, if set to a non-zero value, causes the pending cvs commit +" HGCommandCommitOnWrite +" This variable, if set to a non-zero value, causes the pending hg commit " to take place immediately as soon as the log message buffer is written. -" If set to zero, only the CVSCommit mapping will cause the pending commit +" If set to zero, only the HGCommit mapping will cause the pending commit " to occur. If not set, it defaults to 1. " -" CVSCommandDeleteOnHide -" This variable, if set to a non-zero value, causes the temporary CVS result +" HGCommandDeleteOnHide +" This variable, if set to a non-zero value, causes the temporary HG result " buffers to automatically delete themselves when hidden. " -" CVSCommandDiffOpt +" HGCommandDiffOpt " This variable, if set, determines the options passed to the diff command -" of CVS. If not set, it defaults to 'wbBc'. +" of HG. If not set, it defaults to 'wbBc'. " -" CVSCommandDiffSplit -" This variable overrides the CVSCommandSplit variable, but only for buffers -" created with CVSVimDiff. +" HGCommandDiffSplit +" This variable overrides the HGCommandSplit variable, but only for buffers +" created with HGVimDiff. " -" CVSCommandEdit +" HGCommandEdit " This variable controls whether the original buffer is replaced ('edit') or " split ('split'). If not set, it defaults to 'edit'. " -" CVSCommandEnableBufferSetup -" This variable, if set to a non-zero value, activates CVS buffer management -" mode. This mode means that two buffer variables, 'CVSRevision' and -" 'CVSBranch', are set if the file is CVS-controlled. This is useful for +" HGCommandEnableBufferSetup +" This variable, if set to a non-zero value, activates HG buffer management +" mode. This mode means that two buffer variables, 'HGRevision' and +" 'HGBranch', are set if the file is HG-controlled. This is useful for " displaying version information in the status bar. " -" CVSCommandInteractive +" HGCommandInteractive " This variable, if set to a non-zero value, causes appropriate functions (for -" the moment, only CVSReview) to query the user for a revision to use +" the moment, only HGReview) to query the user for a revision to use " instead of the current revision if none is specified. " -" CVSCommandNameMarker +" HGCommandNameMarker " This variable, if set, configures the special attention-getting characters -" that appear on either side of the cvs buffer type in the buffer name. -" This has no effect unless 'CVSCommandNameResultBuffers' is set to a true +" that appear on either side of the hg buffer type in the buffer name. +" This has no effect unless 'HGCommandNameResultBuffers' is set to a true " value. If not set, it defaults to '_'. " -" CVSCommandNameResultBuffers -" This variable, if set to a true value, causes the cvs result buffers to be -" named in the old way (' __'). If not set +" HGCommandNameResultBuffers +" This variable, if set to a true value, causes the hg result buffers to be +" named in the old way (' __'). If not set " or set to a false value, the result buffer is nameless. " -" CVSCommandSplit +" HGCommandSplit " This variable controls the orientation of the various window splits that -" may occur (such as with CVSVimDiff, when using a CVS command on a CVS -" command buffer, or when the 'CVSCommandEdit' variable is set to 'split'. +" may occur (such as with HGVimDiff, when using a HG command on a HG +" command buffer, or when the 'HGCommandEdit' variable is set to 'split'. " If set to 'horizontal', the resulting windows will be on stacked on top of " one another. If set to 'vertical', the resulting windows will be " side-by-side. If not set, it defaults to 'horizontal' for all but -" CVSVimDiff windows. +" HGVimDiff windows. " " Event documentation {{{2 -" For additional customization, cvscommand.vim uses User event autocommand -" hooks. Each event is in the CVSCommand group, and different patterns +" For additional customization, hgcommand.vim uses User event autocommand +" hooks. Each event is in the HGCommand group, and different patterns " match the various hooks. " " For instance, the following could be added to the vimrc to provide a 'q' -" mapping to quit a CVS buffer: +" mapping to quit a HG buffer: " -" augroup CVSCommand -" au CVSCommand User CVSBufferCreated silent! nmap q :bwipeout +" augroup HGCommand +" au HGCommand User HGBufferCreated silent! nmap q :bwipeout " augroup END " " The following hooks are available: " -" CVSBufferCreated This event is fired just after a cvs command +" HGBufferCreated This event is fired just after a hg command " result buffer is created and filled with the -" result of a cvs command. It is executed within +" result of a hg command. It is executed within " the context of the new buffer. " -" CVSBufferSetup This event is fired just after CVS buffer setup +" HGBufferSetup This event is fired just after HG buffer setup " occurs, if enabled. " -" CVSPluginInit This event is fired when the CVSCommand plugin +" HGPluginInit This event is fired when the HGCommand plugin " first loads. " -" CVSPluginFinish This event is fired just after the CVSCommand +" HGPluginFinish This event is fired just after the HGCommand " plugin loads. " -" CVSVimDiffFinish This event is fired just after the CVSVimDiff +" HGVimDiffFinish This event is fired just after the HGVimDiff " command executes to allow customization of, " for instance, window placement and focus. " " Section: Plugin header {{{1 -" loaded_cvscommand is set to 1 when the initialization begins, and 2 when it +" loaded_hgcommand is set to 1 when the initialization begins, and 2 when it " completes. This allows various actions to only be taken by functions after " system initialization. -if exists("loaded_cvscommand") +if exists("loaded_hgcommand") finish endif -let loaded_cvscommand = 1 +let loaded_hgcommand = 1 if v:version < 602 - echohl WarningMsg|echomsg "CVSCommand 1.69 or later requires VIM 6.2 or later"|echohl None + echohl WarningMsg|echomsg "HGCommand 1.69 or later requires VIM 6.2 or later"|echohl None finish endif " Section: Event group setup {{{1 -augroup CVSCommand +augroup HGCommand augroup END " Section: Plugin initialization {{{1 -silent do CVSCommand User CVSPluginInit +silent do HGCommand User HGPluginInit " Section: Script variable initialization {{{1 -let s:CVSCommandEditFileRunning = 0 +let s:HGCommandEditFileRunning = 0 unlet! s:vimDiffRestoreCmd unlet! s:vimDiffSourceBuffer unlet! s:vimDiffBufferCount @@ -311,24 +251,24 @@ unlet! s:vimDiffScratchList " Section: Utility functions {{{1 -" Function: s:CVSResolveLink() {{{2 +" Function: s:HGResolveLink() {{{2 " Fully resolve the given file name to remove shortcuts or symbolic links. -function! s:CVSResolveLink(fileName) +function! s:HGResolveLink(fileName) let resolved = resolve(a:fileName) if resolved != a:fileName - let resolved = s:CVSResolveLink(resolved) + let resolved = s:HGResolveLink(resolved) endif return resolved endfunction -" Function: s:CVSChangeToCurrentFileDir() {{{2 -" Go to the directory in which the current CVS-controlled file is located. -" If this is a CVS command buffer, first switch to the original file. +" Function: s:HGChangeToCurrentFileDir() {{{2 +" Go to the directory in which the current HG-controlled file is located. +" If this is a HG command buffer, first switch to the original file. -function! s:CVSChangeToCurrentFileDir(fileName) +function! s:HGChangeToCurrentFileDir(fileName) let oldCwd=getcwd() - let fileName=s:CVSResolveLink(a:fileName) + let fileName=s:HGResolveLink(a:fileName) let newCwd=fnamemodify(fileName, ':h') if strlen(newCwd) > 0 execute 'cd' escape(newCwd, ' ') @@ -336,11 +276,11 @@ function! s:CVSChangeToCurrentFileDir(fi return oldCwd endfunction -" Function: s:CVSGetOption(name, default) {{{2 +" Function: s:HGGetOption(name, default) {{{2 " Grab a user-specified option to override the default provided. Options are " searched in the window, buffer, then global spaces. -function! s:CVSGetOption(name, default) +function! s:HGGetOption(name, default) if exists("s:" . a:name . "Override") execute "return s:".a:name."Override" elseif exists("w:" . a:name) @@ -354,19 +294,19 @@ function! s:CVSGetOption(name, default) endif endfunction -" Function: s:CVSEditFile(name, origBuffNR) {{{2 +" Function: s:HGEditFile(name, origBuffNR) {{{2 " Wrapper around the 'edit' command to provide some helpful error text if the " current buffer can't be abandoned. If name is provided, it is used; " otherwise, a nameless scratch buffer is used. " Returns: 0 if successful, -1 if an error occurs. -function! s:CVSEditFile(name, origBuffNR) +function! s:HGEditFile(name, origBuffNR) "Name parameter will be pasted into expression. let name = escape(a:name, ' *?\') - let editCommand = s:CVSGetOption('CVSCommandEdit', 'edit') + let editCommand = s:HGGetOption('HGCommandEdit', 'edit') if editCommand != 'edit' - if s:CVSGetOption('CVSCommandSplit', 'horizontal') == 'horizontal' + if s:HGGetOption('HGCommandSplit', 'horizontal') == 'horizontal' if name == "" let editCommand = 'rightbelow new' else @@ -388,28 +328,28 @@ function! s:CVSEditFile(name, origBuffNR endif " Protect against useless buffer set-up - let s:CVSCommandEditFileRunning = s:CVSCommandEditFileRunning + 1 + let s:HGCommandEditFileRunning = s:HGCommandEditFileRunning + 1 try execute editCommand finally - let s:CVSCommandEditFileRunning = s:CVSCommandEditFileRunning - 1 + let s:HGCommandEditFileRunning = s:HGCommandEditFileRunning - 1 endtry - let b:CVSOrigBuffNR=a:origBuffNR - let b:CVSCommandEdit='split' + let b:HGOrigBuffNR=a:origBuffNR + let b:HGCommandEdit='split' endfunction -" Function: s:CVSCreateCommandBuffer(cmd, cmdName, statusText, filename) {{{2 +" Function: s:HGCreateCommandBuffer(cmd, cmdName, statusText, filename) {{{2 " Creates a new scratch buffer and captures the output from execution of the " given command. The name of the scratch buffer is returned. -function! s:CVSCreateCommandBuffer(cmd, cmdName, statusText, origBuffNR) +function! s:HGCreateCommandBuffer(cmd, cmdName, statusText, origBuffNR) let fileName=bufname(a:origBuffNR) let resultBufferName='' - if s:CVSGetOption("CVSCommandNameResultBuffers", 0) - let nameMarker = s:CVSGetOption("CVSCommandNameMarker", '_') + if s:HGGetOption("HGCommandNameResultBuffers", 0) + let nameMarker = s:HGGetOption("HGCommandNameMarker", '_') if strlen(a:statusText) > 0 let bufName=a:cmdName . ' -- ' . a:statusText else @@ -424,28 +364,29 @@ function! s:CVSCreateCommandBuffer(cmd, endwhile endif - let cvsCommand = s:CVSGetOption("CVSCommandCVSExec", "cvs") . " " . a:cmd - let cvsOut = system(cvsCommand) + let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " " . a:cmd + echomsg "DBG :".hgCommand + let hgOut = system(hgCommand) " HACK: diff command does not return proper error codes - if v:shell_error && a:cmdName != 'cvsdiff' - if strlen(cvsOut) == 0 - echoerr "CVS command failed" + if v:shell_error && a:cmdName != 'hgdiff' + if strlen(hgOut) == 0 + echoerr "HG command failed" else - echoerr "CVS command failed: " . cvsOut + echoerr "HG command failed: " . hgOut endif return -1 endif - if strlen(cvsOut) == 0 + if strlen(hgOut) == 0 " Handle case of no output. In this case, it is important to check the - " file status, especially since cvs edit/unedit may change the attributes + " file status, especially since hg edit/unedit may change the attributes " of the file with no visible output. - echomsg "No output from CVS command" + echomsg "No output from HG command" checktime return -1 endif - if s:CVSEditFile(resultBufferName, a:origBuffNR) == -1 + if s:HGEditFile(resultBufferName, a:origBuffNR) == -1 return -1 endif @@ -453,11 +394,11 @@ function! s:CVSCreateCommandBuffer(cmd, set noswapfile set filetype= - if s:CVSGetOption("CVSCommandDeleteOnHide", 0) + if s:HGGetOption("HGCommandDeleteOnHide", 0) set bufhidden=delete endif - silent 0put=cvsOut + silent 0put=hgOut " The last command left a blank line at the end of the buffer. If the " last line is folded (a side effect of the 'put') then the attempt to @@ -475,22 +416,22 @@ function! s:CVSCreateCommandBuffer(cmd, " Define the environment and execute user-defined hooks. - let b:CVSSourceFile=fileName - let b:CVSCommand=a:cmdName + let b:HGSourceFile=fileName + let b:HGCommand=a:cmdName if a:statusText != "" - let b:CVSStatusText=a:statusText + let b:HGStatusText=a:statusText endif - silent do CVSCommand User CVSBufferCreated + silent do HGCommand User HGBufferCreated return bufnr("%") endfunction -" Function: s:CVSBufferCheck(cvsBuffer) {{{2 -" Attempts to locate the original file to which CVS operations were applied +" Function: s:HGBufferCheck(hgBuffer) {{{2 +" Attempts to locate the original file to which HG operations were applied " for a given buffer. -function! s:CVSBufferCheck(cvsBuffer) - let origBuffer = getbufvar(a:cvsBuffer, "CVSOrigBuffNR") +function! s:HGBufferCheck(hgBuffer) + let origBuffer = getbufvar(a:hgBuffer, "HGOrigBuffNR") if origBuffer if bufexists(origBuffer) return origBuffer @@ -500,52 +441,54 @@ function! s:CVSBufferCheck(cvsBuffer) endif else " No original buffer - return a:cvsBuffer + return a:hgBuffer endif endfunction -" Function: s:CVSCurrentBufferCheck() {{{2 -" Attempts to locate the original file to which CVS operations were applied +" Function: s:HGCurrentBufferCheck() {{{2 +" Attempts to locate the original file to which HG operations were applied " for the current buffer. -function! s:CVSCurrentBufferCheck() - return s:CVSBufferCheck(bufnr("%")) +function! s:HGCurrentBufferCheck() + return s:HGBufferCheck(bufnr("%")) endfunction -" Function: s:CVSToggleDeleteOnHide() {{{2 -" Toggles on and off the delete-on-hide behavior of CVS buffers +" Function: s:HGToggleDeleteOnHide() {{{2 +" Toggles on and off the delete-on-hide behavior of HG buffers -function! s:CVSToggleDeleteOnHide() - if exists("g:CVSCommandDeleteOnHide") - unlet g:CVSCommandDeleteOnHide +function! s:HGToggleDeleteOnHide() + if exists("g:HGCommandDeleteOnHide") + unlet g:HGCommandDeleteOnHide else - let g:CVSCommandDeleteOnHide=1 + let g:HGCommandDeleteOnHide=1 endif endfunction -" Function: s:CVSDoCommand(cvscmd, cmdName, statusText) {{{2 -" General skeleton for CVS function execution. +" Function: s:HGDoCommand(hgcmd, cmdName, statusText) {{{2 +" General skeleton for HG function execution. " Returns: name of the new command buffer containing the command results -function! s:CVSDoCommand(cmd, cmdName, statusText) - let cvsBufferCheck=s:CVSCurrentBufferCheck() - if cvsBufferCheck == -1 +function! s:HGDoCommand(cmd, cmdName, statusText) + let hgBufferCheck=s:HGCurrentBufferCheck() + if hgBufferCheck == -1 echo "Original buffer no longer exists, aborting." return -1 endif - let fileName=bufname(cvsBufferCheck) + let fileName=bufname(hgBufferCheck) if isdirectory(fileName) let fileName=fileName . "/" . getline(".") endif - let realFileName = fnamemodify(s:CVSResolveLink(fileName), ':t') - let oldCwd=s:CVSChangeToCurrentFileDir(fileName) + let realFileName = fnamemodify(s:HGResolveLink(fileName), ':t') + let oldCwd=s:HGChangeToCurrentFileDir(fileName) try - if !filereadable('CVS/Root') - throw fileName . ' is not a CVS-controlled file.' - endif + " TODO + "if !filereadable('HG/Root') + "throw fileName . ' is not a HG-controlled file.' + "endif let fullCmd = a:cmd . ' "' . realFileName . '"' - let resultBuffer=s:CVSCreateCommandBuffer(fullCmd, a:cmdName, a:statusText, cvsBufferCheck) + "echomsg "DEBUG".fullCmd + let resultBuffer=s:HGCreateCommandBuffer(fullCmd, a:cmdName, a:statusText, hgBufferCheck) return resultBuffer catch echoerr v:exception @@ -556,77 +499,89 @@ function! s:CVSDoCommand(cmd, cmdName, s endfunction -" Function: s:CVSGetStatusVars(revision, branch, repository) {{{2 +" Function: s:HGGetStatusVars(revision, branch, repository) {{{2 " -" Obtains a CVS revision number and branch name. The 'revisionVar', +" Obtains a HG revision number and branch name. The 'revisionVar', " 'branchVar'and 'repositoryVar' arguments, if non-empty, contain the names of variables to hold " the corresponding results. " " Returns: string to be exec'd that sets the multiple return values. -function! s:CVSGetStatusVars(revisionVar, branchVar, repositoryVar) - let cvsBufferCheck=s:CVSCurrentBufferCheck() - if cvsBufferCheck == -1 +function! s:HGGetStatusVars(revisionVar, branchVar, repositoryVar) + let hgBufferCheck=s:HGCurrentBufferCheck() + if hgBufferCheck == -1 return "" endif - let fileName=bufname(cvsBufferCheck) - let realFileName = fnamemodify(s:CVSResolveLink(fileName), ':t') - let oldCwd=s:CVSChangeToCurrentFileDir(fileName) + let fileName=bufname(hgBufferCheck) + let realFileName = fnamemodify(s:HGResolveLink(fileName), ':t') + let oldCwd=s:HGChangeToCurrentFileDir(fileName) try - if !filereadable('CVS/Root') - return "" - endif - let cvsCommand = s:CVSGetOption("CVSCommandCVSExec", "cvs") . " status " . escape(realFileName, ' *?\') - let statustext=system(cvsCommand) + ""TODO + "if !filereadable('HG/Root') + "return "" + "endif + let hgCommand = s:HGGetOption("HGCommandHGExec", "hg") . " status -mardui " . fileName + let statustext=system(hgCommand) if(v:shell_error) return "" endif - let revision=substitute(statustext, '^\_.*Working revision:\s*\(\d\+\%(\.\d\+\)\+\|New file!\)\_.*$', '\1', "") - - " We can still be in a CVS-controlled directory without this being a CVS - " file - if match(revision, '^New file!$') >= 0 + if match(statustext, '^[?I]') >= 0 let revision="NEW" - elseif match(revision, '^\d\+\.\d\+\%(\.\d\+\.\d\+\)*$') >=0 - else - return "" + elseif match(statustext, '^[R]') >= 0 + let revision="REMOVED" + elseif match(statustext, '^[D]') >= 0 + let revision="DELETED" + elseif match(statustext, '^[A]') >= 0 + let revision="ADDED" endif - let returnExpression = "let " . a:revisionVar . "='" . revision . "'" + 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 . "'" + endif - if a:branchVar != "" - let branch=substitute(statustext, '^\_.*Sticky Tag:\s\+\(\d\+\%(\.\d\+\)\+\|\a[A-Za-z0-9-_]*\|(none)\).*$', '\1', "") + if a:branchVar != "" && match(statustext, '^\_.*\_^branch:') >= 0 + let branch=substitute(statustext, '^\_.*\_^branch:\s*\(\S\+\)\n\_.*$', '\1', "") let returnExpression=returnExpression . " | let " . a:branchVar . "='" . branch . "'" endif - if a:repositoryVar != "" - let repository=substitute(statustext, '^\_.*Repository revision:\s*\(\d\+\%(\.\d\+\)\+\|New file!\|No revision control file\)\_.*$', '\1', "") - let repository=substitute(repository, '^New file!\|No revision control file$', 'NEW', "") + 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 execute 'cd' escape(oldCwd, ' ') endtry endfunction -" Function: s:CVSSetupBuffer() {{{2 -" Attempts to set the b:CVSBranch, b:CVSRevision and b:CVSRepository variables. +" Function: s:HGSetupBuffer() {{{2 +" Attempts to set the b:HGBranch, b:HGRevision and b:HGRepository variables. -function! s:CVSSetupBuffer() - if (exists("b:CVSBufferSetup") && b:CVSBufferSetup) +function! s:HGSetupBuffer() + if (exists("b:HGBufferSetup") && b:HGBufferSetup) " This buffer is already set up. return endif - if !s:CVSGetOption("CVSCommandEnableBufferSetup", 0) + if !s:HGGetOption("HGCommandEnableBufferSetup", 0) \ || @% == "" - \ || s:CVSCommandEditFileRunning > 0 - \ || exists("b:CVSOrigBuffNR") - unlet! b:CVSRevision - unlet! b:CVSBranch - unlet! b:CVSRepository + \ || s:HGCommandEditFileRunning > 0 + \ || exists("b:HGOrigBuffNR") + unlet! b:HGRevision + unlet! b:HGBranch + unlet! b:HGRepository return endif @@ -638,47 +593,48 @@ function! s:CVSSetupBuffer() let branch="" let repository="" - exec s:CVSGetStatusVars('revision', 'branch', 'repository') + exec s:HGGetStatusVars('revision', 'branch', 'repository') + "echomsg "DBG ".revision."#".branch."#".repository if revision != "" - let b:CVSRevision=revision + let b:HGRevision=revision else - unlet! b:CVSRevision + unlet! b:HGRevision endif if branch != "" - let b:CVSBranch=branch + let b:HGBranch=branch else - unlet! b:CVSBranch + unlet! b:HGBranch endif if repository != "" - let b:CVSRepository=repository + let b:HGRepository=repository else - unlet! b:CVSRepository + unlet! b:HGRepository endif - silent do CVSCommand User CVSBufferSetup - let b:CVSBufferSetup=1 + silent do HGCommand User HGBufferSetup + let b:HGBufferSetup=1 endfunction -" Function: s:CVSMarkOrigBufferForSetup(cvsbuffer) {{{2 -" Resets the buffer setup state of the original buffer for a given CVS buffer. -" Returns: The CVS buffer number in a passthrough mode. +" Function: s:HGMarkOrigBufferForSetup(hgbuffer) {{{2 +" Resets the buffer setup state of the original buffer for a given HG buffer. +" Returns: The HG buffer number in a passthrough mode. -function! s:CVSMarkOrigBufferForSetup(cvsBuffer) +function! s:HGMarkOrigBufferForSetup(hgBuffer) checktime - if a:cvsBuffer != -1 - let origBuffer = s:CVSBufferCheck(a:cvsBuffer) + if a:hgBuffer != -1 + let origBuffer = s:HGBufferCheck(a:hgBuffer) "This should never not work, but I'm paranoid - if origBuffer != a:cvsBuffer - call setbufvar(origBuffer, "CVSBufferSetup", 0) + if origBuffer != a:hgBuffer + call setbufvar(origBuffer, "HGBufferSetup", 0) endif endif - return a:cvsBuffer + return a:hgBuffer endfunction -" Function: s:CVSOverrideOption(option, [value]) {{{2 -" Provides a temporary override for the given CVS option. If no value is +" Function: s:HGOverrideOption(option, [value]) {{{2 +" Provides a temporary override for the given HG option. If no value is " passed, the override is disabled. -function! s:CVSOverrideOption(option, ...) +function! s:HGOverrideOption(option, ...) if a:0 == 0 unlet! s:{a:option}Override else @@ -686,14 +642,14 @@ function! s:CVSOverrideOption(option, .. endif endfunction -" Function: s:CVSWipeoutCommandBuffers() {{{2 -" Clears all current CVS buffers of the specified type for a given source. +" Function: s:HGWipeoutCommandBuffers() {{{2 +" Clears all current HG buffers of the specified type for a given source. -function! s:CVSWipeoutCommandBuffers(originalBuffer, cvsCommand) +function! s:HGWipeoutCommandBuffers(originalBuffer, hgCommand) let buffer = 1 while buffer <= bufnr('$') - if getbufvar(buffer, 'CVSOrigBuffNR') == a:originalBuffer - if getbufvar(buffer, 'CVSCommand') == a:cvsCommand + if getbufvar(buffer, 'HGOrigBuffNR') == a:originalBuffer + if getbufvar(buffer, 'HGCommand') == a:hgCommand execute 'bw' buffer endif endif @@ -703,104 +659,92 @@ endfunction " Section: Public functions {{{1 -" Function: CVSGetRevision() {{{2 -" Global function for retrieving the current buffer's CVS revision number. +" Function: HGGetRevision() {{{2 +" Global function for retrieving the current buffer's HG revision number. " Returns: Revision number or an empty string if an error occurs. -function! CVSGetRevision() +function! HGGetRevision() let revision="" - exec s:CVSGetStatusVars('revision', '', '') + exec s:HGGetStatusVars('revision', '', '') return revision endfunction -" Function: CVSDisableBufferSetup() {{{2 +" Function: HGDisableBufferSetup() {{{2 " Global function for deactivating the buffer autovariables. -function! CVSDisableBufferSetup() - let g:CVSCommandEnableBufferSetup=0 - silent! augroup! CVSCommandPlugin +function! HGDisableBufferSetup() + let g:HGCommandEnableBufferSetup=0 + silent! augroup! HGCommandPlugin endfunction -" Function: CVSEnableBufferSetup() {{{2 +" Function: HGEnableBufferSetup() {{{2 " Global function for activating the buffer autovariables. -function! CVSEnableBufferSetup() - let g:CVSCommandEnableBufferSetup=1 - augroup CVSCommandPlugin +function! HGEnableBufferSetup() + let g:HGCommandEnableBufferSetup=1 + augroup HGCommandPlugin au! - au BufEnter * call s:CVSSetupBuffer() + au BufEnter * call s:HGSetupBuffer() augroup END " Only auto-load if the plugin is fully loaded. This gives other plugins a " chance to run. - if g:loaded_cvscommand == 2 - call s:CVSSetupBuffer() + if g:loaded_hgcommand == 2 + call s:HGSetupBuffer() endif endfunction -" Function: CVSGetStatusLine() {{{2 -" Default (sample) status line entry for CVS files. This is only useful if -" CVS-managed buffer mode is on (see the CVSCommandEnableBufferSetup variable +" Function: HGGetStatusLine() {{{2 +" Default (sample) status line entry for HG files. This is only useful if +" HG-managed buffer mode is on (see the HGCommandEnableBufferSetup variable " for how to do this). -function! CVSGetStatusLine() - if exists('b:CVSSourceFile') +function! HGGetStatusLine() + if exists('b:HGSourceFile') " This is a result buffer - let value='[' . b:CVSCommand . ' ' . b:CVSSourceFile - if exists('b:CVSStatusText') - let value=value . ' ' . b:CVSStatusText + let value='[' . b:HGCommand . ' ' . b:HGSourceFile + if exists('b:HGStatusText') + let value=value . ' ' . b:HGStatusText endif let value = value . ']' return value endif - if exists('b:CVSRevision') - \ && b:CVSRevision != '' - \ && exists('b:CVSBranch') - \ && b:CVSBranch != '' - \ && exists('b:CVSRepository') - \ && b:CVSRepository != '' - \ && exists('g:CVSCommandEnableBufferSetup') - \ && g:CVSCommandEnableBufferSetup - if b:CVSRevision == b:CVSRepository - return '[CVS ' . b:CVSBranch . '/' . b:CVSRevision . ']' - else - return '[CVS ' . b:CVSBranch . '/' . b:CVSRevision . '/' . b:CVSRepository . ']' - endif + if exists('b:HGRevision') + \ && b:HGRevision != '' + \ && exists('b:HGBranch') + \ && b:HGBranch != '' + \ && exists('b:HGRepository') + \ && b:HGRepository != '' + \ && exists('g:HGCommandEnableBufferSetup') + \ && g:HGCommandEnableBufferSetup + return '[HG ' . b:HGRepository . '/' . b:HGBranch .'/' . b:HGRevision . ']' else return '' endif endfunction -" Section: CVS command functions {{{1 +" Section: HG command functions {{{1 -" Function: s:CVSAdd() {{{2 -function! s:CVSAdd() - return s:CVSMarkOrigBufferForSetup(s:CVSDoCommand('add', 'cvsadd', '')) +" Function: s:HGAdd() {{{2 +function! s:HGAdd() + return s:HGMarkOrigBufferForSetup(s:HGDoCommand('add', 'hgadd', '')) endfunction -" Function: s:CVSAnnotate(...) {{{2 -function! s:CVSAnnotate(...) +" Function: s:HGAnnotate(...) {{{2 +function! s:HGAnnotate(...) if a:0 == 0 - if &filetype == "CVSAnnotate" - " This is a CVSAnnotate buffer. Perform annotation of the version + if &filetype == "HGAnnotate" + " This is a HGAnnotate buffer. Perform annotation of the version " indicated by the current line. - let revision = substitute(getline("."),'\(^[0-9.]*\).*','\1','') - let revmin = substitute(revision,'^[0-9.]*\.\([0-9]\+\)','\1','') - let revmaj = substitute(revision,'^\([0-9.]*\)\.[0-9]\+','\1','') - if s:CVSGetOption('CVSCommandAnnotateParent', 0) != 0 - let revmin = revmin - 1 - endif - if revmin == 0 - " Jump to ancestor branch - let revision = substitute(revmaj,'^\([0-9.]*\)\.[0-9]\+','\1','') - else - let revision=revmaj . "." . revmin + let revision = substitute(getline("."),'\(^[0-9]*\):.*','\1','') + if s:HGGetOption('HGCommandAnnotateParent', 0) != 0 && revision > 0 + let revision = revision - 1 endif else - let revision=CVSGetRevision() + let revision=HGGetRevision() if revision == "" - echoerr "Unable to obtain CVS version information." + echoerr "Unable to obtain HG version information." return -1 endif endif @@ -813,27 +757,26 @@ function! s:CVSAnnotate(...) return -1 endif - let resultBuffer=s:CVSDoCommand('-q annotate -r ' . revision, 'cvsannotate', revision) + let resultBuffer=s:HGDoCommand('annotate -ndu -r ' . revision, 'hgannotate', revision) + echomsg "DBG: ".resultBuffer if resultBuffer != -1 - set filetype=CVSAnnotate - " Remove header lines from standard error - silent v/^\d\+\%(\.\d\+\)\+/d + set filetype=HGAnnotate endif return resultBuffer endfunction -" Function: s:CVSCommit() {{{2 -function! s:CVSCommit(...) +" Function: s:HGCommit() {{{2 +function! s:HGCommit(...) " Handle the commit message being specified. If a message is supplied, it " is used; if bang is supplied, an empty message is used; otherwise, the " user is provided a buffer from which to edit the commit message. if a:2 != "" || a:1 == "!" - return s:CVSMarkOrigBufferForSetup(s:CVSDoCommand('commit -m "' . a:2 . '"', 'cvscommit', '')) + return s:HGMarkOrigBufferForSetup(s:HGDoCommand('commit -m "' . a:2 . '"', 'hgcommit', '')) endif - let cvsBufferCheck=s:CVSCurrentBufferCheck() - if cvsBufferCheck == -1 + let hgBufferCheck=s:HGCurrentBufferCheck() + if hgBufferCheck == -1 echo "Original buffer no longer exists, aborting." return -1 endif @@ -847,8 +790,8 @@ function! s:CVSCommit(...) let messageFileName = tempname() - let fileName=bufname(cvsBufferCheck) - let realFilePath=s:CVSResolveLink(fileName) + let fileName=bufname(hgBufferCheck) + let realFilePath=s:HGResolveLink(fileName) let newCwd=fnamemodify(realFilePath, ':h') if strlen(newCwd) == 0 " Account for autochdir being in effect, which will make this blank, but @@ -858,7 +801,7 @@ function! s:CVSCommit(...) let realFileName=fnamemodify(realFilePath, ':t') - if s:CVSEditFile(messageFileName, cvsBufferCheck) == -1 + if s:HGEditFile(messageFileName, hgBufferCheck) == -1 return endif @@ -866,49 +809,49 @@ function! s:CVSCommit(...) let autoPattern = '\c' . messageFileName " Ensure existance of group - augroup CVSCommit + augroup HGCommit augroup END - execute 'au CVSCommit BufDelete' autoPattern 'call delete("' . messageFileName . '")' - execute 'au CVSCommit BufDelete' autoPattern 'au! CVSCommit * ' autoPattern + execute 'au HGCommit BufDelete' autoPattern 'call delete("' . messageFileName . '")' + execute 'au HGCommit BufDelete' autoPattern 'au! HGCommit * ' autoPattern " Create a commit mapping. The mapping must clear all autocommands in case - " it is invoked when CVSCommandCommitOnWrite is active, as well as to not + " it is invoked when HGCommandCommitOnWrite is active, as well as to not " invoke the buffer deletion autocommand. - execute 'nnoremap CVSCommit '. - \ ':au! CVSCommit * ' . autoPattern . ''. - \ ':g/^CVS:/d'. + execute 'nnoremap HGCommit '. + \ ':au! HGCommit * ' . autoPattern . ''. + \ ':g/^HG:/d'. \ ':update'. - \ ':call CVSFinishCommit("' . messageFileName . '",' . + \ ':call HGFinishCommit("' . messageFileName . '",' . \ '"' . newCwd . '",' . \ '"' . realFileName . '",' . - \ cvsBufferCheck . ')' + \ hgBufferCheck . ')' - silent 0put ='CVS: ----------------------------------------------------------------------' - silent put =\"CVS: Enter Log. Lines beginning with `CVS:' are removed automatically\" - silent put ='CVS: Type cc (or your own CVSCommit mapping)' + silent 0put ='HG: ----------------------------------------------------------------------' + silent put =\"HG: Enter Log. Lines beginning with `HG:' are removed automatically\" + silent put ='HG: Type cc (or your own HGCommit mapping)' - if s:CVSGetOption('CVSCommandCommitOnWrite', 1) == 1 - execute 'au CVSCommit BufWritePre' autoPattern 'g/^CVS:/d' - execute 'au CVSCommit BufWritePost' autoPattern 'call s:CVSFinishCommit("' . messageFileName . '", "' . newCwd . '", "' . realFileName . '", ' . cvsBufferCheck . ') | au! * ' autoPattern - silent put ='CVS: or write this buffer' + if s:HGGetOption('HGCommandCommitOnWrite', 1) == 1 + execute 'au HGCommit BufWritePre' autoPattern 'g/^HG:/d' + execute 'au HGCommit BufWritePost' autoPattern 'call s:HGFinishCommit("' . messageFileName . '", "' . newCwd . '", "' . realFileName . '", ' . hgBufferCheck . ') | au! * ' autoPattern + silent put ='HG: or write this buffer' endif - silent put ='CVS: to finish this commit operation' - silent put ='CVS: ----------------------------------------------------------------------' + silent put ='HG: to finish this commit operation' + silent put ='HG: ----------------------------------------------------------------------' $ - let b:CVSSourceFile=fileName - let b:CVSCommand='CVSCommit' - set filetype=cvs + let b:HGSourceFile=fileName + let b:HGCommand='HGCommit' + set filetype=hg finally let &shellslash = shellSlashBak endtry endfunction -" Function: s:CVSDiff(...) {{{2 -function! s:CVSDiff(...) +" Function: s:HGDiff(...) {{{2 +function! s:HGDiff(...) if a:0 == 1 let revOptions = '-r' . a:1 let caption = a:1 . ' -> current' @@ -920,34 +863,25 @@ function! s:CVSDiff(...) let caption = '' endif - let cvsdiffopt=s:CVSGetOption('CVSCommandDiffOpt', 'wbBc') + let hgdiffopt=s:HGGetOption('HGCommandDiffOpt', 'w') - if cvsdiffopt == "" + if hgdiffopt == "" let diffoptionstring="" else - let diffoptionstring=" -" . cvsdiffopt . " " + let diffoptionstring=" -" . hgdiffopt . " " endif - let resultBuffer = s:CVSDoCommand('diff ' . diffoptionstring . revOptions , 'cvsdiff', caption) + let resultBuffer = s:HGDoCommand('diff ' . diffoptionstring . revOptions , 'hgdiff', caption) if resultBuffer != -1 set filetype=diff endif return resultBuffer endfunction -" Function: s:CVSEdit() {{{2 -function! s:CVSEdit() - return s:CVSDoCommand('edit', 'cvsedit', '') -endfunction -" Function: s:CVSEditors() {{{2 -function! s:CVSEditors() - return s:CVSDoCommand('editors', 'cvseditors', '') -endfunction - -" Function: s:CVSGotoOriginal(["!]) {{{2 -function! s:CVSGotoOriginal(...) - let origBuffNR = s:CVSCurrentBufferCheck() +" Function: s:HGGotoOriginal(["!]) {{{2 +function! s:HGGotoOriginal(...) + let origBuffNR = s:HGCurrentBufferCheck() if origBuffNR > 0 let origWinNR = bufwinnr(origBuffNR) if origWinNR == -1 @@ -960,7 +894,7 @@ function! s:CVSGotoOriginal(...) let buffnr = 1 let buffmaxnr = bufnr("$") while buffnr <= buffmaxnr - if getbufvar(buffnr, "CVSOrigBuffNR") == origBuffNR + if getbufvar(buffnr, "HGOrigBuffNR") == origBuffNR execute "bw" buffnr endif let buffnr = buffnr + 1 @@ -970,26 +904,26 @@ function! s:CVSGotoOriginal(...) endif endfunction -" Function: s:CVSFinishCommit(messageFile, targetDir, targetFile) {{{2 -function! s:CVSFinishCommit(messageFile, targetDir, targetFile, origBuffNR) +" Function: s:HGFinishCommit(messageFile, targetDir, targetFile) {{{2 +function! s:HGFinishCommit(messageFile, targetDir, targetFile, origBuffNR) if filereadable(a:messageFile) let oldCwd=getcwd() if strlen(a:targetDir) > 0 execute 'cd' escape(a:targetDir, ' ') endif - let resultBuffer=s:CVSCreateCommandBuffer('commit -F "' . a:messageFile . '" "'. a:targetFile . '"', 'cvscommit', '', a:origBuffNR) + let resultBuffer=s:HGCreateCommandBuffer('commit -F "' . a:messageFile . '" "'. a:targetFile . '"', 'hgcommit', '', a:origBuffNR) execute 'cd' escape(oldCwd, ' ') execute 'bw' escape(a:messageFile, ' *?\') silent execute 'call delete("' . a:messageFile . '")' - return s:CVSMarkOrigBufferForSetup(resultBuffer) + return s:HGMarkOrigBufferForSetup(resultBuffer) else echoerr "Can't read message file; no commit is possible." return -1 endif endfunction -" Function: s:CVSLog() {{{2 -function! s:CVSLog(...) +" Function: s:HGLog() {{{2 +function! s:HGLog(...) if a:0 == 0 let versionOption = "" let caption = '' @@ -998,23 +932,23 @@ function! s:CVSLog(...) let caption = a:1 endif - let resultBuffer=s:CVSDoCommand('log' . versionOption, 'cvslog', caption) + let resultBuffer=s:HGDoCommand('log' . versionOption, 'hglog', caption) if resultBuffer != "" set filetype=rcslog endif return resultBuffer endfunction -" Function: s:CVSRevert() {{{2 -function! s:CVSRevert() - return s:CVSMarkOrigBufferForSetup(s:CVSDoCommand('update -C', 'cvsrevert', '')) +" Function: s:HGRevert() {{{2 +function! s:HGRevert() + return s:HGMarkOrigBufferForSetup(s:HGDoCommand('revert', 'hgrevert', '')) endfunction -" Function: s:CVSReview(...) {{{2 -function! s:CVSReview(...) +" Function: s:HGReview(...) {{{2 +function! s:HGReview(...) if a:0 == 0 let versiontag="" - if s:CVSGetOption('CVSCommandInteractive', 0) + if s:HGGetOption('HGCommandInteractive', 0) let versiontag=input('Revision: ') endif if versiontag == "" @@ -1028,69 +962,65 @@ function! s:CVSReview(...) let versionOption=" -r " . versiontag . " " endif - let resultBuffer = s:CVSDoCommand('-q update -p' . versionOption, 'cvsreview', versiontag) + let resultBuffer = s:HGDoCommand('cat' . versionOption, 'hgreview', versiontag) if resultBuffer > 0 - let &filetype=getbufvar(b:CVSOrigBuffNR, '&filetype') + let &filetype=getbufvar(b:HGOrigBuffNR, '&filetype') endif return resultBuffer endfunction -" Function: s:CVSStatus() {{{2 -function! s:CVSStatus() - return s:CVSDoCommand('status', 'cvsstatus', '') -endfunction - -" Function: s:CVSUnedit() {{{2 -function! s:CVSUnedit() - return s:CVSDoCommand('unedit', 'cvsunedit', '') +" Function: s:HGStatus() {{{2 +function! s:HGStatus() + return s:HGDoCommand('status', 'hgstatus', '') endfunction -" Function: s:CVSUpdate() {{{2 -function! s:CVSUpdate() - return s:CVSMarkOrigBufferForSetup(s:CVSDoCommand('update', 'update', '')) + +" Function: s:HGUpdate() {{{2 +function! s:HGUpdate() + return s:HGMarkOrigBufferForSetup(s:HGDoCommand('update', 'update', '')) endfunction -" Function: s:CVSVimDiff(...) {{{2 -function! s:CVSVimDiff(...) - let originalBuffer = s:CVSCurrentBufferCheck() - let s:CVSCommandEditFileRunning = s:CVSCommandEditFileRunning + 1 +" Function: s:HGVimDiff(...) {{{2 +function! s:HGVimDiff(...) + let originalBuffer = s:HGCurrentBufferCheck() + let s:HGCommandEditFileRunning = s:HGCommandEditFileRunning + 1 try " If there's already a VimDiff'ed window, restore it. - " There may only be one CVSVimDiff original window at a time. + " There may only be one HGVimDiff original window at a time. if exists("s:vimDiffSourceBuffer") && s:vimDiffSourceBuffer != originalBuffer " Clear the existing vimdiff setup by removing the result buffers. - call s:CVSWipeoutCommandBuffers(s:vimDiffSourceBuffer, 'vimdiff') + call s:HGWipeoutCommandBuffers(s:vimDiffSourceBuffer, 'vimdiff') endif " Split and diff if(a:0 == 2) " Reset the vimdiff system, as 2 explicit versions were provided. if exists('s:vimDiffSourceBuffer') - call s:CVSWipeoutCommandBuffers(s:vimDiffSourceBuffer, 'vimdiff') + call s:HGWipeoutCommandBuffers(s:vimDiffSourceBuffer, 'vimdiff') endif - let resultBuffer = s:CVSReview(a:1) + let resultBuffer = s:HGReview(a:1) if resultBuffer < 0 - echomsg "Can't open CVS revision " . a:1 + echomsg "Can't open HG revision " . a:1 return resultBuffer endif - let b:CVSCommand = 'vimdiff' + let b:HGCommand = 'vimdiff' diffthis let s:vimDiffBufferCount = 1 let s:vimDiffScratchList = '{'. resultBuffer . '}' " If no split method is defined, cheat, and set it to vertical. try - call s:CVSOverrideOption('CVSCommandSplit', s:CVSGetOption('CVSCommandDiffSplit', s:CVSGetOption('CVSCommandSplit', 'vertical'))) - let resultBuffer=s:CVSReview(a:2) + call s:HGOverrideOption('HGCommandSplit', s:HGGetOption('HGCommandDiffSplit', s:HGGetOption('HGCommandSplit', 'vertical'))) + let resultBuffer=s:HGReview(a:2) finally - call s:CVSOverrideOption('CVSCommandSplit') + call s:HGOverrideOption('HGCommandSplit') endtry if resultBuffer < 0 - echomsg "Can't open CVS revision " . a:1 + echomsg "Can't open HG revision " . a:1 return resultBuffer endif - let b:CVSCommand = 'vimdiff' + let b:HGCommand = 'vimdiff' diffthis let s:vimDiffBufferCount = 2 let s:vimDiffScratchList = s:vimDiffScratchList . '{'. resultBuffer . '}' @@ -1098,22 +1028,22 @@ function! s:CVSVimDiff(...) " Add new buffer try " Force splitting behavior, otherwise why use vimdiff? - call s:CVSOverrideOption("CVSCommandEdit", "split") - call s:CVSOverrideOption("CVSCommandSplit", s:CVSGetOption('CVSCommandDiffSplit', s:CVSGetOption('CVSCommandSplit', 'vertical'))) + call s:HGOverrideOption("HGCommandEdit", "split") + call s:HGOverrideOption("HGCommandSplit", s:HGGetOption('HGCommandDiffSplit', s:HGGetOption('HGCommandSplit', 'vertical'))) if(a:0 == 0) - let resultBuffer=s:CVSReview() + let resultBuffer=s:HGReview() else - let resultBuffer=s:CVSReview(a:1) + let resultBuffer=s:HGReview(a:1) endif finally - call s:CVSOverrideOption("CVSCommandEdit") - call s:CVSOverrideOption("CVSCommandSplit") + call s:HGOverrideOption("HGCommandEdit") + call s:HGOverrideOption("HGCommandSplit") endtry if resultBuffer < 0 - echomsg "Can't open current CVS revision" + echomsg "Can't open current HG revision" return resultBuffer endif - let b:CVSCommand = 'vimdiff' + let b:HGCommand = 'vimdiff' diffthis if !exists('s:vimDiffBufferCount') @@ -1121,7 +1051,7 @@ function! s:CVSVimDiff(...) let s:vimDiffBufferCount = 2 let s:vimDiffScratchList = '{' . resultBuffer . '}' - " This could have been invoked on a CVS result buffer, not the + " This could have been invoked on a HG result buffer, not the " original buffer. wincmd W execute 'buffer' originalBuffer @@ -1151,168 +1081,115 @@ function! s:CVSVimDiff(...) let saveModeline = getbufvar(currentBuffer, '&modeline') try call setbufvar(currentBuffer, '&modeline', 0) - silent do CVSCommand User CVSVimDiffFinish + silent do HGCommand User HGVimDiffFinish finally call setbufvar(currentBuffer, '&modeline', saveModeline) endtry return resultBuffer finally - let s:CVSCommandEditFileRunning = s:CVSCommandEditFileRunning - 1 + let s:HGCommandEditFileRunning = s:HGCommandEditFileRunning - 1 endtry endfunction -" Function: s:CVSWatch(onoff) {{{2 -function! s:CVSWatch(onoff) - if a:onoff !~ '^\c\%(on\|off\|add\|remove\)$' - echoerr "Argument to CVSWatch must be one of [on|off|add|remove]" - return -1 - end - return s:CVSDoCommand('watch ' . tolower(a:onoff), 'cvswatch', '') -endfunction - -" Function: s:CVSWatchers() {{{2 -function! s:CVSWatchers() - return s:CVSDoCommand('watchers', 'cvswatchers', '') -endfunction - " Section: Command definitions {{{1 " Section: Primary commands {{{2 -com! CVSAdd call s:CVSAdd() -com! -nargs=? CVSAnnotate call s:CVSAnnotate() -com! -bang -nargs=? CVSCommit call s:CVSCommit(, ) -com! -nargs=* CVSDiff call s:CVSDiff() -com! CVSEdit call s:CVSEdit() -com! CVSEditors call s:CVSEditors() -com! -bang CVSGotoOriginal call s:CVSGotoOriginal() -com! -nargs=? CVSLog call s:CVSLog() -com! CVSRevert call s:CVSRevert() -com! -nargs=? CVSReview call s:CVSReview() -com! CVSStatus call s:CVSStatus() -com! CVSUnedit call s:CVSUnedit() -com! CVSUpdate call s:CVSUpdate() -com! -nargs=* CVSVimDiff call s:CVSVimDiff() -com! -nargs=1 CVSWatch call s:CVSWatch() -com! CVSWatchAdd call s:CVSWatch('add') -com! CVSWatchOn call s:CVSWatch('on') -com! CVSWatchOff call s:CVSWatch('off') -com! CVSWatchRemove call s:CVSWatch('remove') -com! CVSWatchers call s:CVSWatchers() +com! HGAdd call s:HGAdd() +com! -nargs=? HGAnnotate call s:HGAnnotate() +com! -bang -nargs=? HGCommit call s:HGCommit(, ) +com! -nargs=* HGDiff call s:HGDiff() +com! -bang HGGotoOriginal call s:HGGotoOriginal() +com! -nargs=? HGLog call s:HGLog() +com! HGRevert call s:HGRevert() +com! -nargs=? HGReview call s:HGReview() +com! HGStatus call s:HGStatus() +com! HGUpdate call s:HGUpdate() +com! -nargs=* HGVimDiff call s:HGVimDiff() -" Section: CVS buffer management commands {{{2 -com! CVSDisableBufferSetup call CVSDisableBufferSetup() -com! CVSEnableBufferSetup call CVSEnableBufferSetup() +" Section: HG buffer management commands {{{2 +com! HGDisableBufferSetup call HGDisableBufferSetup() +com! HGEnableBufferSetup call HGEnableBufferSetup() -" Allow reloading cvscommand.vim -com! CVSReload unlet! loaded_cvscommand | runtime plugin/cvscommand.vim +" Allow reloading hgcommand.vim +com! HGReload unlet! loaded_hgcommand | runtime plugin/hgcommand.vim " Section: Plugin command mappings {{{1 -nnoremap CVSAdd :CVSAdd -nnoremap CVSAnnotate :CVSAnnotate -nnoremap CVSCommit :CVSCommit -nnoremap CVSDiff :CVSDiff -nnoremap CVSEdit :CVSEdit -nnoremap CVSEditors :CVSEditors -nnoremap CVSGotoOriginal :CVSGotoOriginal -nnoremap CVSClearAndGotoOriginal :CVSGotoOriginal! -nnoremap CVSLog :CVSLog -nnoremap CVSRevert :CVSRevert -nnoremap CVSReview :CVSReview -nnoremap CVSStatus :CVSStatus -nnoremap CVSUnedit :CVSUnedit -nnoremap CVSUpdate :CVSUpdate -nnoremap CVSVimDiff :CVSVimDiff -nnoremap CVSWatchers :CVSWatchers -nnoremap CVSWatchAdd :CVSWatchAdd -nnoremap CVSWatchOn :CVSWatchOn -nnoremap CVSWatchOff :CVSWatchOff -nnoremap CVSWatchRemove :CVSWatchRemove +nnoremap HGAdd :HGAdd +nnoremap HGAnnotate :HGAnnotate +nnoremap HGCommit :HGCommit +nnoremap HGDiff :HGDiff +nnoremap HGGotoOriginal :HGGotoOriginal +nnoremap HGClearAndGotoOriginal :HGGotoOriginal! +nnoremap HGLog :HGLog +nnoremap HGRevert :HGRevert +nnoremap HGReview :HGReview +nnoremap HGStatus :HGStatus +nnoremap HGUpdate :HGUpdate +nnoremap HGVimDiff :HGVimDiff +nnoremap HGWatchers :HGWatchers +nnoremap HGWatchAdd :HGWatchAdd +nnoremap HGWatchOn :HGWatchOn +nnoremap HGWatchOff :HGWatchOff +nnoremap HGWatchRemove :HGWatchRemove " Section: Default mappings {{{1 -if !hasmapto('CVSAdd') - nmap ca CVSAdd -endif -if !hasmapto('CVSAnnotate') - nmap cn CVSAnnotate +if !hasmapto('HGAdd') + nmap hga HGAdd endif -if !hasmapto('CVSClearAndGotoOriginal') - nmap cG CVSClearAndGotoOriginal +if !hasmapto('HGAnnotate') + nmap hgn HGAnnotate endif -if !hasmapto('CVSCommit') - nmap cc CVSCommit -endif -if !hasmapto('CVSDiff') - nmap cd CVSDiff +if !hasmapto('HGClearAndGotoOriginal') + nmap hgG HGClearAndGotoOriginal endif -if !hasmapto('CVSEdit') - nmap ce CVSEdit -endif -if !hasmapto('CVSEditors') - nmap ci CVSEditors +if !hasmapto('HGCommit') + nmap hgc HGCommit endif -if !hasmapto('CVSGotoOriginal') - nmap cg CVSGotoOriginal +if !hasmapto('HGDiff') + nmap hgd HGDiff endif -if !hasmapto('CVSLog') - nmap cl CVSLog -endif -if !hasmapto('CVSRevert') - nmap cq CVSRevert +if !hasmapto('HGGotoOriginal') + nmap hgg HGGotoOriginal endif -if !hasmapto('CVSReview') - nmap cr CVSReview -endif -if !hasmapto('CVSStatus') - nmap cs CVSStatus +if !hasmapto('HGLog') + nmap hgl HGLog endif -if !hasmapto('CVSUnedit') - nmap ct CVSUnedit +if !hasmapto('HGRevert') + nmap hgq HGRevert endif -if !hasmapto('CVSUpdate') - nmap cu CVSUpdate -endif -if !hasmapto('CVSVimDiff') - nmap cv CVSVimDiff +if !hasmapto('HGReview') + nmap hgr HGReview endif -if !hasmapto('CVSWatchers') - nmap cwv CVSWatchers -endif -if !hasmapto('CVSWatchAdd') - nmap cwa CVSWatchAdd +if !hasmapto('HGStatus') + nmap hgs HGStatus endif -if !hasmapto('CVSWatchOn') - nmap cwn CVSWatchOn +if !hasmapto('HGUpdate') + nmap hgu HGUpdate endif -if !hasmapto('CVSWatchOff') - nmap cwf CVSWatchOff -endif -if !hasmapto('CVSWatchRemove') - nmap cwr CVSWatchRemove +if !hasmapto('HGVimDiff') + nmap hgv HGVimDiff endif " Section: Menu items {{{1 -silent! aunmenu Plugin.CVS -amenu &Plugin.CVS.&Add CVSAdd -amenu &Plugin.CVS.A&nnotate CVSAnnotate -amenu &Plugin.CVS.&Commit CVSCommit -amenu &Plugin.CVS.&Diff CVSDiff -amenu &Plugin.CVS.&Edit CVSEdit -amenu &Plugin.CVS.Ed&itors CVSEditors -amenu &Plugin.CVS.&Log CVSLog -amenu &Plugin.CVS.Revert CVSRevert -amenu &Plugin.CVS.&Review CVSReview -amenu &Plugin.CVS.&Status CVSStatus -amenu &Plugin.CVS.Unedi&t CVSUnedit -amenu &Plugin.CVS.&Update CVSUpdate -amenu &Plugin.CVS.&VimDiff CVSVimDiff -amenu &Plugin.CVS.&Watchers CVSWatchers -amenu &Plugin.CVS.WatchAdd CVSWatchAdd -amenu &Plugin.CVS.WatchOn CVSWatchOn -amenu &Plugin.CVS.WatchOff CVSWatchOff -amenu &Plugin.CVS.WatchRemove CVSWatchRemove +silent! aunmenu Plugin.HG +amenu &Plugin.HG.&Add HGAdd +amenu &Plugin.HG.A&nnotate HGAnnotate +amenu &Plugin.HG.&Commit HGCommit +amenu &Plugin.HG.&Diff HGDiff +amenu &Plugin.HG.&Log HGLog +amenu &Plugin.HG.Revert HGRevert +amenu &Plugin.HG.&Review HGReview +amenu &Plugin.HG.&Status HGStatus +amenu &Plugin.HG.&Update HGUpdate +amenu &Plugin.HG.&VimDiff HGVimDiff +amenu &Plugin.HG.&Watchers HGWatchers +amenu &Plugin.HG.WatchAdd HGWatchAdd +amenu &Plugin.HG.WatchOn HGWatchOn +amenu &Plugin.HG.WatchOff HGWatchOff +amenu &Plugin.HG.WatchRemove HGWatchRemove " Section: Autocommands to restore vimdiff state {{{1 -function! s:CVSVimDiffRestore(vimDiffBuff) - let s:CVSCommandEditFileRunning = s:CVSCommandEditFileRunning + 1 +function! s:HGVimDiffRestore(vimDiffBuff) + let s:HGCommandEditFileRunning = s:HGCommandEditFileRunning + 1 try if exists("s:vimDiffSourceBuffer") if a:vimDiffBuff == s:vimDiffSourceBuffer @@ -1366,22 +1243,23 @@ function! s:CVSVimDiffRestore(vimDiffBuf endif endif finally - let s:CVSCommandEditFileRunning = s:CVSCommandEditFileRunning - 1 + let s:HGCommandEditFileRunning = s:HGCommandEditFileRunning - 1 endtry endfunction -augroup CVSVimDiffRestore +augroup HGVimDiffRestore au! - au BufUnload * call s:CVSVimDiffRestore(expand("")) + au BufUnload * call s:HGVimDiffRestore(expand("")) augroup END " Section: Optional activation of buffer management {{{1 -if s:CVSGetOption('CVSCommandEnableBufferSetup', 0) - call CVSEnableBufferSetup() +if s:HGGetOption('HGCommandEnableBufferSetup', 0) + call HGEnableBufferSetup() endif " Section: Plugin completion {{{1 -let loaded_cvscommand=2 -silent do CVSCommand User CVSPluginFinish +let loaded_hgcommand=2 +silent do HGCommand User HGPluginFinish +" vim:se expandtab sts=2 sw=2: