void SVNClient::diff()

in subversion/bindings/javahl/native/SVNClient.cpp [1010:1095]


void SVNClient::diff(const char *target1, Revision &revision1,
                     const char *target2, Revision &revision2,
                     Revision *pegRevision, const char *relativeToDir,
                     OutputStream &outputStream, svn_depth_t depth,
                     StringArray &changelists,
                     bool ignoreAncestry, bool noDiffDelete, bool force,
                     bool showCopiesAsAdds, bool ignoreProps, bool propsOnly,
                     DiffOptions const& options)
{
    SVN::Pool subPool(pool);
    const char *c_relToDir = relativeToDir ?
      svn_dirent_canonicalize(relativeToDir, subPool.getPool()) :
      relativeToDir;
    bool noDiffAdded = false; /* ### Promote to argument */

    SVN_JNI_NULL_PTR_EX(target1, "target", );
    // target2 is ignored when pegRevision is provided.
    if (pegRevision == NULL)
        SVN_JNI_NULL_PTR_EX(target2, "target2", );

    svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
    if (ctx == NULL)
        return;

    Path path1(target1, subPool);
    SVN_JNI_ERR(path1.error_occurred(), );

    apr_array_header_t *diffOptions = options.optionsArray(subPool);

    if (pegRevision)
    {
        SVN_JNI_ERR(svn_client_diff_peg6(diffOptions,
                                   path1.c_str(),
                                   pegRevision->revision(),
                                   revision1.revision(),
                                   revision2.revision(),
                                   c_relToDir,
                                   depth,
                                   ignoreAncestry,
                                   noDiffAdded,
                                   noDiffDelete,
                                   showCopiesAsAdds,
                                   force,
                                   ignoreProps,
                                   propsOnly,
                                   options.useGitDiffFormat(),
                                   SVN_APR_LOCALE_CHARSET,
                                   outputStream.getStream(subPool),
                                   // Discard stderr; TODO: Update JavaHL API
                                   svn_stream_empty(subPool.getPool()),
                                   changelists.array(subPool),
                                   ctx,
                                   subPool.getPool()),
                    );
    }
    else
    {
        // "Regular" diff (without a peg revision).
        Path path2(target2, subPool);
        SVN_JNI_ERR(path2.error_occurred(), );

        SVN_JNI_ERR(svn_client_diff6(diffOptions,
                               path1.c_str(),
                               revision1.revision(),
                               path2.c_str(),
                               revision2.revision(),
                               c_relToDir,
                               depth,
                               ignoreAncestry,
                               noDiffAdded,
                               noDiffDelete,
                               showCopiesAsAdds,
                               force,
                               ignoreProps,
                               propsOnly,
                               options.useGitDiffFormat(),
                               SVN_APR_LOCALE_CHARSET,
                               outputStream.getStream(subPool),
                               // Discard stderr; TODO: Update JavaHL API
                               svn_stream_empty(subPool.getPool()),
                               changelists.array(subPool),
                               ctx,
                               subPool.getPool()),
                    );
    }
}