Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 31856:0ab7f469d386
revlog: make "size" diverge from "rawsize"
Previously, revlog.size equals to revlog.rawsize. However, the flag
processor framework could make a difference - "size" could mean the length
of len(revision(raw=False)), while "rawsize" means len(revision(raw=True)).
This patch makes it so.
This corrects "hg status" output when flag processor is involved. The call
stack looks like:
basectx.status -> workingctx._buildstatus -> workingctx._dirstatestatus
-> workingctx._checklookup -> filectx.cmp -> filelog.cmp -> filelog.size
-> revlog.size
author | Jun Wu <quark@fb.com> |
---|---|
date | Sun, 09 Apr 2017 12:53:31 -0700 |
parents | 726f24123f02 |
children | 1395f843ece4 e9d325cfe071 |
comparison
equal
deleted
inserted
replaced
31855:a418c5837bc0 | 31856:0ab7f469d386 |
---|---|
444 if l >= 0: | 444 if l >= 0: |
445 return l | 445 return l |
446 | 446 |
447 t = self.revision(rev, raw=True) | 447 t = self.revision(rev, raw=True) |
448 return len(t) | 448 return len(t) |
449 size = rawsize | 449 |
450 def size(self, rev): | |
451 """length of non-raw text (processed by a "read" flag processor)""" | |
452 # fast path: if no "read" flag processor could change the content, | |
453 # size is rawsize. note: ELLIPSIS is known to not change the content. | |
454 flags = self.flags(rev) | |
455 if flags & (REVIDX_KNOWN_FLAGS ^ REVIDX_ELLIPSIS) == 0: | |
456 return self.rawsize(rev) | |
457 | |
458 return len(self.revision(rev, raw=False)) | |
450 | 459 |
451 def chainbase(self, rev): | 460 def chainbase(self, rev): |
452 base = self._chainbasecache.get(rev) | 461 base = self._chainbasecache.get(rev) |
453 if base is not None: | 462 if base is not None: |
454 return base | 463 return base |