private void validateDataAndReportError(@NotNull VirtualFile root,
                                          @NotNull Set<? extends VcsRef> allRefs,
                                          @NotNull List<? extends VcsCommitMetadata> sortedCommits,
                                          @NotNull DetailedLogData firstBlockSyncData,
                                          @NotNull Set<? extends VcsRef> manuallyReadBranches,
                                          @Nullable Set<String> currentTagNames,
                                          @Nullable DetailedLogData commitsFromTags) {
    runWithSpan(myTracer, ValidatingData.getName(), span -> {
      span.setAttribute("rootName", root.getName());

      Set<Hash> refs = ContainerUtil.map2Set(allRefs, VcsRef::getCommitHash);

      PermanentGraphImpl.newInstance(sortedCommits, new GraphColorGetterByNodeFactory<>((hash, integer) -> 0), (head1, head2) -> {
        if (!refs.contains(head1) || !refs.contains(head2)) {
          Attachment attachment = new Attachment("error-details.txt",
                                                 printErrorDetails(root, allRefs, sortedCommits, firstBlockSyncData,
                                                                   manuallyReadBranches, currentTagNames, commitsFromTags));
          LOG.error("GitLogProvider returned inconsistent data", attachment);
        }
        return 0;
      }, refs);
    });
  }
private void validateDataAndReportError(@NotNull VirtualFile root,
                                          @NotNull Set<? extends VcsRef> allRefs,
                                          @NotNull List<? extends VcsCommitMetadata> sortedCommits,
                                          @NotNull DetailedLogData firstBlockSyncData,
                                          @NotNull Set<? extends VcsRef> manuallyReadBranches,
                                          @Nullable Set<String> currentTagNames,
                                          @Nullable DetailedLogData commitsFromTags)