@Override
  public void doCheckout(@NotNull final Project project, @Nullable final Listener listener) {
    if (!GerritUtil.testGitExecutable(project)) {
      return;
    }
    BasicAction.saveAll();
    List<ProjectInfo> availableProjects = null;
    try {
      availableProjects = GerritUtil.getAvailableProjects(project);
    } catch (IOException e) {
      LOG.info(e);
      GerritUtil.notifyError(
          project,
          "Couldn't get the list of Gerrit repositories",
          GerritUtil.getErrorTextFromException(e));
    }
    if (availableProjects == null) {
      return;
    }
    Collections.sort(
        availableProjects,
        new Comparator<ProjectInfo>() {
          @Override
          public int compare(final ProjectInfo p1, final ProjectInfo p2) {
            return p1.getId().compareTo(p2.getId());
          }
        });

    final GitCloneDialog dialog = new GitCloneDialog(project);
    // Add predefined repositories to history
    for (int i = availableProjects.size() - 1; i >= 0; i--) {
      dialog.prependToHistory(
          GerritSettings.getInstance().getHost() + '/' + availableProjects.get(i).getId());
    }
    dialog.show();
    if (!dialog.isOK()) {
      return;
    }
    dialog.rememberSettings();
    final VirtualFile destinationParent =
        LocalFileSystem.getInstance().findFileByIoFile(new File(dialog.getParentDirectory()));
    if (destinationParent == null) {
      return;
    }
    final String sourceRepositoryURL = dialog.getSourceRepositoryURL();
    final String directoryName = dialog.getDirectoryName();
    final String parentDirectory = dialog.getParentDirectory();

    Git git = ServiceManager.getService(Git.class);
    GitCheckoutProvider.clone(
        project,
        git,
        listener,
        destinationParent,
        sourceRepositoryURL,
        directoryName,
        parentDirectory);
  }