@Override
  public Revision fetchLatestRevisionNumber() throws ScmException {
    if (LOG.isDebugEnabled()) {
      LOG.debug(
          "  Fetching latest revision number.\n    "
              + this.scmConnectionInfo
              + "\n    "
              + this.scmAccessInfo);
    }

    final ScmRepository repository = scmConnectionInfo.createRepository(scmManager);

    final ScmVersion remoteVersion = scmConnectionInfo.getRemoteVersion();
    if (remoteVersion != null && "git".equals(repository.getProvider())) {
      final Revision revision = scmAccessInfo.fetchRemoteGitVersion(repository, remoteVersion);
      return revision;
    } else {
      final ScmProvider provider = createScmProvider(repository);
      final ChangeLogScmResult result = scmAccessInfo.fetchChangeLog(repository, provider);

      if (result != null) {
        final ChangeLogSet changeLogSet = result.getChangeLog();
        final Revision revision = findEndVersion(changeLogSet);
        if (LOG.isDebugEnabled()) {
          LOG.debug("  Found revision '" + revision + "'.");
        }
        return revision;
      } else if (LOG.isDebugEnabled()) {
        LOG.debug("  No revision information found.");
      }
      return null;
    }
  }
  @Override
  public LocallyModifiedInfo containsModifications(final ScmFileSet fileSet) throws ScmException {
    if (LOG.isDebugEnabled()) {
      LOG.debug(
          "  Fetching modification information.\n    "
              + this.scmConnectionInfo
              + "\n    "
              + this.scmAccessInfo);
    }

    try {
      final ScmRepository repository = scmConnectionInfo.createRepository(scmManager);
      final ScmProvider provider = createScmProvider(repository);

      final ScmResultWrapper result = execute(fileSet, repository, provider);
      if (result.isSuccess()) {
        return createLocallyModifiedInfo(result);
      } else {
        final String message = result.toString();
        if (LOG.isDebugEnabled()) {
          LOG.debug(message);
        }

        throw new ScmException(message);
      }
    } catch (final org.apache.maven.scm.ScmException e) {
      throw new ScmException(e);
    }
  }
 private ScmResultWrapper execute(
     final ScmFileSet fileSet, final ScmRepository repository, final ScmProvider provider)
     throws org.apache.maven.scm.ScmException {
   final ScmVersion remoteVersion = scmConnectionInfo.getRemoteVersion();
   final ScmResultWrapper result;
   if (remoteVersion != null) {
     final ScmVersion localVersion = null;
     result =
         createScmDiffResultWrapper(
             provider.diff(repository, fileSet, remoteVersion, localVersion));
   } else {
     result = createScmStatusResultWrapper(provider.status(repository, fileSet));
   }
   return result;
 }