<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>encode/decode filter weirdness</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><FONT SIZE=2 FACE="Arial">Experimenting with encode/decode filters to convert CRLF &lt;-&gt; LF led to some behaviors I could not explain. The following was run under Linux using the 0.7 release of Mercurial.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">Starting with a fresh repository, hgrc set up to call my 'txt2unix' filter (turns CRLF into LF) and a file containing CRLFs:</FONT></P>

<P><FONT SIZE=2 FACE="Arial">[~/foo] cat .hg/hgrc</FONT>

<BR><FONT SIZE=2 FACE="Arial">[encode]</FONT>

<BR><FONT SIZE=2 FACE="Arial">*.txt = txt2unix</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] ls</FONT>

<BR><FONT SIZE=2 FACE="Arial">foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] od -a foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000000&nbsp;&nbsp; o&nbsp;&nbsp; n&nbsp;&nbsp; e&nbsp; cr&nbsp; nl&nbsp;&nbsp; t&nbsp;&nbsp; w&nbsp;&nbsp; o&nbsp; cr&nbsp; nl</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000012</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Now I commit the new file and check its contents:</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">[~/foo] hg addremove</FONT>

<BR><FONT SIZE=2 FACE="Arial">adding foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg commit -m &quot;test&quot;</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg status</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] od -a foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000000&nbsp;&nbsp; o&nbsp;&nbsp; n&nbsp;&nbsp; e&nbsp; cr&nbsp; nl&nbsp;&nbsp; t&nbsp;&nbsp; w&nbsp;&nbsp; o&nbsp; cr&nbsp; nl</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000012</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">So far no big surprises. foo.txt still contains the CRLFs, but the internal representation should be the canonical one with LFs. It might be nice for 'hg status' to tell us that the directory contents do not match what would be retrieved from the repository, but that is not a terribly big deal.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">Now let's try to extract the canonical representation from the repository by deleting the file and having it re-created:</FONT></P>

<P><FONT SIZE=2 FACE="Arial">[~/foo] rm foo.txt </FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg status</FONT>

<BR><FONT SIZE=2 FACE="Arial">R foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg revert</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg status</FONT>

<BR><FONT SIZE=2 FACE="Arial">M foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg diff</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] od -a foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000000&nbsp;&nbsp; o&nbsp;&nbsp; n&nbsp;&nbsp; e&nbsp; nl&nbsp;&nbsp; t&nbsp;&nbsp; w&nbsp;&nbsp; o&nbsp; nl</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000010</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">The file contents are as expected, but why is 'hg status' reporting the file as being modified? The only way to get rid of this seems to be 'hg update -C':</FONT></P>

<P><FONT SIZE=2 FACE="Arial">[~/foo] hg update</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg status</FONT>

<BR><FONT SIZE=2 FACE="Arial">M foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg update -C</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] hg status</FONT>

<BR><FONT SIZE=2 FACE="Arial">[~/foo] od -a foo.txt</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000000&nbsp;&nbsp; o&nbsp;&nbsp; n&nbsp;&nbsp; e&nbsp; nl&nbsp;&nbsp; t&nbsp;&nbsp; w&nbsp;&nbsp; o&nbsp; nl</FONT>

<BR><FONT SIZE=2 FACE="Arial">0000010</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">-- Olivier</FONT>
</P>

</BODY>
</HTML>