@Override
  public void updateOrRepair(boolean fullUpdate, MavenProgressIndicator progress, boolean explicit)
    throws MavenProcessCanceledException {
    StructuredIdeActivity activity = MavenIndexUsageCollector.INDEX_UPDATE.started(null);
    boolean isSuccess = false;
    try {
      indexUpdateLock.lock();

      MavenLog.LOG.debug("start update index " + this);
      final File newDataDir = createNewDataDir();
      final File newDataContextDir = getDataContextDir(newDataDir);
      final File currentDataContextDir = getCurrentDataContextDir();

      boolean reuseExistingContext = fullUpdate ?
                                     myKind != RepositoryKind.LOCAL && hasValidContext(currentDataContextDir) :
                                     hasValidContext(currentDataContextDir);

      fullUpdate = fullUpdate || !reuseExistingContext && myKind == RepositoryKind.LOCAL;

      if (reuseExistingContext) {
        try {
          FileUtil.copyDir(currentDataContextDir, newDataContextDir);
        }
        catch (IOException e) {
          throw new MavenIndexException(e);
        }
      }

      if (fullUpdate) {
        MavenIndexId mavenIndexId = getMavenIndexId(newDataContextDir, "update");
        try {
          updateNexusContext(mavenIndexId, progress, explicit);
        }
        finally {
          myNexusIndexer.releaseIndex(mavenIndexId);
        }
      }

      updateIndexData(progress, newDataDir, fullUpdate);

      isBroken = false;
      myFailureMessage = null;

      MavenLog.LOG.debug("finish update index " + this);
      isSuccess = true;
    }
    catch (MavenProcessCanceledException e) {
      throw e;
    }
    catch (Exception e) {
      handleUpdateException(e);
    }
    finally {
      boolean isCentral = isForCentral();
      boolean finalIsSuccess = isSuccess;
      activity.finished(() ->
                          Arrays.asList(
                            MavenIndexUsageCollector.IS_LOCAL.with(myKind == RepositoryKind.LOCAL),
                            MavenIndexUsageCollector.IS_CENTRAL.with(myKind == RepositoryKind.REMOTE && isCentral),
                            MavenIndexUsageCollector.IS_PRIVATE_REMOTE.with(myKind == RepositoryKind.REMOTE && !isCentral),
                            MavenIndexUsageCollector.IS_SUCCESS.with(finalIsSuccess),
                            MavenIndexUsageCollector.MANUAL.with(explicit)
                          )
      );
      indexUpdateLock.unlock();
    }

    save();
  }
@Override
  public void updateOrRepair(boolean fullUpdate, MavenProgressIndicator progress, boolean explicit)