Perforce — popular version control system that is often used in development of commercial software. Links to information about this system you can find at section "Additional information". Users can work with this system from Emacs if they install p4 package.
To install this package you need to download it from project's site and put it to place, where Emacs can find it. And after this, you can load it with following command:
This package can work with GNU Emacs and XEmacs. All components (Ediff, etc.), that are needed to its work come together with Emacs's distribution, so you doesn't need to install anything else.
All functions, implemented by this package we can split into several groups — work with repository, obtaining information about files, work with files and branches, work with changes, etc. All these topics will described in following sections.
User can execute functions via key bindings, calling they by name, or using the
that will available after loading of package. This menu contains almost all functions,
implemented by package. Some of functions also accept additional arguments, that could
passed via as standard prefix arguments (via
C-u key binding).
Synchronisation of local files with repository is performed by
p4-get function (
C-x p G).
This function can synchronise individual files, and whole directory content. User can
pass version number to which files will updated.
After retrieving files from repository, user can start change them. To open file for
modification, user can use
p4-edit function (
C-x p e) — it change state of file from
read-only and allows to edit it. User can specify changeset number for new changes and also,
specify type of file. User can also open already opened file with new parameters with
p4-reopen function (
C-x p E). And, user can also open file directly in repository, with
p4-depot-find-file function, that bound to
C-x p C-f.
Addition of files is performed with
p4-add function (
C-x p a). By passing additional
arguments, user can specify file type (binary or text), and link this addition to concrete
changeset. If file type was not specified, then Perforce try to detect it automatically.
To delete file from repository, user can use
p4-delete function (
C-x p x). After
execution of this function file is deleted from repository and from client's machine. If
file was already opened, then it re-opened to deletion and assigned to next unconfirmed
changeset. User can also rename file with
p4-rename function (
C-x p m), that also
supports usage of globs, so user can rename bunch of files with one function.
P4 supports work with jobs, existing in Perforce — package implements several functions
for this task. The
p4-jobs function (
C-x p J) is used to get list of all tasks, defined
in VCS. By specifying additional arguments, user can narrow list of tasks (list of
supported arguments you can find in documentation for p4 package). Creation and
modification of job is performed with
p4-job function (
C-x p j). User can also use it to
delete job, if he specify prefix argument. And to link job with changeset number, user
p4-fix function (
C-x p X).
To change branch specification there is
p4-branch function, that bound to
C-x p B. User
can perform merging of changes between branches with
p4-integ function (
C-x p I), that
allows to perform merging between concrete files, and whole branches. By specifying
prefix argument, user can select to which changeset this merging will applied.
The package also supports work with labels. To get list of labels the
C-x p L) could be used. Modification of label's specification is performed with
C-x p L), and to synchronize labels the
p4-labelsync function (
C-x p l) is
Work with changes is important part of all version control systems. The p4 implements many functions related to work with changes.
To retrieve list of changes, user can use
p4-changes function, that bound to
C-x p C.
This function displays list of delayed and confirmed changes for given file. If user
executes this function without any arguments, then this function displays list of changes
for files in current directory and all sub-directories. To get list of files, that are
opened for delayed change, user can use
p4-opened function (
C-x p o).
Detailed list of changes could be retrieved with
p4-diff function (
C-x p =)
— it displays list of changes between current file and its version in repository. But
changes for current file are displayed only if this file was opened for editing. If
current file wasn't opened for editing, then this function displays list of changes for all
opened files and their versions in repository. And by specifying command line arguments
diff, user can display only data for new files, for opened files, etc.
p4-diff function, there are several additional functions, that could be used to
get detailed list of changes. To compare to files in repository, user can use
C-x p d). The
p4-diff-head function displays changes between current file and
its latest version in repository. There are also functions, that perform same operations
as their counterparts, but use Ediff to display changes —
To commit changes to repository, user can use
p4-submit function (
C-x p S) — it commits
delayed changeset and all files in it. If program couldn't lock before commit all files,
related to changeset, then commit process is canceled. User can notify other users about
modification he did. To do this, he can use
p4-notify function (
C-x p n) to perform
manual notification. But he also able to perform automatic notification of users on each
commit. List of users, that will be notified on each commit, is specified by
p4-set-notify-list function. All notifications are performed via e-mail, so you need to
set correct path to
To cancel changes in current file user can use
p4-revert function, that bound to
C-x p r.
SHOW-OUTPUT argument has true value, then results of execution of this function are
displayed in the
*P4 Output* buffer. To update not opened files from repository, user can
p4-refresh function (
C-x p R), so you will need to use both these functions to update
opened and not opened files from repository.
To obtain information about concrete changeset user can use
p4-describe function (
D). It displays description of changeset, its number, user name, date when it was
created, and other information, also including list of files, detailed list of changes,
To view history of changes for current file the
p4-filelog function (
C-x p f) could be
used. This information shown in decreasing order, until the time when file was added to
To get file from repository together with history of changes, user can use
p4-print-with-rev-history function (
C-x p V). To get only file without history, user can
use another function —
C-x p p). Both these function doesn't change list of
files retrieved by current user.
To get information about Perforce's client and server the
p4-info function (
C-x p i) could
be used. It displays information about client — user name, name of the client, and work
directory, and also some information about current server.
To find information about relation between local files and files in repository, user can
p4-where function (
C-x p w). To display list of versions, that was fetched from
repository in last synchronisation, user can use
p4-have function (
C-x p H).
There is also function
C-x p F) that could be used to retrieve a list of files
from repository. User can retrieve full list of files, or only list of files matching
The p4 allows user to administer Perforce's repository without leaving Emacs. This includes administration of users, groups, and also clients.
Creation of new user is performed with
p4-user function (
C-x p u). The same function could
be used to change specification for existing user. This specification is stored in
temporary file, and editor, specified by
EDITOR environment variable, is invoked on it.
User's data includes name of user, its full name, access level and other parameters.
Usually user's specification is created automatically on execution of every function, that
can update repository. List of existing users could be retrieved with
C-x p U).
To list groups of users on the
p4-groups could be used, and to create or modify groups
user can use
p4-group function. But to create group of users, current user should have
special access rights.
Editing of client's specification is performed with
p4-client function (
C-x p c).
Client's specification includes its name, description, list of files, that will available
in repository, and other parameters. By default, new clients are created with ability to
see all files in repository.
C-x p h key bindings runs
p4-help function, that could be used to getting help about
whole package or concrete function. All key bindings, provided by p4 package, could be
p4-describe-bindings function (
C-x p ?).
Version number of p4 package could be retrieved with
p4-emacs-version function (
C-x p v).
And if you find a bug in this package, you can use
p4-bug-report function (
C-x p b) to
submit bug report.
If Perforce server is not available you can disable checking of file versions when opening
them. This could be performed with
p4-toggle-vc-mode function (
C-x p t).
To work with p4 (and Perforce) you need to set some environment variables —
P4PORT. You can use special functions to do this:
C-x p s) and
C-x p P). You can get client's name, that currently used to work with
p4-get-client-name function (
C-x p g).
With standard Emacs's customization routines user can set different parameters of the package — path to executable files, variables, controlling output, etc. Corresponding customization group has same name as package — p4.
Full description of functions and key bindings of p4 package you can find at the project's site. Additional information about Perforce could be found at company's site. Besides it, there are many descriptions of this package in Internet.
Last change: 05.03.2013 16:54