linelog.pyx: fix copyfrom

Summary:
`copyfrom` does not work because `rhs.buf` is invisible to `self`. Adding
a `readonly` keyword fixes it. Also add some sanity checks and remove an
unnecessary `;`.

Test Plan: `make local` and confirm `copyfrom` works.

Reviewers: #mercurial, ttung, simonfar

Reviewed By: simonfar

Subscribers: simonfar, mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D3716444

Signature: t1:3716444:1471264420:1e58798222e1515ae6d5328ad6f2727cfe41cdb5
This commit is contained in:
Jun Wu 2016-08-15 12:43:44 +01:00
parent 3258b8586d
commit b30c3ad0e5

View File

@ -67,7 +67,7 @@ class LinelogError(Exception):
return self._messages.get(self.result, 'Unknown error %d' % self.result)
cdef class _buffer: # thin wrapper around linelog_buf
cdef linelog_buf buf;
cdef linelog_buf buf
def __cinit__(self):
memset(&self.buf, 0, sizeof(linelog_buf))
@ -82,7 +82,7 @@ cdef class _buffer: # thin wrapper around linelog_buf
pass
cdef copyfrom(self, _buffer rhs):
if rhs.buf.size == 0:
if rhs.buf.size == 0 or &rhs.buf == &self.buf:
return
if rhs.buf.size > self.buf.size:
self.resize(rhs.buf.size)
@ -232,7 +232,7 @@ cdef class linelog:
"""Python wrapper around linelog"""
cdef linelog_annotateresult ar
cdef _buffer buf
cdef readonly _buffer buf
cdef readonly bint closed
cdef readonly object path
@ -287,6 +287,7 @@ cdef class linelog:
Copy content from another linelog object."""
assert isinstance(rhs, linelog)
self._checkclosed()
self.buf.copyfrom(rhs.buf)
@property