On Wed, Jan 25, 2012 at 7:26 AM, Ryan Schmidt
<subversion-20...@ryandesign.com> wrote:
> I apologize in advance if the below reply is snarky, but I'm a little tired 
> of this particular topic; it has been talked to death already long ago.
>
> On Jan 24, 2012, at 19:24, Nico Kadel-Garcia wrote:
>
>> The big booby trap I notice with all Windows/Subversion use is the 
>> understandable desire to use "native" end-of-line characters to swap text 
>> files gracefully between Linux, Windows, and MacOS. Don't do that: it can 
>> bite you *VERY* hard if you access the same network filesystem, such as a 
>> CIFS share, from each of those operating systems or with CygWin on Windows.
>
> Nico, I know you have a strong opinion about the svn:eol-style property, 
> specifically that it should never be used, and you love voicing this opinion 
> in as many threads on this mailing list as possible, regardless of whether it 
> is relevant to the thread or not. I'll respond yet again, in a different form 
> that is perhaps more effective in explaining my views:
>
> There are several kinds of files you might have in your repository:
>
> 1. Binary files, such as images, sounds, videos, compiled programs, 
> compressed archives, spreadsheets, presentations, some word processing 
> documents, etc. Setting svn:eol-style to any value on these files would 
> likely corrupt them, so svn:eol-style should not be set on these kinds of 
> files.
>
> 2. Text files where you want some lines to have LF line endings and other 
> lines to have CRLF line endings. I hope there is agreement that nobody ever 
> wants these kinds of files, yet this is exactly the kind of file you will get 
> if you do not set svn:eol-style, and you have several different people 
> editing the files, on different platforms, using different editors. That was 
> my actual experience at the last company I worked for. The specific problem 
> editor in our case was UltraEdit on Windows, which happened to be the editor 
> my company had paid for, so it was the one most of our developers were using. 
> Unless you set four separate settings in its options window to four specific 
> non-default values (which you had to wade through a hundred other options to 
> find), it had very strange ideas about how line endings should be handled. 
> (It preserved the existing line ending style for lines you did not edit, but 
> used CRLF line endings for any lines you did edit.) Therefore, I recommend 
> you always set the svn:eol-style property of text files to some value. What 
> value? Read on.
>
> 3. Text files where you want line endings to always be LF regardless of 
> platform. In this case, set svn:eol-style to LF. The Subversion client 
> transforms the file's line endings to LF before commit, and when you check 
> out, gives you a file with LF line endings. If you or your broken editor 
> somehow transform some of the file's lines to CRLF line ending, the 
> Subversion client* will prevent you from committing that broken text file 
> back to the repository until you fix the broken line endings so that they are 
> consistent. Hooray. Note that there is no problem if you or your editor 
> convert the *entire* file to a different line ending style before committing; 
> Subversion will seamlessly convert it back to the line ending style indicated 
> in the svn:eol-style property.
>
> 4. Text files where you want line endings to always be CRLF regardless of 
> platform. In this case, set svn:eol-style to CRLF. In the same spirit as (3) 
> above, the Subversion client* will ensure the file in the repository has only 
> CRLF line endings.
>
> 5. Text files where you want line endings to be CRLF if checked out with a 
> native Windows client, and LF otherwise. In this case, set svn:eol-style to 
> native. Subversion will store the file in the repository with LF line 
> endings. When checking out on native Windows, it will convert the line 
> endings from LF to CRLF, and on commit, will convert back to LF. On 
> non-Windows systems (including cygwin, I believe), the files will be checked 
> out and committed in their unconverted state using LF line endings. Yes, you 
> will run into problems if you share a working copy between native Windows and 
> non-Windows (including cygwin IIRC) environments. Rather than state that 
> svn:eol-style should therefore never be used, or should never be set to 
> native, you should instead stop sharing working copies. If you cannot give 
> that up, then yes, in your specific unusual case, setting svn:eol-style to 
> native might not be a good idea. Do not however condemn the use of 
> svn:eol-style native for everyone, nor the use of svn:eol-style in general.
>
> I manage a repository of web site code. It contains HTML web pages, CSS 
> stylesheets, JavaScript code, Markdown-formatted documentation. On my Mac I 
> prefer these files to have LF line endings, because if I want to use UNIX 
> command line tools on these files, they work best with LF line endings, and 
> GUI editors on OS X default to LF line endings too. I assume Windows users 
> would prefer them to have CRLF line endings, because that's what Notepad and 
> probably other Windows editors work best with. Therefore these files all have 
> svn:eol-style set to native. Anybody checking out the repository will get 
> text files with a line ending style appropriate to the environment they 
> checked out to, and everybody is happy.
>

Nice summary, thanks.

> * The caveat is that it is the Subversion *client* that performs the line 
> ending translation and verification; last I checked, the server does not 
> verify that the client has submitted data that conforms to the file's stated 
> svn:eol-style. It is therefore possible for a broken Subversion client to 
> commit the wrong line endings. An example of a broken Subversion client is 
> git-svn. You can work around this by writing a pre-commit hook. IIRC last 
> time this was brought up somebody said the server should be fixed to detect 
> this itself; I don't know if this has happened.
>

No, this has not been addressed yet. There is a feature request in the
issue tracker:

    http://subversion.tigris.org/issues/show_bug.cgi?id=4065 (server
should enforce LF normalization for svn:eol-style=native files)

but I don't think anyone is actively working on it.

BTW, if anything should be done to the documentation, maybe simply a
warning that svn:eol-style=native should not be used when a working
copy is shared between different platforms (because of the changing
definition of what "native" means).

-- 
Johan

Reply via email to