Subject: Re: Pserver on cygwin corrupts binary files
From: Alejandro Lopez-Valencia <[email-masked]>
To: [email-masked]
Date: Tue, 17 Feb 2004 18:16:05 -0500

On Tue, 17 Feb 2004 12:49:50 -0600, Chuck Irvine wrote in
<00d601c3f586$d59e25c0$6500a8c0@Ray>:

Hi Chuck,

[in answer to something I wrote irately before my morning coffee you
wrote]

>I don't believe that this is my problem. I'm having this problem with
>jar files and I do have "*.jar -k 'b'" among other entries in my
>cvswrappers file. Also, if this were the problem, I would expect to have
>the same problem when going through cvs locally, but cvs local mode
>works fine. The problem is just with pserver.

Exactly my point. See below, as I said:

>>Furthermore, using textmode mounts in cygwin main filesystem structure 
>>is asking for trouble.

Because when using textmode, cygwin changes the semantics of I/O
functions in the underlying C runtime. It does (and forces) EOL
conversion on all files read and written to the filesystem as well as
*sockets* and *pipes* for all applications compiled with the runtime.
Of course, CVS will honor the sticky binary setting if both server and
client are in the same filesystem because they have the same
underlying I/O settings, but over a network things can and will turn
sour, as you have experienced yourself already. If the remote server
is straight (Unix[-like]), it means that the cygwin-based client is
not honoring the binary flags sent by the server over the wire. Could
be considered a bug in the runtime, but I've seen so much botched I/O
code in Unix applications (particularly from those who have cut their
programming teeth with Linux!) that this would need a full forensic
enquiry.

>I used to use binary mode but I like to access my cvs workspace both
>from the command line and using the built in client in my IDE
>(NetBeans). I've been using textmode mounts for a very long time (3
>years) without any difficulties.

I think there are parsimonous solutions. One the one hand. Use a win32
CVS client with NetBeans (the CVS project always makes available a
win32 binary with client code enabled, see further down for more
sugestions) and keep your repository in a server with a cygwin
installed in a binmode filesystem.

On the other hand. Ask yourself if Cygwin is really for you. Risking
being completely wrong, I guess you use Cygwin because it has a CVS
client? In such case, I encourage you to explore CVSNT
(http://www.cvsnt.org/), a full win32 CVS client/server application
forked from CVS several years ago. You can run your CVS server and
clients in native win32 mode, with no EOL conversion nor file
permision problems whatsoever as long as your server and clients data
are on NTFS. Other projects that come to my mind that use CVSNT are
WinCVS (http://www.cvsgui.org/ or whatever it is now, project at
SourceForge) and TortoiseCVS (also a project at SourceForge, just use
Google). The latter integrates CVS into the Windows Explorer and makes
managing repositories and checkout directories as simple as pie.

IMO, cvs under cygwin has its usefulness as long as you are managing
your project Unix-style, and NetBeans is anything but Unix-style.

Cheers

Alejo

PS. As I am not one of the regulars, I can afford not to write a jaded
answer (yet :-).

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/