                             Release Notes for
                 P4, the Perforce Command-Line Client, and
                          P4D, the Perforce Server

                             July 15, 2003

Introduction

        This document lists all user-visible changes to the Perforce
        server (P4D) and command line client (P4) between Release 97.3
        and 2003.1.

        Release notes for P4Win, P4Web, P4WinMerge, CW Plug-in, and SCC
        Plug-in, as well as supplemental Platform Notes and notes on
        Internationalization are available separately on the Perforce
        Documentation web page.

        Perforce numbers releases YYYY.R/CCCCC, e.g. 2002.1/30547.
        YYYY is the year; R is the release of that year; CCCCC is the
        bugfix change level.  Each bugfix in these release notes is
        marked by its change number.  Any build includes (1) all bugfixes
        of all previous releases and (2) all bugfixes of the current
        release up to the bugfix change level.

        Both "p4" and "p4d" will report their version information by
        passing the "-V" flag.  Additionally, "p4" can report the server's
        information with the "p4 info" command.
      
--------------------------------------------------------------------------

Upgrading From Previous Releases

    1.  In addition to your usual checkpointing scheme, always
        checkpoint your server immediately before undertaking
        an upgrade.

    2.  If you are upgrading from 97.3 or earlier releases,
        please see the upgrade note at the end of this file.

    3.  The 2003.1 server will automatically upgrade 98.2 and
        later databases if the database contains fewer than 1000
        changes.  If there are 1000 or more changes, you will
        need to upgrade the database manually:  from the server's
        P4ROOT directory, issue the command 'p4d -xu'.

	The 2003.1 depot upgrade will initialize a default depot
	"depot" (if required). This upgrade takes minimal time and
	space.

        The 2002.2 tempobj upgrade will only update records where
        the filetype is tempobj, therefore the time and space 
        required for this upgrade will depend on your tempobj usage.

        THESE DATABASE UPGRADES WILL CONSUME A SIGNIFICANT AMOUNT
        OF SPACE, depending on which releases you are upgrading
        through.  Check the size of the affected tables, and
        have available prior to upgrading three times that amount
        of free space (enough for a copy of the table, plus journal
        entries for deletes and adds).

            2002.2: db.rev, db.working
            2002.1: db.changes
            2001.1: db.integ, db.have

        DOWNGRADING AFTER AN UPGRADE IS NOT POSSIBLE.  

        (See changes 36061, 29365, 21633, and 21574.)

    4.  2002.1 jobs searching supports matching punctuation,
        but old jobs must be reindexed with the 'p4 jobs -R'
        command before punctuation in those jobs will be found.
        (See change 27808).

