@Override public void afterSuccessfulReleaseVersionBuild() throws IOException, InterruptedException { AbstractBuildContext context = AbstractBuildContext.createContextFromMap(configuration); AbstractBuildContext.ReleaseManagementContext releaseManagementContext = context.releaseManagementContext; String labelChangeListId = configuration.get("repository.revision.number"); if (modifiedFilesForReleaseVersion) { log("Submitting release version changes"); labelChangeListId = currentChangeListId + ""; perforce.commitWorkingCopy(currentChangeListId, releaseManagementContext.getTagComment()); } else { safeRevertWorkingCopy(); currentChangeListId = perforce.getDefaultChangeListId(); } if (releaseManagementContext.isCreateVcsTag()) { log( "Creating label: '" + releaseManagementContext.getTagUrl() + "' with change list id: " + labelChangeListId); perforce.createTag( releaseManagementContext.getTagUrl(), releaseManagementContext.getTagComment(), labelChangeListId); tagCreated = true; } }
@Override public void afterDevelopmentVersionChange(boolean modified) throws IOException, InterruptedException { super.afterDevelopmentVersionChange(modified); AbstractBuildContext context = AbstractBuildContext.createContextFromMap(configuration); AbstractBuildContext.ReleaseManagementContext releaseManagementContext = context.releaseManagementContext; if (modified) { log("Submitting next development version changes"); perforce.commitWorkingCopy( currentChangeListId, releaseManagementContext.getNextDevelopmentComment()); } else { safeRevertWorkingCopy(); currentChangeListId = perforce.getDefaultChangeListId(); } }
private void safeDeleteLabel(String label) throws IOException { log("Deleting label '" + label + "'"); try { perforce.deleteLabel(label); } catch (Exception e) { log("Failed to delete label: " + e.getLocalizedMessage()); } }
private void safeRevertWorkingCopy() { log("Reverting local changes"); try { perforce.revertWorkingCopy(currentChangeListId); } catch (Exception e) { log("Failed to revert: " + e.getLocalizedMessage()); } }
@Override public void buildCompleted(BuildContext buildContext) throws IOException, InterruptedException { AbstractBuildContext context = AbstractBuildContext.createContextFromMap(configuration); CurrentBuildResult result = buildContext.getBuildResult(); if (!BuildState.SUCCESS.equals(result.getBuildState())) { safeRevertWorkingCopy(); if (tagCreated) { safeDeleteLabel(context.releaseManagementContext.getTagUrl()); } } else { log("Closing connection to perforce server"); perforce.closeConnection(); } }
@Override public void beforeDevelopmentVersionChange() throws IOException { currentChangeListId = perforce.getDefaultChangeListId(); }
@Override public void beforeReleaseVersionChange() throws IOException { currentChangeListId = perforce.createNewChangeList(); }
@Override public void prepare() throws IOException { perforce = new PerforceManager(context, repository, buildLogger); perforce.prepare(); }
@Override public void edit(File file) throws IOException, InterruptedException { log("Opening file: '" + file.getAbsolutePath() + "' for editing"); perforce.edit(currentChangeListId, file); }