Helix Core is now P4. Product user interfaces will be updated soon. Learn more >>

P4 CLI Documentation | 2025.2

# p4 typemap

View or modify the file name-to-type mapping table.

## Syntax

    p4 [g-opts] typemap
    p4 [g-opts] typemap -o
    p4 [g-opts] typemap -i

Syntax and naming conventions

## Description

The `p4 typemap` command allows P4 Server administrators to set up a table linking P4 Server 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 P4 Server.

This command:

- Only affects files that are added after you create the mapping table.

- Does not affect files that existed before you create the mapping table.

### Default behavior to determine file type

By default, P4 Server 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, P4 Server 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`.

### Override the default typemap

The default typemap can be overridden by the use of the `-t filetype` option. See Overriding file type with the -t option.

However, 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.

- RTF files, which usually contain embedded formatting codes.

The `p4 typemap` command provides the most complete solution, allowing administrators to bypass the default type detection mechanism, and ensuring that certain files, such as `.pdf` or `.rtf`, are assigned the P4 filetype you want when they are added to the depot with the `-t filetype` option of p4 add.

Users can also override any file type mapping defined in the typemap table by explicitly specifying the file type on the P4 Server command line.

## Form fields

The `p4 typemap` form contains a single `TypeMap` field. Each indented line under the TypeMap: field consists of a pair of values linking file types to file patterns specified in depot syntax:

Column | Description
--- | ---
`filetype` | Any of the P4 Base file types and modifiers.
`pattern` | 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 (`-`pattern``) mappings. To match all files anywhere in the depot hierarchy, the pattern must begin with `//...` To match files with a specified suffix, use `//.../*.suffix` or use `//....suffix` with four dots. Later entries override earlier entries.

## Options

Option | Description
--- | ---
`-i` | Reads the typemap table from standard input without invoking the editor.
`-o` | Writes the typemap table to standard output without invoking the editor.
`g-opts` | 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 | admin, or `list` to use the `-o` option

- 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, `//`path`/....`ext``) The first three periods specify "all files below this level". The fourth period and accompanying file extension are parsed as "ending in these characters".
- 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 a `binary` 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 Base file types and modifiers.
- The file type specified on the command line overrides the file type specified by the typemap table if you use the `-t` option and file type modifiers.

## Examples

To make P4 Server consider all PDF and RTF files as `binary`, use `p4 typemap` to modify the typemap table as follows:

    Typemap:
            ## comment line
            binary //....pdf  ## comment appended
            binary //....rtf

where:

- The first three periods ("`...`") in the specification are a P4 Server 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`).

- Comments are preceded by `##`

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 the legacy binary file format of Microsoft Word. 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:

    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:

    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 Base file types and modifiers.

By default, P4 Server 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/...

Indent each line under Typemap:

## Related commands

To add a new file with a specific type, overriding the typemap table | `p4 add -t type file`
To change the filetype of an opened file, overriding any settings in the typemap table | `p4 reopen``-t type file`

Your search for returned results