[PATCH 1 of 1] patch: generate .rej wihtout eol adaptation
Mads Kiilerich
mads at kiilerich.com
Thu Dec 2 07:06:48 CST 2010
On 12/02/2010 01:10 PM, Shun-ichi Goto wrote:
> # HG changeset patch
> # User Shun-ichi GOTO<shunichi.goto at gmail.com>
> # Date 1291291758 -32400
> # Node ID 28946a4e335acd72a8fbf308f9010ed786922539
> # Parent cec6140b0f3c8c00515dbf3589068d1e2d233fdf
> patch: generate .rej wihtout eol adaptation
>
> When patch.eol=auto and patch has CRLF content, filepatch generates
> incorrect .rej file having CRCRLF. This is because
> patchfile.write_rej() uses patchfile.writelines() which makes eol
> adaptation although self.rej data is not normalized.
>
> This changeset add optional boolean argument 'strict' to omit eol
> adaptation and use it for .rej generation.
>
> To reproduce this issue:
> 1. make taget file having CRLF line ending
> 2. make patch file having CRLF content line ending
> 3. prepare patch which would conflict
> 4. applying patch with option 'patch.eol=auto'
> 5. check .rej file has CRCRLF<= incorrect!
Could this reproducer description go into a test in the test suite?
/Mads
> diff -r cec6140b0f3c -r 28946a4e335a mercurial/patch.py
> --- a/mercurial/patch.py Thu Dec 02 18:14:04 2010 +0900
> +++ b/mercurial/patch.py Thu Dec 02 21:09:18 2010 +0900
> @@ -425,7 +425,7 @@
> finally:
> fp.close()
>
> - def writelines(self, fname, lines):
> + def writelines(self, fname, lines, strict=False):
> # Ensure supplied data ends in fname, being a regular file or
> # a symlink. cmdutil.updatedir will -too magically- take care
> # of setting it to the proper type afterwards.
> @@ -435,7 +435,9 @@
> else:
> fp = self.opener(fname, 'w')
> try:
> - if self.eolmode == 'auto':
> + if strict:
> + eol = None
> + elif self.eolmode == 'auto':
> eol = self.eol
> elif self.eolmode == 'crlf':
> eol = '\r\n'
> @@ -508,7 +510,7 @@
> if l[-1] != '\n':
> yield "\n\ No newline at end of file\n"
>
> - self.writelines(fname, rejlines())
> + self.writelines(fname, rejlines(), strict=True)
>
> def apply(self, h):
> if not h.complete():
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list