PERFORCE DEFECT TRACKING INTEGRATION RELEASE NOTES FOR RELEASE 1.2.1
Gareth Rees, Ravenbrook Limited
$Date: 2001/10/19 $
CONTENTS
1. Introduction
2. Supported configurations
3. Getting support
4. Project contacts
5. What's new
5.1. What's new in release 1.2.1
5.2. What was new in release 1.2.0
5.3. What was new in release 1.1.6
5.4. What was new in release 1.1.5
5.5. What was new in release 1.1.4
5.6. What was new in release 1.1.3
5.7. What was new in release 1.1.2
5.8. What was new in release 1.1.1
5.9. What was new in release 1.1.0
5.10. What was new in release 1.0.6
5.11. What was new in release 1.0.5
5.12. What was new in release 1.0.4
5.13. What was new in release 1.0.3
5.14. What was new in release 1.0.2
5.15. What was new in release 1.0.1
5.16. What was new in release 1.0.0
A. References
B. Document history
C. Copyright and licence
1. INTRODUCTION
These are the release notes for release 1.2.1 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 <http://www.perforce.com/perforce/products/p4dti.html>.
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 <http://www.perforce.com/perforce/products/p4dti.html>
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 and Perforce 2001.1 on any platform;
The TeamTrack integration supports:
- TeamTrack 4.5 and TeamTrack 5.0 running on Windows NT 4 or Windows
2000;
- Python 2.0 on Windows NT 4 or Windows 2000;
- The P4DTI replicator running on Windows NT 4 or Windows 2000.
The P4DTI does not support a TeamTrack server running on a secure web
server, nor does it support the "TeamTrack Online" hosted defect
tracking service from TeamShare.
The Bugzilla integration supports:
- Bugzilla 2.10, 2.12, or 2.14 on Red Hat Linux 6.2 or Solaris using
MySQL;
- Python 1.5.2 or later on Unix;
- The P4DTI replicator running on Unix.
Note that although the Bugzilla integration runs on a variety of Unix
operating systems, we've only tested it on Red Hat Linux 6.2.
3. GETTING SUPPORT
For problems relating to Perforce or the P4DTI in general, contact
Perforce Support by writing to <support@perforce.com> or see the
technical support page at
<http://www.perforce.com/perforce/support.html> for contact information.
For problems relating to TeamShare, contact TeamShare Technical Support
by writing to <support@teamshare.com> or see the support page at
<http://www.teamshare.com/support/index.htm> for contact information.
Bugzilla is not supported by any one person or organization. Consult
the documentation that came with Bugzilla, or visit
<http://www.mozilla.org/projects/bugzilla/>.
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
<p4dti-discussion-request@ravenbrook.com> 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 NEW
This section lists defects that have been fixed.
5.1. WHAT'S NEW IN RELEASE 1.2.1
CRITICAL
job000407: Bugzilla config.py not properly truncated
The config.py in the Bugzilla integration has a bogus last line, copying
a portion of the line before.
5.2. WHAT WAS NEW IN RELEASE 1.2.0
CRITICAL
job000390: P4DTI doesn't support Bugzilla 2.14
Bugzilla 2.14 was released on 2001-08-29. The P4DTI doesn't support it.
job000406: MySQL integrity error when you create a new bug in Bugzilla
and update it quickly
If you create a new bug in Bugzilla and update it quickly, then
sometimes you get an integrity error from MySQL.
ESSENTIAL
job000134: The replicator log grows without limit
The replicator log just keeps on growing.
job000137: Documentation doesn't explain why fixes don't get undone
with other changes
A user can add a fix for a job that they don't have permission to
transition or update. The job status gets set back to how it was, but
the fix record remains. The documentation doesn't explain why this
happens.
job000149: We don't use system logging facilities on Windows
On Windows, we don't use the Windows Event Log; instead we log to a
file. We should use the Event Log. Managing applications which don't is
irritating.
job000252: Support can't detect tampering with P4DTI source
Perforce support would like a way to tell whether the person they're
talking to has modified the P4DTI code in some way to make it different
from the official distribution.
job000262: Bugzilla: Can't use Perforce to confirm an unconfirmed bug
An unconfirmed Bugzilla bug can not be confirmed from Perforce. That
is, a bug status "UNCONFIRMED" can not be changed by editing the
corresponding Perforce job. Attempting to confirm a bug will cause a
replication failure, with a message like "Given 1 when expecting a
string".
job000308: No error or warning when user mapping isn't one to one
If two defect tracker users have the same e-mail address, the replicator
can map them to the same Perforce user. This has several bad
consequences: the owner of an issue (or any other user field) can change
when it is replicated; or the replicator tries to update an issue on
behalf of the wrong user.
job000359: Startup e-mail is misleading in TeamTrack integration
The startup e-mail is misleading since it only reports on the matching
generated by one half of the matching algorithm: that is, it reports on
users who match by e-mail, but omits to report on those who match by
userid. This is fine in Bugzilla, where your id is your e-mail address,
but misleading in TeamTrack.
job000371: You can edit other people's comments in journal fields in
TeamTrack 5.0
TeamTrack 5.0 adds a new kind of text field, the "journal" field. This
field is appended to rather than edited. Each comment gets user, date
and time. The P4DTI has no special support for journal fields, so
journal fields are treated as any other text field. This means that (1)
you can use the P4DTI to edit other people's comments when this would be
impossible in TeamTrack, and (2) comments added in Perforce don't get a
header with the user, date and time.
job000378: Hard to work out which TeamTrack field types are supported
It's difficult to work out which TeamTrack field types are supported.
The information is in the troubleshooting section of the Administrator's
Guide, and that in turn refers you to the source code
(configure_teamtrack.py). There should be a table of supported field
types.
job000383: AG needs better description of TeamTrack workflows that
don't work with the P4DTI
Administrator's Guide, section 3.3.2, item 6 describes TeamTrack
workflows that don't work with the P4DTI. This description needs
improving.
job000392: Mysterious failure if you turn off "accept info from
browser" in TeamTrack
If you've turned off the "Accept Info From Browser/Header" setting in
TeamTrack then the replicator will fail to connect to the TeamTrack
server.
job000393: If you specify the wrong Bugzilla version, P4DTI carries on
anyway
If you specify an incorrect value for the bugzilla_version configuration
parameter, the P4DTI carries on trying to replicate, but fails.
job000396: Bugzilla 2.14 integration doesn't send notification e-mails
If you're running the P4DTI with Bugzilla 2.14, then notification
e-mails aren't properly sent when a change is replicated from Perforce.
OPTIONAL
job000114: There's no description of the limitations of the
integration
People thinking of installing the integration need to know what its
limitations are. There needs to be a "will this work for your
organization?" document.
job000125: Bugzilla version not checked
We don't check the Bugzilla version (which should be 2.10 for the
integration to work).
job000162: Replicator needs restarting when you add new users to
Perforce or TeamTrack
When you add a new user to Perforce or TeamTrack or change a user's
e-mail address, you have to restart the replicator.
job000274: It's hard to run the unit tests on an installed P4DTI
It's hard to make the unit tests run on an installed P4DTI. You have to
edit the file test_p4dti.py and change the line starting
"sys.path.append" so that it imports modules from the P4DTI installation
directory.
job000275: Unit tests only support one configuration per platform
If you want to try the test_p4dti.py unit tests on a new configuration,
I have to edit or replace config_<hostname>.py. But it would be very
useful to be able to try out the unit tests on several configurations.
job000316: User mismatch not documented
The documentation does not describe what happens when the set of users
in Perforce does not correspond to the set of users in the dt.
job000360: Bugzilla configuration starts with dt_name="TeamTrack"
When you install the Bugzilla integration, the configuration starts with
the setting dt_name="TeamTrack" and you have to change this. It would
be better if the Bugzilla integration came with the correct setting for
this parameter.
job000394: Bugzilla tests don't work unless database is called "bugs"
The Bugzilla automated test cases assume that the Bugzilla database is
called "bugs" and the Bugzilla user is "bugs". They don't work if the
values are different.
NICE
job000203: Users can masquerade as other users
Because users are matched by e-mail address between the defect tracker
and Perforce, you can fool the replicator by running "p4 user" and
editing your email address.
job000384: P4DTI will stop working in Python 3.0
In Python 3.0, the meaning of the division operator will change [1].
This will cause the P4DTI to stop working.
5.3. WHAT WAS NEW IN RELEASE 1.1.6
CRITICAL
job000381: P4DTI corrupts date/time fields in TeamTrack if daylight
savings time is in effect
The P4DTI corrupts date/time fields for which daylight savings time is
in effect -- on every poll each such date/time field gets advanced by
one hour.
5.4. WHAT WAS NEW IN RELEASE 1.1.5
CRITICAL
job000379: P4DTI corrupts date/time fields in TeamTrack if server time
zone is not UTC
The P4DTI corrupts date/time fields -- on every poll each date/time
field gets advanced by the difference between the time zone on the
machine running the replicator and UTC.
ESSENTIAL
job000377: Can't use Perforce 2000.2 client with Perforce 2001.1
server
If you try to run the P4DTI using a Perforce 2000.2 client but a
Perforce 2001.1 server, then the P4DTI stops with an error from
Perforce.
5.5. WHAT WAS NEW IN RELEASE 1.1.4
CRITICAL
job000335: Can't update cases in a TeamTrack 5.0 database
The P4DTI stops with an error if it attempts to read certain records in
a TeamTrack 5.0 database that has been converted from a TeamTrack 4.5
database.
job000362: Can't update cases from Perforce in TeamTrack 5.0
If you run the TeamTrack integration with a database that you created in
TeamTrack 4.5 and upgraded to TeamTrack 5.0, then you can't update cases
in Perforce.
job000363: TeamTrack integration replicates issues needlessly
When you update an issue in TeamTrack, the replicator replicates that
issue and a number of related issues, needlessly.
job000370: Journal fields in TeamTrack 5.0 can't be replicated
If you have a "journal" text field in TeamTrack 5.0, then when you
submit an issue with such a field, the P4DTI refuses to replicate it,
stopping with an error from Perforce complaining about a "Syntax error"
in the job form at the line containing the text from the journal field.
job000375: Whitespace lines in Bugzilla descriptions can break
replicator
The Perforce server does not preserve lines in job text fields which
only contain whitespace. It replaces them with empty lines. If those
lines have come from a Bugzilla longdesc record, this will then break
the replicator (because the replicator will try to replicate the job
back to Bugzilla, the empty line will show up as different to the
whitespace-only line, and the "append-only" restriction will kick in.
The job will be overwritten by the job but this will not fix the
problem, so it will happen again on the next poll.
ESSENTIAL
job000361: AG comes out in fixed-width font
The majority of the Administrator's Guide is in a fixed-width font.
job000364: Bugzilla bugs with empty descriptions can't be replicated
If one creates a Bugzilla bug with an empty Description field, the
replicator replicates it to Perforce correctly but then is unable to
replicate it back to Bugzilla. It produces the following error message:
job000372: Check consistency stops with error if there are unreplicated
jobs
Checking the consistency fails with a Python error ("No such variable:
issues") if there are jobs that should be replicated but are not
5.6. WHAT WAS NEW IN RELEASE 1.1.3
CRITICAL
job000357: Release notes don't say we support TeamTrack 5.0
The release notes for 1.1.2 don't say we support TeamTrack 5.0.
job000358: P4DTI doesn't work with TeamTrack 5.0
The P4DTI refuses to start up with TeamTrack 5.0. It stops immediately
with an error.
OPTIONAL
job000269: AG doesn't explain how to delete P4DTI registry keys
Since 1.0.1, the P4DTI installs registry keys using a ".reg" file. AG
10 tells people to delete the keys, but they can't, because they don't
know which ones any more.
job000286: AG doesn't state what systems each integration supports
The AG doesn't say that the TeamTrack integration will only run on
Windows (because it needs to use the TeamTrack API) and the Bugzilla
integration may not run on Windows (because it needs MySQLdb; I'm not
sure whether this runs on Windows and certainly the P4DTI hasn't been
tested there).
5.7. WHAT WAS NEW IN RELEASE 1.1.2
CRITICAL
job000277: Consistency checker and refresh script don't work with
larger TeamTrack databases
If a TeamTrack database has several hundred issues in it, you can't run
the consistency checker or refresh scripts. The P4DTI hangs for several
minutes, then stops with an error from the server.
job000325: Can't read issues from TeamTrack 5.0
The P4DTI can't read records from the ISSUES, FIELDS and PROBLEMS tables
in TeamTrack 5.0 (build 5024c).
job000326: Can't update cases in a TeamTrack database upgraded from 4.5
to 5.0
The P4DTI crashes with an access violation if it attempts to read
certain records in a TeamTrack 5.0 database that has been converted from
a TeamTrack 4.5 database.
job000328: Queries with plus or percent signs don't work in TeamTrack
5.0
The P4DTI can't send SQL queries including plus signs or percent signs:
these appear to get URL-encoded before being sent to the database and
the resulting SQL query can't be executed because it now contains syntax
errors.
job000334: Intermittent socket errors from TeamTrack 5.0 when using a
database upgraded from TeamTrack 4.5
When using a database created in TeamTrack 4.5 and upgraded to TeamTrack
5.0, there are socket failures. The P4DTI hangs for a minute or so,
then gets a socket error from the TeamShare API. The failures are
intermittent: a test may succeed several times, then fail.
job000338: TeamTrack 5.0 doesn't update P4DTI_ fields
When running the P4DTI on a database newly created in TeamTrack 5.0, the
P4DTI doesn't correctly record that an issue is being replicated.
job000345: New Bugzilla bugs don't get replicated for some users
Several Bugzilla 2.12 users have reported to Perforce support that newly
created Bugzilla bugs don't get replicated to Perforce, and that they
need to touch new bugs to get the replicator to see them.
job000354: MySQL bug stops replicator from seeing some Bugzilla
changes
The replicator may fail to notice some changes to Bugzilla bugs. In
particular, the addition of a comment to a Bugzilla bug. This occurs
with some versions of MySQL (e.g. 3.23.37) but not others (e.g.
3.22.32).
job000355: Bugzilla integration ignores start_date parameter
When you start the replicator for the first time, it doesn't replicate
anything. It's supposed to replicate all changes since the start_date.
job000356: Upgrading Bugzilla integration causes replications to fail
If you upgrade your Bugzilla integration, updates to bugs in Bugzilla
are no longer replicated. Also, the consistency checker will complain
about all the issues.
ESSENTIAL
job000054: There are few reports
There are no reports to help with analysis of the information gathered
by the integration. This is a big reason for having the integration in
the first place. (See requirement 5, requirement 60.)
job000077: UG contains no version or release related documentation
There's no user documentation explaining how to find issues that are
open or fixed in a version or a release (and vice versa).
job000128: Can't replicate fix to deleted changelist
The replicator can't replicate a fix to a deleted changelist, and this
gets it into a right tangle: it can't continue replicating.
job000148: Replicator is slow due to reading auxiliary tables many
times
The replicator may read auxiliary tables in the defect tracker (like the
TeamTrack USERS table) many times in the course of replicating a single
job or issue. This slows replication down and increases the possibility
of conflicts.
job000228: UG text is somewhat specific to TeamTrack
The text of the UG is somewhat specific to the TeamTrack integration.
For instance, section 4 suggests filtering jobs on the "Owner" field,
which is not present with a Bugzilla integration (it's called
"Assigned_To" instead).
job000253: Can't "add fix" to submitted changelist except to "closed"
in P4Win
There is no P4Win GUI equivalent to "p4 fix -s" for a submitted
changelist. In other words, no gesture which allows you to add a fix
with a keyword other than "closed" to a submitted changelist.
job000265: AG doesn't say to stop the replicator using the startup
script
The replicator can be stopped using the startup script installed on a
Linux machine. In fact, the AG in section 5.5 says to "bring it to the
foreground" which might be impossible. It should say to run
"/etc/rc.d/init.d/p4dti stop" on Linux.
job000268: Screenshots in UG are out of date with respect to TeamTrack
The UG contains screenshots from beta versions of TeamTrack 4.5 which
show the old layout of the fixes table. They don't resemble the layout
from TeamTrack 4.5 (build 4509) nor TeamTrack 5.0 very much, although
they contain the same information.
job000271: The migrate script loses fixes
If you follow the migration procedure in section 6.2 of the
Administrator's Guide, then you lose all the fixes in Perforce.
job000278: Migrating jobs to TeamTrack fails if there are many jobs
If you have hundreds of jobs then you can't migrate them to TeamTrack
because the TeamShare API runs out of memory and hangs.
job000296: Release build procedure can generate incorrect list of fixed
issues
The release build procedure instructs the developer to generate the list
of issues fixed in a release using the known_issues.py script, but the
logic of the script is incorrect, for example it won't work for finding
the jobs fixed in release 1.1.0.
job000299: Many links in the Integration Kit don't work
Many links in the Integration Kit don't work when the kit is installed
locally. Some links are relative to the Ravenbrook server root. Some
links point to files that aren't delivered in the kit. Some links point
to directories rather than the index to those directories.
job000301: Manuals refer to info.ravenbrook.com, which is inaccessible
to the world
The manuals contain some links to Ravenbrook's internal web server
info.ravenbrook.com, which isn't available to the world at large. They
should always link to www.ravenbrook.com.
job000303: Incorrect message catalog use generates obscure errors
Minor errors in the use of the message catalog can obscure the real
error being hidden. This can cause a great deal of trouble in tracking
down the problem.
job000304: If replication fails, reverting may also fail
If the replicator fails to replicate changes from a P4 job to a DT
issue, it tries to revert the P4 job with the DT issue (and sends an
error email). Under some circumstances, this attempt to revert the P4
job may also fail, due to a failure to log the replication failure
correctly. This bug is rather hard to diagnose because the resulting
emailed error message is reporting two (actually three, see job000303)
nested errors.
job000310: TeamTrack 5.0 is not supported
The P4DTI doesn't support TeamTrack 5.0. This means that P4DTI
customers won't be able to upgrade their TeamTrack server when TeamShare
release TeamTrack 5.
job000311: If you have two TeamTrack projects with the same name, the
replicator stops working
If you have two projects in TeamTrack with the same name, then the
replicator refuses to replicate.
job000312: P4DTI doesn't support Bugzilla 2.12
Bugzilla 2.12 just shipped (2001-04-27). We haven't tested against it,
so don't support it.
job000313: If you spell a job with the wrong case when making a fix,
the replicator can't replicate it
Suppose you have a job in Perforce called "BUG12345" and you fix it with
a command like "p4 fix -c 54321 bug12345" (note the lowercase jobname).
The replicator can't replicate this fix.
job000315: Upgrading P4DTI may make Bugzilla integration fail
A user upgraded the Bugzilla integration from P4DTI release 1.0.5 to
P4DTI release 1.1.1 and the new P4DTI failed to start, with the
following message:
job000336: Unhelpful error message if MySQLdb not installed correctly
If MySQLdb is not installed correctly, or not installed at all, then the
P4DTI produces a most unhelpful error messages, claiming not to support
Bugzilla.
job000340: Consistency checker may miss some issues if you change the
start date
If an issue is being replicated, but hasn't changed since the
start_date, then the consistency checker will claim to find an
inconsistency. This can happen if you move the start_date forward in
time and possibly in other ways.
job000347: Upgrading to a new release of the P4DTI is awkward and
error-prone
To upgrade to a new release of the P4DTI, you need to copy configuration
parameters from your old configuration file to the new one. You can't
just substitute your old configuration file into the new release because
there may be new configuration items (in release 1.1.2,
"teamtrack_version") which it is essential to provide. This is an
awkward and error-prone procedure.
job000351: Bugzilla integration doesn't remove old configuration items
The Bugzilla integration keeps mutual configuration for Bugzilla and the
P4DTI in a table in the Bugzilla database called p4dti_config. It
checks the contents of this table each time the replicator starts, and
updates it if necessary. However, it only ever adds or updates rows in
this table; it will not delete rows. Sometimes (e.g. when
changelist_url or the new job_url change to None) it should delete rows.
OPTIONAL
job000267: Consistency check may complain about Bugzilla bugs which are
OK
If one touches an old Bugzilla bug (one which has not been changed since
the start_date), using the 'commit' button in the Bugzilla GUI, the
replicator starts replicating it. If that bug is then changed from
Perforce but not from Bugzilla, the consistency checker check.py will
complain that there is no such issue (e.g. "Job 'bug5' is marked as
being replicated to issue '5' but that issue either doesn't exist or is
not being replicated by this replicator.").
job000281: Lists of jobs fixed in release notes is incomplete
Quite often we discover that we've fixed a defect with an earlier
change, and add a fix record to Perforce. This increases the list of
things that we claim to have fixed in earlier releases. We should,
therefore, regenerate all the release notes every time we release,
rather than just prepending to the list.
job000293: AG doesn't discuss operating stand-alone
It is possible to run the P4DTI on a machine not connected to a network.
For instance, to demonstrate the integration on a laptop. However, in
order to do so the P4DTI must be configured to not send any email. The
AG should discuss this.
job000297: Wrong version in manuals
The manuals claim to be for version 1.0, when they're for version 1.1
now.
job000321: TeamTrack server fails when memory is low.
When the P4DTI fetches a lot of data from the TeamTrack server,
eventually the P4DTI pauses for several minutes, and then reports an
error from the TeamShare API.
job000329: Risk of losing configuration when upgrading the P4DTI
When upgrading to a new version of the P4DTI it's easy to accidentally
delete your configuration. You have to carefully follow the
instructions, which we know doesn't always happen.
job000331: Integration Kit document links don't work when you download
it
The Integration Kit contains many documents: manuals, design documents,
build procedures, and so on. These contain links to each other, but the
links are designed to work on Ravenbrook's web sites. The links don't
work if you download the kit.
job000337: Replicator fails to pair up users if their e-mail addresses
differ only in case
The P4DTI looks for matching email addresses in Perforce and defect
tracker user records. It does this matching in a case sensitive manner.
It should be case insensitive.
job000342: User's Guide has incorrect link to P4SAG
In the User's Guide, section 2, the link with anchor text "Perforce
Defect Tracking Integration Administrator's Guide" points to
<http://www.perforce.com/perforce/doc.002/manuals/p4sag/> mistakenly.
job000344: Bugzilla fixes table not sorted by changelist
The fixes table visible in Bugzilla (when patched for P4DTI) is not
sorted by changelist number. If you have a lot of fixes for a bug, this
will be confusing.
job000349: No way to link to job web page from defect tracker
We have changelist_url to link to changelist web pages from the defect
tracker. This feature is highly praised by users. We should have
job_url to link to job web pages as well.
NICE
job000179: Teamtrack.dll can get lost
An inexperienced Windows user who copies the P4DTI files from the unpack
directory to another one might end up without teamtrack.dll (since DLLs
are hidden by Windows tools like Windows Explorer by default).
job000319: Screenshots in AG are out of date with respect to TeamTrack
5.0
The AG contains screenshots of dialogs from the TeamTrack Administrator
from TeamTrack 4.5. These dialogs look different with TeamTrack 5.
job000330: Integrator's Guide doesn't describe the kit or how to build
and test it
The Integrator's Guide doesn't describe the Integration Kit. It doesn't
say what files are in the kit, how they are organized, how to build the
P4DTI, or to test it.
5.8. WHAT WAS NEW IN RELEASE 1.1.1
CRITICAL
job000291: New Bugzilla integration messages can't be looked up in the
AG
Some error messages recently added to the Bugzilla integration can't be
looked up in the AG because they don't have message numbers.
job000292: Message objects break syslog on Linux
We have new message objects and catalogs. These don't work for the
syslog on Linux because the syslog library function is expecting
strings, not message objects.
job000295: Unmatched Bugzilla users break replicator at startup
When the replicator starts, it sends an email to the administrator
containing tables of Perforce users who do not have corresponding defect
tracker accounts and defect tracker users who do not have corresponding
Perforce accounts. The code which formats these tables has changed in
such a way that it breaks for Bugzilla users.
5.9. WHAT WAS NEW IN RELEASE 1.1.0
CRITICAL
job000283: Bugzilla integration may fail on startup on a fast server
If a Bugzilla replicator starts up in under a second, it can fail due to
a MySQL consistency check (because we have two identical entries in a
"unique" index).
job000284: No build procedure for the Integration Kit
There's no build procedure describing how to create a downloadable,
installable Integration Kit.
job000287: The P4DTI doesn't include an integration kit
The P4DTI does not include an integration kit to enable third parties to
develop new integrations.
ESSENTIAL
job000065: Not enough logging control
There's only one level of logging at the moment. This makes it
difficult to get detailed information from a user when analyzing a bug
or a support request.
job000285: No introduction or roadmap to the Integration Kit
There's no general introductory text for the Integration Kit, explaining
where to find things, how to develop, how to run tests, etc.
job000288: Can't upgrade Bugzilla integration cleanly
If the P4DTI changes in such a way that the Bugzilla P4DTI database
schema is changed, then existing users upgrading to the new P4DTI will
have problems because of the changed schema.
job000290: The release build procedure's instructions on submission
can't be followed
The release build procedure contains instructions not to submit or to
submit to Perforce at various stages. Because each product is built on
a different platform (under a different Perforce client) these
instructions can't be followed.
OPTIONAL
job000030: Users can't get help based on messages
The P4DTI produces a lot of messages. It would be good to allow users
to follow some sort of link from these to more information and
experience.
job000066: We don't explain which jobspecs won't work
"p4 -G job -o" applies much more stringent tests than "p4 job -o". It
won't even give you a form unless all the values are correct. This means
that tricks like ones in Perforce's jobspec, where an illegal value like
"setme" is specified as the default value for a select field, can't be
used with the integration.
job000151: Source code documentation is inadequate
The documentation in comments in the source code is generally
inadequate. Each source code file should conform to the general rules.
There needs to be more cross-referencing to design documents.
job000240: Perforce server can crash if P4DTI is started with existing
jobs
The Perforce server can crash if the P4DTI is started for the first time
when there are existing jobs.
NICE
job000078: Replication failure can cause hard-to-recover database
records when using advanced configuration
If you have used advanced configuration to establish a conflict
resolution policy other than "defect tracker wins", and if the initial
replication goes wrong (e.g. fails to create a Perforce job because the
server is down) then the DT issue is marked with P4DTI action "wait" but
there's no corresponding job to set to "keep" in order to overwrite it.
You can't fix the problem without going into the database directly using
SQL or our own Python interface.
5.10. WHAT WAS NEW IN RELEASE 1.0.6
CRITICAL
job000270: Can't fix job owned by user (None) in the TeamTrack
integration
If an issue has no owner in TeamTrack (and therefore the owner of the
corresponding job is (None) in Perforce) then you can't transition the
job by fixing it. The replicator is unable to replicate the change to
the job and it overwrites the job with the issue.
5.11. WHAT WAS NEW IN RELEASE 1.0.5
CRITICAL
job000261: Bugzilla patch and text files are missing from the RPM
installation
The RPM for Linux doesn't include the Bugzilla patch file, readme.txt,
release-notes.txt, or license.txt files. The Bugzilla patch file is
critical, as Bugzilla integration won't work without it.
ESSENTIAL
job000263: Bugzilla: P4DTI doesn't restart on reboot
A P4DTI installed on Linux using the P4DTI RPM will not automatically
restart when the system is rebooted.
5.12. WHAT WAS NEW IN RELEASE 1.0.4
ESSENTIAL
job000254: AG claims TeamShare support provide licences
The AG tells people to contact TeamShare support to get a TeamTrack
licence for the replicator. In fact, they should contact their
TeamShare sales representative, as it's sales who issue licences.
OPTIONAL
job000257: AG uses wrong words when talking about Perforce licences and
support
AG section 3.2.1 says: "A daemon license is a license for an automatic
process, rather than a person. Perforce provides daemon licenses free of
charge; contact Perforce technical support to get one." To be
consistent with Perforce terminology, the phrase 'daemon license' should
be replaced with 'background user license'. 'Contact Perforce technical
support' should be replaced with 'Contact Perforce Customer Service.'
5.13. WHAT WAS NEW IN RELEASE 1.0.3
ESSENTIAL
job000243: The p4 client is not on path when running from RPM install
When running the P4DTI with the startup script from an RPM install
(/etc/rc.d/init.d/p4dti start), p4 is not on the path so the P4DTI fails
(because the distributed config.py has p4_client_executable just set to
"p4").
job000251: Known issues included in release notes
Perforce ask that the list of known issues is not included in the
release notes for the software.
5.14. WHAT WAS NEW IN RELEASE 1.0.2
CRITICAL
job000200: No supported TeamTrack release works with integration
There's no officially supported TeamTrack release that works with the
integration.
job000234: Jobs from Bugzilla get wrong name
A job replicated from a new Bugzilla bug gets the bug number N as the
job name instead of "bugN".
job000235: New Bugzilla bugs may cause conflict email
If a Bugzilla bug is created or changed in the same second as the start
of a replicator poll, it may be replicated on two consecutive polls.
This will cause a conflict email to be sent on the second poll.
job000236: Bugzilla table grows without bound
The P4DTI keeps a table in the Bugzilla database called
p4dti_replications which grows quite fast (hundreds of K per day).
There is a function to delete redundant rows from this table
(bugzilla.delete_complete_replications()) but it is never called.
job000237: Bugzilla logger breaks on Windows
The Bugzilla logger tries to log to the syslog. It can't manage that on
Windows because there isn't one.
job000238: Bugzilla integration doesn't work with old Python versions
The Bugzilla integration fails on old Python versions such as 1.5. (We
don't officially support these versions, but in this case the change is
so small it is worth making.)
job000241: Bugzilla integration doesn't work with MySQL version
3.22.32
A user running MySQL 3.22.32 on Linux couldn't run the P4DTI because the
results of the 'describe' SQL command had a different number of columns
from that on the development system (also MySQL 3.22.32!?).
ESSENTIAL
job000233: When you submit a new issue to TeamTrack it overwrites the
issue
When you submit a new issue in TeamTrack, then the replicator sets up
that issue for replication and replicates it to Perforce. Then the next
time it polls, it thinks that the issue and the corresponding job have
changed, so it overwrites the jobs with the issue.
OPTIONAL
job000227: AG doesn't have Bugzilla error messages
Section 11.2 of the AG lists and explains P4DTI error messages. Most of
the error messages produced by the Bugzilla integration are not
mentioned in this section.
5.15. WHAT WAS NEW IN RELEASE 1.0.1
CRITICAL
job000027: There are outstanding defects that were found in release
0.3.0
See Evidence section for links to the complete reports.
job000217: readme.txt has too much detail of fixed bugs
It's good to identify fixed bugs in the readme.txt, but if we do so
verbosely then even mildly impatient readers will never get to the
'known bugs' section, which is arguably much more important.
job000218: readme.txt has a confusing date at the top
The readme.txt file says "Richard Brooksby, Ravenbrook Limited,
2000-10-30", right at the top, because it conforms to our standard
document style. This will be very confusing to users, and may well put
people off in time (e.g. when it still says this in late 2002, and users
download it and say "eeek, this hasn't been maintained for two years").
job000221: Refreshing Perforce jobs fails in Bugzilla integration
Refreshing Perforce jobs doesn't work in the Bugzilla integration.
ESSENTIAL
job000135: Replicator makes no more progress if replication to Perforce
fails
If replication from the defect tracker to Perforce fails for whatever
reason, the replicator gets into a loop where it keeps e-mailing the
administrator.
job000166: MySQLdb version 0.3.0 is untested
We may fail with later MySQLdb versions, in particular 0.3.0 which I
believe is gaining popularity. We haven't tested this. We should test
and make any appropriate fixes. If there are serious incompatibilities,
we should at least test the version (MySQLdb.__version__).
job000174: No instructions on how to upgrade from the beta
A small number of sites will be running a beta release like 0.4.2 or
0.5.1. When release 1.0.x comes out they will naturally want to
upgrade. But the P4DTI doesn't have any instructions telling them how
to do this.
job000188: The TeamTrack integration fails with non-ASCII characters
The tTrack integration does not cope with non-ASCII characters. For
instance, "" (character 0xe9). If this character is placed in a
TeamTrack field, it gets into Perforce as "ffffffffffe9".
job000191: Administrator can't easily find release when contacting
support
In the AG we tell the administrator to report which release of P4DTI
they are using. But how do they find this out? The documentation isn't
clear and the program doesn't report it.
job000194: Perforce states include tSupport states as well as tTrack
states
tSupport and tTrack both have states. When replicating from tTrack, the
jobspec status field includes tSupport states, which are not possible
for tTrack cases. This is not ideal.
job000195: Keyword translation is too conservative
We translate keywords (items for Perforce job fields of type 'word') by
using a hexadecimal escape %xx for characters other than
[a-zA-Z0-9(),.?!-]. This is very conservative, and rules out a number
of characters commonly used in defect trackers.
job000215: The replicator can send out mail bombs
The replicator can get stuck in a loop where it sends e-mail to the
administrator every 10 seconds (or whatever the poll_period is). This
is very unfriendly.
job000219: Existing jobs in Perforce may become unusable when the
jobspec is changed
When the P4DTI starts up for the first time, it changes the jobspec
without checking to see whether any jobs are present. These jobs may
become unusable when the jobspec is changed.
job000222: Deleting fix causes Bugzilla integration to crash
A user tried out "p4 fix -d ...". The Bugzilla integration crashed.
job000225: If you "p4 fix" when there's no closed state, the replicator
can't replicate
When you do "p4 fix -c CHANGE JOB" then Perforce sets the status of the
job to "closed". If "closed" is not a legal status in Perforce then the
replicator can't get at the job any more, so it fails to poll.
job000229: The readme is too hard to use
The readme.txt is too hard to use. The lists of fixed and open issues
are too long; they should be in a file of their own (release-notes.txt).
job000230: Messages from the replicator refer to non-existent sections
of the manuals
Messages from the replicator refer the reader to sections of the UG and
AG. But sometimes these sections don't exist.
OPTIONAL
job000052: Likely problems not in troubleshooting section
Some likely errors (login failure, run out of licenses) should be in the
troubleshooting section of the AG.
job000167: Released manuals should be on the website
The released manuals are currently not available on the website (except
by downloading and installing a release). This has several undesirable
consequences. For instance, users browse the master or version manuals,
which do not reflect the release which they have downloaded. Also it
makes it impossible to give a URL into a released manual.
job000208: TeamTrack integration doesn't provide a .reg file
It's error prone to tell people to use regedit to set the "VC
Integration" registry key. It would be better to provide a .reg file
which people can double-click on to set the registry key.
job000210: Bugzilla states/resolutions with spaces in them cause broken
jobspec
If the Bugzilla database schema is altered so that states and
resolutions have spaces in them (this is legal in MySQL) then the
replicator generates a broken jobspec.
job000216: readme.txt mentions beta sites
The readme.txt mentions particular beta sites (in the known issues
section). Probably we should avoid this.
job000223: Quote in change comment terminates display in TeamTrack
A quote character (single or double) in a change comment terminates the
display of that comment in the "Perforce fixes" table in TeamTrack.
job000226: Newlines don't show up in change descriptions in TeamTrack
Newlines in change descriptions don't show up in the "Perforce fixes"
table. Instead, lines are placed adjacent to each other.
job000232: Log and e-mail messages are confusing if jobname is
different from the issue name
Log messages and e-mail messages describe an issue using the name of the
corresponding job. This is OK when they are the same (which is the
usual case), but misleading when they are not (which could happen if
you've migrated your jobs and kept the jobname).
NICE
job000171: AG should note broken MySQL versions
MySQL 3.23.29-gamma and 3.23.29a-gamma are broken, in that they stop
Bugzilla logins from working. We should note these in the Prerequisites
section of the AG.
5.16. WHAT WAS NEW IN RELEASE 1.0.0
CRITICAL
job000181: Assertion failure in translate_1_to_0
If an optional field in Perforce has no value, then a field translator
may fail with an assertion error.
job000190: Connection to TeamTrack hangs for several minutes
When release 0.4.2 attempts to connect to TeamTrack 4407, it hangs for
several minutes before connecting.
job000205: Configuration is still too difficult
The Administrator's Guide is too hard to use. Administrators are busy
people and sometimes don't read all the documentation.
ESSENTIAL
job000006: TeamShare API error reporting is inadequate
When TeamTrack refuses to update or transition an issue because a user
doesn't have the privilege to do so, it raises an error but provides
only an empty error message. The replicator can't provide any
information to the user to explain why the operation failed.
job000033: Incompatible with other TeamShare API programs
The P4DTI is incompatible with other TeamShare API programs because
changes made by other TeamShare API programs are not replicated.
job000048: Consistency checking of the configuration is inadequate
Consistency checking of the configuration needs to be much stronger, to
catch problems so that they don't affect the replicator when it's in
use.
job000075: No automatic check of configuration
How do you tell if the configuration is correct? There should be
automatic checking of the configuration.
job000082: AG has no training and documentation section
The AG has no guidance on training and documentation for users.
job000092: Long descriptions aren't replicated by Bugzilla integration
In Bugzilla, bugs have short descriptions (called "Summary" in the web
interface) and long descriptions. Each bug may have many long
descriptions; they carry a timestamp and are displayed in date order.
They also carry user names.
job000093: Can't replicate other Bugzilla fields
Bugzilla bugs have loads of fields. We only replicate a small number of
them. We don't support the "replicated_fields" parameter in the
Bugzilla configuration.
job000103: Can't easily add to replicated_fields list
The configurator doesn't cope if you change the replicated_fields.
job000109: Can't get at Perforce information from TeamTrack
TeamTrack lists associated changes for each issue, but you can't easily
get at any more details without going to the Perforce interface. It's
inconvenient, and not every TeamTrack user will even be licensed to go
to the Perforce interface.
job000112: Can't easily replicate by project
It's hard to set the replicator to replicate only those issues in a
particular project or group of projects.
job000116: Bugzilla integration doesn't do enough checking
The Bugzilla integration does hardly any checking, either of the
configuration or of data encountered during replication. This is in
contrast to the TeamTrack integration, which now does quite a lot of
checking.
job000117: Jobview and job filter confused in the UG
The UG says that the list of jobs displayed in the GUI dialogs is
affected by the users jobview. This isn't true. It's the job filter
that's used. The jobview only affects the command line interface.
job000122: Server failures aren't handled gracefully
If the Perforce server or the defect tracker is down, the replicator
produces unhelpful error messages and e-mails to the administrator.
job000138: "Add Job Fix" always sends jobs to "closed"
The "Add Job Fix" command in the Perforce Windows GUI always sends a job
to status "closed". Users will want to link changes using other
keywords.
job000141: Can't add to replicated_fields list
The P4DTI administrator can't add a new field to the replicated_fields
list (except at the end of that list) because the new field will get a
Perforce field number that was previously used by another field. So the
data that was previously in that other field gets captured by the new
field.
job000155: Bugzilla integration doesn't send mail when bugs change
through P4DTI
Bugzilla sends email notifications when bugs change through normal
Bugzilla use. But when bugs change through the P4DTI no notification is
sent.
job000156: Pending changelists aren't clearly indicated as such in
Bugzilla
You can't tell the difference in the P4DTI section of the Bugzilla bug
form between a pending changelist and a submitted one. This means that
you might mistakenly think that work has been done when in fact it is
only pending and may later be reverted.
job000157: Improper installation instructions on Linux
The integration is distributed as a simple tarball on Linux and doesn't
install anywhere in particular. The AG says to put it in the
administrator's home directory for the moment, which isn't good enough.
job000172: Replicating some fields can break Bugzilla
Some fields can not be changed using the Bugzilla interface, or only
changed in highly restricted ways. Now that these fields can be
replicated into Perforce, we should restrict changing these fields in
Perforce.
job000173: Wrong Perforce server version causes installation to fail
mysteriously
If you have the wrong Perforce version (2000.1 or earlier) then
installation will fail with a mysterious error message. It should
instead say something like "Perforce release not supported; changelevel
NNNNN required."
job000178: AG doesn't give advice on making problem reports
The AG doesn't give advice on how to get effective support for the
P4DTI. Typically someone e-mails a section of their P4DTI log -- for
example, the error message at the end. This is rarely enough
information to track down the problem.
job000180: The bugzilla_user parameter is confusing
Many people find the bugzilla_user configuration parameter confusing.
We should get rid of it and use the replicator_address parameter in its
place.
job000182: Elapsed time fields aren't replicated properly
Date fields in TeamTrack have a "display type" which can be "Date only",
"Date and time", "Time only" and "Elapsed time". The repicator copes
well with the first two, but poorly with the second two (an elasped time
of 10 hours in TeamTrack becomes a date of 1971/01/01 10:00:00 in
Perforce).
job000184: Bugzilla integration doesn't work if your database is not
called 'bugs'
If your Bugzilla database is not called 'bugs', then P4DTI tries to
connect to 'bugs' anyway. So it doesn't work!
job000185: The python 1.5.2 RPMs are not sufficient to build MySQLdb
The Python 1.5.2 RPMs are no good for building the MySQLdb interface.
In the AG we offer the Python 1.5.2 RPM. This is insufficient on its
own to build the interface (because it doesn't have the header files).
job000186: AG suggests python RPM which is insufficient
MySQLdb can't be built using just the python RPM linked to from the AG.
job000187: Bugzilla startup is slow due to creating tables twice
The Bugzilla integration tries to create its own tables in the Bugzilla
integration twice when the replicator starts.
job000189: The replicated_fields parameter can't be changed without
replicating all jobs
In section 10 of the prepared manuals
<http://www.ravenbrook.com/project/p4dti/branch/2000-12-18/manual-prep/manual/ag/#section-10>
we tell people to run the refresh script if they change the
replicated_fields parameter, but this forces all issues to be
replicated, which they may not want.
job000198: We don't check the bugzilla_directory configuration
parameter
The configuration parameter bugzilla_directory names a directory in
which the P4DTI will find a script called 'processmail'. We do not
currently check that this parameter names a directory, or that the
directory it names contains a processmail script. If either of these
things is false, the P4DTI will fail to invoke the processmail script
and so fail to send e-mail.
job000199: Auxiliary scripts send e-mail
The auxiliary scripts, check.py and refresh_perforce.py, send e-mail to
the administrator saying that the replicator is starting up. They
shouldn't do this, because it's unnecessary and the message is not true.
job000202: Errors from Perforce not reported well
Some Perforce errors are reported only as "The Perforce client exited
with error code %d. Is the server down or the server address incorrect?"
This provides little help in tracking down the problem.
job000204: Issue owned by non-existent Perforce user causes crash
If the Perforce server is running without any spare licences, then when
the replicator tries to overwrite a job whose owner is a user that
doesn't exist in Perforce, then you get the error message "Can't create
a new user - over licence quota".
job000212: TeamTrack 4.5 not supported
The TeamTrack integration can't record that issues have been replicated
in TeamTrack 4.5.
job000214: No way of controlling the poll period
There's no easy way for the administrator to control the poll period.
If 10 seconds gives performance problems then there should be a way of
increasing the delay.
OPTIONAL
job000024: "\012" appears in fixes table in TeamTrack instead of
newline
Change descriptions in the "Perforce fixes" section of a TeamTrack case
description display the octal escape "\012" as those four characters,
rather than as a newline (ASCII 10).
job000032: Deletion of fixes and filespecs in TeamTrack may cease to
work in future releases
Deletion of fixes and filespecs from the TeamTrack interface is
correctly replicated to Perforce at present. But this depends on an
undocumented feature of TeamTrack and so may cease to work when new
releases of TeamTrack appear.
job000084: No glossary in the UG
There's no glossary in the user's guide.
job000101: Different transitions for different issue types may confuse
the replicator
In TeamTrack, different issue types (bugs, enhancements, etc) may have
different workflows: that is, certain transitions may be enabled for
some issue types but not for others. The replicator doesn't take this
into account and so may pick the wrong transition, which means that the
transition may fail. It may happen that the replicator can't transition
any issues for this reason.
job000160: 'closed' doesn't map to 'RESOLVED' in the Bugzilla
integration
The 'closed' status for Perforce jobs is special: p4 fix without a -s
flag will cause a transition to 'closed'. The natural status for this
to translate to in Bugzilla is 'RESOLVED': engineers should make bugs
RESOLVED when they resolve them. But currently 'closed' in Perforce
translates to 'CLOSED' in Bugzilla: to move a bug to 'RESOLVED',
Perforce users must do 'p4 fix -s resolved'.
job000163: Jobspec fields are too small for Bugzilla
The replicator makes a new Perforce jobspec. The "assigned_to" field
has size 32. This must in fact be large enough to hold a Bugzilla
login_name (from the "profiles" table in Bugzilla), which is
varchar(255).
job000165: Bugzilla configuration parameters are not checked
We don't check the Bugzilla configuration parameters. For instance, we
don't check that dbms_port is a number, or dbms_host is a string, or
that bugzilla_user is an email address.
job000169: Change numbers are links in TeamTrack even when no
changelist URL has been specified
If changelist_url is None in the configuration, then changelist numbers
are still links in the table of fixes in TeamTrack, but they don't link
to anywhere sensible.
job000170: Replicator may be unable to send e-mail if the default
replicator_address is unchanged
The file config_bugzilla.py says replicator_address = 'p4dti-%s' % rid.
Ravenbrook's SMTP server allows the replicator to send e-mail from this
address, but not all SMTP servers allow this.
job000193: Bugzilla integration fails if DateTime module is installed
The Bugzilla integration breaks if the Python DateTime module is
installed on the P4DTI server system.
NICE
job000161: Replicator appears to hang
When the replicator starts up for the first time, it prints some log
messages and then stops. This is disconcerting to the user, as you
can't tell if it's hanging or waiting.
job000168: Too easy to set dbms_port to a string
It's easy to set the configuration parameter dbms_port to a string (e.g.
'3306', 'localhost:3306', etc) rather than an int. Especially easy
given that p4_port has to be a string. In release 0.5.1 it was
especially unclear that this had to be an integer (config_bugzilla.py
has it set to ????). config.py now has a sensible value here (i.e.
3306), but this requirement should be documented in the comment and in
the AG, and tested in configure_bugzilla.py (see job000165).
A. REFERENCES
None.
B. DOCUMENT HISTORY
2001-02-22 GDR Created using Perforce release notes as a model.
2001-02-23 GDR Updated for release 1.0.1.
2001-03-02 RB Added missing license. Transferred copyright to Perforce
under their license.
2001-03-02 NB Updated for release 1.0.2.
2001-03-06 GDR Updated for release 1.0.3.
2001-03-19 RB Updated for release 1.0.4.
2001-03-21 NB Updated for release 1.0.5.
2001-03-25 RB Updated for release 1.0.6.
2001-03-26 RB Updated for version 1.1.
2001-03-28 RB Stated that P4DTI doesn't support TeamTrack Online.
2001-04-09 NB Updated for release 1.1.0.
2001-04-11 RB Updated for release 1.1.1.
2001-05-24 NB Updated for Bugzilla 2.12.
2001-06-28 GDR Added Perforce 2001.1 and Python versions to supported
configurations.
2001-07-16 GDR Updated for release 1.1.2.
2001-07-17 GDR Split supported systems into two lists, one for TeamTrack
and one for Bugzilla.
2001-07-19 GDR Updated for release 1.1.3.
2001-07-24 GDR The P4DTI doesn't support TeamTrack on a secure web
server.
2001-08-02 GDR Updated for release 1.1.5.
2001-08-06 GDR Updated for release 1.1.6.
2001-09-03 NB Updated for Bugzilla 2.14.
2001-09-18 GDR Updated for release 1.2.0.
2001-09-19 GDR Updated for release 1.2.1.
C. COPYRIGHT AND LICENCE
This document is copyright (C) 2001 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/1.2.1/release-notes.txt#1 $