[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: vimdiff wrapper for diff-cmd not working with 1.8

From: Michael Schlottke <m.schlottke_at_aia.rwth-aachen.de>
Date: Wed, 19 Jun 2013 09:11:49 +0200

On Jun 19, 2013, at 01:58 , Philip Martin wrote:

> [cc to dev]
>
> Michael Schlottke <m.schlottke_at_aia.rwth-aachen.de> writes:
>
>> I just installed svn 1.8 on our cluster. Before, we used svn 1.7.9 and
>> a little vimdiff wrapper (taken, with a few changes, from
>> http://svnbook.red-bean.com/nightly/en/svn.advanced.externaldifftools.html#svn.advanced.externaldifftools.diff),
>> which worked like a charm when called as "svn diff
>> --diff-cmd=diffwrap.py filename". However, with svn 1.8 something
>> seems to have changed:
>>
>> The only lines I see after executing the command above are
>>
>>> Index: filename
>>> ===================================================================
>>
>> and the terminal hangs. When I enter ":qa!", I get the following line
>>
>>> Vim: Warning: Output is not to a terminal
>>
>> and I am back in the terminal. I have not changed anything in the
>> wrapper script, and indeed, when I manually use it with our old svn
>> version (1.7.9), it still works. Does anyone have an idea what has
>> changed in the way the diff-cmd is invoked? And, more importantly, how
>> I can change the vimdiff wrapper so it works again?
>
> I invoked vimdiff using a diff-cmd of:
>
> #!/bin/sh
> vimdiff $6 $7

That's the exact same command I used.

> this works with 1.7 but fails as you describe in 1.8.
>
> The cause is the conversion of diff to the stream API. The code in
> libsvn_client/diff.c:diff_content_changed now gets a Subversion stream
> rather than an APR file for output so it does:
>
> /* We deal in streams, but svn_io_run_diff2() deals in file handles,
> unfortunately, so we need to make these temporary files, and then
> copy the contents to our stream. */
> SVN_ERR(svn_io_open_unique_file3(&outfile, &outfilename, NULL,
> svn_io_file_del_on_pool_cleanup,
> scratch_pool, scratch_pool));
>
> and this use of a temporary file prevents the use of an external diff
> that expects a terminal.
>
> The only way I see to fix this is to stop using the stream API when the
> external diff command wants a terminal. I don't think it is possible to
> do this automatically, perhaps we need an --interactive-diff option?

Do you have an idea of how hard this is to achieve, or how long it would take to create a patch? I'd be happy to volunteer as a tester…
Or do you know of an interim hack that I could use until it is properly fixed?

We'd really love to use svn 1.8 (especially with the new merging capabilities), but this is a major hindrance.

Michael

--
Michael Schlottke
SimLab Highly Scalable Fluids & Solids Engineering
Jülich Aachen Research Alliance (JARA-HPC)
RWTH Aachen University
Wüllnerstraße 5a
52062 Aachen
Germany
Phone: +49 (241) 80 95188
Fax: +49 (241) 80 92257
Mail: m.schlottke_at_aia.rwth-aachen.de
Web: http://www.jara.org/jara-hpc

  • application/pkcs7-signature attachment: smime.p7s
Received on 2013-06-19 09:21:24 CEST

This is an archived mail posted to the Subversion Dev mailing list.