On Wed, Nov 08, 2006 at 04:23:58PM +0100, Erik Huelsmann wrote:
> >> >SVN::Client::diff() is supposed to take (as part of its interface) two
> >file
> >> >handles, where the output and errors will be sent, respectively.
> >> >
> >> >If these are two file handles that correspond to files on disk then
> >> >everything works as expected.
> >> >
> >>
> >> This is not all that surprising. The diff functions don't take
> >> streams, they work in terms of apr_file_t, so they really do expect
> >> there to be an actual file on disk. The fix is to rewrite them to
> >> work in terms of streams (not trivial, IIRC), or work around it in
> >> either the bindings or in your application by writing that in-memory
> >> data to disk and passing in handles to those files to diff.
> >>
> >
> >I doubt that the diff code really needs the file to exist on disk,
> >though it probably does need it to be a seekable filehandle.
>
> As the diff code shares a lot of code with merge, that code *does*
> require a disk file, since it tries to mmap the files. I have never
> actually looked through the code thoroughly enough to determine
> necessity for merge, but in the presence of mmap, this requirement
> can't be lifted now.
>
Just to clarify: we're talking solely about the filehandles passed as
the output and error 'streams' for diff, not anything related to the
input files (which yes, need to be mmapable).
I doubt we need to mmap those filehandles :-)
Regards,
Malcolm
- application/pgp-signature attachment: stored
Received on Wed Nov 8 17:24:38 2006