Example #1
0
  /** {@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;
  }