/** {@inheritDoc} */ public List<String> validateScmUrl(String scmSpecificUrl, char delimiter) { List<String> errorMessages = new ArrayList<String>(); String[] checkCmd = new String[] {BazaarConstants.CHECK, scmSpecificUrl}; ScmResult result; try { File tmpDir = new File(System.getProperty("java.io.tmpdir")); result = BazaarUtils.execute(tmpDir, checkCmd); if (!result.isSuccess()) { errorMessages.add(result.getCommandOutput()); errorMessages.add(result.getProviderMessage()); } } catch (ScmException e) { errorMessages.add(e.getMessage()); } return errorMessages; }
public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects) throws ReleaseExecutionException, ReleaseFailureException { ReleaseResult relResult = new ReleaseResult(); List additionalExcludes = releaseDescriptor.getCheckModificationExcludes(); if (additionalExcludes != null) { for (int i1 = 0, additionalExcludesSize = additionalExcludes.size(); i1 < additionalExcludesSize; i1++) { // fail fast if it is not a string String exclude = (String) additionalExcludes.get(i1); excludedFiles.add(exclude); } } logInfo(relResult, "Verifying that there are no local modifications..."); logInfo(relResult, " ignoring changes on: " + StringUtils.join(excludedFiles, ", ")); ScmRepository repository; ScmProvider provider; try { repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings()); provider = scmRepositoryConfigurator.getRepositoryProvider(repository); } catch (ScmRepositoryException e) { throw new ReleaseScmRepositoryException( e.getMessage() + " for URL: " + releaseDescriptor.getScmSourceUrl(), e.getValidationMessages()); } catch (NoSuchScmProviderException e) { throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e); } StatusScmResult result; try { result = provider.status( repository, new ScmFileSet(new File(releaseDescriptor.getWorkingDirectory()))); } catch (ScmException e) { throw new ReleaseExecutionException( "An error occurred during the status check process: " + e.getMessage(), e); } if (!result.isSuccess()) { throw new ReleaseScmCommandException("Unable to check for local modifications", result); } List changedFiles = result.getChangedFiles(); // TODO: would be nice for SCM status command to do this for me. for (Iterator i = changedFiles.iterator(); i.hasNext(); ) { ScmFile f = (ScmFile) i.next(); String fileName = f.getPath().replace('\\', '/'); fileName = fileName.substring(fileName.lastIndexOf('/') + 1, fileName.length()); if (excludedFiles.contains(fileName)) { i.remove(); } } if (!changedFiles.isEmpty()) { StringBuffer message = new StringBuffer(); for (Iterator i = changedFiles.iterator(); i.hasNext(); ) { ScmFile file = (ScmFile) i.next(); message.append(file.toString()); message.append("\n"); } throw new ReleaseFailureException( "Cannot prepare the release because you have local modifications : \n" + message); } relResult.setResultCode(ReleaseResult.SUCCESS); return relResult; }