@Override
  @NotNull
  public MergeData loadRevisions(@NotNull final VirtualFile file) throws VcsException {
    final MergeData data = new MergeData();
    SvnVcs vcs = SvnVcs.getInstance(myProject);
    Info info = vcs.getInfo(file);

    if (info == null) {
      throw new VcsException(message("error.could.not.get.info.for.path", file.getPath()));
    }
    File oldFile = info.getConflictOldFile();
    File newFile = info.getConflictNewFile();
    File workingFile = info.getConflictWrkFile();
    boolean mergeCase = workingFile == null || workingFile.getName().contains(WORKING_MARKER);
    // for debug
    if (workingFile == null) {
      LOG
        .info("Null working file when merging text conflict for " + file.getPath() + " old file: " + oldFile + " new file: " + newFile);
    }
    if (mergeCase) {
      // this is merge case
      oldFile = info.getConflictNewFile();
      newFile = info.getConflictOldFile();
      workingFile = info.getConflictWrkFile();
    }
    data.LAST_REVISION_NUMBER = new SvnRevisionNumber(info.getRevision());
    if (oldFile == null || newFile == null || workingFile == null) {
      ByteArrayOutputStream bos = getBaseRevisionContents(vcs, file);
      data.ORIGINAL = bos.toByteArray();
      data.LAST = bos.toByteArray();
      data.CURRENT = readFile(virtualToIoFile(file));
    }
    else {
      data.ORIGINAL = readFile(oldFile);
      data.LAST = readFile(newFile);
      data.CURRENT = readFile(workingFile);
    }
    if (mergeCase) {
      final ByteArrayOutputStream contents = getBaseRevisionContents(vcs, file);
      if (!Arrays.equals(contents.toByteArray(), data.ORIGINAL)) {
        // swap base and server: another order of merge arguments
        byte[] original = data.ORIGINAL;
        data.ORIGINAL = data.LAST;
        data.LAST = original;
      }
    }
    return data;
  }
@Override
  @NotNull
  public MergeData loadRevisions(@NotNull final VirtualFile file)