@NotNull
  private List<PushInfo> preparePushDetails() {
    List<PushInfo> allDetails = new ArrayList<>();

    for (MyRepoModel<Repository, PushSource, PushTarget> model : getSelectedRepoNode()) {
      PushTarget target = Objects.requireNonNull(model.getTarget());
      PushSpec<PushSource, PushTarget> pushSpec = new PushSpec<>(model.getSource(), target);

      List<VcsFullCommitDetails> loadedCommits = new ArrayList<>(model.getLoadedCommits());
      if (loadedCommits.isEmpty()) {
        //Note: loadCommits is cancellable - it tracks current thread's progress indicator under the hood!
        loadedCommits.addAll(loadCommits(model));
      }
      //sort commits in the time-ascending order
      Collections.reverse(loadedCommits);

      PushInfoImpl pushInfo = new PushInfoImpl(model.getRepository(), pushSpec, loadedCommits);
      allDetails.add(pushInfo);
    }
    return Collections.unmodifiableList(allDetails);
  }
@NotNull
  private List<PushInfo> preparePushDetails()