[PATCH] Handle CR newline for diff
Hideya 'OhaC' OHASHI
ohachige at gmail.com
Tue Apr 1 05:20:58 CDT 2008
2008/3/28, OHASHI Hideya <ohachige at gmail.com>:
> # HG changeset patch
> # User OHASHI Hideya <ohachige at gmail.com>
> # Date 1206701660 -32400
> # Node ID 2f1acb5dc43d7291da4966d72b2089a75d2ed4fd
> # Parent 79ea07e9b5aea2e4376be93e77bd34eddca7ac54
> Handle CR newline for diff
>
> diff -r 79ea07e9b5ae -r 2f1acb5dc43d contrib/hgdiff
> --- a/contrib/hgdiff Fri Mar 28 18:45:28 2008 +0900
> +++ b/contrib/hgdiff Fri Mar 28 19:54:20 2008 +0900
> @@ -62,7 +62,9 @@
> showfunc=options.show_c_function,
> ignorews=options.ignore_all_space))
> for x in l:
> - if x[-1] != '\n':
> + if x[-1] == '\r':
> + x = x[:-1] + '\n'
> + elif x[-1] != '\n':
> x += "\n\ No newline at end of file\n"
> print x,
>
> diff -r 79ea07e9b5ae -r 2f1acb5dc43d mercurial/mdiff.py
> --- a/mercurial/mdiff.py Fri Mar 28 18:45:28 2008 +0900
> +++ b/mercurial/mdiff.py Fri Mar 28 19:54:20 2008 +0900
> @@ -9,7 +9,10 @@
>
> def splitnewlines(text):
> '''like str.splitlines, but only split on newlines.'''
> - lines = [l + '\n' for l in text.split('\n')]
> + delim = '\n'
> + if text.count(delim) < text.count('\r'):
> + delim = '\r'
> + lines = [l + '\n' for l in text.split(delim)]
> if lines:
> if lines[-1] == '\n':
> lines.pop()
> @@ -98,6 +101,10 @@
> else:
> al = splitnewlines(a)
> bl = splitnewlines(b)
> + if a.count('\n') < a.count('\r'):
> + a = a.replace('\r', '\n')
> + if b.count('\n') < b.count('\r'):
> + b = b.replace('\r', '\n')
> l = list(bunidiff(a, b, al, bl, "a/" + fn1, "b/" + fn2, opts=opts))
> if not l: return ""
> # difflib uses a space, rather than a tab
I want to handle CR newline files.
Because I'm still using Microware's OS-9/68K.
I'm not sure this patch is good or bad.
I'd like to hear your advise.
Some tests fails, but I think these fails are another issue.
http://www.selenic.com/mercurial/bts/issue1067
More information about the Mercurial-devel
mailing list