PERFORCE DEFECT TRACKING INTEGRATION RELEASE NOTES FOR RELEASE 2.1.2 Nick Barnes, Ravenbrook Limited $Date: 2004/01/08 $ CONTENTS 1. Introduction 2. Supported configurations 3. Getting support 4. Project contacts 5. What's fixed 5.1. What's fixed in release 2.1.2 5.2. What was fixed in release 2.1.1 5.3. What was fixed in release 2.1.0 5.4. What was fixed in release 2.0.0 5.5. What was fixed in release 1.5.3 5.6. What was fixed in release 1.5.2 5.7. What was fixed in release 1.5.1 5.8. What was fixed in release 1.5.0 5.9. What was fixed in release 1.4.2 5.10. What was fixed in release 1.4.1 5.11. What was fixed in releases up to 1.4.0 A. References B. Document history C. Copyright and license 1. INTRODUCTION These are the release notes for release 2.1.2 of the Perforce Defect Tracking Integration (P4DTI). The P4DTI connects your defect tracking system to Perforce, so that you don't have to switch between them and enter duplicate information about your work. It also links changes made in Perforce with defect tracker issues, making it easy to find out why a change was made, find the work that was done to resolve an issue, or generate reports relating issues to files or codelines. For instructions on installing the P4DTI, see the product readme (readme.txt). For up-to-date information about releases of the P4DTI, see the product information page . From there you will find links to the latest releases, including reports of defects found. If you want to adapt or extend the P4DTI, please go to the product information page and download the Integration Kit. It contains full source code and documentation to help you. The readership of this document is anyone who wants to download and use the Perforce Defect Tracking Integration. This document is not confidential. 2. SUPPORTED CONFIGURATIONS Perforce versions: - Perforce 2000.2, 2001.1, 2002.1, 2002.2, 2003.1, or 2003.2, on any platform; The Bugzilla for Unix integration supports: - Bugzilla 2.14.5 or 2.16.4 on Red Hat Linux 7.3 or Solaris, storing the data in MySQL 3.22.19 or later; - Python 1.5.2, 2.0, or later; - Running the P4DTI replicator on any Unix. Use of Bugzilla 2.14.4, 2.16.1, 2.16.2, or 2.16.3 on Red Hat Linux 7.3 or Solaris is also supported, but is deprecated: support may be dropped in a future version of the P4DTI. Support for Python 1.5.2 is deprecated, and may be dropped in a future version of the P4DTI. Note that although the Bugzilla integration runs on a variety of Unix operating systems, we've only tested it on Red Hat Linux 7.3. Also note that the P4DTI will not be able to run Bugzilla's "processmail" script unless it is running on the same machine as Bugzilla itself. The Bugzilla for Windows integration supports: - Bugzilla 2.14.5 on Windows NT4 or Windows 2000; - Python 2.0 or later with Win32 plug-ins; - Running the P4DTI replicator on Windows NT 4 or Windows 2000. No earlier or later version of Bugzilla is supported on Windows at this time. Integration with TeamShare's TeamTrack is no longer supported by Perforce Software, or by this software. An integration is available from TeamShare. Contact TeamShare support by writing to or see the TeamShare web site at for further information. 3. GETTING SUPPORT For problems relating to Perforce or the P4DTI in general, contact Perforce Support by writing to or see the technical support page at for contact information. Bugzilla is not supported by any one person or organization. Consult the documentation that came with Bugzilla, or visit . 4. PROJECT CONTACTS You may want to join the p4dti-discussion mailing list. The goals of the list are: 1. to provide feedback to the project on requirements, design, implementation, etc.; 2. to allow people to exchange information and experience with using and adapting the project; 3. to keep people informed about project progress. To join, send a message with the word "subscribe" in the _body_ to or send the word "help" for general information. Please note that the mailing list will be archived and the archive may be published. 5. WHAT'S FIXED This section lists defects that have been fixed. 5.1. WHAT'S FIXED IN RELEASE 2.1.2 CRITICAL job000842: Python 2.3 or 2.3.x breaks Bugzilla integration Under Python 2.3 or 2.3.x, the Bugzilla integration fails with this message: "Bugzilla database error: (P4DTI-1058) Given 'True' when expecting a string or integer." ESSENTIAL job000841: Test suite warnings with Python 2.3 When running the P4DTI test suite under Python 2.3, two DeprecationWarning messages are generated. 5.2. WHAT WAS FIXED IN RELEASE 2.1.1 ESSENTIAL job000837: P4DTI manuals refer to out-of-date Perforce documentation The P4DTI manuals refer to Perforce 2001.1 documentation, instead of 2003.1 versions. job000838: P4DTI can't replicate 'user' fields. Some Bugzilla fields (e.g. 'reporter' 'qa_contact') are user identifiers, which should be replicated as Perforce user names. If the P4DTI 2.1.0 replicator is set to replicate one of these, it fails on startup with the message "NameError: global name 'user_name_length' is not defined". job000839: AG "Table of Commands" omits jobspec commands P4DTI version 2.1 adds some new commands, "python check_jobspec.py" and "python extend_jobspec.py". These were not included in the "Table of Commands" (Appendix D) of the Administrator's Guide in P4DTI 2.1.0. 5.3. WHAT WAS FIXED IN RELEASE 2.1.0 ESSENTIAL job000624: Licence still says copyright 2001. The licence attached to the P4DTI sources says "copyright 2001", but probably ought to say "copyright 2001-2003" (shortly). I am not a lawyer. job000699: P4DTI doesn't allow customizable jobspec The P4DTI completely takes over the Perforce jobspec, in a very constrained way. The jobspec is entirely determined by the replicated_fields configuration item. Users want [1] to be able to customize this jobspec, at the very least to be able to rename and reorder the replicated fields. Ideally they want to be able to set their own jobspec, and prepare it for the P4DTI by adding some fields but not otherwise modifying it. This is requirement 122. job000700: Perforce user password is disclosed on command line When the P4DTI issues Perforce commands, it does so by issuing a system command including all relevant options on the command line, including the password with -P. The command line can be obtained with various system tools such as 'ps', so other users on the system can readily obtain the P4DTI Perforce user's password. job000704: Bugzilla fixes table shows the fixer, not the changer The patched Bugzilla bug form has a fixes table showing Perforce fixes for the bug. The table has one row per fix record, showing the changelist number, date, description, and user. The "user" column shows the user who made the fix record, not the user who made the change. This is counter-intuitive, not very useful, and contrary to the P4DTI documentation, in particular the IG [1]. job000754: AG says that MySQL doc link is for MySQL 4.1.0-alpha The Administrator's Guide has a link (in section 3.3) to the MySQL documentation. This link is to the permanent home of the current MySQL documentation, but in the AG the linked text is "MySQL Reference Manual for version 4.1.0-alpha". This will date. job000755: config.py still has TeamTrack section config.py still has a TeamTrack section, although TeamTrack integration is no longer supported. job000756: MySQL privilege required and not documented Some versions of MySQL have a new privilege: Lock_table_priv. This is required by the P4DTI MySQL user (the P4DTI replicator locks tables during polls). This requirement is not documented in the AG. job000792: Can't detect Bugzilla versions since 2.16 The P4DTI Bugzilla integration has code to detect Bugzilla versions from 2.0 up to 2.16, and then uses this information to decide support status. This code will not work correctly on Bugzilla databases since 2.16.x, so the P4DTI can't even detect versions of Bugzilla since 2.16.x. job000811: P4DTI doesn't work with Perforce 2003.2beta Perforce 2003.2beta has a new format for the output of "p4 -G info", in which each information line is tagged (like p4 -ztag output). The P4DTI uses "p4 -G info" to determine the Perforce server features (using the server changelevel). It isn't expecting the 2003.2beta format, and does not accept it. job000827: P4DTI test suite with PyXML 0.8.3 fails without XHTML DTD file The P4DTI test suite uses Python's XML libraries and PyXML extensions to check the XHTML documentation which forms part of the P4DTI product sources (e.g. manuals, design documents, etc). When used with PyXML 0.8.3 (unlike PyXML 0.7.x), this part of the test suite fails because it can't the XHTML DTD named in the doctype element. job000829: Some messages listed in the AG can never appear. There are a number of P4DTI error messages in the AG which are obsolete (marked as NOT_USED in the message catalog). These should be removed. job000830: No way to check the jobspec The P4DTI requires a Perforce jobspec with various important properties: P4DTI fields with certain specifications, replicated fields of particular types, etc. But there is no way at present to check whether the jobspec has those properties. There should be a script. See also job000699 (configurable jobspec): being able to check the jobspec is important when the jobspec is not in the control of the P4DTI. Also job000831 (extend jobspec): we need to be able to fix problems found when checking the jobspec without completely discarding it. job000831: No way to just extend the jobspec The P4DTI overwrites the jobspec with one based on the configuration (replicated_fields, etc). This prevents the use of additional, non-replicated fields in the jobspec. The P4DTI should instead extend the jobspec, by adding the fields which it requires. Optionally, such extension could change the specification of a field if it is not correct for the P4DTI. And administrators should be able to just extend the jobspec, independently of running the replicator, so that they can see the results before committing themselves. See also job000699 (configurable jobspec): being able to add P4DTI-required fields to a user's existing jobspec is an important part of this. And this can be combined with job000830 (check jobspec): first check_jobspec, then fix any problems either manually or with extend_jobspec. job000833: Bugzilla 2.16.4 not supported. The P4DTI does not support Bugzilla 2.16.4 (released on 2003-11-03). OPTIONAL job000828: "licence" should read "license" In various places in the P4DTI sources, test suite, manuals, and other materials, the word "licence" is used. This is the UK English spelling of the word spelled as "license" in the US. P4DTI project policy is to use US English spelling. NICE job000832: P4DTI checksum script doesn't know jobspec scripts The P4DTI comes with a checksum script to compute a checksum of the P4DTI sources. Two new source files (check_jobspec.py and extend_jobspec.py) are not included. 5.4. WHAT WAS FIXED IN RELEASE 2.0.0 ESSENTIAL job000522: P4DTI may fail if Perforce client exists and is broken The P4DTI creates a Perforce client when it first runs. The client name is "p4dti-" concatenated with the machine name (as returned by Python's socket.gethostname() function). This Perforce client may already exist, and may have a clientspec which is broken in such a way that it prevents the P4DTI from running, as reported by a customer [1]. job000627: P4DTI supports TeamTrack, but Perforce doesn't The P4DTI claims to support TeamTrack integration, but Perforce (and Ravenbrook) no longer supports, maintains, or develops the TeamTrack integration. This has been handed over to TeamShare, who will support, maintain, and develop the integration from now on. job000692: replicate_p documentation needs more examples The replicate_p configuration parameter in the P4DTI allows administrators to select particular issues from the defect tracker for replication. This is documented briefly in the AG and somewhat more extensively in the AAG, but the documentation is still a little sparse. In particular, there is only one example for the Bugzilla integration (currently the only supported integration). job000693: Changing rid and running refresh script causes confusion If the administrator changes the 'rid' configuration parameter after the P4DTI has been installed and run, the replicator will no longer replicate the jobs and issues which it was previously replicating. This is correct behaviour, because those jobs and issues 'belong' to a different replicator (one with the old 'rid'). If the 'refresh.py' script is then run, it attempts to replicate all currently-replicated issues (or new issues which pass the replicate_p test). This is wrong: it should only attempt to replicate issues with the correct rid or new issues which pass the replicate_p test. A deeply confusing error message is generated (a _mysql_exceptions.IntegrityError message, with a lengthy backtrace): job000694: check_jobs doesn't work on Windows if .py file association is set If the .py file association is set on Windows (so typing "p4" runs Python on p4.py), then running the check_jobs.py script in the P4DTI install directory fails with a misleading error message: job000695: AG doesn't specify using P4 'admin' access level Perforce 2002.2 introduces a new access level called 'admin', which has exactly the capabilities required for the P4DTI replicator user. The existing documentation (AG section 5.2.1 [1]) states that the replicator user has to be a "super user", which is no longer true. job000696: P4DTI documentation covers old defect tracker versions The P4DTI documentation is out-of-date with respect to the currently-supported versions of defect trackers. Specifically, TeamTrack is no longer supported at all, and neither are releases of Bugzilla prior to 2.14.4 (on Windows and Linux/Unix) and 2.16.1 (on Linux/Unix). job000698: P4DTI installation docs are lengthy and confusing Installing the P4DTI is not actually hard, but the documentation may make it appear so. The AG devotes thousands of words to describing the installation and initial configuration of the P4DTI. 5.5. WHAT WAS FIXED IN RELEASE 1.5.3 ESSENTIAL job000642: AG "patching Bugzilla" section needs to explain "patch" for Windows The P4DTI for Bugzilla needs to apply a patch to Bugzilla using the program "patch". This program is provided as standard on Unix and Linux, but not on Windows. In the AG, section 3.4.1 "Software Prerequisites", we say that "patch" is required and provide a link to an implementation of "patch" for Windows. However, this information is not included in section 5.4.1, "Patching Bugzilla", which a user installing the P4DTI will be reading when "patch" is actually required. job000643: Perforce 2002.2 not supported The Perforce 2002.2 release is imminent. The P4DTI works with this release but does not say so in the documentation (in particular in the release notes). job000644: Broken WinZip registration causes embarrassing message The copy of WinZip on our release build machine (sandpiper.ravenbrook.com) is licensed, but somehow lost its license key between P4DTI release 1.4.2 and P4DTI release 1.5.0. Running a self-extracting archive created with this copy of WinZip now displays a message: "This copy of WinZip Self-Extractor is NOT LICENSED for distribution. Any distribution of this file is prohibited and is a violation of US Copyright Law and international treaty." This looks bad. 5.6. WHAT WAS FIXED IN RELEASE 1.5.2 ESSENTIAL job000633: Readme.txt has an installer filename wrong The P4DTI readme file, readme.txt, says 'On the Bugzilla Windows machine, run the "p4dti-bugzillawin-1.5.1.exe" installer program that came with this document.' The installer program is actually called "p4dti-bugzilla-1.5.1.exe". job000635: AG doesn't offer "patch" utility for Windows Installing the P4DTI for Bugzilla requires the use of the utility "patch". This is not standard on Windows, and the P4DTI for Bugzilla is now supported on Windows. The AG should explain that "patch" has to be installed, and offer a source of it for Windows. Our test machine has Cygwin installed, which comes with "patch". job000636: Applying Bugzilla patch can put file in wrong place The Bugzilla 2.16.1 patch provided with the P4DTI includes the entirety of a a new file, template/en/custom/bug/edit.html.tmpl. If the patch is applied simply with "patch < bugzilla-2.16.1.patch", this new file is created in the main bugzilla directory. job000637: MySQLdb RPM depends on mx Python module which may not be present The Bugzilla P4DTI requires the Python "MySQLdb" package, to connect to the MySQL database containing the Bugzilla data. This package is available in various forms. The AG links to an RPM for MySQLdb 0.9.1 for Red Hat Linux 7.3. This RPM requires another package, called "mx", to be present in order to install successfully. The AG should either link to an RPM which doesn't require mx or should mention that this mx package is necessary and provide a link to it. OPTIONAL job000632: AG says "doeditparams.pl" not "doeditparams.cgi" In describing the Bugzilla patch, the AG states that it modifies the file "doeditparams.pl". The actual name of this file is "doeditparams.cgi". 5.7. WHAT WAS FIXED IN RELEASE 1.5.1 CRITICAL job000628: Bugzilla 2.16 and 2.16.1 patches are broken The patches provided with P4DTI 1.5.0 for Bugzilla 2.16 and 2.16.1 are broken. Using the Bugzilla bug form with these patches results in a "Software error" message in the Bugzilla user interface, complaining about global symbols "$rid" and "$sid": 5.8. WHAT WAS FIXED IN RELEASE 1.5.0 ESSENTIAL job000324: Bugzilla patch doesn't work well on Solaris 8 A user reported problems with the Bugzilla 2.10 patch on Solaris 8. The patch applies correctly (if 'patch' is invoked twice) but generates error messages. Apparently the version of 'patch' which comes with Solaris 8 is not capable of applying a regular unified diff patch to more than one file at once, at least not invoked in the usual way. job000389: Bugzilla integration not supported on Windows Bugzilla can be made to work on Windows but the P4DTI is not supported on Windows. job000533: p4_user with wrong email address confuses Bugzilla user translator In the Bugzilla integration, if the P4DTI's perforce user (configuration item p4_user) does not have an email address matching the P4DTI's Bugzilla user (configuration item replicator_address) then the user translator will translate that Perforce user to the P4DTI's Bugzilla user, even if there is a separate Bugzilla user with email address matching that Perforce user. In other words, the translations in the two directions do not match each other. job000551: P4DTI kit for Unix has DOS line endings Since the release build procedure was automated we've been creating integration kits for Unix with DOS line endings. job000552: Bugzilla for Windows integration is in separate source tree A port of P4DTI to Bugzilla for Windows was done by Parrus Technologies and released by at Perforce. Perforce have asked us to integrate it with the master sources. job000596: Automatic test expects a bug to replicate on first poll The automated tests fail on swan.ravenbrook.com (RedHat 7.3 and Bugzilla) with the message job000607: Bugzilla 2.16.1 not supported Bugzilla 2.16.1 has been released (on 2002-09-30) and is not yet supported by the P4DTI. job000608: Bugzilla 2.14 security patch releases not supported. Bugzilla 2.14.2, 2.14.3, and 2.14.4 have been released as security patch releases to Bugzilla. None of them are currently supported by the P4DTI. We should at least support the most recent patch release (currently 2.14.4). job000609: Test suite for Bugzilla on Windows doesn't work The test suite doesn't support testing for Bugzilla on Windows. To properly support the P4DTI for Bugzilla on Windows (job000389) we have to make the test suite work there. job000610: Bugzilla/Windows integration doesn't support processmail The integration for Bugzilla on Windows doesn't support the use of processmail. The processmail scripts are deferred correctly but then can't be executed because of a limitation of the use of CMD on Windows (can't change directory and run a command with one invocation of os.system()). job000611: TeamTrack test database licenses expired The Teamtrack test databases have licenses which have expired. We need new licenses to enable us to test TeamTrack support. job000613: TeamTrack interface MSVC workspace is confused code/p4dti.dsw and related files control the build of the Python Teamtrack interface on Windows. Unfortunately they have become a little confused: some build (in debug mode) for Python 1.5.2, there is a redundant file, there is a non-existent project ("p4dti"), they have acquired some relative links, and so on. job000614: TeamTrack tests run when configured for Bugzilla on Windows The automated tests for the Python TeamTrack interface run when running the complete automated test suite for the integration with Bugzilla on Windows. job000615: Bugzilla shows extra changelists with multiple Perforce servers When integrating a Bugzilla with more than one Perforce server, the fixes table in a Bugzilla bug with fixes from one Perforce server will show the changelists from all Perforce servers with matching changelist numbers. OPTIONAL job000612: Bugzilla integration doesn't check use_windows_event_log config parameter The Bugzilla integration can now run on Windows. On that platform, the config file may contain a use_windows_event_log parameter. The value of this parameter must be checked (to be 0 or 1). job000616: Linux/Unix system log usage not configurable Under Linux and Unix the P4DTI replicator will send log messages to the system log. The corresponding functionality under Windows is controlled by a configuration parameter "use_windows_event_log". The Linux/Unix system log can theoretically filter out P4DTI messages (with syslog.conf) but it is a good idea to provide a configuration switch as well. job000617: Test suite not very useful under Python 2.2 Changes made to the PyUnit unit test framework between Python 2.1 and Python 2.2 have reduced the utility of the P4DTI test suite. In particular, running a set of tests only produces a list of single-character results ("." for a pass, "F" for a failure, "E" for an error) while the tests are running, preventing any sort of analysis until the run completes. 5.9. WHAT WAS FIXED IN RELEASE 1.4.2 ESSENTIAL job000512: Bugzilla P4DTI doesn't work with Python 2.2 The Bugzilla P4DTI inadvertently uses a feature of Python that doesn't work in Python 2.2. Running the P4DTI with Python 2.2 gives an error in the use of has_key at line 412 of bugzilla.py. 5.10. WHAT WAS FIXED IN RELEASE 1.4.1 CRITICAL job000461: Bugzilla integration doesn't support multiple Perforce servers The Bugzilla integration doesn't work with multiple Perforce servers. The second replicator instance will fail. ESSENTIAL job000437: Jobspec not suitable for creating new jobs The P4DTI creates a Perforce jobspec that's fine for jobs which are replicated from the defect tracker, but not so good for jobs that are created in Perforce. job000478: TeamTrack 5.02 is supported The P4DTI currently supports TeamTrack 4.5, 5.0, 5.02, and 5.5 (see also job000409 and job000433). This adds to the support burden at Perforce and TeamTrack. Perforce have asked that the set of supported platforms be changed. Specifically, TeamTrack 5.01 and 5.02 should _not_ be supported, and the documentation should recommend that customers upgrade to TeamTrack 5.5. job000483: refresh.py comments are out-of-date The comments in refresh.py indicate that the script will "delete all the jobs on the Perforce server" and refresh them from the defect tracker. This is incorrect; refresh.py no longer deletes any jobs. job000491: jobspec has bad defaults for optional user fields In the Bugzilla integration, if the administrator has added a user field (e.g. 'reporter', 'qa_contact') to replicated_fields, creating jobs in Perforce with the default value of this field will fail. job000494: Bugzilla integration fails if qa_contact is in replicated_fields There is a Bugzilla field "qa_contact", which holds the User name of the "QA contact" assigned to a bug. This may be zero, if the Bugzilla parameter "useqacontact" is turned off, or if there is no QA contact assigned (for instance, if there is no initial QA contact for the component against which this bug is reported). If this field is zero, and the P4DTI is configured to replicate this field to Perforce (i.e. if 'qa_contact' is in replicated_fields in config.py) then the P4DTI will fail. job000501: new jobs break TeamTrack integration if LASTMODIFIEDDATE or SUBMITDATE are replicated In the TeamTrack integration, if either of the fields LASTMODIFIEDDATE and SUBMITDATE are replicated (i.e. are in the replicated_fields configuration parameter) and the P4DTI is set up to replicate new jobs (i.e. replicate_job_p is defined to return 1), and a new job is created without filling in these fields, the P4DTI fails. OPTIONAL job000408: Table of Bugzilla fields in AG is incomplete for Bugzilla 2.14 The Administrator's Guide has a table in section 5.1.5 listing the fields in a Bugzilla bug. The set of fields has changed in Bugzilla 2.14, with the addition of four new fields (reporter_accessible, qacontact_accessible, cclist_accessible, assignee_accessible). These fields are not really suitable for replication, but they should be added to the table in any case. job000492: Test suite doesn't cope with 'reporter' in replicated_fields If you add 'reporter' to replicated_fields in test/config_swan.py, the test suite fails in test_p4dti.py:migrate, saying there's no Bugzilla user corresponding to Perforce user ''. This is because the translate_jobspec function provided by that test doesn't provide a 'reporter' field (required by the new jobspec, but not present in the migrated jobs). job000493: Bugzilla migration fails if delta_ts in replicated_fields If the delta_ts field (the timestamp of the most recent change to a Bugzilla bug) is included in the replicated_fields configuration item, and the user's translate_jobspec function doesn't fill it in, migration will fail. job000495: Test suite doesn't cope with 'qa_contact' in replicated_fields If you add 'qa_contact' to replicated_fields in test/config_swan.py, the test suite fails in test_p4dti.py:migrate, saying there's no Bugzilla user corresponding to Perforce user ''. This is because the translate_jobspec function provided by that test doesn't provide a 'QA_Contact' field (required by the new jobspec, but not present in the migrated jobs). job000496: Bugzilla integration breaks migration if numeric fields are replicated Bugzilla bugs include a small number of numeric fields. One is actually a bitset ('groupset'), one is a genuine number ('votes'), and the rest are actually booleans: 'everconfirmed', 'qacontact_accessible', 'cclist_accessible', 'assignee_accessible', 'reporter_accessible'. If one of these fields is in 'replicated_fields', then migrating jobs without a translate_jobspec function to fill in a numeric value for this field will cause the migration to fail. 5.11. WHAT WAS FIXED IN RELEASES UP TO 1.4.0 For information about what was fixed in releases up to and including 1.4.0, see the release notes for that release: A. REFERENCES None. B. DOCUMENT HISTORY 2002-02-01 GDR Noted support for TeamTrack version 5.5. 2002-02-04 GDR Updated for release 1.4.0. 2002-03-14 NB Removed support for TeamTrack 5.02. 2002-04-09 NB Updated for release 1.4.1. 2002-04-19 NB Updated for release 1.4.2. 2002-06-04 GT Updated for Bugzilla on Windows 2000 port for release 1.4.2. 2002-06-26 RB Merged Bugzilla for Windows 2000 port into Ravenbrook sources. 2002-10-30 NB Tidied up in preparation for 1.5 releases. 2002-11-01 NB Updated for release 1.5.0. 2002-11-14 RB Removed TeamTrack support, as this has been handed off to TeamShare. 2002-11-20 NB Updated for release 1.5.1. 2003-12-13 NB Updated for release 2.1.0. 2003-12-17 NB Updated for release 2.1.1. 2004-01-08 NB Updated for release 2.1.2. C. COPYRIGHT AND LICENSE This document is copyright (C) 2002 Perforce Software, Inc. All rights reserved. Redistribution and use of this document in any form, with or without modification, is permitted provided that redistributions of this document retain the above copyright notice, this condition and the following disclaimer. THIS DOCUMENT IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $Id: //info.ravenbrook.com/project/p4dti/release/2.1.2/release-notes.txt#1 $