Interoperating With Previous Releases

    1.  Unless stated otherwise you can intermix any release
        Perforce client with any release Perforce server, but
        any functionality new to 2003.1 requires you to upgrade
        the client and/or the server.  See marks in the notes
        below.

            * -- requires new p4 client program
            ** -- requires new p4d server program

    2.  Beginning with 99.2, remote depots will interoperate
        between UNIX and NT.  Beginning with 98.2, remote depots
        will interoperate across (98.2 and higher) releases.
        In 98.1 and before, remote depots will only operate with
        another server of the same release.

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Major new functionality in 2003.1

	2003.1 includes a number of as yet undocumented internal changes
	required for versioning and configuring of p4 specs.

    NEW MONITOR COMMAND DISPLAYS STATUS OF RUNNING P4 PROCESSES  - #41063 **

	    The new 'p4 monitor' command displays the status of current
	    running p4 processes.  It is functionally similar to the UNIX
	    'ps' command.  A perforce administrator can also use monitor
	    to terminate long running processes. 

	    See 'p4 help monitor' for usage.

	    (Bug #2931, #9889).

Minor new functionality in 2003.1

	#43840 * **
	    'p4 resolve -a' of a binary file where either "yours" or
	    "theirs" has changed from the base now does an automatic
	    "accept theirs/yours", a conflict will still require manual
	    selection.  Interactive resolve will now suggest "at/ay" as
	    appropriate.    (Bug #5547).

	#39123 **
	    The new option 'p4d -c command' runs the command while the
	    database tables are locked.  (Bug #9887).

	#38864 **
	    'p4 changes' has an additional option "-t" when specified
	    will display the time as well as the date. (Bug #3224)

Bugs fixed in 2003.1

	#46143 **
	    'p4 obliterate' would halt if it tried to unlink a lazy
	    copy and failed because the archive was already removed.
	    This change causes the server to issue a warning message 
	    but continue processing.  

	#45952 **
	    Linux Perforce server was incorrectly reporting out of memory 
	    when close to 1GB had been consumed.  (Bug #11363).

	#45779 **
	    Setting the JobStatus field on a change form would not always
	    propagate the fix status to the included jobs.  (Bug #11312).

	#45010 *
	    On Windows/NT a sync "delete" action that tries to unlink
	    a busy file fails to report the error.  In addition the 
	    db.have table is incorrectly updated as if the delete 
	    actual occurred, this has been corrected.  (Bug #11068).
	    
	#44920 **
	    Some translated error messages that have been stored in
	    perforce in a foreign language were being obscured by 
	    in-built English language versions. 
	    This has been fixed.  (Bug #11173).

	#44136 *
	    On Windows/NT a manual 'p4 resolve' could result in edits
	    being lost if the target (local file) was busy during a 
	    rename operation. This change allows the user to close
	    down the editor or whatever process is holding on to the
	    local file and continue without losing work.  (Bug #953).

	#43856 **
	    'p4 change -o changelist#' no longer requires a valid client to 
	    be able to dump change information.  (Bug #10980).

	#43660 **
	    The 97.3 (and earlier) p4win can no longer edit any form
	    data against a 2003.1 or later server.  This all but obsoletes
	    the 97.3 p4win.

	#43605 *
	    'p4 -G job -o' with a custom jobspec that had an invalid
	    preset (usually a value like 'set-me') failed, because the
	    'p4 -G' support was inadvertantly trying to validate the
	    fields of the blank jobspec.  Now 'p4 -G' doesn't validate
	    the fields of the forms being output.

	#43555 **
	    'p4 client' allowed the user to input a single double-quote
	    character into the clientspec 'Root' field.  This could lead
	    to corruption of the spec requiring it to be recreated.  An
	    error is now raised to prevent this happening.  (Bug #10569).

	#43360 **
	    'p4 obliterate' no longer selects all revisions of a file when
	    supplied with #head or #head,#head as its file revision spec.
	    Some other commands that were not obeying #head,#head semantics
	    correctly have also been fixed by this change. (Bug #10883).

	#43205 **
	    Access to remote depots was requiring an extra user license to
	    enable the connection on the remote site, this has been fixed.
	    (Bug #2128)

	#42761 **
	    The diff algorithm used internally by perforce by the various
	    p4 diff/merge commands has been altered to provide better results
	    when run against large text files (between 10000 and 50000 lines).
	    (Bug #10840)

	#42269 **
	    p4d no longer holds the error log file open so that
	    it can be renamed/moved without needing to stop the running
	    p4d.  (Bug #606)

	#42258 **
	    'p4 client -d' has now been optimized so that during the
	    removal of client data it no longer blocks other users.  
	    (Bug #9519).

	#41499 **
	    'p4 sync' now completes all deletes before adding any
	    files to a client's workspace. By performing the 'sync'
	    in this order the amount of disk space required by the
	    client is kept to a minimum.  (Bug #607).

	#39841 **
	    'p4 resolve' and other Perforce merge tools will no
	    longer report as conflicting changes on adjacent lines
	    which do not strictly overlap.  This should result in
	    fewer conflicting file merges.  (Bug #3811, #7912)

	#38826 *
	    On Windows/NT clients a failed 'sync' due to a file access issue
	    (e.g. file in use) would leave the file writeable. This would
	    cause a subsequent 'sync' to fail with the message "Can't clobber
	    writeable file <filename>".  This has been fixed (Bug #786).

	#38730 **
	    Case-insensitive servers (Windows) could inadvertently change
	    the case of certain entity names (e.g. client name) when 
	    referenced with a non-matching name.  For example the client
	    name 'myclient' could be changed to 'MYclient' with the following
	    command 'p4 files ...@MYclient'.  This has been fixed (Bug #9566).

	#38395 **
	    Previously installations that did not create a depot "depot"
	    would still get a viewspec entry for one each time they created
	    a new client.  Now new installations will come initialized with
	    this default depot which can be deleted if not required.  
	    Upgraded installations will have an entry created if necessary
	    (i.e. there are "//depot" entries already in existence). If the
	    installation has no reference to any "//depot" file then the
	    depot "depot" will no longer appear in client specifications.  
	    (Bug #5960)
	
--------------------------------------------------------------------------
--------------------------------------------------------------------------

Major new functionality in 2002.2

    INTEGRATE ACROSS DISTANT BRANCHES - #35537 **

	    'p4 integrate' now fully handles merging changes between
	    branches that don't have a direct parent/child relationship.
	    This occurs often when, say, both a release line and a
	    development line are branched from a main line and changes
	    must be merged directly from the development line to the
	    release line.

	    Previously, users had to rely on instructions in technical
	    note #9 to ensure that the Perforce server chose the right
	    base revision for merging.

	    Now an updated option to 'p4 integrate' does the work.  The
	    '-I' option looks for "indirect" integration history through
	    intermediate files when determining the base for merging.
	    This makes it able to handle files distantly related by
	    branching, not just those with a direct parent/child
	    relationship.

	    The new branch option 'indirect' implies 'p4 integrate -I'
	    for the branch, so that it need not be passed on the command
	    line.

	    While it is harmless to use the '-I' flag for directly
	    related branches, it is slower.

	    See 'p4 help integrate' and 'p4 help resolve' for updated
	    descriptions of their operation.

	    (Bug #413, #9323).

    NEW ANNOTATE COMMAND SHOWS HISTORY OF LINES IN A FILE - #35149 **

	    The new 'p4 annotate' command displays the lines of a file
	    along with the number of the revision that introduced each
	    line.  It is functionally similar to the CVS annotate command,
	    except that it has the option to show deleted lines and
	    note both the revision of introduction and deletion.

	    See 'p4 help annotate' for usage.

	    (Bug #574).

    SHARING CLIENTS USING MULTIPLE CLIENT ROOTS - #34879 **

	    Client workspaces that are shared across multiple platforms
	    can now be better accomodated by the ability to specify
	    multiple client roots.  If the same workspace is accessed
	    from different hosts, the same set of client workspace
	    files can appear with a different root directory.

	    Previously, only one root could be given in the client spec,
	    and the user had to change it manually as he moved among
	    platforms.

	    Now 'p4 client' supports up to three (3) client roots, one
	    main (named "Root") and two alternates (named "AltRoots" ).
	    The client's current working directory is tried against all
	    three, and the first one that matches is used.  If none
	    match, the main is used anyhow.  'p4 info' reports the
	    applicable root.  

	    This support allows for client roots shared via multiple
	    UNIX paths with symlinks, shared via NFS or Windows shares,
	    or even between MacOS Classic and MacOS X.	When used with
	    the 'p4 client' LineEnd 'share' option, client workspaces
	    can be effectively shared between UNIX and Windows.

	    See 'p4 help client' for details on using multiple client roots.

	    (Bug #4471, #6200, #6243, #6275, #6521, #7268)

    SPRUCING UP DIFFS

	The various commands that diff files have seen some enhancements
	to make them more compatible with the GNU diff and patch programs.

	Ignoring whitespace - #31144, #31078 * **

	    'p4 diff', 'p4 diff2', 'p4 describe', and 'p4 resolve' now
	    can ignore whitespace changes, as the GNU diff does.  
	    The -db flag ignores changes in horizontal whitespace, and 
	    the -dw flag ignores horizontal whitespace altogether.

	    'p4 resolve' also passes the flags to the diff option in
	    resolve dialog.  Note that 'p4 resolve' will use text from
	    the client (aka "yours") file where the files differ only
	    in whitespace.

	    'p4 diff' requires a p4 client upgrade; 'p4 diff2' and 'p4
	    describe' require a p4d server upgrade.  'p4 resolve' rquires
	    both.

	    (Bug #879, #1671, #1932).

	Patch-friendly output - #35143 **

	    'p4 diff2 -u', which produces more patch-friendly output,
	    is now supported.  It has long been present but undocumented.
	    (Bug #380).

    TEMPOBJ FILETYPE REDUX - #36061 **

	    The 'tempobj' filetype, which stores only the head revision
	    of the file (to conserve space), has been reimplemented to
	    remove some of the serious problems associated with using
	    this filetype.  It is now safe to use.

	    Previously, the server knew there were multiple revisions
	    but they all shared the same text.  This created problems
	    with 'p4 submit' (aborted submits would update the text
	    anyhow), 'p4 verify' (the revision fingerprint would change),
	    'p4 sync' (syncing a non-head rev would still give the head
	    rev's text), and 'p4 obliterate' (obliterating the non head
	    rev would remove the head rev's text).

	    Now the server associates text with each revision (just as
	    with non-tempobj files) and goes through the extra step of
	    purging the previous revision during 'p4 submit'.  'p4
	    filelog' will display non-head revisions as 'purged' and
	    they are treated like a deleted revision: 'p4 sync' will
	    remove the file on the client and 'p4 verify' will ignore
	    them.

	    With this change, the filetype modifier "+S" changes from a
	    storage type (uncompressed binary with only the head rev
	    stored) to a storage modifier (purge non-head revs).  Any
	    type of file (text, binary, compressed) may now take on the
	    "+S" modifier.  The filetype modifier "+M", which previously
	    indicated compressed binary with only the head rev stored,
	    has been supplanted by +S's new meaning.

	    This table might make it clearer:

		keyword         pre-2002.2      2002.2
		--------        ----------      -----------
		tempobj         binary+Sw       binary+FSw
		xtempobj        binary+Swx      binary+FSwx
		ctempobj        binary+Mw       binary+Sw

		+F = uncompressed
		+S = binary head-rev only (pre-2002.2)
		+S = purge non-head-revs (2002.2)
		+M = compressed binary head-rev only (pre-2002.2)

		+w = client file always writable (all tempobjs)
		+x = executable bit set on client

	    The 2002.2 server will upgrade existing tempobj files to the
	    new.  This requires a database upgrade with 'p4d -xu'.

	   (Bug #1025, #2642, #3888, #7775).

    NEW PROTECTION LEVEL FOR SEMI-SUPER USERS - #35832 **

	    A new 'p4 protect' level 'admin' has been introduced below
	    'super' to permit many administrative commands without
	    granting total superuser access.  The commands now requiring
	    only 'admin' access are:

		    p4 branch -f
		    p4 change -f
		    p4 client -f
		    p4 job -f
		    p4 jobspec
		    p4 label -f
		    p4 obliterate
		    p4 typemap
		    p4 unlock -f
		    p4 verify

	    The commands still requiring 'super' access are:

		    p4 admin
		    p4 counter -f
		    p4 depot
		    p4 group 
		    p4 jobs -R
		    p4 passwd user
		    p4 protect
		    p4 triggers
		    p4 user -f

	    (Bug #3037, #1306, #2842, #3520, #5004.  This change only 
	    tangentially addresses some of these bugs.)

Minor new functionality in 2002.2

	#36081 **
	    "p4 resolve" now writes its messages through the methods of
	    the ClientUser class rather than directly to stdout to allow
	    API users to capture and parse the output. This change is
	    only relevant to API users.  (Bug #6881.)

	#35972 **
	    'p4 resolve' now recognizes if the resulting file has been
	    edited to match either 'yours', 'theirs', or the automatically
	    merged result, and changes its default suggested action
	    appropriately.  In this way, if an external merge tool
	    produces exactly 'theirs' then 'p4 resolve' can still arrange
	    for a lazy copy in the server.

	#35391 **
	    'p4 describe' of a pending changelist now includes the
	    affected files.  This fixes our oldest open bug.  
	    (Bug #13, #4974).

	#35390 **
	    The new option 'p4 revert -n' just displays which files
	    would be reverted without actually reverting them.

	#35368 **
	    Long running operations that have been cancelled by the
	    client can now be detected and terminated in the server.
	    This feature may not be available on all platforms.  
	    (Bug #409).

	#35145 **
	    The new options 'p4 files -a' and 'p4 print -a' display all
	    revisions in a revision range, rather than just the highest
	    revision.

	#35114 **
	    'p4 filelog' has an additional option "-t" when specified
	    will display the time as well as the date.  (Bug #553).

	#35063 *
	    Adding support for Mac OS Roman character set in i18n mode.
	    To use, set P4CHARSET to "macosroman".

	#34972 **
	    p4 info now displays the offset from UTC of the server
	    timezone numerically and with a symbol if the symbol supplied
	    from the OS is ASCII.  (Bug #9359).

Bugs fixed since 2002.2/39491 (first release).

	#43923 **
	    The proxy's RCS based cache files could be corrupted
	    if concurrent updates to that RCS file occurred
	    due to multiple clients requesting a revision
	    from that file.  Fixed.  Related, the executable
	    bit will no longer be set on RCS files.  Also related,
	    RCS anomolies if one client is used concurrently
	    by multiple processes to submit the same file.
	    (Bug #6054 & #10512)

	#42711 **
	    A 3 way merge during a resolve of large files (>20000 lines) 
	    could cause the server to crash, this has been fixed.
	    (Bug #10835).

	#42453 **
	   Prior to 2002.2 there was a bug that under certain conditions
	   allowed a lazy copy of a tempobj archive file. In 2002.2 the new
	   tempobj implementation purges old copies (,t) files replacing them
	   with the appropriate base type. A 2002.2 user can run into a problem 
	   if they try and access one of the branched files that have (since 
	   2002.2 upgrade) had the base file for the lazy copy purged. This fix 
	   prevents old tempobj files (,t) from being removed during a submit 
	   although they will still be marked as "purged" in the rev table. 
	   When trying to access a file that had been purged as previously 
	   stated the user would receive an error something like this:

	   Librarian checkout depot/branch/foo.c failed.
	   open for read: depot/branch/foo.c,t: The system cannot find the file
	   specified

	   Even if this fix has been applied it is still possible to get the
	   above error message if the base file was purged before this version
	   was installed (in a previous 2002.2 release).  If this happens the
	   file can be manually fixed up, for help on this please contact 
	   technical support.  (Bug #10581).

	#41819 **
	   Due to the sometimes significant overhead of indirect integration,
	   'p4 integ -i' has been reverted to its previous use of just allowing 
	   baseless merges.  A new option 'p4 integ -I' is required to use the 
	   new 2002.2 feature to find intermediate files when determining a base.
	   (Bug #10587).

	#41516 **
	   'p4 print -o' through the proxy might fail silently depending
	   on network timing.  Fixed. (Bugs #10491, #10511, #10574)

	#41173 **
	    'p4 verify' could crash the server if it ran out of available
	    memory. (Bug #10468).

	#41169 **
	    Long running operations that have been cancelled by clients
	    running on NT were not detected on an NT server. 
	    Fixed (Bug #10465).

	#41147 **
	    'p4 sync' through the proxy was not honoring a
	    client's 'allwrite' option if files were delivered
	    from the proxy.  Fixed.  (Bug #10398)

	#40318 *
	    'p4 revert' of a file with the client option "modTime" set
	    under certain circumstances could lead to the error:
	    ("utime: filepath: Access is denied.") 
	    This problem has been fixed.  (Bug #10202).

	#40313 *
	    'p4 resolve' when prompted for a "confirm accept (y/n)" would
	    incorrectly throw up two messages if the user answered in the
	    negative "n".  This would be very confusing and has been fixed
	    (Bug #10212).

	#40216 **
	    Certain p4 commands with a "filepath@label" argument could 
	    cause a unnecessary scan of the label table. This would occur
	    if the filepath supplied did not contain any file revisions.
	    This problem has been fixed.  (Bug #10204).

	#40122 **
	    Trying to integrate from the new tempobj type would result in
	    the incorrect warning message "can't branch without -d flag". 
	    This problem has been fixed.  (Bug #10166).

	#39934 **
	    On NT servers, under certain conditions an internal file rename
	    operation could fail.  A retry has been added to this part of
	    the code and extra diagnostics have been enabled to log relevant
	    information in an attempt to track down this problem.

Bugs fixed in 2002.2

	#38452 **
	    p4d sometimes core dumped on shutdown on hpux11 PA-RISC machines.
	    This has been fixed.
	    (Bug #9641)

	#38559 *
	    The "share" client line-end option has been extended to include 
	    support for Mac files that use linefeeds as their line terminator.  
	    (Bug #9068).

	#37237 **
	   p4d -xv and p4d -xr did not recongnize or correct btree
	   corruption where a btree page's first few bytes had been
	   corrupted.  This case should now be handled properly.  
	   (Bug #9501).

	#37746 **
	    'p4 integrate -i' was "giving credit" for indirect integrations
	    that hadn't necessarily affected the target file, suppressing
	    proper integrations from happening.  This has been fixed.
	    (Bug #9573).

	#37236 *
	   Client programs running in timezones east of GMT sometimes
	   miscalculated their GMT offset, resulting in incorrect modtimes
	   on submitted and sync files.   This has been corrected.  This
	   fix does not attempt to fix the modtimes of files previously
	   submitted with the wrong modtime.  (Bug #9503).

	#36747 *
	   Clients on OSF incorrectly offset file modtimes by one day:
	   submits were one day into the future and syncs would be one
	   day into the past.  This problem would only become evident
	   if you also operated with other, non-OSF clients.  The OSF
	   clients now set file modtimes correctly.  (Bug #9212).

	#36584 *
	   On Cygwin the p4 client program would exit (quickly) if the 
	   'rmdir' client option was set when a file was removed from
	   the current directory (either through 'p4 sync' or 'p4 delete').
	   This has been corrected with an internal workaround.  
	   (Bug #7478, #7543).

	#36150 *
	   'p4 revert -a' wasn't resetting the modification time for a
	   file when the client had the option 'modtime' set.  This has
	   been fixed.  (Bug #8978).

	#35946 **
	    'p4 obliterate -z' without the '-y' (make the changes) now
	    only reports what it would do.  It used say it was in report
	    mode, but then actually undo lazy copies.  Now '-y' is required
	    for 'p4 obliterate -z' to take effect.  (Bug #3613).

	#35869 **
	    'p4 diff2 @label1 @label2' would issue a bogus error message
	    ("RelateMap has empty maps!").  This has been fixed.  
	    (Bug #1382).

	#35829 **
	    Some server errors that occur before protocol initialization
	    (like being unable to open the database) could result in a
	    bogus error message ("Required parameter 'func' not set!")
	    sent to the client.  This has been fixed.  (Bug #8110).

	#35799 **
	    Using p4d -xi to enable I18N mode would sometimes incorrectly
	    fail reporting non-UTF8 data in either the db.job or db.change
	    table.  This has been corrected.  (Bug #9011).

	#35738 **
	    'p4 changes -s pending' is not compatible with a file argument
	    as it will always return no data (since only submitted change
	    information is available in the rev table).  Supplying a
	    file argument has now been disallowed to avoid any confusion.
	    (Bug #371).

	#35403 **
	    'p4 job -f' would not allow an update of read-only "once"
	    fields.  This has been corrected.  (Bug #5938, #8111).

	#35274 **
	    To speed p4win, performance of 'p4 changes -m1 filepath'
	    has been specially optimized.  This only speeds this exact
	    command:  filepaths including @client and @label will not
	    be affected by this change.  (Bug #7306).

	#34362 **
	    The internal support for optimizing p4win's performance against
	    large servers (see #29329 below) sometimes didn't work with
	    the case-insensitive (Windows) Perforce server.  This has been
	    corrected.  (Bug #8404).

	#34284 **
	    'p4 edit <files>' where the number of files is greater than
	    the value set for "maxscanrows" would result in an incorrect
	    error message being returned.  This has been corrected.  
	    (Bug #7837).

	#34069 **
	    A new error message indicates attempted access by a user
	    not enabled at all via 'p4 protect'.  Previously, it was
	    not possible to tell if a user had no access at all or just
	    no access for the requested command.

	#33552 **
	    'p4 filelog <local-syntax>@<label>' could cause the server to 
	    loop.  This has been corrected.  (Bug #8107).

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 2002.1, April 2002.

Major new functionality in 2002.1

    Internationalization (I18N) and Localization (L10N)

	Release 2002.1 incorporates the I18N and L10N changes that went
	into the 2001.2 release (made available only in Japan).  As of
	2001.2, the Perforce clients and server have an optional mode
	of operation where all metadata and some file content are stored
	in the server in the UTF8 Unicode character set and are translated
	into the local character set on the client.

	Additionally, in 2002.1 all error and informational messages
	returned from the server may be localized by the Perforce
	administrator.

	See the accompanying i18nnotes.txt for a full description of
	Unicode and localization support.

    Large Installation Performance Enhancements

	A number of changes have been targeted at large installations
	(typically those with more than a million files under Perforce
	control).

	Labels Command Speedup - #30690 **

	    The "p4 labels" command when supplied with a file argument would
	    run very slowly and potentially lock the system out to all users
	    due to the significant amount of scanning that was required per
	    label.  This command has now been optimized to position the rev
	    table rather than scan when looking for a match. (Bug #6531).

	Pending Changes Speedup - #29365 **

	    Pending changes in the db.change table are now split into
	    a db.changex table, to speed up the performance of p4win's
	    frequent 'p4 changes -s pending' command invocation.  This
	    requires a database upgrade with 'p4d -xu'.

	Depot Syntax Speedup - #29329 **

	    To speed p4win's frequent invocations of 'p4 fstat' on files
	    in the explorer tree, a special optimization has been
	    introduced.  Because p4win refers to files using depot
	    syntax, normally the server must scan the client's entire
	    list of files to find the named file.  This optimization
	    allows the server to find the file directly if and only if
	    the client's view still reflects the files on the client.
	    This is always the case if the client has done a full sync
	    since last changing the view.  Bottom line: if p4win's fstat
	    calls are going slow, try syncing the entire client.  (Bug
	    #7069).

	Larger Database Pagesize - #27795 **

	    The server's default database page size has been increased
	    from 4k bytes per page to 8k bytes per page.  For large
	    tables this results in more efficient packing with less
	    wasted disk space and better performance.  Existing databases
	    continue to work unchanged, but to see the improvement a
	    restore from a checkpoint is needed.

	New MaxScanRows in 'p4 group' - #27952 **

	    'p4 group' now has a 'MaxScanRows' field, which can be used
	    to limit the number of rows that can be retrieved from the
	    rev table during an operation. Use MaxScanRows when MaxResults
	    cannot help control lengthy operations (these operations
	    could typically be speeded up by defining the depot filepath
	    more precisely).

	    By default, users have no limit on the size of scans they
	    can perform.  Once a user belongs to one or more groups with
	    any limit, however, that user has the maximum of those
	    groups' limits.  This allows, for example, an administrator
	    to create a "novice" group with a low limit, thereby affecting
	    only certain users.

	    See 'p4 help group', 'p4 help maxresults' and 'p4 help
	    maxscanrows' for further information.

Minor new functionality in 2002.1 

	#29455 **
	    'p4 client -t' now copies client options as well as the
	    view.  Same for 'p4 label -t'.  (Bug #1066).

	#28516 **
	    Server database journalling is now always on, unless explicitly
	    turned off with P4JOURNAL=off.  Previously, journalling was
	    disabled if P4JOURNAL was unset and there was no 'journal'
	    file in the server's root directory.  The absence of the
	    journal file no longer disables journalling.

	#28028 **
	    'p4 integrate' by default now syncs the target files to the
	    head revision before integrating.  To integrate using the
	    current revision had on the client, use the new 'p4 integrate
	    -h' flag.

	#27808 **
	    Jobs searching now allows for matching punctuation: in
	    addition to indexing all alphanumeric strings, the job
	    indexer now also indexes all whitespace separated words.
	    So words with embedded punctuation can be matched.  To match
	    characters that are normally jobs search expression operators
	    (=^&|()<>), escape them with a \ character.

	    When searching for words with embedded punctuation in text
	    fields, the wildcard (*) operator is useful, as English
	    words often have trailing punctuation (commas, periods,
	    etc).

	    Existing jobs must be reindexed with the 'p4 jobs -R' command
	    for words with punctuation to be found.  Warning: this can
	    take considerable time on a system with lots of jobs.  It
	    is harmless to interrupt this command or run it more than
	    once.

	    (Bugs #982, #1004, #1010, #5518).

	#27227 **
	    "p4 submit" has a new option "-r",  this causes files that
	    have been opened for 'add' or 'edit' on the submitted
	    changelist to remain open after the submit has completed.
	    (Bug #449).

	#26931 **
	    Labels can now contain deleted revisions.  You must give an
	    explicit revision specification in the file argument to 'p4
	    labelsync' for it to include deleted revisions, because
	    normally 'p4 labelsync' includes only files on the client
	    (and clients can't have deleted revisions).

	    By being able to contain deleted revisions, labels can be
	    better used to control the operation of 'p4 integrate' and
	    'p4 obliterate'.  (Bug #2351, #5516).

Bugs fixed since 2002.1/32489 (first release).

	#34617 **
	    View maps with a mix of non-ANSI (high-bit set) characters
	    and ANSI characters (without a high-bit set) might ignore
	    some lines. (bug 8613)

	#34362 **
	    On case-insensitive servers (NT) it was possible for a client
	    to be unable to set an internal flag indicating that the client
	    was in-sync with its view specification.  This would result in
	    unexpected poor performance of certain commands.
	    (Bug 8404)

	#33994 **
	    Some p4 operations (e.g. fstat) executed without a valid
	    client could cause a scan of the have table. This problem
	    was only observed on NT/W2K servers.    (Bug #8230)

	#33784 **
	    The increment of the journal counter during checkpoint was
	    not itself being journalled.  The journal counter is only
	    used to prevent administrators from recovering from the the
	    wrong journal files.  The journal counter increment is now
	    again journalled, as it was before 2002.1.  (Bug #8201).

	#33156 **
	    Upgrading from a version of perforce that has db.working 
	    records created prior to a 2000.1 server could result in 
	    corruption of those records after installing the 2002.1
	    release.    (Bug #8025)

	#33038 **
	    Using the "-r" (reopen) flag on "submit" would leave ktext
	    files open but read-only on the client, this has been fixed.
	    (Bug #7961)
	    
	#32967 **
	    Minor memory leak fixed.  Each command the server ran lost
	    about 100 bytes on NT servers.

	#32962 **
	    Reverting with a 2002.1 server a file opened for add with
	    a pre-2002.1 server didn't work: it complained about not
	    being able to refresh the file, even though adds don't need
	    refreshing.  This is now fixed, but files may remain stuck
	    in an unrevertable state if the database has been
	    checkpointed/recovered since upgrading.  Such files can be
	    unstuck by obliterating them.  (Bug #7962).

Bugs fixed in 2002.1

	#31517 **
	    'p4 integrate' would sometimes require the -d flag even when
	    the source file _had_ previously integrated all of the
	    target's revisions.  -d is only required when trying to
	    integrate a delete on top of target revisions unseed by the
	    source, but the logic had been getting confused in the face
	    of complicated integration history.  (Bug #7536).

	#31503 **
	    The diff algorithm used internally by perforce during submit
	    and by the various p4 diff commands could be very time consuming
	    for large text files with many changes.  The default values have
	    been better tuned to handling large files, any difference will
	    only be noticed for comparing files with an average size greater
	    than 3000 lines.   (Bug #6440)

	#31502 **
	    Trying to resolve binary files as text (using the -t option)
	    where the user's client line-end option is set to "share" could
	    cause file corruption. This has been fixed.  (Bug #7580)

	#30581 *
	    Setting P4DIFF to a non-existent command on Windows/NT caused
	    the p4 client program to crash.  This has been fixed.  
	    (Bug #5684).

	#30033 *
	    The MPW p4 client program now does not lock up MPW when you
	    start an editor and then click on the MPW window. As a result
	    of this modification, the cursor will also spin whenever p4
	    is working on something.  (Bugs #1316, #3603, #4909, #7170).

	#30001 *
	    The p4 client program now flushes stdout before printing
	    error messages to stderr. This prevents error messages from
	    overwriting output, which is especially important on MPW.
	    (Bug #7029).

	#29987 *
	    Modification dates on 'apple' type files weren't being set.
	    Now they are.  (Bug #6710).

	#29718 **
	    'p4d -jc' works with $P4ROOT on a read-only filesystem.
	    This allows, for example, "snap_checkpoint"ing on a NetApp
	    Filer to work once again. (Bug #6497).

	#29015 *
	    Opening a file for edit and changing its filetype to a
	    symlink ( ex. p4 edit -t symlink <file> ) would not unlock
	    the file on Mac OS X. It now does.  (Bug #7096).

	#28580 **
	    The indexing mechanism on jobs wasn't deleting old values
	    for fields that were updated automatically as 'always update'
	    fields.  Thus, for example, searching for a specific update
	    time would also yield jobs that had since been updated.
	    The indexing mechanism has been corrected.  Repairing existing
	    databases requires reindexing by removing the db.ixtext and
	    db.ixdate tables in the server's root directory and then
	    running the command 'p4 jobs -R'.  'p4 jobs -R' is slow,
	    but interruptible.  (Bug #6960).

	#28435 **
	    Remote unicode depots accessed from a unicode mode server
	    did not work.  Remote non-unicode depots from a unicode
	    server did connect and communicate if the remote depot was
	    strictly returning ASCII data.  With this change, servers
	    which communicate via remote depots must be in the same
	    unicode or non-unicode mode of operation.

	#28027 **
	    'p4 revert' of an added file will now report the added rev
	    as "#none" rather than "#1", due to a change in the internal
	    representation.

	#27840 **
	    Too many wildcards on the command line could crash the
	    server; now they are rejected.  (Bug #6699).

	#27817 **
	    'p4 jobs filepath' would yield duplicate jobs if the same
	    job was fixed by multiple changes affecting the named files.
	    Now duplicates are eliminated.  (Bug #6862).

	#27710 **
	    Job fields marked as 'always' updated are now updated when
	    the job's status is updated by 'p4 change', 'p4 fix', and
	    'p4 submit'.  Previously, only modifying a job via 'p4 job'
	    would update those fields.  (Bug #4308).

	#27449 **
	    'p4 where' no longer reports the effect of the protections
	    table, and so it now exactly reflects the client view and
	    doesn't spoil attempts to hide the depot namespace with
	    protections.  (Bug #6160).

	#27432 **
	    'p4 obliterate' using a revision range on a large number of
	    files was much slower than without a revision range.  Now
	    it should be about as fast.

	27239 *
	    Users can now specify any editor they would like as a P4EDITOR
	    in the Mac OS X command-line client. It will open CFM Carbon
	    Apps, Mach-O Cocoa apps, and UNIX command-line editors.

	27236 *
	    Users can now manipulate files on Mac OS X and Mac OS 9 when
	    they sync to HFS+ disks. Files on Mac OS 9 with names larger
	    than 31 chars will have a "hashed" name in the Finder as
	    the Finder does not know how to display them.

	    This fix does not affect any previous limits Perforce had
	    on directory names.

	#26897 **
	    Trying to "p4 add" a file which was already opened for add
	    on another client would fail with the error "can't add
	    exclusive file already opened". This error should only occur
	    when another user/client has the file opened +l (exclusive).
	    This fix now allows the "p4 add" to complete without error.

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 2001.2, October 2001.

Major new functionality in 2001.2

    INTERNATIONALIZATION (I18N) SUPPORT

	The Perforce clients and server have an optional mode of operation
	where all metadata and some file content are stored in the server
	in the UTF8 Unicode character set and are translated into the
	local character set on the client.

	When running in internationalized mode, all non-file data
	(identifiers, descriptions, and so on), as well as the content
	of all files of type "unicode" are translated between the
	character set specified by the P4CHARSET variable on the client
	and UTF8 in the server.

	See the accompanying i18nnotes.txt for a full description of
	Unicode support.

Minor new functionality in 2001.2 

	#26052 **
	    "p4 unlock" now has a superuser option "-f",  this allows
	    a superuser to unlock any file,  usually "unlock" is restricted
	    to files locked by their owner.

	#25966 **
	    Performance of many small p4 commands issued rapidly together
	    as might happen with scripts declined in 2001.1.  Such
	    performance should be back to pre-2001.1 levels.

	#24988 **
	    The p4d server now logs the IP address of its client when
	    the connection is closed unexpectedly.

	#23682 **
	    'p4 changes' now sports -u user and -c client options, to
	    restrict the output to the named user and/or the client.

Bugs fixed in 2001.2

	#26944 **
	    If there were multiple depots the check for a default branch
	    spec was not working properly.  This has been corrected.
	    When a new branch is created, it must be edited to a narrower
	    view map.

	#26877 **
	    Submitting text files was slow and the RCS storage was
	    storing each revision in full.  This problem appeared with
	    the 2001.2 beta.  RCS storage and performance should be back
	    to normal.

        #26824 **
	    Using a label without a file specification (or a very wide
	    one, such as //depot/...@label) could be staggeringly slow,
	    as the server scanned the whole revisions table (and remote
	    depots) looking for files in the label.  This slowdown
	    happened in 2001.1, when the db.label table was split from
	    db.have.  Now label performance is once again dependent
	    solely on the number of files in the label, rather than the
	    number of files in the server.

	#26709 **
	    When submitting a new job, if the computed job name of the
	    form jobnnnnnn already existed we now keep searching for an
	    available job name instead of failing and requiring users
	    to re-enter their job.

	#26470 **
	    Words in job descriptions which are more than 2140 bytes of
	    UTF-8 characters would cause the job submission to appear
	    to fail and might have a failure to translate error.  The
	    error message has been improved, however such long words
	    cannot be searched for with p4 jobs -e.  Error is 'Record
	    key exceeds max size".  The job is entered regardless of
	    whether this error occurs.  This is not a regression.  Prior
	    to 2001.1 such long words were silently ignored by the job
	    indexing system.  Now you will see a warning for such long
	    words.
        
        #25958 **
            A bug was introduced in 2001.1 where creating a label
            with the template option "p4 label -t template labelname"
            resulted in an empty label view.  This has been corrected.

        #25951 **
            On Windows/NT it is possible for readers of RCS files
            to block writers due to OS limitations of moving a file
            while another thread/process is reading it.  This "file
            busy" problem would result in a submit failure with an
            error describing that a rename had failed.  This fix
            allows for subsequent retries of the failed operation 
            and should alleviate this occasional problem.

        #23382 **
            It should be possible to change the case of a file on a
            windows server by the following sequence of commands:
            'p4 delete xxx' -> 'p4 sync XXX#n' -> 'p4 add XXX'
            (where n is the version prior to the delete). The add
            was ignoring the case change and instead reverting to the
            original, now the case change is reflected after the submit.

        #23379 **
            With 'noclobber' set, a file that had been opened for write
            by the user (presumably to work disconnected) could be
            deleted with the 'p4 delete' command, this change prevents
            this from happening.

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 2001.1, July 2001.

Major new functionality in 2001.1

    DEFECT TRACKING INTEGRATION SUPPORT

        In 2000.2 support was introduced for improved integration into
        external defect tracking systems.  This functionality is now
        supported for general use.

        PYTHON I/O - #21918 *
            For ease of scripting the p4 command line client, it now
            supports a -G flag which formats output and expects input
            as marshaled Python dictionary objects.

        FIX STATUS - #21918 **
            The jobs schema has been extended to include a 'fix' status,
            which is a status associated between a job and a change.
            When the change is submitted, the job takes on the fix's
            status.  'p4 change', 'p4 submit' and 'p4 fix' now take a
            -s flag to set a per-fix status, rather than using the
            default "closed" status.

        CHANGELIST/JOB UPDATE LOGGING - #21918 **
            The new 'p4 logger' command tracks updates to jobs and
            changelists, enabling external scripting to export such
            changes.  See 'p4 help logger' for more info.

    BY POPULAR REQUEST

        SELECTABLE LINE ENDING ON ALL PLATFORMS - #20967 ** *
            For users who share workspaces among platforms with different
            line ending conventions, the Perforce clients now support
            all common endings (cr/crlf/lf) on all platforms (Macintosh,
            Windows, UNIX).

            Specifically, the client option "crlf/nocrlf" has been
            removed and a new LineEnd field added with a more flexible
            set of options:  mac, unix, win, local, and share.  (The old
            "crlf" is now "local", and the old "nocrlf" is "unix").
            mac, unix, and win force files to be read and written with
            platform-specific line endings (cr, lf, and crlf respectively).
            "local" reverts to the client's native format.  "share"
            writes unix style (lf) but reads either unix (lf) or windows
            (crlf) style.  (Bug #2207.)

        EXCLUSIVE OPEN FILES - #20966 **
            Certain files under Perforce control are best not changed
            concurrently: images, libraries, and other binary files that
            are difficult or impossible to merge.  The Perforce server
            has a new filetype modifier that disallows multiple opens
            on the same file, serializing updates.  This modifier (+l)
            can use be used directly on the command line (by 'p4 add',
            'p4 edit', 'p4 reopen'), or can be used in the file mapping
            table managed by 'p4 filetype'.  For example, this makes it
            possible to ensure that all .gif files added are treated as
            exclusive-open binary files.  See 'p4 help filetypes'.
            (Bugs #233, #594, #1944.)

        OBLITERATING OLD REVISIONS ONLY - #20978 **
            'p4 obliterate' now allows a revision range, so that you
            can obliterate specific revisions of files.  This makes it
            easier to clear out old, unused revisions but keep the
            latest, active ones.  (Bug #929).

        LABEL REPORTING - #21687 **
            'p4 labels' can now take a file[revRange] argument, to limit
            the list of labels to those with that particular file/revision.
            This makes it easy to see what labels are on a particular
            revision of a file.  (Bug #403).

Minor new functionality in 2001.1

        #22316 **
            #0 is now a synonym for #none when specifying (no) revisions.
            (Bug #5367).

        #21725 **
            'p4 integrated' now reports a revision range on the target
            files, rather than just the last revision integrated.  This
            can only occur for reverse integration records (the ones
            that reflect a target's contribution back to its source:
            branch into, merge into, etc), because normal "forward"
            integration records reflect the creation of the single,
            newly submitted revision of the target file.

        #21715 ** *
            A new 'p4 resolve' option has been introduced: 'ae' (for
            'accept edit').  This is the suggested and default option
            when the user edits the file (with the 'e' option), either
            to remove conflicts or to make any edit.  It is also the
            option used when merges with conflict markers in them are
            forcibly accepted.  The old 'am' (for 'accept merge') now
            indicates a purely automated merge, without original user
            changes.  Resolves completed with 'ae' will show up in 'p4
            filelog' as 'edit from' records.  This new distinction
            between 'merge from' and 'edit from' assists in determining
            whether the change should ever be integrated back: purely
            automated changes need not be, while original user edits
            should be.   Now if a user makes original edits, whether by
            using the 'e' option in 'p4 resolve' or by re-opening the
            file for edit with 'p4 edit', they will be candidates for
            merging back to the source file.

        #21633 **
            The db.have table has been split, with label entries moving
            out to the new db.label table.  This eases database size
            constraints in two ways: first, just splitting the data
            means the individual tables will be smaller.  Second, having
            a separate table for labels allows for a more compact storage
            format: the new format requires about 60% of the old space.
            This requires a database upgrade with 'p4d -xu'.

	#21574 **
	    One of the larger database tables, db.integ, has been split
	    into db.integed and db.resolve.  This requires a database
	    upgrade with 'p4d -xu'.

        #21089 **
            'p4 resolve -a' of a binary file where both versions are
            identical now does an automatic "accept theirs."  If they
            are not identical, a manual selection is still required.
            (Bug #1509).

        #21009 **
            All identifiers (user names, file names, etc) may now contain
            characters previously considered unprintable, specifically
            those in the range 0x80-0xFF.  Normal ASCII control characters
            (such as backspace, bell, etc), as well as #, @, %, *, and ...
            in filenames, are still disallowed.  (Bug #1074, 1339).

Bugs fixed in 2001.1

	#29244 **
	    The previous bug fix (#27776) also introduced a regression
	    that would prevent users reverting binary files if they
	    had run 'p4 verify -u' on them,  this has been corrected.

	#27776 **
	    Under certain unreliable network conditions a submit could	
	    stall waiting for data (presumably on a read), the same client
	    would resubmit the change, which would succeed. Eventually the
	    original submit would timeout and flush data to a binary
	    archive file corrupting it. This fix makes use of temporary 
	    files to prevent corruption in this manner.

	#27680 **
	    Excessive fsyncing of db files was observed to be slowing
	    performance when scripts driving perforce performed many
	    commands in rapid succession.  Removed unneeded fsync calls.

	#26824 **
	    Using a label without a file specification (or a very wide
	    one, such as //depot/...@label) could be staggeringly slow,
	    as the server scanned the whole revisions table (and remote
	    depots) looking for files in the label.  This slowdown
	    happened in 2001.1, when the db.label table was split from
	    db.have.  Now label performance is once again dependent
	    solely on the number of files in the label, rather than the
	    number of files in the server.

	#26457 **
	    'p4 changes -i', 'p4 fixes -i', and 'p4 jobs -i' now honor
	    'MaxResults' settings for internal computation.  Without
	    this these commands could consume a large amount of memory
	    (against a large database, of course) while producing only
	    a small number of resulting rows. (Job #6595).

        #25958 **
            A bug was introduced in 2001.1 where creating a label
            with the template option "p4 label -t template labelname"
            resulted in an empty label view, this has been corrected.

	#25628 **
	    When locking db.* files, the Perforce server could hang or
	    fault on Windows 2000.  This has been corrected.

        #23037 **
            A file originally open for integrate (with 'p4 integrate')
            but then downgraded to edit (with 'p4 edit') generally should
            have reverse integration records of "edit into", indicating
            that the changes are candidates for being merged back into
            the source.  But if the 'p4 resolve' action was 'accept
            yours' (ignoring the source changes), the reverse integration
            record was left as "ignored by", and the change was ignored
            for subsequent integration.  Now even with 'accept yours'
            the reverse integration record is "edit into", so that any
            original edits can later be merged back.  (Bug #5622).

        #22315 **
            'p4 counter' would let you delete/set protected counters
            just by changing the case of the counter name, when the
            server was Windows/NT.  This has been corrected.  (Bug #5384).

        #21696 **
            'p4 filelog -l' of a file in a remote depot would frequently
            generate an error, complaining about missing a change
            description.  Now it works like 'p4 filelog' (without -l)
            on a remote depot file: it just reports the change is remote
            without trying to provide the change description.  (Bug #4872).

        #21471 **
            'p4 integrate -f' of previously integrated revisions would
            cause the previous integration record, as reported with
            'p4 filelog' or 'p4 integrated', to be lost.  This has been
            correct.  (Bug #2766).

        #20974 **
            'p4 integrate fromFile toFile' used 'toFile' in error messages,
            even though most of the errors have to do with the 'fromFile'
            (such as the fromFile not existing).  Now the 'fromFile' is
            used in error messages.  (Bug #470).

        #19923 **
            Two users (on two different clients) could add and submit
            the same file at the same time.  The results were more or
            less reasonable (both revs showed up as adds), but a little
            disconcerting.  Now 'p4 submit' rejects attempts to add
            already added files.  (Bug #1592).

        #19547 **
            'p4 counter' now sports a '-f' flag to allow superusers to
            reset the 'change', 'journal', and 'job' counters.  Resetting
            the 'job' counter is needed after importing jobs from another
            Perforce server; resetting the 'journal' counter is reasonable
            after removing the existing journal/checkpoint files; and
            moving the 'change' counter ahead is safe.  Moving the 'change'
            counter back is possible, but will have very bad results if
            changes start getting overwritten.  (Bug #4122).

        #19546 **
            'p4 job' didn't notice if it was generating a new job name
            that matched one already entered by the user.  Now it refuses
            to save a supposedly new job if doing so would overwrite an
            old one.  (Bug #4284).

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 2000.2, December 2000.

Major new functionality in 2000.2

        2000.2 includes a number of as yet undocumented internal changes
        for use by the Perforce Defect Tracking Integration project.

        Otherwise, 2000.2 is a bugfix only release.

Minor new functionality in 2000.2

        #19047 **
            'p4 integrate' now supports a new -t flag, which makes 'p4
            integrate' propagate the source file's filetype to the target
            file instead of retaining the target file's previous filetype.
            (Bug #163).

        #18875 **
            The default depot ("depot") no longer must be created before
            creating other depots.  Previously, the default depot was
            only implicit if there were no other depots defined, and
            creating another depot would eclipse the default one.  Now,
            the default depot "depot" is implicitly defined as a local
            depot with mapping 'depot/...' whenever it isn't explicitly
            defined by 'p4 depot'.  (Bug #526).

        #18796 **
            The 'p4 jobspec' form has changed slightly: fields that
            allow only selected values are now listed under a single
            "Values" entry; fields with defaults are now listed under
            a single "Presets" entry.  Previously, for each such field
            there was a special entry "Values-<fieldname>" or
            "Preset-<fieldname>", but that format made it hard to
            automate the generation of the jobspec.

Bugs fixed in 2000.2

        #23060 *
            'p4 sync' was aborting (with a zero exit status) if it was
            unable to replace the original file with the newly synced
            file.  Prior to 2000.2, it would just report an error and
            continue, eventually exiting with a non-zero status, and
            with this change it does that once again.  (Bug #5655).

        #21101 **
            Linux x86 support of large files (> 2Gb) if Linux kernel
            of 2.4.0 or later is used.

        #21084 **
            Remote depot access, via a client view with multiple map
            entries into that remote depot, could sometimes truncate
            the list of files seen in the remote depot via the 2nd or
            subsequent mappings.  This has been corrected.  (Bug
            #5114).

        #20598 **
            Jobspec entries labeled as "default", but where no default was
            provided, would cause "p4 job" (of a new job) to crash.  This
            has been corrected.  (Bug #4959).

        #20485 **
            The NT server would fault if a backup application had the
            db.have file locked.  Now the server just reports an error.
            (Bug #3106)

        #20272 **
            Dual processors on NT and a concurrent submit, filelog would
            cause a server fault.  This has been corrected.
            (Bug #4867)

        #19882 **
            The NT server was leaving temp files around after a
            'p4 resolve'.  They are now deleted properly again.
            (Bug #4778).

        #19810 *
            'p4 sync' of an existing file wasn't honoring the modtime
            or allwrite attributes of a file.  This has been corrected.
            (Bug #4746).

        #19516 * **
            'p4 diff -t' now will force text diffs of 'apple' filetype
            files.  Previously, '-t' only forced text diffs of binary
            files.  Note that both a 2000.2 server and 2000.2 MPW client
            are needed for this support (pre-2000.2 clients will just
            erroneously run 'diff' of the local file against the encoded
            AppleSingle stream).  (Bug #4580).

        #19515 *
            'p4 client -i < file' no longer crashes MPW on the Mac.
            (Bug #4347).

        #18095 **
            It is supposed to be possible to change the case of file on
            a Windows Server with 'p4 delete' and a subsequent 'p4 add',
            but in 2000.1/16895 this was broken: the name would retain
            its case from before it was deleted.  This works again now.

            'p4 integrate' is not supposed to change the case of the
            target file, unless it is being branched on top of a deleted
            file.  In 99.2 and before, integrate would change the case
            for any operation.  Now it only changes it for new branches.

        #17937 **
            Branching a tempobj file and then submitting a new revision
            to the original would cause the contents of the branched
            file to change as well.  Now tempobj files are copied when
            branched, so as to avoid this.  tempobj files should generally
            be avoided unless you are willing to live with their otherwise
            undesirable semantics.  (Bug #2626).

        #17635 **
            'p4 changes @label,#head' gave wrong results, not including
            all changes since the label.  This has been corrected.
            (Bug #2979).

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 2000.1, August 2000.

Major new functionality in 2000.1

    FILE HANDLING OPTIONS

        Mapped filetype selection - #15936 ** *
            Filetypes for 'p4 add' can now be selected based on
            the file's name.  The new 'p4 typemap' command manages
            a file name-to-type mapping.  If a file's name matches
            an entry in that table, it will be used in preference
            over the type sensed by the client program.  (Request #604).

            Note that this change only requires an updated server to work,
            but old clients will wrongfully report that empty or missing
            files are being added as text, even when the typemap is used.
            New clients are required for warning messages that mention
            the correct type.  (Bug #3819).

        More keyword expansion - #15900 **
            More keywords are now available with ktext files:
            in addition to $Id$ and $Header$, there is now:

                $Date$ - date of file submission
                $DateTime$ - date and time of file submission
                $Change$ - change of file submission
                $File$ - just the file name, sans revision
                $Revision$ - just the revision number, sans file name
                $Author$ - the user who submitted the file.

            Notably absent is $Log$ (filelog).  It is still anticipated.

            For compatibility, previously existing ktext files are now
            named text+ko, which continues to expand just $Id$ and
            $Header$.

            In order to take advantage of the new keywords, files must
            have their type changed with 'p4 edit -t ktext' and
            resubmitted (presumably updated to include some new
            keywords).

            In order to produce valid values for $Change$ and $Date$ (at
            least), the client program now refreshes ktext files _after_
            the changed is committed, rather than just before.  If the
            refresh is interrupted, either by network failure or the
            user hitting ^C, files not refreshed will not be considered
            by Perforce to be on the client filesystem, and must be
            refreshed properly with a subsequent 'p4 sync'.

            (Request #387).
      
        File modification time preserved - #15891 ** *
            File modification times can now be preserved.  The client
            spec's 'modtime' option continues to cause 'p4 sync' to
            update a file's modtime, but now to the modtime of the file
            as of the 'p4 submit', rather than the time of the 'p4
            submit' itself.

            Additionally, files with the new +m modifier always have
            their modtimes set on 'p4 sync', regardless of the client
            spec's modtime option.

            New client executables are required for the modtimes to be
            detected upon 'p4 submit'.  Pre-2000.1 client programs will
            continue to use the time of the 'p4 submit' as the modtime.
            (Requests #844, #1254, #2457).

    JOB SEARCHING

        Wildcards - #14534 **
            'p4 jobs -e expr' now allows the wildcard * in its
            expression, to allow for partial word matches.  This also
            allows 'jobs' to check for the presence of a text field
            being set at all ('field=*').  It also makes it easier to
            search for all jobs except selected ones, as 'jobs -e'
            doesn't allow a lone "not" (^) operator.  E.g.  the
            expression 'job=* ^word' returns all jobs excluding those
            with 'word' in it, because 'job=*' matches all jobs.  See
            'p4 help jobview' for more details.
            (Requests #1190, #1414, #2262)

Minor new functionality in 2000.1

        #16617 **
            The new option 'p4 print -o localFile' redirects the output
            to the named file on the client filesystem.  The difference
            between this and redirecting stdout (via the command shell)
            is that this creates a file of the proper type (text, binary,
            symlink, apple, xtext, etc).

        #16298 **
            'p4 info' now reports the date, time, and timezone on the
            server machine.  (Request #2923).

        #14126 **
            'p4 labelsync' now supports a revision range on its file argument,
            just as 'p4 sync' does. (Request #14126)

Bugs fixed in 2000.1

        #18581 *
            Passwords now work with MVS (IBM Open Edition/Unix System Services)
            clients.  (Bug #3323).

        #17666 **
            Resolving multiple files against the same target and then
            submitting could get the wrong text of the file in the server
            if something other than the first file resolved was an
            "accept theirs".  This has been corrected.

            This problem was introduced in 2000.1/16895.  Database
            inconsistencies caused by this bug can be corrected by
            running 'p4d -jf 4164' in the server's root directory.  It
            is recommended that you checkpoint both before and after
            this command runs.

            (Bug #4164).

        #17161 **
            Modtime for ktext files wasn't working right: upon submission
            (and refreshing), the file's modtime would get updated rather
            than reset to its original time.  This has been corrected.
            (Bug #4015).

        #17079 **
            'p4 fstat' under certain concurrent conditions would cause
            the p4d on NT to crash.  This has been corrected.
            (Bug #3989).

        #16848 **
            'p4 dirs' against a remote depot that had lots of deleted
            files yielded truncated results.  This was particularly
            troublesome for p4win, which makes great use of 'p4 dirs'.
            Now 'p4 dirs' works properly against remote depots with
            deleted files, and is a bit faster as well.  This change
            affects the local server of a remote depot connection.  The
            remote depot's server needn't be upgraded.  (Bug #2892).

        #16708 *
            PDF files, namely those that begin with %PDF-, are now
            recognized as binary even if they begin with a few K of
            text characters.  PDF files, because they begin with text
            yet still contain binary, confused the Perforce client
            program logic that determines the default type of a file.

        #16707 **
            File patterns with duplicate %x wildcards in them (e.g.
            //depot/%1/%1) are now specifically disallowed.  They were
            never supported, and in certain cases (p4 dirs %1/%1) would
            send the server into a tailspin, either going compute bound,
            gaining memory, crashing, or any combination.  (Bug $2663).

        #16705 *
            'p4 sync' of a symlink was leaving a temp symlink file behind
            when updating (rather than creating anew) the symlink.
            This has been corrected.  (Bug #3332).

        #16638 **
            'p4 resolve -f' would attempt to re-resolve branched and
            deleted files.  Now it only resolves merged (integrated)
            files.  (Bug #3869).

        #16294 **
            The error message 'File(s) not in client view' was cropping
            up for all sorts of situations where the requested file was
            not a candidate for the requested operation.  This happened
            a lot when protections were put in place, and was quite
            confusing.  Now the error messages more closely reflect the
            cause of the problem: 'no permission' means you don't have
            the requested level of access, 'protected namespace' means
            you don't even have 'list' access, 'not in client view'
            means the file is not mapped in the client view, and 'no
            such file(s)' means the file passed all the above tests but
            still wasn't found in the depot.  (Bug #478, #1995).

        #16293 **
            'p4 fix' now sets the user@client of the fix to be the user
            and client who ran 'p4 fix'.  It was being set to the
            user@client who previously created the change in the fix.
            This is now consistent with the date of the fix, which has
            always been the date when 'p4 fix' was run.  (Bug #655).

        #15955 *
            'p4 resolve -af -v' now always accepts the merged result
            with the merge markers in it, rather than accepting 'yours'
            or 'theirs', as it normally does if changes had occurred
            only in one file.  (Bug #3630).

        #15522 **
            A job changed by only altering the case of characters with
            'p4 job' wouldn't be detected as being different by a NT
            server.  Now when comparing the old job and the data to be
            saved, the server always uses case-sensitive comparisons.
            (Bug #3107).

        #15520 **
            'p4 jobspec' now says "jobspec not changed" instead of
            "jobspec saved" if it has, in fact, not been changed.
            (Bug #1810).

        #15490 **
            Now all field in a 'p4 job' whose default value is $blank
            ("<enter description here>") must be changed by the user
            for 'p4 job'.  Previously, only the job description (code
            105) required the text to be replaced.  (Bug #3387).

        #15489 **
            'p4 job job' is now illegal, because it override the same
            storage used by 'p4 jobspec'.  (Bug #3393).

        #15488 **
            Submitting zero-length files with type binary+k caused
            a "Librarian checkin" failure.  This has been corrected.
            (Bug #3576).

        #15462 **
            'p4 counter' now disallows setting any counter used directly
            by Perforce, namely "change", "job" or "journal".
            Previously only the "change" counter was taboo.

        #15393 **
            Entries to db.depot weren't being logged in the journal
            (again -- see #8142).  This meant if a depot was created or
            updated since the last checkpoint and then the server database
            needed to be recovered from the checkpoint and journal,
            subsequent attempts to access the server would yield the
            message "Depot xxx missing from depot table!"  Now db.depot
            entries are once again logged.  (Bug #3556).

        #15093 *
            Large 'apple' type files no longer are buffered in p4's
            memory, thus allowing for arbitrarily large 'apple' files
            to be synced and submitted.  On the Mac MPW's default max
            memory allocation is about 2M, and attempting to manipulate
            large 'apple' files (particularly those with large resource
            forks) would cause the MPW p4 tool to exit when it ran out
            of memory.  This change affects all clients, though only the
            MPW tool seems to have such a limited amount of available
            memory.  (Bug #3200).

        #15078, 14914 **
            'p4 resolve' properly handles the merge results of multiple
            sources into the same target file.  Previously, if you did
            two resolves both with "at" (accept theirs), it wouldn't
            consider that the second "at" overrode the first.  Now 'p4
            resolve' updates other resolved, pending integration records
            to reflect the action taken by the current merge.

            'p4 submit' also better handles multiple integrations against
            the same file, creating each reverse integration record with
            its own proper status, rather than giving all reverse
            integration records the same status.

            Note that if you 'p4 integrate' with a 99.2 or earlier server
            and then try to submit with a 2000.1 server, it will reject
            the submission as "muddled" if there is more than one "copy
            from" or "branch from" integration.  To correct this, you
            must revert the file and re-attempt integration and resolving
            with the 2000.1 server.

        #14989 **
            Keyword expansion for filenames which contain a $ sign used
            to confuse later keyword expansion.  Now $ is replaced with
            an HTML escape for $, to avoid this problem yet not lose
            the information about $ characters in the filename.

        #14428 **
            'p4 branch' would complain "You cannot use the default branch
            view; it is just a sample" if you didn't change the branch
            view line in the first 12 characters.  This has been fixed.
            (Bug #3990).

        #14249 **
            'p4 diff #none' or with any revision that doesn't occur often
            could send the server into a tailspin of quadratic behavior.
            This has been corrected and this command now runs as fast as
            all the others.

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 99.2, December 1999.

Major new functionality in 99.2

    MORE MACINTOSH FILE SUPPORT

        New 'apple' filetype - #13015 ** *
            There is now an alternative mechanism for storing the resource
            fork and type/creator information of files originating on
            the Macintosh.  The new filetype 'apple' stores the following
            all under a single depot file name:  the data fork, the
            resource fork, the Finder info (including the type/creator
            information), and the comment string.  These files are
            encoded into AppleSingle format for storing on the server.

            The previous mechanism, which stores the data fork under
            the regular file name and the resource fork and type/creator
            information under a separate .file name with type 'resource',
            is still available.

            When 'apple' type files are synced onto non-Macintosh 99.2
            clients, they are decoded into AppleDouble format, with the
            non-data portion written into a %file.  Unlike the 'resource'
            type .file, the %file is manifested only on the client: the
            server only knows of the file by its normal name.

            If a pre-99.2 client syncs an 'apple' type file, it will be
            unaware of the encoding and get the raw binary contents,
            which is in AppleSingle format. Users of CWPerforce 99.1
            may want to wait for CWPerforce 99.2 before starting to use
            the 'apple' file type.

            It is permissible to submit AppleDouble format files from
            99.2 non-Macintosh clients or AppleSingle format files from
            pre-99.2 clients, but the 99.2 Macintosh AppleSingle
            implementation decodes only DATA, RESOURCE, COMMENT, and
            FINDERINFO entries.

            (Bugs #858, #863, #2699).

        Support for Macintosh Internet Config - #11821 *
            Internet Config (part of the MacOS 8.x "Internet" control
            panel) is now used by 'p4 sync' on the Macintosh to map file
            extensions to Macintosh type/creator.  This is overridden by
            type/creator information stored in 'apple' type files or in
            companion 'resource' .file's.

    BRANCHING AND INTEGRATION IMPROVEMENTS

        'p4 filelog' follows branch history - #12482 **
            'p4 filelog' can now follow branch history.  If a file was
            created by branching, 'p4 filelog -i' displays the revisions
            of the source file (but only revisions up to the branch
            point).  It properly handles files that were branched
            from other files which themselves were branched from still
            other files.  (Bugs #599, #634, #1690, #2192).

        No more 2-way text merges - #12354 **
            'p4 integrate' now refuses to arrange a baseless merge
            unless passed the -i flag.  A baseless merge arises when
            both the source and target files already exist but are not
            directly related by branching.  Previously, 'p4 integrate'
            would schedule a baseless merge, which 'p4 resolve' would
            then present as a 2-way text merge.

            If 'p4 integrate' is forced to schedule a baseless merge,
            'p4 resolve' now uses the first rev being merged as the
            base, rather than attempting a 2-way text merge.  This
            eliminates 2-way text merges altogether.

        'p4 integrate' resists mistaken branching - #13292 **
            'p4 integrate' now specifically disallows branching a file
            from a non-add revision.  This means that it will no longer
            attempt to re-branch a source file on top of a deleted target
            file when the source file changes.  It also won't delete
            the target file of an integration if it has changed since
            it was last integrated into the source.  'p4 integrate -d'
            overrides this, reverting to pre-99.2 behavior, where it
            was permitted to mix edits with a deleted file. (Bug #2672).

        Reverse integration records always created now - #10627 **
            A reverse integration record (one that shows up in 'p4
            filelog' as 'xxx into') is now created for each forward
            integration record (one that shows up in 'p4 filelog' as
            'xxx from').  Previously, an "impure" integration -- a branch
            downgraded to add, or integrate downgraded to edit, or
            integrate from multiple sources, didn't generate a reverse
            integration record.  This was meant to signal that the
            target file's changes still needed to be merged back into
            the source file, but the lack of integration record was
            confusing to users.  Now special "add into" and "edit into"
            reverse integration records are created.  This only affects
            reporting.

    ADMINISTRATION

        New 'p4 admin' command - #11701 **
            The new 'p4 admin' command allows the superuser to stop or
            checkpoint the server.  See 'p4 help admin' for command
            details.

        Subgroups - #12240 **
            'p4 group' now allows other groups, rather than just users,
            to be members of a user group.  (Bug #2301).

        Journal format changes - #11722, #13174 **
            Server journal files are now marked with a version line
            to prevent them from being used to update a database created
            from a different checkpoint.

            Journal files now distinguish between new records being
            written (with the @pv@ mark) from existing records being
            replaced (with the new @rv@ mark).

        Checkpoint naming changed - #11759 **
            The argument to 'p4d -jc' is now a prefix for the name of
            the checkpoint and journal files, rather than just the name
            of the checkpoint file.  ".ckp.N" and ".jnl.N" are appended
            to the prefix to generate the checkpoint and journal file
            names.  The prefix path is relative to the server's root
            directory.

            NOTE: THIS IS A CHANGE FROM THE USE OF THIS FLAG IN 99.1
            AND BEFORE.

            (Bug #1059).

        Journal only flag - #13176 **
            'p4d -jj' copies and truncates the journal, just as 'p4d -jc'
            does, but without making a checkpoint.  This enables a checkpoint
            to be made offline by building a second database from a previous
            checkpoint and the newly saved journal (and checkpointing the
            resulting, second database).

        Server runs in background - #13167 **
            The new 'p4d -d' flag causes it to fork first before accepting
            connections, so as to act more like a typical UNIX daemon
            program.  The exit status of the parent indicates whether it
            successfully started up.  (Bug #729).

    REMOTE DEPOT SUPPORT BETWEEN UNIX AND NT - #12114 **

            Remote depot interaction between UNIX and NT is now usable,
            but still not complete.  In particular, browsing in the
            Windows GUI is not possible because 'p4 dirs' does not yet
            work correctly between UNIX and NT.  (Bug #867).

    LOCKING WORKSPACES TO A SPECIFIC HOST - #12409 * **

            Client workspace access can now be restricted to a given
            host by setting the "Host" field in the 'p4 client' form.
            By default, new client workspaces are now created with the
            "Host" field set.  Delete the field from the form to allow
            unrestricted access.

            This functionality requires a 99.2 client and server.  The
            client will take the following as the host name, in order
            of preference: a name passed as 'p4 -H host' on the command
            line, the value of $P4HOST in the client's environment, the
            client host's "hostname" (which is generally platform specific).

            The restriction is not a security mechanism, as it can be

            circumvented with the 'p4 -H host' option.  It is meant to
            prevent accidental misuse of a client workspace from the
            wrong machine.

            'p4 info' displays the client host name as determined by the
            'p4' command.  (Bug #1242).

Minor New Functionality in 99.2

        #12805 **
            'p4d -V' now uses $P4ROOT or the '-r root' option to find the
            license file, so that it can properly display the licensing
            information.  (Bug #708).

            The server root directory now defaults to the current directory
            if $P4ROOT is unset and '-r root' is not used.  Previously, it
            was a fatal error not to provide a root directory.
          
        #12243 **
            'p4 branch' now rejects attempts to save the default view
            as the actual branch view.  The default view is just a sample
            that won't work.

        #12103 *
            The BEOS p4 client now supports symlinks (as the UNIX p4
            clients do).  (Bug #2661).

        #12073 **
            The new 'p4 jobs -r' flag sorts jobs in reverse order by name.
            Normally, they are sorted in ascending order.

        #11903 **
            'p4 diff' and 'p4 diff2' now take a -t flag to force a
            textual diff even for non-text (binary) files.  The 'p4
            resolve -b' flag has been renamed '-t' to match.

        #11889 ** *
            The new client option 'rmdir' causes the p4 client program
            to attempt to delete the enclosing directory if all files
            therein have been removed by 'p4 sync', 'p4 integrate', or
            'p4 revert'.  This action is recursive, in that if removing
            the directory makes the parent directory empty, that parent
            directory will be removed as well.  (Bug #601).

        #11888 **
            'p4 filelog' now takes a '-m maxRev' flag to limit the number
            of revisions per file output.

        #11825 ** *
            'p4 revert' now supports a -a flag, which reverts only unchanged
            files that are opened for edit or integrate, and that don't
            have any resolved integration records.

            'p4 revert' now avoids refreshing client files which haven't
            changed.  This requires a new p4 client executable.
            (Bug #1405).

       #11486 **
           A branch view that mapped a file back onto itself could, in
           rare circumstances, cause 'p4 integrate' to attempt to merge
           the file with itself.  Normally, 'p4 integrate' ignores
           these self-mappings.  This confused the logic in 'p4 submit',
           which assumed a file couldn't be integrated from itself,
           and lead to bogus integration records and revision records
           with null fields being created.  This has been corrected.
           (Bug #2539).

        #11289 **
            'p4 flush', a command that fakes a 'p4 sync' without moving
            files, is now part of the documented and supported command
            list.

        #11271 **
            Branch specifications can now be locked, via an option on
            the branch specification, just as client and label specs
            can be locked.

        #11197
            'p4 diff -sx file#rev' now implies -f, namely that it will
            do the checksum comparison even if the client has the file
            at the named rev.  Normally, 'p4 diff' skips files if the
            client has the named rev, but -sx is generally used to verify
            that the client has the right text, so it makes sense to
            force the comparison.

        #10769 **
            You now only need 'list' access, not 'review', just to view
            a counter with the 'p4 counter' command.  You still need
            'review' access to delete or change the counter.

Bugs Fixed in 99.2

        #15007 **
            A few servers as of 99.2/14645 (Solaris, AIX, and OSF) would
            sometimes pretend a file wasn't in a label if asked specifically
            about that one file (e.g. 'p4 sync file@label').  This has been
            corrected.  (Bug #3460).

        #14999 *
            The Macintosh MPW client clobbered writable files, even
            when 'noclobber' was set.  Now, like other clients, it
            refuses to overwrite files that aren't locked.  (Bug #3406).
          
        #14999 *
            The Macintosh MPW client was linked against the "app" version
            of the OpenTransport libraries, which (like so many things)
            could cause MPW to crash on exit.  Now it it linked against
            the "extn" libraries, which we're assured will make it all
            better.  (Bug #3146).

        #14929 **
            A bad build (#14024) of the solaris26 p4d server left it
            unable to truncate the journal properly.  This has been
            corrected.  (Bug #3364).

        #14790 *
            The Macintosh MPW client was writing memory address 0, which
            would get trapped by Macsbug's EBBE.  It no longer does this.
            (Bug #3183).

        #14698 **
            The p4d server on AIX didn't shut down when sent SIGTERM or
            when 'p4 admin stop' was issued.  Instead it would go
            crazy and sometimes kill random, innocent processes.
            Now it shuts down peacefully.  (Bug #3315).

        #14664 *
            The Mac MPW p4 client was leaving OpenTransport open, which
            caused MPW to crash the machine when you quit.  This has been
            corrected.  (Bug #3146).

        #14653 **
            Files ending in a null (zero) byte with no trailing newline
            were not handled correctly by the diff implementation.
            Now they are.

        #14580 **
            A complicated client view with three "..." wildcards 's in
            some of the mappings could crash the server.  (More than three
            "..." wildcards are prohibited.)  This has been corrected.
            (Bug #3258).

        #14539 **
            Obliterating a file with many revisions would sometimes
            leave an empty RCS ,v file in the server's archive.  This
            entry was harmless, but still not right.  By purging file
            revisions in ascending order (again), the ,v files get
            properly removed once all revisions are gone.  (Bug #2326).

        #14502 **
            'p4 review' would crash the server if the database files
            were inaccessible (which can happen on Windows NT when the
            backup or audit processes are running).  It no longer does.
            (Bugs #1912, #3263).

        #14428 **
            'p4 branch' would reject a branch view (as being the unmodified
            default, unusable view) if it didn't change in the first 12
            characters of the path names.  This could easily happen with
            a one-line branch view with a long depot name.  This has been
            corrected.   (Bug #3115).

        #14249 **
            'p4 diff #none' or with any revision that doesn't occur often
            could send the server into a tailspin of quadratic behavior.
            This has been corrected and this command now runs as fast as
            all the others.

        #14042 *
            The Macintosh MPW client would consider a file with an empty
            data fork to be type 'text', even if there was a resource fork.
            Now a file with a resource fork and empty data fork is
            considered type 'apple'.

        #14041 *
            The Macintosh MPW client was "too synchronous", locking out
            other activity while it was running.  It now cooperates more
            with the OS and lets other applications run.  (Bug #3123).

        #14038 **
            Remote depot access to 99.2 servers from 99.1 and earlier
            servers was broken (no data would be returned).  This has
            been corrected.  (Bug #3109).

        #13829 **
            Triggers on OSF and Solaris would always fail in 99.2/13307.
            This has been corrected.  (Bug #3100).

        #13782 **
            Submitting a change with a mix of resolve types (accept
            yours, accept theirs, accept merge) from integration would
            cause the reverse integration record (the one attached to
            the source file) to get the wrong resolve type.  For example,
            the target file may say "merge from" but the source file
            would have "copy into" when it should have "merge into".
            This has been corrected.

            This problem only existed in 99.2 prior to 13782.  In 13782
            and later, database inconsistencies that had been introduced
            by this bug can be repaired with the command: 'p4d -jf 3104
            xxx' where xxx is a change number at or before the upgrade
            to 99.2.  (Checking changes prior to 99.2 is harmless, but
            slow.) The affected files can be found in the database
            journal file.  It is recommended that you checkpoint both
            before and after this command runs.

            (Bug #3104).

        #13681 **
            'p4 fstat' now requires at least one file argument, rather
            than going off and scanning the whole server.

        #13680 **
            Obliterating a file that was branched from another now-
            obliterated file would leave the file archive in place.
            Now the file archive gets purged properly.  (Bug #2326).

        #12933 *
            Deleting the resource fork file (.file) on the Mac no
            longer deletes the whole file.  Only deleting the regular
            file does.

        #12935 **
            'p4 resolve', when determining whether the same change had
            been made in the two different legs of the file, would ignore
            whitespace changes.  While sometimes convenient and could
            suppress some conflicts, this is not strictly correct.  It
            now compares the changes literally to see if they are
            in conflict or identical.

        #12937 *
            'p4 resolve' of a file without a new line at the end could
            leave the final <<<< marker at the end of the last line,
            rather than alone on a line of its own.  Now 'p4 resolve'
            deliberately appends a new line to the file being resolved
            if it does not have one originally and a marker needs to be
            added.  (Bug #2646).

        #12907 *
            Resource forks are now properly truncated on the Macintosh.
            Previously, if a submitted .file (the resource fork of 'file')
            was shorter than the one locally on disk, 'p4 sync' would
            overlay but not truncate the resource fork.  (Bug #1017, 2533).
      
        #12826 **
            Passwords set via p4win (the Windows GUI) were stored in the
            registry in plain text, while passwords set from the command
            line were stored encrypted.  Now passwords are encrypted
            regardless.  This is a server fix.  (Bug #2359).

        #12679 * **
            The worst case performance of the diff algorithm has been
            improved.  Most users will not notice any difference,
            but anyone submitting very large (>10 MB) files with lots
            of differences will notice a significant speedup.

        #12654 **
            A filename on the command line larger than 1024 characters
            could crash the server.  This has been corrected.

        #12563 **
            Follow-on to change 10522: complicated mappings could still
            yield different results, depending on whether you referred
            to the file via client or depot syntax.  This has been
            corrected.

        #12356 **
            'p4 resolve -f' didn't consider how the file was resolved
            the first time around, when setting the merge status.  Now
            it does, and understands that, for example, 'ay' (accept yours)
            after an 'at' (accept theirs) should leave the merge status
            as "copy from".

        #12334 **
            'p4 labelsync' kept the database locked while displaying
            results to the user.  This was very bad if the user was
            manipulating a large label over a slow network connection.
            Now labelsync, like the regular sync, locks the database
            during the computation phase but not during the display
            phase.  (Bug #1527).

        #12183 **
            Supposedly read-only values in new jobs, to be set by the
            Perforce server, were being set by p4win (the Windows GUI
            client) and accepted by the server.  This could cause problems
            with date fields where the client and server are in different
            timezones.  Now the server properly tells p4win that these
            fields are read-only and ignores the defaults that p4win
            generates, and instead uses its own defaults.

            In order for the server to tell p4win to gray-out read-only
            fields, the jobspec must be updated with 'p4 jobspec'.  It
            doesn't have to be changed -- just resaved.

            (Bug #1108, #2674).

        #12175 **
            With large views (>50,000 files), degenerate sort logic
            could cause 'p4 sync' and other commands to take a very
            long time to start.  In general, a sync of 100,000 files
            should start within a minute of server CPU time.

        #12161 **
            'p4 integrate' now properly requires read access to files in
            order to branch from them.  (Bug #1204).

        #12159 **
            'p4 filelog' would randomize the integration records for
            any particular revision.  Now all the integration records
            for a single revision are sorted by the other file's name.

        #12080 **
            The handling of large client and branch views, especially
            those with many exclusion (-) mappings, has again been sped
            up.  The earlier change (11260) affected the handling of
            large numbers of files (reducing time from minutes to seconds);
            this change affects the handling of small numbers of files
            (reducing time from sub-second to really sub-second).

        #11969 **
            'p4 jobs -e expression filepattern' ignored the expression.  Now
            it properly produces the intersection of those jobs matching
            the expression and those fixed by changes affecting the named
            files.  (Bug #1333).

        #11947 *
            'p4 resolve -am' now skips baseless merges, as advertised
            in the help for 'p4 resolve'. Previously, it would accept
            all the changes from the source file, which was wrong.
            (Bug #2635).

        #11902 *
            The client support for 'p4 resolve' wasn't properly detecting
            merge markers in the file before allowing an 'accept merge'.
            This has been corrected.

        #11870 ** *
            'p4 diff' and 'p4 diff2' produced output which, while correct,
            did not maintain a canonical form.  This posed no problem for
            the storage of diffs or for human readable output, but in rare
            cases it could cause a merge conflict to exist when there really
            was none, since the three way merge algorithm compares the
            output of two diffs (base vs. yours, base vs. theirs).
            This has been fixed.

        #11867 **
            'p4 diff2' would crash if tricked into diffing a binary file.
            This could only happen if the binary file is branched and then
            reopened as text.  This has been corrected.  (Bug #2179).

        #11577 **
            A file opened by 'p4 edit', then synced back to a previous
            revision, would then be re-opened at that revision.
            Syncing up to the head rev would then schedule a resolve,
            which didn't make much sense since the client already had
            the current text.  Now syncing an opened file to an earlier
            revision (or delete revision, for that matter) does not change
            the revision at which the file is opened.  Syncing to a later
            revision continues to re-open the file at that later rev,
            scheduling a resolve as a consequence.  (Bug #1775).

        #11536 **
            Checkpointing during heavy use could leave the saved journal
            files with garbage at the end (instead of real data).  This
            has been corrected.

        #11533 **
            ktext files that ended in a line with a $ but no new line
            would get mangled on checkout, with the last line disappearing.
            This has been corrected.  (Bug #2314).

        #11531 **
            'p4 resolve' of a binary file leaked a file descriptor/handle
            on the server.  On NT the server would eventually run out
            of available handles and refuse to operate.  On UNIX the
            problem only surfaced during a 'p4 resolve' of many files.
            This has been corrected.  (Bug #2557).

        #11524 **
            'p4d -z -jr' couldn't take more than one argument without
            crashing.  This has been corrected.  (Bug #2160)

        #11437 **
            Obliterating a file that was opened for 'branch' or 'integrate'
            left dangling integration records, which could cause problems
            if the file was subsequently branched again.  This has been
            corrected. (Bugs #2275, #2531).

        #11339 * **
            The '-ds' flag to 'p4 diff', 'p4 diff2', and 'p4 describe'
            now accurately reports the number of chunks/lines added and
            deleted.  Previously, it only got the number of changed
            chunks/lines right.  (Bug #2468).

        #11215, 11221 **
            On VMS, referring to local files on a client with a
            directory-less root (only dev:) produced bogus file names
            with an extra [ after the dev: name.  This has been corrected.
            Note: this is a server change. (Bug #2477).

            On VMS, using a relative path [-] would produce bogus
            file names with an extra ] before the file name.  This
            has been corrected.  (Bug #325).

        #11260 **
            The performance of large views (client, label, branch) has
            been improved substantially, reducing the compute time on
            'p4 sync', 'p4 labelsync', and 'p4 integrate' operations.

        #10983 *
            Passing '-i' options to the Mac client no longer causes
            the client to Beach Ball.  Previously, using '-i' to pass
            data in to the Perforce client would hang MPW.  (Bug #2162)

        #10760 **
            Fix RCS keyword expansion to properly expand strings found
            after a non-matching string introduced by a dollar sign.
            e.g. $myvar = "$Id:$"  (Bug#2214).

        #10655
            The case-insensitive Perforce server on NT is now a little
            more sensitive: it detects case changes in user and file
            names when saving client/label/branch/user/protection specs.
            (Bug #2156).

        #10628,10888 **
            'p4 sync' now properly will delete an always-writable
            (text+w, symlink) file, even if noclobber is set.
            (Bug #2177, #2258, #2501).

        #10554 **
            Certain mapping combinations would cause the Perforce server
            to ignore files.  This happened with mappings that used only
            *'s and tried to rearrange subdirectories.  E.g.:

                //depot/foo/*.h //client/*.h
                //depot/*.c //client/*.c

            would ignore the files in the //depot/foo directory.  This
            has been corrected.  (Bug #2190).

        #10522 **
            With certain exclusion mappings (those with -'s in front of
            them) it was possible to get different results depending on
            how much you limited the operation with file arguments on
            the command line.   For example, with the client view:

                        //depot/bar/... //client/foo/...
                        -//depot/...cc //client/...cc

            Then a 'p4 sync' would give different results from 'p4 sync
            //client/foo/...'.  This has been corrected.

        #10314 **
            'p4 change -f' now updates the timestamps on individual
            revision records, as well as that of the change itself.
            This is needed because as of 99.1 'p4 filelog' displays
            the revision's timestamp, not the changes.  Without this
            change, 'p4 change -f' would not be able to influence the
            timestamp output of 'p4 filelog'.  (Bug #839, #2110).

        #10311 **
            'p4 obliterate' of a file that has been branched out into
            a file which itself has been branched out could leave the
            target files with dangling references to the original file's
            text.

            This change fixes the obliterate problem, but not any past
            damage it has done.  You'll know you have this problem if
            you are trying to access files and you see the error:

                Operation: user-sync
                Librarian checkout PATH failed.

            Where "PATH" is the path of a previously obliterated file.
            If you have such errors, contact technical support
            (support@perforce.com) for help recovering the files.

            (Bug #2085).

        #10308 **
            Remote depot access no longer consumes a license for the
            user "remote".  If you have a "remote" user, you'll need to
            delete it to get the license back, but thereafter remote
            depot access won't recreate it.  This fix is required on
            the server in the remote depot, rather than the local server
            accessing the remote depot.  (Bug #2128).

        #10224 **
            The IRIX64 p4d would corrupt the db.desc table if a description
            was longer than about 2K.  This has been corrected.

        #10054 **
            'p4 resolve' of ktext files once again merges with the keywords
            unexpanded, so they don't produce conflicts.  This is the way
            it worked in 98.2.  (Bug #2066).

        #10048 **
            'p4 resolve -b' no longer attempts a 3-way merge when the
            binary files had no base.  'p4 resolve' no longer pretends
            to report the base type when there is no base.

        #10025 **
            The prohibition on client/branch/label names containing the
            slash (/) character has been recalled, so as to help those
            poor, unfortunate souls who use conventions with slashes.
            Slashes are harmless enough in branch names, but continue to
            be a bad idea for client and label names, as the syntax
            @label will improperly include any files in any label/*
            labels.

        #10024 **
            'p4 diff2' on NT caused file handle leaks and could prevent
            subsequent submits from succeeding.  This has been corrected.
            (Bug #1748).

        #9934 **
            'p4 submit' during the middle of a 'p4 verify -u' could cause
            duplicate head revision records for a single file, causing 'p4
            sync' to try to update each such file twice.  This has been
            corrected.  (Bug #2028).

        #9933 **
            'p4 submit -c change file' caused the server to get confused
            about what was being submitted, resulting in a spurious
            "file got unlocked!" message.  Now file arguments are
            prohibited if a change number is given.  (Bug #1975).

        #9926 **
            Triggers wouldn't run when the Perforce server was running as
            a Windows/NT service.  This has been corrected.

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 99.1, March 1999.

Major new functionality in 99.1

    PRESUBMIT TRIGGERS - #8594 **

            Pre-submit triggers are now supported.  These are commands
            run on the server after the change is created and the files
            are locked but prior to file transfers taking place, used
            to provide user-validation of the change being submitted.

            See 'p4 help triggers' or the manual for more information.

    LINE COMPRESSION - #8622 * **

            The new client option 'compress' turns on compression of
            the client/server connection.  Both client and server must
            be 99.1 for this to work.  If either client or server are
            older, this option is silently ignored.

            Line compression's effectiveness depends on two factors:
            the nature of the data being transferred and the speed of
            the link balanced against the processor speed at each end.

            Because of the repetitive nature of Perforce file names
            (e.g.  //depot/this/that/theotherthing/...), among other
            factors, compression yields a 10:1 gain on the basic protocol.
            If text or binary files are being transferred, the gain is
            roughly the same as compressing the files before submitting
            them into Perforce.

            Because compressing data takes CPU cycles, line compression
            is only effective if the processors can compress faster than
            the link can pass the data.  As a rule of thumb, compression
            is best for WANs (wide area networks bridging remote locations)
            and not so good for LANs (local area networks, such as
            Ethernet).

            (Bug #1000).

    EDITABLE CHANGELISTS - #8744 **

            'p4 change' of a pending changelist now presents the jobs and
            files associated with the changelist, and allows you to add/delete
            those jobs and files.  Only files from the default changelist
            can be added, and removing a file causes it to return to the
            default changelist.  (Bug #14).

            'p4 change' of a submitted changelist now presents the jobs,
            and allows you to add/delete jobs.  Adding a job closes the
            job as with 'p4 fix'.

    FLEXIBLE FILETYPES - #7724 **

            User-refinable filetypes are now supported: individual bits
            that control how a file is manipulated and stored can now
            be set when specifying the filetype during 'p4 add', 'edit',
            or 'reopen'.  See 'p4 help filetypes' for more information.

    NEWLINE TRANSLATION SUPPRESSION - #7880 ** *

            The new client option 'nocrlf' suppresses newline translation
            on Macintosh and Windows clients.  If this option is set,
            text files are read and written as binary files on the client,
            meaning that the newline is passed through untouched.
            Normally, newline is translated to carriage-return/newline
            on Windows and carriage-return on Macintosh.

            Note that the Perforce server uses newlines, not
            carriage-return/newline, in text files.  This is true even
            with the server on Windows/NT.

            This option works with pre-99.1 client programs, but 'p4
            diff' and 'p4 resolve' will not diff what they think are
            binary files, and they won't set the execute bit for xtext
            files.  Upgrade to 99.1 clients for full support of 'nocrlf'.
            (Bugs #333, #695, #940).

    P4 DIFF2 OVERHAUL

        Summary Line - #9151 **
            The header line has been changed to include a (one word)
            summary indicating content or type mismatches.  (Bug #1311).

        Comparing binary files - #9127 **
            Diff2 now compares binary files and prints out the line
            "(... files differ...)" if they are not identical.  (Bug #1607).

        Quiet flag - #8494 **
            Diff2 now takes a '-q' flag to suppress all output for
            files known to be identical (because they are the same file
            or because they were branched).  Also, 'p4 help diff2' now
            attempts to explain the output of diff2.  (Bugs #693, #550.)

        Using a branch view - #8306 **
            Diff2 can now take -b branch name to specify the pairs of
            files to be compared.  If file arguments are also present,
            they can further limit the files and specify the revisions
            for comparison.  (Bug #799.)

    BIG INSTALLATION ADMINISTRATION

        MaxResults avoids unwieldy operations - #8720 **
            'p4 group' now has a 'MaxResults' field, which can be used
            to limit the size of operations for users in that group.
            This enables large installations to prevent users from
            swamping the server with inadvertent, oversized requests
            (such as 'p4 files //depot/...').

            By default, users have no limit on the size of operations
            they can perform.  Once a user belongs to one or more groups
            with any limit, however, that user has the maximum of those
            groups' limits.  This allows, for example, an administrator
            to create a "novice" group with a low limit, thereby affecting
            only certain users.

            See 'p4 help group' and 'p4 help maxresults' for further
            info.  (Bug #1189).

        Access times for clients, branches, labels - #8276, #9648 **
            Branches, clients, and labels now all have last access dates
            to facilitate finding and deleting old, unused ones.

            - For branches, the last access is the last time the branch
              was used with 'p4 integrate' or 'p4 diff2'.

            - For clients, it is the last time the client was used for
              any command that _required_ a client (many commands, such
              as 'p4 describe', 'p4 changes', etc. do not), or when the
              client was used as a revision specification (@client).

            - For labels, it is the last time the label was updated with
              'p4 labelsync' or when the label was used as a revision
              specification (@label).

            (Bug #1236.)

        Archive validation - #8587 **
            'p4 verify' now can save the MD5 digest (fingerprint) of
            file revisions and later compare them to verify archive
            contents.  This can be used, for example, to verify that
            the server's archive is consistent with the metadata after
            a restore from backup.

            The saved digests are also used by 'p4 diff' and 'p4 diff2'
            to avoid having to compute them for their normal operation.
            This can considerably lighten the server load if these commands
            are used frequently.

            See 'p4 help verify' for information.  (Bug #861).

        Compressed checkpoints/journals - #8558 **
            The server can now generate and read compressed (gzip)
            checkpoints and journals when the -z flag is used with -jc,
            -jd, or -jr.  The live journal of database updates remains
            uncompressed.  (Bug #61).

Minor New Functionality in 99.1

        #9627, #9754 **
            'p4 integrate' now supports a '-s from' flag, which specifies
            the source files of an integration when a branch view is
            used (normally only the target files are allowed).  -s also
            tells it to use the union of the branch view and its reverse
            (with the target and source files exchanged).

        #9662 **
            The 'p4 fstat' command, long present but undocumented, is
            now supported.  See 'p4 help fstat' for info.

            The 'p4 -s' flag, also long present but undocumented, is
            now supported.  See 'p4 help usage'.

        #9260 **
            'p4 jobs' now has a '-m max' flag, like 'p4 changes', to limit
            the output to the first 'max' jobs.

        #9240 **
            'p4 jobspec' has been altered to handle read-only fields,
            Required fields, and Default values differently.  Now a single
            'field-type' flag on the field definition line determines how a
            field is set (automatically, or otherwise).  See 'p4 help
            jobspec'.  (Bug #1319, #1670).

        #9139, #9649 * **
            'p4 resolve' now takes a -b flag to force it to attempt a
            3 way merge, even if the files are binary.  It also makes
            the files editable/diffable in the resolve dialog.  When
            resolving binary files, Perforce uses an 8-bit clean path.

            This option works with pre-99.1 client programs, but 'p4
            resolve' will not or edit diff what it thinks are binary
            files.

        #8951 **
            The 'p4 client' and 'p4 label' commands now allow you to use
            '-t template' for existing as well as new clients and labels.
            This copies a client or label's view from another client or
            label.

        #8878 * **
            The new 'p4 passwd' command enables you to set the user's
            password without having it appear on the screen as editing
            the form for 'p4 user' does.  On Windows clients, 'p4 passwd'
            also sets the password in the registry in the same way that
            'p4 set P4PASSWD' does.

        #8803 **
            You can now directly edit any (unlocked) client.  Previously,
            the Perforce server wouldn't allow you to edit a client other
            than the current one, but that could easily be circumvented by
            saying "p4 -c xxx client".  Now the more direct "p4 client xxx"
            works.  To protect a client against inadvertent updates by other
            users, you can use the upgraded lock mechanism (see #7787).

        #8713 **
            The new 'p4 counter' command allows users with 'review' access
            to set and delete counters directly.  (Bug #812).

        #8557 **
            'p4 add' now allows you to re-add a file that has been deleted
            if your client has 'p4 sync'ed to something other than the
            (deleted) head rev.  (Bug #459).

        #8556 **
            File patterns in client, label, and branch views can now be
            quoted (") to allow embedded spaces.  The quotes must surround
            the file pattern.  Client roots must now be quoted if they
            contain spaces.  (Bug #420, #429).

        #7848 **
            The logging done by setting P4DEBUG to "server=1" now puts
            all info for each operation on a single line.

        #7787 **
            Locking of clients is now possible, and locking of labels and
            clients has converged to mean: it can't be deleted, and its
            spec can't be updated except by the owner.  As before, 'p4
            labelsync' can't be used on locked labels.  Now, no commands
            that affect a client can be used on a locked client, _except by
            the owner_.  (Bugs #850, #962, #1043, #1144).

            The client option 'allwrite', present since 98.2, has now been
            documented in 'p4 help client'.  This option leaves all client
            files writable.

Bugs Fixed in 99.1

        #9650 **
            'p4 sync' and 'p4 integrate' now honor the client option
            'noclobber' when attempting to delete a file: if the file
            is writable, it won't be deleted.  (Bug #1308).

        #9613 **
            The performance of the Windows GUI could be undermined by
            certain protection table entries.  Commands like
            'p4 fstat //depot/*' would take an inordinate amount of
            time.  This has been optimized.  (Bug #1904).

        #9588 **
            'p4 refresh' refreshed all files, rather than just those on
            the command line.  Fixed.  (99.1 beta only. Bug #1910).

        #9551 **
            'p4 diff2' left temp files around on the server, eventually
            running it out of unique temp file names.  Fixed.  (99.1
            beta only.  Bug #1910).

        #9531 **
            With certain overlapping client or branch views it was
            possible to get different results depending on how much you
            limited the operation with file arguments on the command
            line.   For example, with the client view:

                        //depot/... //client/...
                        //depot/hdrs/... //client/h/...

            Any files that might be under //depot/h should be obscured,
            and a 'p4 sync' would not fetch them.  But an explicit 'p4
            sync //depot/h/...' _would_ fetch them, which was improper
            and confusing since a subsequent 'p4 sync' would then delete
            them again.

            The view handling has been corrected to ensure that if a part
            of the namespace is obscured in a view, it remains obscured
            even if referring directly to obscured files.  (Bug #37).

        #9464 **
            Checkpointing to a checkpoint file that was on an NFS mounted
            disk was very slow, as it locked the file for each write.
            Now it locks the file once, and is as fast as it was prior to
            98.2/8352.

        #9441 **
            Tempobj files created in previous releases couldn't be
            submitted because they were read-only.  Fixed. (99.1 beta
            only.)

        #9416 **
            'p4 diff' against a file that was synced by integrate
            would diff against the wrong client file.  Fixed.

        #9397 **
            'p4 changes -m max path' crashed the server.  Fixed. (99.1
            beta only.  Bug #1878).

        #9346 *
            The 'modtime' option of 'p4 client' now works better on the
            Mac; previously, it didn't adjust for the difference between
            the UNIX/NT and Mac epochs (1970 vs. 1904).  Now its only
            shortcoming is that it does not adjust for timezone
            differences. (Bug #1804).

        #8851 **
            A limit of 1024 characters has been imposed on all identifiers:
            branch, client, file, group, job, label, user, etc.  Previously
            no limit was enforced and extremely long identifiers could cause
            problems in the underlying database.

        #8821 **
            Using 'p4 integrate' to branch into a file already existing
            in the client workspace would issue the proper "can't clobber
            writable file" message, but then act as if the file was
            branched.  A subsequent 'p4 revert' would then wipe out the
            file.  This has been corrected, and the file is only opened
            for integrate upon successful transfer of the file to the
            client workspace.  (Bug #1488).

        #8800 **
            Spaces are now consistently translated to _ in branch, client,
            depot, group, job, label, and user names.  Elsewhere, spaces
            are specifically allowed.

        #8773 **
            If you had multiple depots defined, it was then possible to
            enter a client, label, or branch view with something other
            than a valid depot name on the left hand side of the mapping.
            This could cause client files to map to no good place, with
            bizarre results.  Now, only valid depot names are allowed.
            (Bug #1579).

        #8772 **
            Another concurrency related Windows NT server crash has been
            fixed, similar to #8401.

        #8764 **
            It is no longer possible to create branch/label/client/depot
            names that begin with a dash (-) or are purely numeric.  The
            dash made it impossible to delete the entity (as the command
            line interpreter thought the name was flags) and purely
            numeric entities could be confused with change numbers when
            using the @label syntax to specify a revision.  (Bug #624,
            #638, #1001).

        #8756 **
            Branching a text file to ktext now works.  Previously, if you
            branched a text file and reopened it as ktext, the server didn't
            do the keyword expansion for the first rev.  Now it does.

        #8747 **
            RCS keyword expansion has been tightened up to be more
            RCS-like:  now only valid strings (currently $Id$, $Id:$,
            $Header$, and $Header:$) are intercepted.  All other
            strings are passed through untouched.  (Bug #277).

        #8700 **
            Changes with associated fixes can no longer be deleted.
            (Bug #620).

        #8668 **
            Merely running 'p4 job' no longer causes the job to be
            considered updated.  Something on the form must actually
            change.  (Bug #1127).

        #8525 **
            The 98.2 GUI required at least 'list' level access (granted
            via 'p4 protect') on all depots for them to show up in the
            depot explorer window.  Now it only requires 'list' level
            access to the files within the directories to show the
            directories.  (Bug #1191.)

        #8468 **
            Certain combinations of wildcards on the command line coupled
            with certain combinations of wildcards in the client view
            could cause the server to generate bogus answers or crash.
            This has been corrected.  (Bug #1071, #1440.)

        #8465 **
            The NT server now runs under NT5.0 beta 2.

        #8439 **
            'p4 add' no longer allows adding files that are specifically
            unmapped (by using an exclusion mapping in the client map).
            (Bugs #983, #1019, #1270.)

        #8414 **
            So as to provide relief to installations with less-than-perfect
            name services, the 'p4 info' command issued by the Windows GUI
            no longer causes the server to attempt to look up its own
            FQDN (fully qualified domain name).  Instead, the server now
            just quickly returns the server's IP address.  (Bug #1462).

        #8401 **
            Under certain concurrency conditions on Windows NT, the
            Perforce server could crash.   This has been corrected.

        #8352, 8186 **
            Journal files were getting scrambled on OSF (Digital UNIX)
            against NFS mounted filesystems and on NT systems with
            multiple processors, due to write collisions.  Journal writes
            are now protected by the same file locking which protects
            the database files, which should ensure serialized updates
            on all platforms against all filesystems.  Change 8186
            addressed OSF.  Change 8352 addresses all other platforms.

        #8222 **
            UNC (\\host\drive\path) paths on NT are now handled properly
            by the server.  That is, the current drive letter (c:) is
            no longer automatically (and incorrectly) prepended to UNC
            paths.  This is a server change.  (Bug #565.)

        #8205 **
            RCS keywords must be followed by : or $ to be expanded, so
            $Identifier (for example) no longer gets expanded.

        #8199 **
            Mappings with null directories (//) are no longer allowed in
            client/label/branch views.  (Bug #1331).

        #8190 *
            The Mac client now works a little better with Toolserver.
            As before, if there is an error editing a spec (say from
            'p4 client'), the p4 client command attempts to wait for
            the user to enter a line before continuing.  Previously, it
            waited for a keydown event, which never seemed to reach
            Toolserver, and it would hang; now it attempts to read
            a line from stdin, where it immediately finds an EOF and
            continues.  One consequence of this change is that from MPW
            you must now hit 'Enter' rather than 'Return' to continue
            after such an error.  (Bug #946).

        #8188 **
            Empty user names are now blocked at the server, so as to keep
            from corrupting the underlying RCS file format.

        #8142 **
            Entries to db.depot weren't being logged in the journal.
            Now they are.

        #8102
            Temp file names on OS/2 are now kept short by limiting the
            unique identifier to 3 digits.  This makes the file names adhere
            to the 8.3 file name limit.  (Bug #1276).

        #8061
            If a file was changed from binary to text during a branch (i.e.
            integrate creates the new file, which is then reopened as text),
            and that file was used as the source for further integrations,
            'p4 resolve' used the head type (text) when fetching the
            base for merging.  It now uses the base's type (binary).
            (Bug #1264).

        #8018 **
            The p4d server now suppresses the Windows GUI from listing
            directories with only delete files in them.  Requires new GUI
            as well.  (Bug #1145).

        #8014 **
            Slashes (/) are no longer allowed in branch, client, label, or
            depot names.  Previously they were allowed, but the semantics
            were questionable.

        #7857 *
            'p4 resolve -v' no longer suggests editing (option [e]) if
            the result of the merge was changes to only one leg of the
            file.  Editing is now only required if there were changes
            to both legs.  As before, 'p4 resolve' (without -v) only
            requires editing if there were conflicting changes.  (Bug #795).

        #7846 **
            Removing a depot now requires that its files are first
            removed with 'p4 obliterate'.  (Bug #890).

        #7845 **
            The 'p4 integrate' command no longer produces illegal
            filenames due to mismatched /'s in branch views.  If the
            branch view produces an illegal filename, the 'p4 integrate'
            is aborted.  (Bug #874).

        #7811 *
            The Macintosh client has been sped up considerably: I/O
            buffers are enlarged, network traffic is reduced, and output
            to the MPW shell is now block buffered instead of line
            buffered.

        #7652 **
            Sometimes p4d servers couldn't access files in remote depots:
            the files just appeared not to be there.  This has been
            corrected.  (Bug #1153).

        #7612 **
            Referring to a small subset of files against a large label (e.g.
            p4 sync somefiles@biglabel) could get staggeringly slow.
            This operation now runs fast, as it did prior to 98.2.

        #7488 **
            Checking out binary files from the NT server caused the
            server to bloat due to a memory leak.  This has been corrected.

        #7488 **
            The following interoperability bugs with the 97.3 GUI against
            the 98.2 server have been fixed:

                The GUI was unable to create or edit labels.  (Bug #1072).

                The GUI was unable to associate jobs with pending changes.
                (Bug #1076).

            The 97.3 GUI still cannot modify the user's jobview: it can
            only set it to the now unusable values "all" or "mine".  To
            edit the jobview, you must invoke 'p4 user' from the command
            line.  The equivalent of 'all' is now 'status=open'; the
            equivalent of 'mine' is now 'status=open user=_username_'
            (replacing _username_ with your user name).

        #7452 **
            The rcstoperf conversion script would crash if any RCS files
            contained symbols that began with a digit.  The server (which
            is used to process the RCS files) has been fixed to understand
            symbols beginning with a digit.

        #7363 *
            'p4 print -q' of a binary file on Windows/NT was treating
            the last buffer output as text; now it properly outputs the
            whole file as binary (without CR/LF translation).  (Bug #1092).

        #7242 **
            The NT server got confused when integrating filenames whose
            case had changed between being deleted and re-added.  This
            has been corrected.

        #7006 * **
            The AIX4.1 executables now run on 4.1 again, rather than
            just 4.2.

        #6944 *
            Resolving the data fork of files on a Mac would zero the
            resource fork; similarly, resolving the resource fork would
            zero the data fork.  This has been corrected.  (Bugs #926,
            #1012).

        #6921 **
            Contrary to the 'p4 protect' documentation, a protection
            access level could not be downgraded by removing 'list'
            access for a set of files and then granting the new level
            for those files: if a new level was granted, it would ignore
            the fact that the old level was removed.  Now the behavior
            matches the documentation, and it is possible to downgrade
            an access level as in this example:

                    write user * * //...
                    list user * * -//depot/read-only/...
                    read user * * //depot/read-only/...

            This allows read/write access to the whole depot, except the
            //depot/read-only tree, which is read-only.

        #6905 **
            Attempting to check empty binary files in generated errors
            from the zlib compression module on Irix and other systems.
            This has been fixed.  (Bug #957).

        #6899 **
            On IRIX, the 'p4 fixes' and 'p4 describe' commands wouldn't
            report job fixes that were associated with changes.  This
            has been fixed.  (Bug #969).  On Solaris, 'p4 submit' would
            not close jobs attached to the change being submitted.  This
            has been fixed.  (Bug #993).

        #6679 *
            A blank line (or any line missing an ='s) in a P4CONFIG file
            crashed the client.  This has been fixed.  (Bug #996).


--------------------------------------------------------------------------
--------------------------------------------------------------------------

Release 98.2, July 1998.
Changes between 97.3 and 98.2.

Major new functionality in 98.2

    NEW JOBS FUNCTIONALITY - #6542 **

            Jobs have been upgraded.  Two major shortcomings have been
            rectified: lack of configurability and lack of searching.

            1.  Jobs may now contain user defined fields, rather than a
                fixed set of fields.  This is controlled by the jobspec,
                which is set by the superuser.  The default jobspec is
                compatible with 97.3 jobs.  See 'p4 help jobspec' for
                redefining the jobspec.

            2.  Jobs now support a fast searching mechanism.  As jobs
                are entered or updated, text and dates are indexed.
                The index can be searched by passing the 'p4 jobs'
                command a search expression with the new '-e jobview'
                flag.  The jobview field in 'p4 user' is likewise now
                a search expression.  See 'p4 help jobs', 'p4 help
                jobview', 'p4 help user' for more information.

    EASE OF USE

        P4CONFIG Names Client Config File - #5955 *
            The new variable P4CONFIG names a file containing variable
            settings for the client.  If the file can't be found in the
            current directory, then parent directories are searched for
            the file.  Each variable setting is alone on a line and of
            the form: P4VAR=value.  The variables that can be set for
            the client are currently:
      
                        P4CLIENT
                        P4DIFF
                        P4EDITOR
                        P4MERGE
                        P4PASSWD
                        P4PORT
                        P4USER
      
            (Bug #349, #773).

        New Revision Specification @date - #5628 **
            Wherever revision specifications are supported, @date and
            "@datetime" can now be used in addition to @change and
            @label.  The format for date is YYYY/MM/DD, and the format
            for datetime is YYYY/MM/DD:HH:MM:SS.  If no time is given,
            midnight is assumed.

        Syncing Specific Revisions - #5808 **
            'p4 sync', 'p4 files', and 'p4 print' now allow their file
            specifications to include a revision range, which limits their
            operation to files affected within that range.  Previously,
            only the top revision could be specified, and all files as of
            that revision were considered.  This makes it possible to
            take a single change ('p4 sync @n,n') or to display the
            files affected between two labels ('p4 files @lab1,lab2').

    PROTECTIONS/GROUP

        User Authentication - #6323 * **
            Simple user authentication is now supported.  Each user may
            have an optional password set via 'p4 user'.  The password is
            provided by the client either by setting the new $P4PASSWD
            variable or by using p4's new '-P passwd' flag.  To make use
            of passwords, both the client and server must be 98.2 or
            later.  If an older client attempts to connect to the server
            and the user has a password, the server will reject the
            connection.

            SETTING THE PASSWORD WITH 'P4 USER' WILL TRANSMIT THE PASSWORD
            IN THE CLEAR, AND SHOULD BE DONE LOCALLY ON THE SERVER MACHINE
            OR OVER NETWORKS THAT ARE TRUSTED.  The authentication
            protocol itself does not transmit the password.

        Protection Groups - #6355 **
            User groups are now supported for use with the 'p4 protect'
            command.  Groups are created, updated, and displayed with
            the new 'p4 group' and 'p4 groups' command.  Lines in the
            protection table managed by 'p4 protect' now have an indicator
            as to whether they apply to individual users or to a group.
            (Bug #637).

        Unauthorized Access Doesn't Use a License - #6427 **
            Entries in the user table are now created only after the
            access level check completes, so that if a user does not
            have access to the server, then he will not accidentally
            consume a user license.

        Protection Levels Make More Sense - #6484, #6471, #5310 **
            Non-superusers can now use the depot/group/jobspec commands
            with the -o flag, as that makes them display only commands.

            A superuser (a user with 'super' access granted by 'p4 protect')
            can now create a new user with 'p4 user -f username'.

            If a user has 'list' but not 'read' access to a file (as
            granted by 'p4 protect') and attempts to 'p4 sync' the file,
            the file will now be deleted.  Previously, it just pretended
            the client didn't have the file (and did nothing to it).
            This allows for part of the depot to be made obsolescent by
            granting only list access.

        New "Force" Flags Empower Superusers - #5511 **
            The 'branch', 'client', 'label', 'job', and 'user' commands
            all now take a -f flag to force actions: deleting entities not
            owned by the current user and setting the modified date of
            entities.  The -f flag requires superuser access.

        Directly Invoking p4d - #2884 * **
            UNIX ONLY.  The p4 client program can now directly invoke
            the p4d server program by setting P4PORT to "rsh:p4d -ir
            _root_".  The "rsh:" instructs the client to run the program
            following the :, and the -i flag makes p4d run once with
            its stdin/stdout as the communications pipe.  By setting
            P4PORT to "rsh:rsh host cmd" it is possible to invoke a
            server on a remote machine, if "cmd" is either the invocation
            of p4d or a wrapper script which does as much.

    DATABASE UPGRADES

        New database format with flexnames - #5312 **
            All identifiers may now be of arbitrary lengths.  Previously,
            identifiers were limited to lengths of 32 (user names), 64
            (client/label/branch/job names), or 128 (file name) bytes.
            Because the data is now manipulated using the actual size
            of the data, rather than the maximum size, the disk and
            memory usage for the Perforce server has shrunk considerably.
            Databases are typically 1/3 to 1/2 of their former size,
            and memory use is commensurately smaller.  Because much less
            data is moved around, the server Performs much better,
            especially on large queries which previously caused the
            server to page.

        Big Databases for SGI Irix - #5713 **
            The p4d server now supports database files in excess of 2GB
            on SGI Irix.  Typically, it is the db.have ("have" and label
            lists) that grows the most, and on large installations these
            database files have approached the 2GB limit.  Now the internal
            limit for database files is 8TB (8000 GB) for SGI Irix.

        Upwardly Compatible Checkpoints/Journals - #5313 **
            Checkpoint and journal files now have a version number on
            each line that indicates the format of the line.  This will
            allow checkpoints from previous releases and journals made
            from multiple releases to be handled properly.  Previously,
            a server could read checkpoints and journals only from the
            same release level.

            Most database upgrades are handled by compatibility code for
            the binary database itself.  In some cases, however, it will
            be necessary to checkpoint and restore in order to upgrade
            releases.  In those cases the compatibility of checkpoints (and
            journals) will come into play.

    LIBRARIAN

        Lazy Copy on Resolve - #5320 **
            'p4 resolve' 'accept theirs' now gets the text of the new
            revision of the file by doing a lazy copy from the integrated
            file, rather than taking the text from the client.  When
            using 'p4 integrate' to copy one set of files on top of
            another, the lazy copy can save space.

        Compressed File Types - #6120 **
            Compressed file types are now supported for text and binary
            files. The existing binary, xbinary, and resource types have
            become compressed types, with the old uncompressed types
            being renamed to ubinary, uxbinary, and uresource.  There
            is also a new ctext and cxtext for storing compressed text.
            Compressed types are stored in gzip format on the server,
            but otherwise behave like regular text and binary files on
            the client.

        New "Temporary Object" File Types - #6113 **
            Two new file types are now supported: tempobj and xtempobj.
            Both are binary files that are always left writable on the
            client and only have the head revision stored in the server.
            xtempobj also has the execute permission set on the client.

        $Id:$ Now Expands More Like RCS - #6042 **
            $Id:$ in ktext and kxtext files are now expanded with a space
            before the final $, so as to be compatible with RCS and its
            "ident" program.  This makes current ktext files look
            different according to 'p4 diff -se', so users of that
            command should refresh their ktext files with 'p4 sync -f'.
            (Bug #819).

        $Header:$ Mimics $Id:$ - #5608 **
            The keyword $Header:$ is now supported for ktext type files.
            It expands the same as $Id:$.

Minor New Functionality in 98.2

        #6559 **
            The p4d server process id is now logged in the error log
            along with the date, client, command, etc when command
            logging is turned on.  Turn command logging on by setting
            P4DEBUG to "server=1".

        #6360 **
            'p4 opened' now sports a '-c changelist#' to restrict output
            to the given changelist number.

        #6021 **
            'p4 where' now also outputs the local name of the mapped
            file.  This is in addition to displaying the name in both
            depot and client form in Perforce syntax.  (Bug #833).

        #5381 **
            'p4 filelog' now includes the filetype at each rev.  (Bug #709).

        #5369 **
            All ASCII forms are now more tolerant of indenting.  Except for
            text blocks (where the indent is exactly the first white space),
            values in the forms may be arbitrarily indented, as long as they
            are indented at all.  This makes 'p4 submit' more immune to
            accidental alterations to the 'Files:' list.  'p4 submit' now
            has a kinder, gentler message when a file appears in the list
            that wasn't part of the default changelist.  (Bug #694).

Bugs Fixed in 98.2

        #6108 **
            Spurious carriage return characters (CRs in addition to the
            CRLF at the end of each line) in a text file stored in an NT
            server depot could cause older revisions of the file to be
            corrupted.  Files with extra CRs usually come about from
            "windows aware" UNIX text editors or from manually moving
            text files between UNIX and NT without handling the CRLF
            translation properly.  (Bug #864).

        #6039 **
            Date conversion wasn't taking into account daylight savings
            time.  Now it does.  Only 'p4 change -f' did date conversion
            prior to 98.2.  (Bug #852).

        #5988 *
            ^C while in the editor launched by p4 client, etc. is now
            ignored properly.  (Bug #789).

        #5828 **
            When expanding database tables hit an out-of-disk condition,
            the resulting failure was being handled poorly, and sometimes
            the table was left in a corrupted state.  The symptoms of this
            corruption were either missing rows or, worse, a loop in the
            btree structure.  The latter caused the server to loop, consuming
            memory, on certain queries and made it impossible to checkpoint,
            because the checkpoint would never end.  This usually happened
            with the db.have table, as it is the table that typically grows
            the largest the fastest.  Now disk-full conditions are detected
            earlier, so that the database tables can maintain their
            consistency better.

        #5822 * **
            The diff logic used by the Perforce client and server (for
            'p4 diff', 'p4 diff2', 'p4 describe', and 'p4 resolve') has
            been adjusted to produce more compact diffs, similar to GNU
            diff.

        #5514 *
            'p4 resolve -at', and other commands that were supposed to
            deposit read/write files on the client, were leaving the files
            read-only on NT.  This has been corrected.  (Bug #736).

        #5453 **
            In certain cases (with ambiguous client mappings), it was
            possible to get the same depot file opened twice for branch.
            This confused the server when it came time to submit or revert,
            because it only expects the file to be opened at most once.
            This has been corrected.  (Bug #731).

        #5437 **
            'p4 diff2' and 'p4 integ' would sometimes not see files or
            pair them properly if protections were being used.  This has
            been corrected.  (Bug #549).

        #5367 **
            'p4 labelsync' of a single file with a revision # would delete
            the file from the label, rather than replacing it.  This has
            been fixed.  (Bug #685).

        #5317 **
            Ending a parameter with a "%" (such as 'p4 have foo%') would
            yield bogus error messages (at best) and server crashes (at
            worst).  The error message handling has been fixed.  (Bug #625).

        #5315 **
            "Keepalives" are now turned on by the server so that it
            discovers workstations that shut down with live Perforce
            connections.  Without these, if a workstation was powered
            down (or pulled from the network) while the 'p4' client
            program was running, the server would just leave the connection
            in permanent limbo.  (Bugs #151, #465).

        #5309 * **
            'p4 print' of a binary file now actually writes it as binary
            to standard output on NT.  Previously, it would leave stdout in
            text mode, even if it was a binary file.  Now it switches stdout
            to reflect the type of the file.  (Bug #644).

        #5204 **
            Integrate of an already opened file mentioned a bogus
            revision number.  Now it reports the right revision.
            (Bug #645).

        #5133 **
            The p4d server will now fail to start (logging an error
            message) if the license file is present but invalid.
            Previously, the server would start but operate in unlicensed
            mode (2 users, 2 clients).  Rather than being a convenience,
            that made finding licensing problems harder, so now the server
            just fails to start if the license is bad.

        #4961 **
            Paths with null directories (//) were no longer allowed in
            97.3, but if files with such names came from an upgrade from
            97.2, it was not possible to manipulate (or obliterate)
            them.  Now existing files with // in them can be accessed,
            but new ones cannot be added.

        #4943 **
            On SMP NT machines, a race condition could lead to a server
            crash under heavy load.  This has been fixed, and support
            for SMP NT machines has been reenabled

        #4887 **
            'p4 lock' and 'p4 unlock' of a file not opened at the head rev
            were making it look as if the file was opened at the head rev.
            This meant files could be submitted without resolving the changes
            from the head rev.  This has been fixed.  (Bug #569).


        #4871 *
            The NT clients were stripping anything after the first
            "." in a client name set with P4CLIENT.  This has been
            fixed.  If the client name is taken from the hostname
            it is still truncated after the first ".".  This now
            reflects the 97.2 behavior.  (Bug #562).

        #4847 **
            Under certain circumstances, it was possible to replace a
            label, client, or branch description with a description
            with the same name but a different type (i.e. a label
            replaced with a client).  This could cause a certain amount
            of havoc if a client was replaced by a branch, because the
            client's "have" list would suddenly become inaccessible.
            This has been fixed.  (Bug #547).

        #4844 **
            'p4d -jc' now again takes an argument (where to put the
            checkpoint file).  This was removed in a misguided change
            from 97.2.

    GUI BUGS FIXED IN 98.2

        Release notes for the GUI can now be found under "Supplement
        for GUI for Windows" on the Perforce Technical Documentation
        web page.

--------------------------------------------------------------------------
--------------------------------------------------------------------------

Upgrading from 97.3 and earlier.

        1.      NEW DATABASE FORMAT WITH FLEXNAMES.  The 98.2+ database
                is not compatible with earlier databases.  You must convert
                it using a 97.3 checkpoint (checkpoints from earlier
                releases will not be compatible):

                        /path/to/97.3/p4d -r$P4ROOT -jc checkpoint.97.3
                        (remove the $P4ROOT/db.* files)
                        /path/to/98.2/p4d -r$P4ROOT -jr checkpoint.97.3

                The Windows/NT installer will perform this upgrade automatically
                for you if you do not do it yourself.

                See change #5312 for details on flexnames.

        2.      NEW JOBS SUPPORT.  Jobs data (if any) must be upgraded after
                restarting from pre-98.2.   To convert, issue the client
                command:

                        p4 jobs -R

                You must have 'superuser' access, as granted by 'p4 protect'
                to use this flag.  It is harmless to run this more than once.

                Note: the jobview field of the user form is not automatically
                converted.  Users must replace their jobviews.  The new
                jobviews that correspond to the old ones are:

                        Old JobView     New JobView
                        -----------     -----------
                        all             status=open
                        mine            user=username status=open

                replacing 'username' as appropriate.

        3.      The new password support (see change #6323) requires 98.2
                or newer clients and servers.  You cannot set the password
                if the client program is earlier than 98.2, and once the
                password is set you cannot connect at all with old client
                programs.

        4.      You cannot mix a 98.2 server with a lower version server
                using remote depots.   Further, remote depots between
                Unix and NT do not work correctly because of the different
                sort ordering.

        5.      $Id:$ EXPANSION CHANGED.  $Id:$ in ktext files now expands
                with a space before the final $, like RCS.  This makes
                current ktext files look different according to 'p4 diff
                -se', so users of that command should refresh their
                ktext files with 'p4 sync -f'.
