Release Notes for
P4Python, the Python interface to the Perforce SCM System
GA Release 2008.1
September 25, 2008
Introduction
This document lists all user-visible changes to P4Python
from release 2007.3, the first supported P4Python release.
Perforce numbers releases YYYY.R/CCCCC, for example, 2007.3/30547.
YYYY is the year; R is the release of that year; CCCCC is the
bug fix change level. Each bug fix in these release notes is
marked by its change number. Any build includes all bug fixes
of all previous releases and all bug fixes of the current
release up to the bug fix change level.
To display the version of P4Python you have installed,
start Python and issue the following commands:
>>> import P4
>>> print P4.P4.identify()
Installing P4Python
Windows users can download an installer for P4Python from the
Perforce FTP site. Users on other platforms must build from
source.
Upgrading P4Python
Before installing P4Python 2008.1, uninstall any older version of P4Python.
The previous version of P4Python consisted of the following files:
p4.py
p4.pyc
p4.pyo
P4Client.pyd
Building P4Python from Source
1. Download a suitable Perforce API build from the Perforce FTP site
2. Extract the API tarfile into an empty directory
3. Modify the file setup.cfg to reflect the location of the API:
p4_api=<api-dir>
3. Build P4Python with the following command:
python setup.py build
python p4test.py
NOTE: The test harness requires that 'p4d' be installed and
in the PATH
4. To install P4Python, run the following command. On UNIX systems,
this step must be run as root:
python setup.py install
Ensure that the umask is set correctly (typically 0022) before
running the install. With a umask of 027, for example, the resulting
installed files are accessible only by users of group root.
Compatibility Statements
1. Server Compatibility
Unless stated otherwise, you can use any release
of P4Python with any release of the Perforce server later than
2001.1
2. API Compatibility
The 2008.1 release of P4Python requires the 2008.1 Perforce API. Older
releases (down to 2006.2) might work but are not supported.
3. Python compatibility
The 2008.1 release of P4Python has been build and tested with Python 2.5.1.
4. Platform compatibility
This release is certified on the following platforms:
Linux 2.6 x86
Solaris 10 x86
NT x86
FreeBSD 6 x86
Mac OSX 10.5 x86
5. Compiler Compatibility
To build P4Python from source, you MUST use a version of
P4Python that has been compiled with the same compiler used to
build the Perforce C++ API. For most platforms, use gcc/g++.
Attempting to use a different compiler or a different version
of the compiler will probably result in linker errors due to
differences in name handling between compilers.
On Windows platforms, Python 2.5.1 and the P4Python installer
are built with Visual Studio 2003. You can download the
static version of the Perforce API for this compiler from the
Perforce FTP site and build P4Python yourself. Visual Studio
2005 cannot be used to compile Python or P4Python. Use the
P4Python Windows installer available from the Perforce web
site.
6. Compatibility with Previous Releases
There are no previous releases of P4Python from Perforce Software Inc.
7. Compatibility with the P4Python from the Public Depot
Perforce P4Python is significantly different from the version of
P4Python in the Perforce Public Depot. Perforce P4Python
contains several improvements and interface changes
intended to make P4Python consistent with the other scripting
interfaces and with Python in general.
If you are migrating from Public Depot version of P4Python, edit your
scripts to ensure that the scripts comply with the new
interface. The differences are detailed below.
New module name
The P4Python module has been renamed from p4 to P4. For example:
Old:
>>> import p4
>>> p4c = p4.P4()
New:
>>> import P4
>>> p4 = P4.P4()
By convention, Public Depot P4Python used 'p4c' as an instance variable
because 'p4' was used as a module name. Now that the module has been
renamed 'P4', you can use 'p4' for your instance
variables. All demos and tests use the new convention.
Deleted methods
The following methods have been deleted from the P4 class and
are no longer available:
dropped - Use connected()
parse_forms - Form parsing is now always on
tagged - See tagged attribute below.
New methods
The following methods are new to Perforce P4Python:
connected - Returns True if the client is connected
format_xxx - Converts a dict-based specification into a
string (replace xxx with spec type, for
example: format_client)
identify - Returns information about P4Python
parse_xxx - Converts a string into a P4.Spec object
(replace xxx with spec type)
run_filelog - Runs 'p4 filelog' and returns an array of
P4.DepotFile objects
run_login - Runs 'p4 login' using current password
run_password - Runs 'p4 passwd' with old and new password
run_submit - Runs 'p4 submit'
Attributes
Perforce P4Python provides the following attributes. Attributes
can be set in the P4() constructor or by using their 'setters and
getters'. For example:
>>> import P4
>>> p4 = P4.P4(client="myclient", port="1666")
>>> p4.user = 'me'
Most attributes can be set and read.
Except where indicated, attributes are strings.
api_level API compatibility level, INTEGER
charset The character set to use. String,
not a constant as in previous versions
client Client to use (P4CLIENT)
cwd Current Working Directory
debug Debug level (for debugging P4Python), INTEGER
errors Array of errors returned by the server
(Read-Only), LIST
exception_level Determines whether exceptions are thrown,
INTEGER
host Client Host
input Input for next command, can be STRING, LIST or
DICTIONARY
maxlocktime MaxLockTime for commands, INTEGER
maxresults MaxResults for commands, INTEGER
maxscanrows MaxScanRows for commands, INTEGER
p4config_file Returns the config file path (Read-Only)
password Value of P4PASSWD
port Value of P4PORT
prog Name of the script, shown in the server log
server_level Returns the server level (Read-Only)
tagged Boolean value, determines whether to use tagged
mode, INTEGER
ticket_file Returns the name of the ticket file
user Value of P4USER
warnings Array of warnings returned by the server
(Read-Only), LIST
Tagged mode and form parsing
In Perforce P4Python 2007.3, form parsing and tagged
output are enabled by default. (In Public Depot P4Python,
tagged output and form parsing mode were disabled by default,
but most scripts enabled them immediately.)
Form parsing cannot be disabled explicitly, but tagged output can
be enabled or disabled by setting p4.tagged as follows:
p4.tagged = False # Disabled
p4.tagged = True # Enabled
This method can be used to disable form parsing, because
form parsing does not work when tagged output is
disabled.
* -- requires new p4python
** -- requires new p4d server program
*** -- requires new P4API
--------------------------------------------------------------------------------
Release 2008.1
Bugs fixed since the first release
----------------------------------
#175062 *
P4Python sometimes incorrectly decrements the reference count of None
when calling p4.run_filelog(). In certain circumstances, this could
cause Python to deallocate None, causing a fatal error.
This problem has been fixed (Bug #31637)
New Functionality in 2008.1
#157600 *
Added support for P4.run_resolve(). The default for run_resolve() is
now to accept the merge hint provided by the server unless the hint is
"e", indicating a conflict. In this case, run_resolve() will skip the
resolve.
P4.run_resolve() can also accept a "resolver" keyword argument, which
should point to an instance of a subclass of P4.Resolver. The subclass
should overwrite the method P4.Resolver.resolve(self, mergeData) and return
a string indicating how the resolve should proceed.
To get the old behaviour of "resolve", run the command P4.run("resolve"). You will
need to set P4.input to the correct response in this case.
#152008 *
Added support for Python 2.4. (SIR #28761)
#152362 *
The 'P4.env( var )' method has been added to the
P4 class. This instance method enables the caller to interrogate the
Perforce environment, including reading Perforce variables
from P4CONFIG files and, on Windows, the registry. P4.cwd
now loads any P4CONFIG file settings that are appropriate to
the new working directory. (SIR #29024)
# 153547 *
P4Python now supports Mac OSX 10.5. (SIR #29310)
Bugs fixed since first release
------------------------------
#168966 *
P4Python did not release its output variable correctly. This caused
a crash on 64 bit versions of Python when the P4 object went out of
scope. This is now fixed.
(Bug #31180)
#166644 *
P4Python connections were not being correctly cleaned up when
they were discarded due to a reference counting problem.
This problem has been corrected (BUG#30723)
Bugs fixed in 2008.1
--------------------
#161025 *
Fixed a serious memory leak problem in P4Python. Basically, all
results returned from P4.run() had too many reference counts,
which prevented the Python garbage collector from being able to clean
up these objects. Now P4Python is memory neutral, as can be checked
with the debug version of Python, which shows the total number of
reference counts.
(Bug #30076)
#157844 *
Fixed an error with p4.run_filelog() when tagged output is off.
The "df" variable is now correctly initialized on line 333 of P4.py.
(Bug #28653)
#156847 *
Calling print to retrieve the contents of a file no longer truncates
content. (Sir #28770)
#155969 *
When trying to create an illegal field in a Spec, P4Python would
try to raise a P4Error, only to fail because the wrong number
of arguments was provided to the Exception. This has been fixed.
(Bug #29703)
Bugs fixed in 2007.3
#149927 *
The presence of deleted revisions in a file's history could lead
to P4Python throwing an error message. This occurred because
deleted revisions do not have 'digest' or 'fileSize' fields.
This problem has been corrected. (Bug #28703)
#146116 *
The P4Python test harness, p4test.py, was omitted from the source
distribution in error. This problem has been corrected (Bug #28260)
#146024 *
P4.Revision doesn't have a depot_file, or depotFile attribute as
its counterparts in P4Perl and P4Ruby do. This is now fixed.
(Bug #28077)