static @NotNull VcsLogPathsIndex create(@NotNull StorageId.Directory storageId, @Nullable StorageLockContext storageLockContext,
                                          @NotNull VcsLogStorage storage, @NotNull Set<VirtualFile> roots,
                                          @NotNull PersistentHashMap<int[], int[]> renamesMap,
                                          boolean useDurableEnumerator, @NotNull VcsLogErrorHandler errorHandler,
                                          @NotNull Disposable disposableParent) throws IOException {
    Disposable disposable = Disposer.newDisposable(disposableParent);
    try {
      DurableDataEnumerator<LightFilePath> pathsEnumerator = createPathsEnumerator(roots, storageId, storageLockContext,
                                                                                   useDurableEnumerator);
      Disposer.register(disposable, () -> catchAndWarn(LOG, pathsEnumerator::close));

      PathIndexer pathsIndex = new PathIndexer(storage, pathsEnumerator, renamesMap,
                                               e -> errorHandler.handleError(VcsLogErrorHandler.Source.Index, e));
      return new VcsLogPathsIndex(storageId, storageLockContext, pathsIndex, errorHandler, disposable);
    }
    catch (Throwable t) {
      Disposer.dispose(disposable);
      throw t;
    }
  }
static @NotNull VcsLogPathsIndex create(@NotNull StorageId.Directory storageId, @Nullable StorageLockContext storageLockContext,
                                          @NotNull VcsLogStorage storage, @NotNull Set<VirtualFile> roots,
                                          @NotNull PersistentHashMap<int[], int[]> renamesMap,
                                          boolean useDurableEnumerator, @NotNull VcsLogErrorHandler errorHandler,
                                          @NotNull Disposable disposableParent)