private @NotNull @Nls String getArrowTooltipText(int commit, @Nullable Integer row) {
    VcsShortCommitDetails details;
    if (row != null && row >= 0) {
      details = myTable.getModel().getCommitMetadata(row, true); // preload rows around the commit
    }
    else {
      details = myLogData.getMiniDetailsGetter().getCommitData(commit, Collections.singletonList(commit)); // preload just the commit
    }

    if (details instanceof LoadingDetails) {
      CommitId commitId = myLogData.getCommitId(commit);
      if (commitId != null) {
        if (myLogData.getRoots().size() > 1) {
          return VcsLogBundle.message("vcs.log.graph.arrow.tooltip.jump.to.hash.in.root", commitId.getHash().toShortString(),
                                      commitId.getRoot().getName());
        }
        return VcsLogBundle.message("vcs.log.graph.arrow.tooltip.jump.to.hash", commitId.getHash().toShortString());
      }
      return "";
    }
    else {
      long time = details.getAuthorTime();
      String shortenedSubject = StringUtil.shortenTextWithEllipsis(details.getSubject(), 50, 0, "...");
      String commitMessage = HtmlChunk.text("\"" + shortenedSubject + "\"").bold().toString();
      return VcsLogBundle.message("vcs.log.graph.arrow.tooltip.jump.to.subject.author.date.time",
                                  commitMessage,
                                  CommitPresentationUtil.getAuthorPresentation(details),
                                  DateFormatUtil.formatDate(time),
                                  DateFormatUtil.formatTime(time));
    }
  }
private @NotNull @Nls String getArrowTooltipText(int commit, @Nullable Integer row)