@Nullable
  @Override
  public PropertyValue getProperty(@NotNull Target target,
                                   @NotNull String property,
                                   boolean revisionProperty,
                                   @Nullable Revision revision)
    throws SvnBindException {
    List<String> parameters = new ArrayList<>();

    parameters.add(property);
    if (!revisionProperty) {
      CommandUtil.put(parameters, target);
      CommandUtil.put(parameters, revision);
    } else {
      // currently revision properties are returned only for file targets
      assertFile(target);

      // "svn propget --revprop" treats '@' symbol at file path end as part of the path - so here we manually omit adding '@' at the end
      CommandUtil.put(parameters, target, false);
      parameters.add("--revprop");
      CommandUtil.put(parameters, resolveRevisionNumber(target.getFile(), revision));
    }
    // always use --xml option here - this allows to determine if property exists with empty value or property does not exist, which
    // is critical for some parts of merge logic
    parameters.add("--xml");

    PropertyData data = null;

    try {
      CommandExecutor command = execute(myVcs, target, SvnCommandName.propget, parameters, null);
      data = parseSingleProperty(target, command);
    }
    catch (SvnBindException e) {
      if (!isPropertyNotFoundError(e)) {
        throw e;
      }
    }

    return data != null ? data.getValue() : null;
  }
@Nullable
  @Override
  public PropertyValue getProperty(@NotNull Target target,
                                   @NotNull String property,
                                   boolean revisionProperty,
                                   @Nullable Revision revision)