Previous Table of Contents Index Next
Perforce 2009.2: Command Reference

File Types
Perforce supports six base file types:
text files,
compressed binary files,
native apple files on the Macintosh,
Mac resource forks,
symbolic links (symlinks), and
unicode and utf16 files.
File type modifiers are then applied to the base types allowing for support of RCS keyword expansion, file compression on the server, and more.
When a file is opened for add, Perforce attempts to determine the type of the file automatically. If the file is a regular file or a symbolic link, its type is set accordingly. Perforce then examines the first 8192 bytes of the file to determine whether it is text or binary. If any non-text characters are found, the file is assumed to be binary; otherwise, the file is assumed to be text. If a text file is 10MB or larger, it is assumed to be of type ctext (text+C), and the file is compressed and stored in full on the server, rather than as deltas.
(Files in unicode environments are detected differently; for details, see the Internationalization Notes.)
Perforce administrators can use the type mapping feature (p4 typemap) to override Perforce's default file type detection mechanism. This feature is useful for binary file formats (such as Adobe PDF, or Rich Text Format) where files can start with 8192 or more characters of ASCII text, and might otherwise be mistaken for text files.
Base filetypes
The base Perforce file types are:
Treated as text on the client. Line-ending translations are performed automatically on Windows and Macintosh clients.
deltas in RCS format
Accessed as binary files on the client. Stored compressed within the depot.
full file,
UNIX clients (and the BeOS client) access these as symbolic links. Non-UNIX clients treat them as (small) text files.
deltas in RCS format
Multi-forked Macintosh file
AppleSingle storage of Mac data fork, resource fork, file type and file creator.
full file,
compressed, AppleSingle format.
Macintosh resource fork
The only file type for Mac resource forks in Perforce 99.1 and before. Still supported, but the apple file type is preferred.
full file,
Perforce servers operating in unicode mode support the unicode file type. These files are translated into the local character set specified by P4CHARSET.
Perforce servers not in unicode mode do not support the unicode file type.
For details, see the Internationalization Notes.
If the Perforce server is operating in unicode mode, files are translated into the local character set as specified by P4CHARSET.
If the Perforce server is operating in non-unicode mode, files are transferred as UTF-8, and translated to UTF-16 (with byte order mark, in the byte order appropriate for the client machine) in the client workspace.
For details, see the Internationalization Notes.
File type modifiers
The file type modifiers are:
Expands only the $Id$ and $Header$ keywords:
This pair of modifiers exists primarily for backwards compatibility with versions of Perforce prior to 2000.1, and corresponds to the +k (ktext) modifier in earlier versions of Perforce.
RCS keyword expansion
Expands RCS (Revision Control System) keywords.
RCS keywords are case-sensitive.
When using keywords in files, a colon after the keyword (for instance, $Id:$) is optional.
Useful for binary file types (such as graphics) where merging of changes from multiple authors is meaningless.
Server stores the full compressed version of each file revision
Default server storage mechanism for binary files and newly-added text files larger than 10MB.
Server stores full file per revision, uncompressed
Useful for large binaries, or for long ASCII files that aren't read by users as text, such as PostScript files.
Only the head revision is stored on the server
Older revisions are purged from the depot upon submission of new revisions. Useful for executable or .obj files.
Only the most recent n revisions are stored on the server, where n is a number from 1 to 10, or 16, 32, 64, 128, 256, or 512.
Older revisions are purged from the depot upon submission of more than n new revisions, or if you change an existing +Sn file's n to a number less than its current value. Earlier revisions unaffected; see the Usage Notes for details.
The file's timestamp on the local filesystem is preserved upon submission and restored upon sync. Useful for third-party DLLs in Windows environments.
The server runs an archive trigger to access the file. See the System Administrator's Guide for details.
A file's type is normally preserved between revisions, but can be overridden or changed with the -t flag during add, edit, or reopen operations:
p4 add -t filetype filespec adds the files as the specified type.
p4 edit -t filetype filespec opens the file for edit as the specified type. The file's type is changed to the specified filetype only after it is submitted to the depot.
p4 reopen -t filetype filespec changes the type of a file already open for add or edit.
The filetype argument is specified as [basetype]+modifiers. For example, to change's type to executable text with RCS keyword expansion, use p4 edit -t text+kx
Partial filetypes are also acceptable. For example, to change an existing text file to text+x, use p4 reopen -t +x Most partial filetype modifiers are added to the filetype, but the storage modifiers (+C, +D, and +F) replace the file's storage method. To remove a modifier, you must specify the full filetype.
Perforce file types for common file extensions
The following table lists recommended Perforce file types and modifiers for common file extensions.
GIF graphic file
HTML file
HTML file
JPEG graphic file
MPEG video file
Adobe PDF file
ZIP compressed archive file
For more about mapping file names to Perforce filetypes, see the p4 typemap command.
Keyword Expansion
RCS keywords are expanded as follows:
File name and revision number in depot syntax
Date of last submission in format YYYY/MM/DD
Date and time of last submission in format YYYY/MM/DD hh:mm:ss
Date and time are as of the local time on the Perforce server at time of submission.
Perforce changelist number under which file was submitted
File name only, in depot syntax (without revision number)
Usage Notes
Delta storage (the default mode with text files) is a method whereby only the differences (or deltas) between revisions of files are stored. Full file storage (the default mode with binary files) involves the storage of the entire file. The file's type determines whether full file or delta storage is used. Perforce uses RCS format for delta storage.
Some of the file types are compressed to gzip format for storage in the depot. The compression occurs during the submission process, and decompression happens while syncing. The process is transparent to the user; the client workspace always contains the file as it was submitted.
Symbolic links in non-UNIX client workspaces appear as small text files containing a relative path to the linked file. Editing these files on a non-UNIX client should be done with caution, as submitting them to the depot may result in a symbolic link pointing to a nonexistent file on the UNIX workspace.
For instance, changing a file's type by adding the +Sn (temporary object) modifier tells Perforce to store only the most recent n revisions of the file in the depot. If you change an existing file into a temporary object, subsequent revisions (after the nth) will purge the revisions stored after the old head revision, but revisions to the file stored in the depot before the +Sn modifier was used will remain unaffected. (Syncing to a non-head revision submitted after the +Sn modifier was used will delete the file from your workspace. Such revisions are displayed as purge operations in the output of p4 filelog.)
The modtime (+m) modifier is a special case: It is intended for use by developers who need to preserve a file's original timestamp. (Normally, Perforce updates the timestamp when a file is synced.) It allows a user to ensure that the timestamp of a file in a client workspace after a p4 sync will be the original timestamp existing on the file at the time of submission (that is, not the time at the Perforce server at time of submission, and not the time on the client at the time of sync).
The most common case where this is useful is development involving the third-party DLLs often encountered in Windows environments. Because the timestamps on such files are often used as proxies for versioning information (both within the development environment and also by the operating system), it is sometimes necessary to preserve the files' original timestamps regardless of a Perforce user's client settings.
The +m modifier on a file allows this to happen; if set, Perforce will ignore the modtime ("file's timestamp at time of submission") or nomodtime ("date and time on the client at time of sync") option setting of the client workspace when syncing the file, and always restore the file's original timestamp at the time of submit.
Versions of Perforce prior to 99.1 used a set of keywords to specify file types. The following table lists the older keywords and their current base file types and modifiers:
Text file with RCS keyword expansion
Executable text file with RCS keyword expansion

Previous Table of Contents Index Next

Perforce 2009.2: Command Reference
Copyright 1999-2009 Perforce Software.