History Report a problem
Article Edit this page Discussion

Autocheckout from perforce

From Vim Tips Wiki

Jump to: navigation, search
 

Tip 176Previous TipNext Tip

Created: December 8, 2001 Complexity: intermediate Author: Steven Grady Minimum version: 6.0 Karma: 12/11 Imported from: Tip#176


The following code automatically checks out files from perforce when the user modifies them. It first confirms the check-out with the user.

(Perforce is a commercial version control system. I imagine this could be modified for RCS, CVS, etc., but I don't use those.)

I'm a Vim newbie -- I've used vi since 1984, but just started with Vim a couple days ago. Color me impressed! Please excuse any stupidity in the code..

Note that this function needs the "P4HOME" environment variable to be set. I could extract it by invoking "p4 client", but I don't want to invoke p4 every time I start Vim. So I assume the user sets it in the environment.

" Set a buffer-local variable to the perforce path, if this file is under the perforce root.
function IsUnderPerforce()
  if exists("$P4HOME")
    if expand("%:p") =~ ("^" . $P4HOME)
      let b:p4path = substitute(expand("%:p"), $P4HOME, "//depot", "")
    endif
  endif
endfunction

" Confirm with the user, then checkout a file from perforce.
function P4Checkout()
  if exists("b:p4path")
    if (confirm("Checkout from Perforce?", "&Yes\n&No", 1) == 1)
      call system("p4 edit " . b:p4path . " > /dev/null")
      if v:shell_error == 0
        set noreadonly
      endif
    endif
  endif
endfunction

if !exists("au_p4_cmd")
  let au_p4_cmd=1
  au BufEnter * call IsUnderPerforce()
  au FileChangedRO * call P4Checkout()
endif

[edit] Comments

 

I think it only works if you've checked out the entire depot. I only have one branch checked out (//depot/main/...) and it doesn't work because the substitution just puts in //depot and not //depot/main. I just fixed that in my version of the code and it works now, but I think in addition to $P4HOME one needs a $P4ROOT or some such for the root of what you checked out. Of course you could get both of these from p4client, but it sounds like in the original tip this was undesirable...just something to be aware of for other users of this excellent tip.


Check out this plugin for superset of functionality (it also automagically checks files out from perforce) script#240


Rate this article:

Share this article:

Hubs Highlights International Sites Wikia messages
Entertainment
Gaming
Cartoons & Comics
Science Fiction
Hobbies
Sports
See all...
Grand Theft Auto
Doctor Who
Legend of Zelda Wiki
Terminator Wiki
Everquest II Wiki
Mystery Science Theater 3000
German
Spanish
Chinese
Japanese
More...
Wikia is hiring for several open positions
Send this article to a friend
"Autocheckout from perforce"
 
 
Hi!

I thought you'd like this page from Wikia!

http://vim.wikia.com

Come check it out!
Send confirmation