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;
}