@Nullable
  public CommittedChangeListsListener createRefresher(final boolean ignoreEnabled) {
    if (refreshEnabled(ignoreEnabled)) {
      // on awt thread
      final MergeinfoCached state =
          myMergeInfoCache.getCachedState(myRootGetter.get(), myWcPathGetter.get());
      myCachedMap.put(
          createKey(myRootGetter.get(), myBranchGetter.get()),
          (state == null)
              ? new MergeinfoCached()
              : new MergeinfoCached(
                  new HashMap<Long, SvnMergeInfoCache17.MergeCheckResult>(state.getMap()),
                  state.getCopyRevision()));
      myMergeInfoCache.clear(myRootGetter.get(), myWcPathGetter.get());

      return new MyRefresher();
    }
    return null;
  }
  public MergeInfoHolder(
      final Project project,
      final DecoratorManager manager,
      final Getter<WCInfoWithBranches> rootGetter,
      final Getter<WCInfoWithBranches.Branch> branchGetter,
      final Getter<String> wcPathGetter,
      Getter<Boolean> enabledHolder,
      final Consumer<Boolean> mixedRevisionsConsumer) {
    myRootGetter = rootGetter;
    myBranchGetter = branchGetter;
    myWcPathGetter = wcPathGetter;
    myEnabledHolder = enabledHolder;
    myManager = manager;
    myMixedRevisionsConsumer = mixedRevisionsConsumer;
    myMergeInfoCache = SvnMergeInfoCache17.getInstance(project);
    myCachedMap = new HashMap<Pair<String, String>, MergeinfoCached>();

    myDecorator = new MyDecorator();
  }
 public void updateMixedRevisionsForPanel() {
   myMixedRevisionsConsumer.consume(
       myMergeInfoCache.isMixedRevisions(myRootGetter.get(), myWcPathGetter.get()));
 }