{
boolean needsReparenting = false;
boolean needsRelocation = false;
boolean needsHostUpdation = false;
final ArgumentListBuilder chwscmd = new ArgumentListBuilder();
chwscmd.add(accurevClientExePath);
chwscmd.add("chws");
Command.addServer(chwscmd, server);
chwscmd.add("-w");
chwscmd.add(_accurevWorkspace);
if (!localStream.equals(accurevWorkspace.getStream().getParent().getName())) {
listener.getLogger().println("Parent stream needs to be updated.");
needsReparenting = true;
chwscmd.add("-b");
chwscmd.add(localStream);
}
if (!accurevWorkspace.getHost().equals(remoteDetails.getHostName())) {
listener.getLogger().println("Host needs to be updated.");
needsHostUpdation = true;
chwscmd.add("-m");
chwscmd.add(remoteDetails.getHostName());
}
final String oldStorage = accurevWorkspace.getStorage()
.replace("/", remoteDetails.getFileSeparator())
.replace("\\", remoteDetails.getFileSeparator());
if (!oldStorage.equals(remoteDetails.getPath())) {
listener.getLogger().println("Storage needs to be updated.");
needsRelocation = true;
chwscmd.add("-l");
chwscmd.add(accurevWorkingSpace.getRemote());
}
//Depending on the above needs, determine the workflow
if(needsRelocation || needsHostUpdation){
listener.getLogger().println("Relocating workspace...");
if(needsHostUpdation){
listener.getLogger().println(" Old host: " + accurevWorkspace.getHost());
listener.getLogger().println(" New host: " + remoteDetails.getHostName());
}
if(needsRelocation){
listener.getLogger().println(" Old storage: " + oldStorage);
listener.getLogger().println(" New storage: " + remoteDetails.getPath());
}
if(needsReparenting){
listener.getLogger().println("Reparenting the workspace...");
listener.getLogger().println(" Old parent stream: " + accurevWorkspace.getStream().getParent().getName());
listener.getLogger().println(" New parent stream: " + localStream);
}
if (!AccurevLauncher.runCommand("Workspace relocation command", launcher, chwscmd, null,
scm.getOptionalLock(), accurevEnv, accurevWorkingSpace, listener, logger, true)) {
return false;
}
if(needsReparenting){
listener.getLogger().println("Reparenting successful.");
}
listener.getLogger().println("Relocation successful.");
//update -9 for workspace
listener.getLogger().println("Running update -9 to ensure the workspace is up to date transaction wise");
final ArgumentListBuilder updatecmd = new ArgumentListBuilder();
updatecmd.add(accurevClientExePath);
updatecmd.add("update");
Command.addServer(updatecmd, server);
updatecmd.add("-9");
if (!AccurevLauncher.runCommand("Workspace update -9 command", launcher, updatecmd, null,
scm.getOptionalLock(), accurevEnv, accurevWorkingSpace, listener, logger, true)) {
return false;
}
listener.getLogger().println("Update completed successfully.");
//pop -O -R .
// Now get that into local filesystem
PopulateCmd pop = new PopulateCmd();
if ( pop.populate(scm, launcher, listener, server, accurevClientExePath, null, true, "from workspace", accurevWorkingSpace, accurevEnv) ) {
_startDateOfPopulate = pop.get_startDateOfPopulate();
} else {
return false;
}
}else{
//if the backing stream is changed
if(needsReparenting){
listener.getLogger().println("Reparenting the workspace...");
if (!AccurevLauncher.runCommand("Workspace reparenting command", launcher, chwscmd, null,
scm.getOptionalLock(), accurevEnv, accurevWorkingSpace, listener, logger, true)) {
return false;
}
listener.getLogger().println("Reparenting successfull.");
}
//Run update on workspace
listener.getLogger().println("Running update on the workspace to make sure that it contains the correct version of each element");
final ArgumentListBuilder updatecmd = new ArgumentListBuilder();
updatecmd.add(accurevClientExePath);
updatecmd.add("update");
Command.addServer(updatecmd, server);
if (!AccurevLauncher.runCommand("Workspace update command", launcher, updatecmd, null,
scm.getOptionalLock(), accurevEnv, accurevWorkingSpace, listener, logger, true)) {
return false;
}