# HG changeset patch # User Mike Edgar # Date 1410741154 14400 # Node ID 58ec36686f0e8a5f419658bae219a63af5345b5c # Parent 27e2317efe89f995b14d1521c476e5d6cc1ee49b filelog: censored files compare against empty data, have 0 size To support "status" operations against working directories that are the children of censored revisions, filelog must define "cmp" and "size" for censored content. diff -r 27e2317efe89 -r 58ec36686f0e mercurial/filelog.py --- a/mercurial/filelog.py Wed Sep 03 22:14:20 2014 -0400 +++ b/mercurial/filelog.py Sun Sep 14 20:32:34 2014 -0400 @@ -64,6 +64,8 @@ node = self.node(rev) if self.renamed(node): return len(self.read(node)) + if self._iscensored(rev): + return 0 # XXX if self.read(node).startswith("\1\n"), this returns (size+4) return super(filelog, self).size(rev) @@ -82,6 +84,10 @@ if samehashes: return False + # censored files compare against the empty file + if self._iscensored(node): + return text != '' + # renaming a file produces a different hash, even if the data # remains unchanged. Check if it's the case (slow): if self.renamed(node): @@ -100,3 +106,11 @@ def _file(self, f): return filelog(self.opener, f) + + def _iscensored(self, revornode): + """Check if a file revision is censored.""" + try: + self.revision(revornode) + return False + except error.CensoredNodeError: + return True