Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_client/diff.c view on Meta::CPAN
mt2_binary = svn_mime_type_is_binary(mimetype2);
if (! diff_cmd_baton->force_binary && (mt1_binary || mt2_binary))
{
/* Print out the diff header. */
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
"Index: %s" APR_EOL_STR
SVN_DIFF__EQUAL_STRING APR_EOL_STR,
index_path));
/* ### Print git diff headers. */
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
_("Cannot display: file marked as a binary type.%s"),
APR_EOL_STR));
if (mt1_binary && !mt2_binary)
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = %s" APR_EOL_STR, mimetype1));
else if (mt2_binary && !mt1_binary)
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = %s" APR_EOL_STR, mimetype2));
else if (mt1_binary && mt2_binary)
{
if (strcmp(mimetype1, mimetype2) == 0)
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = %s" APR_EOL_STR,
mimetype1));
else
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
"svn:mime-type = (%s, %s)" APR_EOL_STR,
mimetype1, mimetype2));
}
/* Exit early. */
return SVN_NO_ERROR;
}
if (diff_cmd_baton->diff_cmd)
{
apr_file_t *outfile;
apr_file_t *errfile;
const char *outfilename;
const char *errfilename;
svn_stream_t *stream;
/* Print out the diff header. */
SVN_ERR(svn_stream_printf_from_utf8(outstream,
diff_cmd_baton->header_encoding, scratch_pool,
"Index: %s" APR_EOL_STR
SVN_DIFF__EQUAL_STRING APR_EOL_STR,
index_path));
/* ### Do we want to add git diff headers here too? I'd say no. The
* ### 'Index' and '===' line is something subversion has added. The rest
* ### is up to the external diff application. We may be dealing with
* ### a non-git compatible diff application.*/
/* We deal in streams, but svn_io_run_diff2() deals in file handles,
so we may need to make temporary files and then copy the contents
to our stream. */
outfile = svn_stream__aprfile(outstream);
if (outfile)
outfilename = NULL;
else
SVN_ERR(svn_io_open_unique_file3(&outfile, &outfilename, NULL,
svn_io_file_del_on_pool_cleanup,
scratch_pool, scratch_pool));
errfile = svn_stream__aprfile(errstream);
if (errfile)
errfilename = NULL;
else
SVN_ERR(svn_io_open_unique_file3(&errfile, &errfilename, NULL,
svn_io_file_del_on_pool_cleanup,
scratch_pool, scratch_pool));
SVN_ERR(svn_io_run_diff2(".",
diff_cmd_baton->options.for_external.argv,
diff_cmd_baton->options.for_external.argc,
label1, label2,
tmpfile1, tmpfile2,
&exitcode, outfile, errfile,
diff_cmd_baton->diff_cmd, scratch_pool));
/* Now, open and copy our files to our output streams. */
if (outfilename)
{
SVN_ERR(svn_io_file_close(outfile, scratch_pool));
SVN_ERR(svn_stream_open_readonly(&stream, outfilename,
scratch_pool, scratch_pool));
SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(outstream,
scratch_pool),
NULL, NULL, scratch_pool));
}
if (errfilename)
{
SVN_ERR(svn_io_file_close(errfile, scratch_pool));
SVN_ERR(svn_stream_open_readonly(&stream, errfilename,
scratch_pool, scratch_pool));
SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(errstream,
scratch_pool),
NULL, NULL, scratch_pool));
}
/* We have a printed a diff for this path, mark it as visited. */
*wrote_header = TRUE;
}
else /* use libsvn_diff to generate the diff */
{
svn_diff_t *diff;
SVN_ERR(svn_diff_file_diff_2(&diff, tmpfile1, tmpfile2,
diff_cmd_baton->options.for_internal,
( run in 0.369 second using v1.01-cache-2.11-cpan-483215c6ad5 )