void () { LOG.info("Started rebase"); LOG.debug("Started rebase with the following spec: " + myRebaseSpec); Map<GitRepository, GitRebaseStatus> statuses = new LinkedHashMap<>(myRebaseSpec.getStatuses()); List<GitRepository> repositoriesToRebase = myRepositoryManager.sortByDependency(myRebaseSpec.getIncompleteRepositories()); if (repositoriesToRebase.isEmpty()) { LOG.info("Nothing to rebase"); return; } try (AccessToken ignore = DvcsUtil.workingTreeChangeStarted(myProject, GitBundle.message("activity.name.rebase"))) { if (!saveDirtyRootsInitially(repositoriesToRebase)) return; GitRepository latestRepository = null; ProgressIndicator showingIndicator = myProgressManager.getProgressIndicator(); StepsProgressIndicator indicator = new StepsProgressIndicator( showingIndicator != null ? showingIndicator : new EmptyProgressIndicator(), repositoriesToRebase.size() ); indicator.setIndeterminate(false); for (GitRepository repository : repositoriesToRebase) { GitRebaseResumeMode customMode = null; if (repository == myRebaseSpec.getOngoingRebase()) { customMode = myCustomMode == null ? GitRebaseResumeMode.CONTINUE : myCustomMode; } Hash startHash = getHead(repository); GitRebaseStatus rebaseStatus = rebaseSingleRoot(repository, customMode, getSuccessfulRepositories(statuses), indicator); indicator.nextStep(); repository.update(); // make the repo state info actual ASAP if (customMode == GitRebaseResumeMode.CONTINUE) { myDirtyScopeManager.dirDirtyRecursively(repository.getRoot()); } latestRepository = repository; statuses.put(repository, rebaseStatus); refreshChangedVfs(repository, startHash); if (rebaseStatus.getType() != GitRebaseStatus.Type.SUCCESS) { break; } } GitRebaseStatus.Type latestStatus = statuses.get(latestRepository).getType(); if (latestStatus == GitRebaseStatus.Type.SUCCESS || latestStatus == GitRebaseStatus.Type.NOT_STARTED) { LOG.debug("Rebase completed successfully."); mySaver.load(); } if (latestStatus == GitRebaseStatus.Type.SUCCESS) { notifySuccess(); } saveUpdatedSpec(statuses); } catch (ProcessCanceledException pce) { throw pce; } catch(Throwable e) { myRepositoryManager.setOngoingRebaseSpec(null); ExceptionUtil.rethrowUnchecked(e); } }