public class ClientSystemFileCommands
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
DEFAULT_TMPFILE_PFX |
static java.lang.String |
DEFAULT_TMPFILE_SFX |
static java.lang.String |
PERMS_RW |
protected static java.lang.String |
RECONCILE_HANDLER_SKIP_ADD_KEY |
static java.lang.String |
SYSTEM_TMPDIR_DEFAULT |
static java.lang.String |
SYSTEM_TMPDIR_PROPS_KEY |
static java.lang.String |
TRACE_PREFIX |
Modifier | Constructor and Description |
---|---|
protected |
ClientSystemFileCommands(java.util.Properties props,
RpcServer server,
ClientSystemFileMatchCommands fileMatchCommands) |
Modifier and Type | Method and Description |
---|---|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
checkFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
The infamous checkFile omnibus method, used to, well, check files
on the Perforce client side.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
checkFileGraph(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap) |
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
chmodFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Change the r/w (etc.) mode of a file locally.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
closeFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Close a file that was opened earlier for writing.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
convertFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap) |
java.util.Map<java.lang.String,java.lang.Object> |
convertFileDataMap(java.util.Map<java.lang.String,java.lang.Object> map,
java.nio.charset.Charset charset,
boolean isUnicodeServer) |
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
deleteFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap) |
RpcByteBufferOutput |
getBufferOutputStream(CommandEnv cmdEnv)
Return the temp RPC Byte Buffer output.
|
RpcOutputStream |
getTempOutputStream(CommandEnv cmdEnv)
Return the temp RPC output stream.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
moveFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Move a file from one location to another.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
openFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Open a client file for writing.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
writeBinary(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
A specialised method to handle the client-OutputBinary command.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
writeFile(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Write file contents to the target file.
|
protected RpcPacketDispatcher.RpcPacketDispatcherResult |
writeText(RpcConnection rpcConnection,
CommandEnv cmdEnv,
java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Handles the client-OutputText command.
|
public static final java.lang.String TRACE_PREFIX
public static final java.lang.String DEFAULT_TMPFILE_PFX
public static final java.lang.String DEFAULT_TMPFILE_SFX
public static final java.lang.String SYSTEM_TMPDIR_PROPS_KEY
public static final java.lang.String SYSTEM_TMPDIR_DEFAULT
public static final java.lang.String PERMS_RW
protected static final java.lang.String RECONCILE_HANDLER_SKIP_ADD_KEY
protected ClientSystemFileCommands(java.util.Properties props, RpcServer server, ClientSystemFileMatchCommands fileMatchCommands)
protected RpcPacketDispatcher.RpcPacketDispatcherResult chmodFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult openFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
We also have to leave the associated file descriptor (or channel equivalent) lying around for the rest of the function sequence to be able to pick up.
Note that we also now implement the 10.2 sync (etc.) transfer integrity checks; this is actually fairly easy as it can be done on the raw (un-translated) data coming in to the write methods (as opposed to checkFile's version, which has to consider the translated data). We do most of this work in the RpcOutputStream and RpcPerforceFile classes after setting things up here; closeFile does the final round up and delivers the verdict. This all only happens if Server.nonCheckedSyncs is false.
The temp file created here will be deleted in the subsequent closeFile() method call.
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult writeFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult writeText(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
Basically uses writeBinary (below) with the twist that we currently throw an exception when we see the trans option (which we haven't implemented yet).
Note that -- like the C++ API -- no line end munging is performed -- we just throw what's coming at us straight back to whoever's catching it...
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult writeBinary(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
Note that this method fakes a handler to keep state around, and assumes that the target (tmp) stream has been passed-in by the higher levels in the cmdEnv state map.
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult closeFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult moveFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult deleteFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
ConnectionException
protected RpcPacketDispatcher.RpcPacketDispatcherResult checkFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
Much of the work happens off-stage in the support methods elsewhere.
What follows is copied from the C++ API:
This routine, for compatibility purposes, has several modes.
1. If clientType is set, we know the type and we're checking to see if the file exists and (if digest is set) if the file has the same fingerprint. We return this in "status" with a value of "missing", "exists", or "same". This starts around version 1742.
2. If clientType is unset, we're looking for the type of the file, and we'll return it in "type". This is sort of overloaded, 'cause it can also get set with pseudo-types like "missing". In this case, we use the "xfiles" protocol check to make sure we don't return something the server doesn't expect.
- xfiles unset: return text, binary.
- xfiles >= 0: also return xtext, xbinary.
- xfiles >= 1: also return symlink.
- xfiles >= 2; also return resource (mac resource file).
- xfiles >= 3; also return ubinary
- xfiles >= 4; also return apple
If forceType is set, we'll use that in preference over what
we've discovered. We still check the file (to make sure they're
not adding a directory, and so they get to right warning if
they add an empty file), but we'll just override that back to
the (typemap's) forceType.
We map empty/missing/unreadable into forceType/"text".
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMapConnectionException
- on errorprotected RpcPacketDispatcher.RpcPacketDispatcherResult checkFileGraph(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
ConnectionException
protected RpcPacketDispatcher.RpcPacketDispatcherResult convertFile(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
ConnectionException
public RpcOutputStream getTempOutputStream(CommandEnv cmdEnv) throws ConnectionException
cmdEnv
- cmdEnvConnectionException
- on errorpublic RpcByteBufferOutput getBufferOutputStream(CommandEnv cmdEnv) throws ConnectionException
cmdEnv
- cmdEnvConnectionException
- on errorpublic java.util.Map<java.lang.String,java.lang.Object> convertFileDataMap(java.util.Map<java.lang.String,java.lang.Object> map, java.nio.charset.Charset charset, boolean isUnicodeServer)