Class ClientMerge
- java.lang.Object
-
- com.perforce.p4java.impl.mapbased.rpc.func.client.ClientMerge
-
public class ClientMerge extends java.lang.Object
Support methods for the RPC merge protocols. Will grow as we implement more types of merge; current version is very bare bones and oriented solely at non-interactive three-way merges of text files.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ClientMerge.ResolveChoice
Possible choices available to a merge / resolve; should be fairly self-explanatory.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
DEFAULT_TMPFILE_PFX
static java.lang.String
DEFAULT_TMPFILE_SFX
static java.lang.String
MARKER_BOTH
static java.lang.String
MARKER_END
static java.lang.String
MARKER_ORIGINAL
static java.lang.String
MARKER_THEIRS
static java.lang.String
MARKER_YOURS
protected static java.lang.String
MERGE_BASE_TMP_FILE_KEY
protected static java.lang.String
MERGE_BASE_TMP_STREAM_KEY
protected static java.lang.String
MERGE_STATE_KEY
protected static java.lang.String
MERGE_THEIRS_TMP_FILE_KEY
protected static java.lang.String
MERGE_THEIRS_TMP_STREAM_KEY
protected static java.lang.String
MERGE_YOURS_TMP_FILE_KEY
protected static java.lang.String
MERGE_YOURS_TMP_STREAM_KEY
static java.lang.String
SYSTEM_TMPDIR_DEFAULT
static java.lang.String
SYSTEM_TMPDIR_PROPS_KEY
static java.lang.String
TRACE_PREFIX
-
Constructor Summary
Constructors Constructor Description ClientMerge(java.util.Properties props)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected RpcPacketDispatcher.RpcPacketDispatcherResult
clientCloseMerge(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Close the merge write (above) and act on the results.protected RpcPacketDispatcher.RpcPacketDispatcherResult
clientOpenMerge3(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap, boolean twoWayMerge)
Implement a non-interactive version of the three-way client-side merge.protected RpcPacketDispatcher.RpcPacketDispatcherResult
clientWriteMerge(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap)
Write merge data to the client if necessary.
-
-
-
Field Detail
-
MARKER_ORIGINAL
public static final java.lang.String MARKER_ORIGINAL
- See Also:
- Constant Field Values
-
MARKER_THEIRS
public static final java.lang.String MARKER_THEIRS
- See Also:
- Constant Field Values
-
MARKER_YOURS
public static final java.lang.String MARKER_YOURS
- See Also:
- Constant Field Values
-
MARKER_BOTH
public static final java.lang.String MARKER_BOTH
- See Also:
- Constant Field Values
-
MARKER_END
public static final java.lang.String MARKER_END
- See Also:
- Constant Field Values
-
DEFAULT_TMPFILE_PFX
public static final java.lang.String DEFAULT_TMPFILE_PFX
- See Also:
- Constant Field Values
-
DEFAULT_TMPFILE_SFX
public static final java.lang.String DEFAULT_TMPFILE_SFX
- See Also:
- Constant Field Values
-
SYSTEM_TMPDIR_PROPS_KEY
public static final java.lang.String SYSTEM_TMPDIR_PROPS_KEY
- See Also:
- Constant Field Values
-
SYSTEM_TMPDIR_DEFAULT
public static final java.lang.String SYSTEM_TMPDIR_DEFAULT
- See Also:
- Constant Field Values
-
TRACE_PREFIX
public static final java.lang.String TRACE_PREFIX
- See Also:
- Constant Field Values
-
MERGE_STATE_KEY
protected static final java.lang.String MERGE_STATE_KEY
- See Also:
- Constant Field Values
-
MERGE_BASE_TMP_FILE_KEY
protected static final java.lang.String MERGE_BASE_TMP_FILE_KEY
- See Also:
- Constant Field Values
-
MERGE_BASE_TMP_STREAM_KEY
protected static final java.lang.String MERGE_BASE_TMP_STREAM_KEY
- See Also:
- Constant Field Values
-
MERGE_THEIRS_TMP_FILE_KEY
protected static final java.lang.String MERGE_THEIRS_TMP_FILE_KEY
- See Also:
- Constant Field Values
-
MERGE_THEIRS_TMP_STREAM_KEY
protected static final java.lang.String MERGE_THEIRS_TMP_STREAM_KEY
- See Also:
- Constant Field Values
-
MERGE_YOURS_TMP_FILE_KEY
protected static final java.lang.String MERGE_YOURS_TMP_FILE_KEY
- See Also:
- Constant Field Values
-
MERGE_YOURS_TMP_STREAM_KEY
protected static final java.lang.String MERGE_YOURS_TMP_STREAM_KEY
- See Also:
- Constant Field Values
-
-
Method Detail
-
clientOpenMerge3
protected RpcPacketDispatcher.RpcPacketDispatcherResult clientOpenMerge3(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap, boolean twoWayMerge) throws ConnectionException
Implement a non-interactive version of the three-way client-side merge.- Parameters:
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMaptwoWayMerge
- twoWayMerge- Returns:
- RpcPacketDispatcherResult
- Throws:
ConnectionException
- on error
-
clientWriteMerge
protected RpcPacketDispatcher.RpcPacketDispatcherResult clientWriteMerge(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
Write merge data to the client if necessary.For the external stream merge case, this is a no op, but for the normal three-way merge case, we not only need to write the relevant files, but we also need to keep track of the differences so we can determine whether an automatic and / or safe merge is even possible. This determination is done in clientCloseMerge using chunk difference counts as supplied by the server in the bits parameter.
For the two-way merge, all we really need to do is write the "their" file and keep digesting under the covers...
- Parameters:
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMap- Returns:
- RpcPacketDispatcherResult
- Throws:
ConnectionException
- on error
-
clientCloseMerge
protected RpcPacketDispatcher.RpcPacketDispatcherResult clientCloseMerge(RpcConnection rpcConnection, CommandEnv cmdEnv, java.util.Map<java.lang.String,java.lang.Object> resultsMap) throws ConnectionException
Close the merge write (above) and act on the results. The actions needed here depend on whether we're doing a merge from external stream or a safe auto merge.- Parameters:
rpcConnection
- rpcConnectioncmdEnv
- cmdEnvresultsMap
- resultsMap- Returns:
- RpcPacketDispatcherResult
- Throws:
ConnectionException
- on error
-
-