We run our builds on networked drives, but have artefacts and history on a local drive. This means that we rely on custom workspaces to put the builds onto the network.
In order to map correctly from both Windows and Linux slaves (some builds don't care), we use an environment variable to indicate the root of the filesystems (aka "drive").
On Windows slaves, this variable (e.g. "N") will contain the drive letter ("N:"), on Linux slaves it will look like "/mnt/drive/N". The job then has a custom workspace looking like "$
It all works fine on Windows slaves, but doesn't on Linux slaves.
The Hudson core correctly expands this variable to "/mnt/drive/N/hudson/workspace/my-job" and starts working, but the job fails as soon as the Perforce plugin attempts to sync, because it has set the workspace root to "/mnt/drive/hudson/workspace/my-job" (note the lack of "N" and a slash).
I tried a couple of combinations and have clear indications that this will (only) happen if the last component of the path is a single letter. These values work fine: /mnt/drive/NN, /mnt/drive/Drive. Both /mnt/drive/N and /mnt/drive/n fail.
I have worked around it with a symlink, but it's Not Great and requires that I remember this on any new slaves.