@NotNull
  private MultiMap<MergeCheckResult, String> checkPaths(@NotNull SvnChangeList list,
                                                        @NotNull String branchPath,
                                                        @NotNull Url underBranchUrl) {
    MultiMap<MergeCheckResult, String> result = MultiMap.create();
    String subPathUnderBranch = getRelativeUrl(myBranch.getUrl(), underBranchUrl);
    Url myTrunkUrlCorrespondingToLocalBranchPath = appendPath(myInfo.getCurrentBranch().getUrl(), subPathUnderBranch);

    for (String path : list.getAffectedPaths()) {
      Url url = appendPath(myInfo.getRepoUrl(), path);
      MergeCheckResult mergeCheckResult;

      if (!isAncestor(myTrunkUrlCorrespondingToLocalBranchPath, url)) {
        mergeCheckResult = MergeCheckResult.NOT_EXISTS;
      }
      else {
        String relativeToTrunkPath = getRelativeUrl(myTrunkUrlCorrespondingToLocalBranchPath, url);
        String localPathInBranch = new File(branchPath, relativeToTrunkPath).getAbsolutePath();

        try {
          mergeCheckResult = checkPathGoingUp(list.getNumber(), -1, branchPath, localPathInBranch, path, true);
        }
        catch (VcsException e) {
          LOG.info(e);
          mergeCheckResult = MergeCheckResult.NOT_MERGED;
        }
      }

      result.putValue(mergeCheckResult, path);

      // Do not check other paths if NOT_EXISTS result detected as in this case resulting status for whole change list will also be
      // NOT_EXISTS. And currently we're only interested in not merged paths for change lists with NOT_MERGED status.
      if (MergeCheckResult.NOT_EXISTS.equals(mergeCheckResult)) {
        break;
      }
    }

    return result;
  }
@NotNull
  private MultiMap<MergeCheckResult, String> checkPaths(@NotNull SvnChangeList list,
                                                        @NotNull String branchPath,
                                                        @NotNull Url underBranchUrl)