Subject: Re: What's cooking extra

From: Clemens Buchacher <[email-masked]>
Date: Tue, 25 May 2010 10:33:19 +0200

On Tue, May 25, 2010 at 08:41:14AM +0200, Eyvind Bernhardsen wrote:

> On 25. mai 2010, at 00.11, Clemens Buchacher wrote:
>
> > And once we normalized the file to LF, why don't we also checkout
> > that version, or at least mark it as dirty in the index, so a reset
> > --hard will fix it up?
> 
> I dunno.  Won't it be even more confusing that the file is still
> dirty after you add it?  The problem with converting it in the
> working directory when you add is that it loses information: if
> you didnt' want that file to be converted, there's no way to
> revert (this is very bad if it's a file that contained a mix of
> CRLF and LF).

I was trying to illustrate this with a test script, but after
playing with this some more, I noticed that this is not a problem
with your changes, since I can reproduce with git v1.7.0.5:

#!/bin/sh

cd $(mktemp -d)
git init
git config core.autocrlf input
echo -n 'hi\r\nbye\r\n' > file
git add file
git commit -m initial

# no output
git diff --name-status

sleep 1
touch file
# file dirty
git diff --name-status
# at this point, reset --hard would convert 'file' to LF in the
# work tree

git update-index file
# no output
git diff --name-status

The same behavior can be observed with the 'eol=lf' attribute,
before and after normalizing the file.

Regards,
Clemens

---
$ sh -x testcrlf2.sh
+ set -e
+ mktemp -d
+ cd /tmp/tmp.Smnx0U7IT1
+ git init
Initialized empty Git repository in /tmp/tmp.Smnx0U7IT1/.git/
+ git config core.autocrlf input
+ echo -n hi\r\nbye\r\n
+ git add file
warning: CRLF will be replaced by LF in file.
+ git commit -m initial
[master (root-commit) d3be96f] initial
warning: CRLF will be replaced by LF in file.
 1 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 file
+ git diff --name-status
+ sleep 1
+ touch file
+ git diff --name-status
M       file
+ git update-index file
warning: CRLF will be replaced by LF in file.
+ git diff --name-status