in clearcase-agent/src/jetbrains/buildServer/vcs/clearcase/agent/AbstractSourceProvider.java [195:242]
private CCSnapshotView create(AgentRunningBuild build, final VcsRoot root, final String buildViewTag, final File viewRoot) throws CCException {
final CCRegion ccRegion = new CCRegion();
//check there id already is any Server Storage Location for a view
boolean hasViewsStorageLocation = false;
for (CCStorage storage : ccRegion.getStorages()) {
if (CCStorage.View.equals(storage.getType())) {
hasViewsStorageLocation = true;
LOG.debug(String.format("create:: a \"Server Storage Location\" exists for a view")); //$NON-NLS-1$
break;
}
}
//try to find and use original view location as base
LOG.debug(String.format("create:: preparing target location for the snapshot view storage directory")); //$NON-NLS-1$
final String ccOriginalViewTag = getSourceViewTag(build, root);
LOG.debug(String.format("create:: found source view tag: \"%s\"", ccOriginalViewTag)); //$NON-NLS-1$
final CCSnapshotView ccOriginalView = Util.Finder.findView(ccRegion, ccOriginalViewTag);
if (ccOriginalView == null) {
throw new CCException(String.format(Messages.getString("AbstractSourceProvider.could_not_find_view_by_tag_error_message"), ccOriginalViewTag)); //$NON-NLS-1$
}
//obtain stream if required
final String ccOriginalStream = ccOriginalView.isUcm() ? ccOriginalView.getStream() : null;
//check there is any View's location and hope mkview -stgloc -auto will work properly
final CCSnapshotView clone;
if (hasViewsStorageLocation) {
clone = new CCSnapshotView(buildViewTag, ccOriginalStream, null, viewRoot);
} else {
//...construct
final String originalViewGlobalPath = ccOriginalView.getGlobalPath();
if(originalViewGlobalPath == null){
throw new CCException(String.format("Cannot create view: Global Path lost '%s'", ccOriginalView));
}
final File originalViewGlobalFolderLocation = new File(originalViewGlobalPath).getParentFile();
LOG.debug(String.format("create:: found Global Location of original view folder: \"%s\"", originalViewGlobalFolderLocation)); //$NON-NLS-1$
final File buildViewGlobalFolder = new File(originalViewGlobalFolderLocation, String.format("%s.vws", buildViewTag)); //$NON-NLS-1$
LOG.debug(String.format("create:: use \"%s\" Global Location folder for build view", buildViewGlobalFolder)); //$NON-NLS-1$
//let's go...
clone = new CCSnapshotView(buildViewTag, ccOriginalStream, buildViewGlobalFolder.getAbsolutePath(), viewRoot);
}
clone.create(String.format("Clone view \'%s\' created", buildViewTag)); //$NON-NLS-1$
return clone;
}