void (@NotNull Disposable disposable) { notifyUpdate(true); BackgroundTaskUtil.executeOnPooledThread(disposable, () -> { try { VcsHistorySession session = VcsCachingHistory.collectSession(myVcs, VcsUtil.getFilePath(myFile), null); synchronized (LOCK) { mySession = session; myRevisions.add(myLocalRevision); myRevisions.addAll(session.getRevisionList()); } notifyUpdate(true); // first block is loaded in constructor for (int index = 1; index < myRevisions.size(); index++) { ProgressManager.checkCanceled(); Block block = myBlocks.get(index - 1); VcsFileRevision revision = myRevisions.get(index); synchronized (LOCK) { myCurrentLoadingRevision = revision; } notifyUpdate(false); Block previousBlock = createBlock(block, revision); synchronized (LOCK) { myBlocks.add(previousBlock); } notifyUpdate(false); } } catch (VcsException e) { synchronized (LOCK) { myException = e; } notifyError(e); } finally { synchronized (LOCK) { myIsLoading = false; myCurrentLoadingRevision = null; } notifyUpdate(true); } }); }