views:

499

answers:

4

So, virtually cannot use the the perforce command line for anything other than syncing. My workspace root is mapped to C:\ Here's a line of my client spec: //claims1.0/main/... //cthiel/code/claims1.0/main/...

Any time I fire up cygwin and attempt to work with any files in my depot (such as p4 edit ), I get an error along the lines of: Path '/cygdrive/c/code/commonTest/main.p4ignore' is not under client's root 'C:\'.

The paths aren't matching up, because the equivalent of C:\ for cygwyn is /cygdrive/c. So it's never able to find files with the perforce command line.

Is there a way to fix this? It's highly annoying.

+7  A: 

Found a solution:
Add this to your .bashrc:

function p4() {
export PWD=`cygpath -wa .`
/cygdrive/c/Program\ Files/Perforce/p4.exe $@
}

Works like a charm for me.

bergyman
I found this preferable to the cygwin p4 client for some reason. Probably my own lack of knowledge - I found that the cygwin binary required me to set a password via environment variable (always yucky to see env variables with sensitive data), and even still I got the same error. This worked magically.
Eddie Parker
+5  A: 

Even mo' betta':
Use the cygwin p4 client: http://filehost.perforce.com/perforce/r07.2/bin.cygwinx86/p4.exe

Just make sure this is in your path before the Perforce/p4.exe. Et voila.

bergyman
this version this link points to is obviously not the latest/greatest, but the other versions are also available in sibling directories.
Mike Ellery
+1  A: 

You can setup altroots in your client spec, that might cover this?

Although the cygwin p4 is the solution I'd go for. But I would go for the latest version: http://filehost.perforce.com/perforce/r09.2/bin.cygwinx86/p4.exe - it'll work with any older server, but will have fewer bugs.

Douglas Leeder
A: 

A modified version of the .bashrc function to avoid the cygpath overhead and finding p4.exe executable in the PATH automatically:

function p4() {
    PWD= `which p4` "$@"
}
quietdragon