private boolean doFirstCommitIfRequired()

in plugin/src/com/microsoft/alm/plugin/idea/git/ui/vcsimport/ImportPageModelImpl.java [381:450]


    private boolean doFirstCommitIfRequired(final Project project, final GitRepository localRepository,
                                            final VirtualFile rootVirtualFile, final ServerContext localContext,
                                            final ProgressIndicator indicator) {
        //Do first commit if there are no commits in the repository
        if (localRepository.isFresh()) {
            try {
                final ChangeListManager changeListManager = ChangeListManager.getInstance(project);
                final ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(project);
                final List<VirtualFile> trackedFiles = changeListManager.getAffectedFiles();
                final Collection<VirtualFile> untrackedFiles = ContainerUtil.filter(localRepository.getUntrackedFilesHolder().retrieveUntrackedFiles(),
                        new Condition<VirtualFile>() {
                            @Override
                            public boolean value(VirtualFile file) {
                                return !changeListManager.isIgnoredFile(file) && !vcsManager.isIgnored(file);
                            }
                        });
                trackedFiles.removeAll(untrackedFiles);

                final List<VirtualFile> allFiles = new ArrayList<VirtualFile>();
                allFiles.addAll(trackedFiles);
                allFiles.addAll(untrackedFiles);

                final List<VirtualFile> filesToCommit = new ArrayList<VirtualFile>();
                IdeaHelper.runOnUIThread(() -> {
                    Collection<VirtualFile> selectedFiles = IdeaFileSelector.getInstance().selectFiles(
                            project,
                            allFiles,
                            TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_SELECT_FILES),
                            VcsShowConfirmationOption.STATIC_SHOW_CONFIRMATION,
                            TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_SELECT_FILES_DIALOG_TITLE));
                    if (selectedFiles != null)
                        filesToCommit.addAll(selectedFiles);
                }, true, indicator.getModalityState());

                indicator.setText(TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_ADDING_FILES, project.getName()));
                GitFileUtils.addFiles(project, rootVirtualFile, filesToCommit);
                if (filesToCommit.size() > 0) {
                    final GitSimpleHandler hCommit = new GitSimpleHandler(project, rootVirtualFile, GitCommand.COMMIT);
                    hCommit.addParameters("-m", TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_ADDING_FILES, project.getName()));
                    GitHandlerUtil.runInCurrentThread(hCommit, null, true, TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_ADDING_FILES, project.getName()));
                    if (hCommit.getExitCode() != 0) {
                        //unable to commit
                        logger.error("doFirstCommitIfRequired: git commit failed for project: {}, repoRoot: {} with error: {}",
                                project.getName(), rootVirtualFile.getUrl(), hCommit.getStderr());
                        notifyImportError(project,
                                TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_ADDING_FILES_ERROR, project.getName(), hCommit.getStderr()));
                        return false;
                    }
                    VfsUtil.markDirtyAndRefresh(false, true, false, ArrayUtil.toObjectArray(filesToCommit, VirtualFile.class));
                    VcsFileUtil.markFilesDirty(project, getFilePaths(filesToCommit));
                } else {
                    logger.error("doFirstCommitIfRequired: No files to do first commit in project: {}, repoRoot: {}",
                            project.getName(), rootVirtualFile.getUrl());
                    notifyImportError(project,
                            TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_NO_SELECTED_FILES));
                    return false;
                }

            } catch (VcsException ve) {
                logger.error("doFirstCommitIfRequired: VcsException occurred when trying to do a commit on project: {}, repoRoot: {}",
                        project.getName(), rootVirtualFile.getUrl());
                logger.warn("doFirstCommitIfRequired", ve);

                notifyImportError(project,
                        TfPluginBundle.message(TfPluginBundle.KEY_IMPORT_ADDING_FILES_ERROR, project.getName(), ve.getMessage()));
                return false;
            }
        }
        return true;
    }