protected @NotNull Supplier<GitLineHandler> getHandlerProvider(Project project, GitPullDialog dialog) {
    GitRemote remote = dialog.getSelectedRemote();
    String remoteName = remote.getName();

    VirtualFile root = dialog.gitRoot();
    Set<GitPullOption> selectedOptions = dialog.getSelectedOptions();
    GitRemoteBranch selectedBranch = dialog.getSelectedBranch();

    return () -> {
      final List<String> urls = remote.getUrls();

      GitLineHandler h = new GitLineHandler(project, root, GitCommand.PULL);
      h.setUrls(urls);
      h.addParameters("--no-stat");

      for (GitPullOption option : selectedOptions) {
        h.addParameters(option.getOption());
      }

      h.addParameters("-v");
      if (GitVersionSpecialty.ABLE_TO_USE_PROGRESS_IN_REMOTE_COMMANDS.existsIn(project)) {
        h.addParameters("--progress");
      }

      h.addParameters(remoteName);

      h.addParameters(selectedBranch.getNameForRemoteOperations());

      return h;
    };
  }
protected @NotNull Supplier<GitLineHandler> getHandlerProvider(Project project, GitPullDialog dialog)