Search code examples
downloadmoveperforce

Does p4 move mean that other clients have to redownload that file?


If I use p4 move to move a large file (or large number of files), such that they are tagged move/delete and move/add in perforce, when other clients get that revision, do they have to redownload those files? Or will it recognise that it can just move those files locally.

If that is not the default behaviour is there any way to achieve it? Or is the best bet to move the files manually and do a reconcile?


Solution

  • The files will be re-downloaded, at least as of the server version I'm on. The only special-case optimization I'm aware of to sidestep downloading content for a newly synced revision is the case where the client file has been remapped to a different (identical) depot file. Syncing a moved file is handled as if the old file were deleted and the new file were added:

    C:\Perforce\test\move>p4 -vrpc=3 sync ... | grep "RpcRecvBuffer func"
    RpcRecvBuffer func = protocol
    RpcRecvBuffer func = client-Crypto
    RpcRecvBuffer func = flush1
    RpcRecvBuffer func = client-Message
    RpcRecvBuffer func = client-DeleteFile
    RpcRecvBuffer func2 = B719AE71314697DE0C0C3AC29A76903D
    RpcRecvBuffer func = client-Ack
    RpcRecvBuffer func = client-Message
    RpcRecvBuffer func = client-OpenFile
    RpcRecvBuffer func = client-WriteFile
    RpcRecvBuffer func = client-CloseFile
    RpcRecvBuffer func2 = B719AE71314697DE0C0C3AC29A76903D
    RpcRecvBuffer func = client-Ack
    RpcRecvBuffer func = flush1
    RpcRecvBuffer func = release
    

    Doing a manual move followed by reconcile does indeed sound like the best workaround if you have a lot of moved files and you want to avoid the download.