view contrib/vim/hg-menu.vim @ 48976:877d7e1a4223 stable

amend: fix amend with copies in extras If copy information is stored only in the commit extras and not in filelogs, then they get lost on amend if the file wasn't also modified in the working copy. That's because we create `filectx` object from the old commit in those cases, and the `.copysource()` of such objects read only from the filelog. This patch fixes it by always creating a new `memfilectx` in these cases, passing the calculated copy information to it. Differential Revision: https://phab.mercurial-scm.org/D12387
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 18 Mar 2022 21:15:54 -0700
parents ea7b982b6c08
children
line wrap: on
line source

" vim600: set foldmethod=marker:
" =============================================================================
"  Name Of File: hg-menu.vim
"   Description: Interface to Mercurial Version Control.
"        Author: Steve Borho (modified Jeff Lanzarotta's RCS script)
"          Date: Wednesday, October 5, 2005
"       Version: 0.1.0
"     Copyright: None.
"         Usage: These command and gui menu displays useful hg functions
" Configuration: Your hg executable must be in your path.
" =============================================================================

" Section: Init {{{1
if exists("loaded_hg_menu")
  finish
endif
let loaded_hg_menu = 1

" Section: Menu Options {{{1
if has("gui")
"  amenu H&G.Commit\ File<Tab>,ci :!hg commit %<CR>:e!<CR>
"  amenu H&G.Commit\ All<Tab>,call :!hg commit<CR>:e!<CR>
"  amenu H&G.-SEP1-        <nul>
  amenu H&G.Add<Tab>\\add :!hg add %<CR><CR>
  amenu H&G.Forget\ Add<Tab>\\fgt :!hg forget %<CR><CR>
  amenu H&G.Show\ Differences<Tab>\\diff :call ShowResults("FileDiff", "hg\ diff")<CR><CR>
  amenu H&G.Revert\ to\ Last\ Version<Tab>\\revert :!hg revert %<CR>:e!<CR>
  amenu H&G.Show\ History<Tab>\\log :call ShowResults("FileLog", "hg\ log")<CR><CR>
  amenu H&G.Annotate<Tab>\\an :call ShowResults("annotate", "hg\ annotate")<CR><CR>
  amenu H&G.-SEP1-        <nul>
  amenu H&G.Repo\ Status<Tab>\\stat :call ShowResults("RepoStatus", "hg\ status")<CR><CR>
  amenu H&G.Pull<Tab>\\pull :!hg pull<CR>:e!<CR>
  amenu H&G.Update<Tab>\\upd :!hg update<CR>:e!<CR>
endif

" Section: Mappings {{{1
if(v:version >= 600)
  " The default Leader is \ 'backslash'
  map <Leader>add       :!hg add %<CR><CR>
  map <Leader>fgt       :!hg forget %<CR><CR>
  map <Leader>diff      :call ShowResults("FileDiff", "hg\ diff")<CR><CR>
  map <Leader>revert    :!hg revert %<CR>:e!<CR>
  map <Leader>log       :call ShowResults("FileLog", "hg\ log")<CR><CR>
  map <Leader>an        :call ShowResults("annotate", "hg\ annotate")<CR><CR>
  map <Leader>stat      :call ShowResults("RepoStatus", "hg\ status")<CR><CR>
  map <Leader>upd       :!hg update<CR>:e!<CR>
  map <Leader>pull      :!hg pull<CR>:e!<CR>
else
  " pre 6.0, the default Leader was a comma
  map ,add          :!hg add %<CR><CR>
  map ,fgt          :!hg forget %<CR><CR>
  map ,diff         :call ShowResults("FileDiff", "hg\ diff")<CR><CR>
  map ,revert       :!hg revert<CR>:e!<CR>
  map ,log          :call ShowResults("FileLog", "hg\ log")<CR><CR>
  map ,an           :call ShowResults("annotate", "hg\ annotate")<CR><CR>
  map ,stat         :call ShowResults("RepoStatus", "hg\ status")<CR><CR>
  map ,upd          :!hg update<CR>:e!<CR>
  map ,pull         :!hg pull<CR>:e!<CR>
endif

" Section: Functions {{{1
" Show the log results of the current file with a revision control system.
function! ShowResults(bufferName, cmdName)
  " Modify the shortmess option:
  " A  don't give the "ATTENTION" message when an existing swap file is
  "    found.
  set shortmess+=A

  " Get the name of the current buffer.
  let currentBuffer = bufname("%")

  " If a buffer with the name rlog exists, delete it.
  if bufexists(a:bufferName)
    execute 'bd! ' a:bufferName
  endif

  " Create a new buffer.
  execute 'new ' a:bufferName

  " Execute the command.
  execute 'r!' a:cmdName ' ' currentBuffer

  " Make is so that the file can't be edited.
  setlocal nomodified
  setlocal nomodifiable
  setlocal readonly

  " Go to the beginning of the buffer.
  execute "normal 1G"

  " Restore the shortmess option.
  set shortmess-=A
endfunction