p4 typemap
Synopsis
Modify the file name-to-type mapping table.
Syntax
p4 [g-opts
] typemap
p4 [g-opts
] typemap
-o
p4 [g-opts
] typemap
-i
Description
The p4 typemap
command allows Perforce administrators to set up
a table linking Perforce file types to file name specifications. If a
filename matches an entry in the typemap table, it overrides the file
type that would otherwise have been assigned by Perforce.
By default, Perforce automatically determines if a file is of type
text
or binary
based on an analysis of the first 65,536 bytes of a
file. If the high bit is clear in each of the first 65,536 bytes,
Perforce assumes it to be text
; otherwise, it’s binary
. Files
compressed in the .zip
format (including .jar
files) are also
automatically detected and assigned the type ubinary
.
Although this default behavior can be overridden by the use of the -t
filetype
option, it’s easy to overlook this, particularly in cases
where files' types were usually (but not always) detected correctly.
This situation occasionally appears with PDF files (which sometimes
begin with over 65,536 bytes of ASCII comments) and RTF files, which
usually contain embedded formatting codes.
The p4 typemap
command provides a more complete solution,
allowing administrators to bypass the default type detection mechanism,
ensuring that certain files (for example, those ending in .pdf
or
.rtf
) will always be assigned the desired Perforce filetype upon
addition to the depot.
Users can override any file type mapping defined in the typemap table by explicitly specifying the file type on the Perforce command line.
Form Fields
The p4 typemap
form contains a single TypeMap:
field,
consisting of pairs of values linking file types to file patterns
specified in depot syntax:
Column | Description |
---|---|
|
Any valid Perforce file type. For a list of valid file types, see “File Types”. |
|
A file pattern in depot syntax. When a user adds a file matching this
pattern, its default file type is the file type specified in the
table. To exclude files from the typemap, use exclusionary
( |
Options
|
Reads the typemap table from standard input without invoking the editor. |
|
Writes the typemap table to standard output without invoking the editor. |
|
See “Global Options”. |
Usage Notes
Can File Arguments Use Revision Specifier? | Can File Arguments Use Revision Range? | Minimal Access Level Required |
---|---|---|
N/A |
N/A |
|
- To specify all files with a given extension at or below a desired
subdirectory, use four periods after the directory name, followed by
the extension. (for instance,
//
) The first three periods specify "all files below this level". The fourth period and accompanying file extension are parsed as "ending in these characters".path
/....ext
- File type modifiers can be used in the typemap table. Useful
applications include forcing keyword expansion on or off across
directory trees, enforcing the preservation of original file
modification times (the
+m
file type modifier) in directories of third-party DLLs, or implementing pessimistic locking policies. - Specify multiple file type modifiers consecutively. For example,
binary+lFS10
refers to abinary
file with exclusive-open (l
), stored in full (F
) rather than compressed, and for which only the most recent ten revisions are stored (S10
). For more information on syntax, see “File Types”. - If you use the
-t
option and file type modifiers to specify a file type on the command line, and the file to which you are referring falls under ap4 typemap
mapping, the file type specified on the command line overrides the file type specified by the typemap table.
Examples
To tell the Perforce service to regard all PDF and RTF files as
binary
, use p4 typemap
to modify the typemap table as follows:
Typemap: binary //....pdf binary //....rtf
The first three periods ("...
") in the
specification are a Perforce wildcard specifying that all files beneath
the root directory are included as part of the mapping. The fourth
period and the file extension specify that the specification applies to
files ending in .pdf
(or .rtf
).
A more complicated situation might arise in a site where users in one
area of the depot use the extension .doc
for plain ASCII text files
containing documentation, and users working in another area use .doc
to refer to files in a binary file format used by a popular word
processor. A useful typemap table in this situation might be:
Typemap: text //depot/dev_projects/....doc binary //depot/corporate/annual_reports/....doc
To enable keyword expansion for all .c
and .h
files, but disable it
for your .txt
files, do the following:
Typemap: text+k //depot/dev_projects/main/src/....c text+k //depot/dev_projects/main/src/....h text //depot/dev_projects/main/src/....txt
To ensure that files in a specific directory have their original file modification times preserved (regardless of submission date), use the following:
Typemap: binary //depot/dev_projects/main/bin/... binary+m //depot/dev_projects/main/bin/thirdpartydll/...
All files at or below the bin
directory are assigned type binary
.
Because later mappings override earlier mappings, files in the
bin/thirdpartydll
subdirectory are assigned type binary+m
instead.
For more information about the +m
(modtime) file type modifier, see
“File Types”.
By default, Perforce supports concurrent development, but environments
in which only one person is expected to have a file for edit at a time
can implement pessimistic locking by using the +l
(exclusive open)
modifier as a partial filetype. If you use the following typemap, the
+l
modifier is automatically applied to all newly-added files in the
depot:
Typemap: +l //depot/...