# o4 **Repository Path**: mirrors_salesforce/o4 ## Basic Information - **Project Name**: o4 - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-19 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # o4 - Background At salesforce we use Perforce at a very large scale. A scale that exposes some shortcomings in p4 itself. `o4` was created to improve reliability of a sync and increase scalability in our very large scale CI. What that boils down to is the rather horrendous reality that a `p4 sync` makes *most* of the changes to your local files... ## Why o4? `o4` allows you to continue using Perforce and all the associated tools and IDE plugins, without the uncertainty around a sync. Every sync is guaranteed perfect, every single time. In the rare occurence that a sync could not be met to 100%, `o4` will fail loudly. Crash and burn. No more silent errors! In addition to that `o4` allows some dramatic improvements to CI, more on that in the [server/README.md](server documentation). # Restrictions In general, `o4` is an encapsulation of p4's syncing. This allows the use of `o4` without otherwise modifying toolchain or workflow. However *some* assumptions was made to allow `o4` to run efficiently. 1. Directories only; o4 is not suited for single files. State is stored in `.o4` folder in the target directory. 2. Flat clientspecs; remapping source trees into entirely different target trees is not supported. Some mapping works, but it is generally discouraged. 3. Newlines in filenames are not supported. 4. Python3.6 or higher. `o4` source code makes use of f-strings. 5. o4 is available only on Linux or macOS. ## What about my... All your tools continue to work like they normally would. That means you can use `o4` and continue using your IDE plugins, p4v, and such. All `o4` is, is an encapsulation of p4 that verifies everything. # Installation 1. Install the p4 command line on the path (https://www.perforce.com/downloads/helix-command-line-client-p4) 2. Log in: `p4 login` 3. Create a clientspec: `p4 client` 4. Build the zipapps: `make` 5. Install the zipapps: `[ $(uname) = Darwin ] && make install || sudo make install` # Basic usage To sync a directory (`