Differences between revisions 1 and 2
Revision 1 as of 2010-02-09 15:27:29
Size: 3513
Editor: frank
Comment:
Revision 2 as of 2010-02-09 21:37:58
Size: 5049
Editor: frank
Comment:
Deletions are marked like this. Additions are marked like this.
Line 13: Line 13:
Line 14: Line 15:
this extension. Making changes to the client specification Views causes
problems when synchronizing the repositories, and should be avoided.
this extension, and the working copy belonging to this client spec must be
visible to hg.
Line 78: Line 80:


{{{
[perfarce]
keep = True
submit = False
lowercasepaths = False
clientuser = search_regex replacement_string
}}}

If the '''keep''' option is true (this is default) then the Perfarce extension will keep the p4 workarea updated with the current top of tree in Perforce.
If '''keep''' is false then the Perfarce extension does not leave files in the p4 workarea unless it is creating a changelist.

If the '''submit''' option is true then Perfarce will automatically submit a changelist when pushing changes to the p4 depot.
The default is to create a pending changelist, and let the user review this before submitting, either with p4 submit or hg p4submit.

If the '''lowercasepaths''' option is true then the Perfarce extension forces all directory names received from p4 to lowercase, but leaving filenames unchanged.
The default is to preserve filenames.

The '''clientuser''' option allows for 'cheap' multiuser operation with Perforce. The option argument is split on the first space into
a search regular expression and a replacement string. If the regular expression matches the client spec name of an imported p4 changelist then
the username for the changelist is changed to the value of the replacement string after it is capitalized. The replacement string can
use regex matches to substitute part of the client spec name.An example could be
{{{
clientuser = ([a-z]+)\.([a-z-]+)--[a-zA-Z0-9-_.]+ \1 \2 <\1.\2@example.com>
}}}
which turns "firstname.lastname--my-client-name" into "Firstname Lastname <firstname.lastname@example.com>"



Perfarce Extension

This extension is not distributed with Mercurial.

Author: Frank Kingswood

Public repository: http://www.kingswood-consulting.co.uk/hg/perfarce

1. Overview

This extension modifies the remote repository handling so that repository paths that resemble

  • p4://p4server[:port]/clientname

cause operations on the named p4 client specification on the p4 server.

The client specification must already exist on the server before using this extension, and the working copy belonging to this client spec must be visible to hg.

2. Commands

  • outgoing If the destination repository name starts with p4:// then
    • this reports files affected by the revision(s) that are in the local repository but not in the p4 depot.
    push If the destination repository name starts with p4:// then
    • this exports changes from the local repository to the p4 depot. If no revision is specified then all changes since the last p4 changelist are pushed. In either case, all revisions to be pushed are folded into a single p4 changelist. Optionally the resulting changelist is submitted to the p4 server, controlled by the --submit option to push, or by setting
      • --config perfarce.submit=True
      If the option
      • --config perfarce.keep=False
      is False then after a successful submit the files in the p4 workarea will be deleted.
    pull If the source repository name starts with p4:// then this
    • imports changes from the p4 depot, automatically creating merges of changelists submitted by hg push. If the option
      • --config perfarce.keep=False
      is False then the import does not leave files in the p4 workarea, otherwise the p4 workarea will be updated with the new files. The option
      • --config perfarce.clientuser=search replace
      can be used to enable quasi-multiuser operation, where several users submit changes to p4 with the same user name and have their real user name in the p4 client spec. The search and replace regular expressions describe the substitution to be made to turn a client spec name into a user name. If the search regex does not match then the username is left unchanged.
    incoming If the source repository name starts with p4:// then this
    • reports changes in the p4 depot that are not yet in the local repository.
    clone If the source repository name starts with p4:// then this
    • creates the destination repository and pulls all changes from the p4 depot into it. If the option
      • --config perfarce.lowercasepaths=False
      is True then the import forces all paths in lowercase, otherwise paths are recorded unchanged. Filename case is always preserved. This setting is a workaround to handle Perforce depots containing a path spelled differently from file to file (e.g. path/foo and PAth/bar).

3. Configuration

Configure your .hgrc to enable the extension by adding following lines:

[extensions]
perfarce = /path/to/perfarce.py

[perfarce]
keep = True
submit = False
lowercasepaths = False
clientuser = search_regex replacement_string

If the keep option is true (this is default) then the Perfarce extension will keep the p4 workarea updated with the current top of tree in Perforce. If keep is false then the Perfarce extension does not leave files in the p4 workarea unless it is creating a changelist.

If the submit option is true then Perfarce will automatically submit a changelist when pushing changes to the p4 depot. The default is to create a pending changelist, and let the user review this before submitting, either with p4 submit or hg p4submit.

If the lowercasepaths option is true then the Perfarce extension forces all directory names received from p4 to lowercase, but leaving filenames unchanged. The default is to preserve filenames.

The clientuser option allows for 'cheap' multiuser operation with Perforce. The option argument is split on the first space into a search regular expression and a replacement string. If the regular expression matches the client spec name of an imported p4 changelist then the username for the changelist is changed to the value of the replacement string after it is capitalized. The replacement string can use regex matches to substitute part of the client spec name.An example could be

clientuser = ([a-z]+)\.([a-z-]+)--[a-zA-Z0-9-_.]+ \1 \2 <\1.\2@example.com>

which turns "firstname.lastname--my-client-name" into "Firstname Lastname <firstname.lastname@example.com>"


CategoryExtensionsByOthers

PerfarceExtension (last edited 2023-04-06 01:29:36 by Hudson Oliveira)