/** {@inheritDoc} */ public void doConsume(ScmFileStatus status, String trimmedLine) { // Only include real files (not directories) File tmpFile = new File(workingDir, trimmedLine); if (!tmpFile.exists()) { if (getLogger().isInfoEnabled()) { getLogger().info("Not a file: " + tmpFile + ". Ignoring"); } } else if (tmpFile.isDirectory()) { if (getLogger().isInfoEnabled()) { getLogger().info("New directory added: " + tmpFile); } } else { ScmFile scmFile = new ScmFile(trimmedLine, status); if (getLogger().isInfoEnabled()) { getLogger().info(scmFile.toString()); } repositoryStatus.add(scmFile); } }
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; }