Mercurial > hg
changeset 36510:0a7c59a4c835 stable
annotate: do not poorly split lines at CR (issue5798)
mdiff and lines(text) take only LF as a line separator, but str.splitlines()
breaks our assumption. Use mdiff.splitnewlines() consistently.
It's hard to read \r in tests, so \r is replaced with [CR]. I had to wrap
sed by a shell function to silence check-code warning.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 21 Feb 2018 21:14:05 +0900 |
parents | fb39f6a8a864 |
children | 0c14b3f23294 |
files | mercurial/context.py tests/test-annotate.t |
diffstat | 2 files changed, 34 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Fri Feb 23 17:57:04 2018 -0800 +++ b/mercurial/context.py Wed Feb 21 21:14:05 2018 +0900 @@ -1121,7 +1121,8 @@ hist[f] = curr del pcache[f] - return pycompat.ziplist(hist[base][0], hist[base][1].splitlines(True)) + lineattrs, text = hist[base] + return pycompat.ziplist(lineattrs, mdiff.splitnewlines(text)) def ancestors(self, followfirst=False): visit = {}
--- a/tests/test-annotate.t Fri Feb 23 17:57:04 2018 -0800 +++ b/tests/test-annotate.t Wed Feb 21 21:14:05 2018 +0900 @@ -895,6 +895,38 @@ $ cd .. +Annotate with orphaned CR (issue5798) +------------------------------------- + + $ hg init repo-cr + $ cd repo-cr + + $ substcr() { + > sed 's/\r/[CR]/g' + > } + + >>> with open('a', 'wb') as f: + ... f.write(b'0a\r0b\r\n0c\r0d\r\n0e\n0f\n0g') + $ hg ci -qAm0 + >>> with open('a', 'wb') as f: + ... f.write(b'0a\r0b\r\n1c\r1d\r\n0e\n1f\n0g') + $ hg ci -m1 + + $ hg annotate -r0 a | substcr + 0: 0a[CR]0b[CR] + 0: 0c[CR]0d[CR] + 0: 0e + 0: 0f + 0: 0g + $ hg annotate -r1 a | substcr + 0: 0a[CR]0b[CR] + 1: 1c[CR]1d[CR] + 0: 0e + 1: 1f + 0: 0g + + $ cd .. + Annotate with linkrev pointing to another branch ------------------------------------------------