From patchwork Fri Jan 19 20:13:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D1909: cmdutil: add a kludge to make bytes repr() the same on 2 and 3 From: phabricator X-Patchwork-Id: 26978 Message-Id: <6d1297bbd2e76c3dcb55a3cea90e6a57@localhost.localdomain> To: mercurial-devel@mercurial-scm.org Date: Fri, 19 Jan 2018 20:13:04 +0000 durin42 updated this revision to Diff 4954. REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D1909?vs=4914&id=4954 REVISION DETAIL https://phab.mercurial-scm.org/D1909 AFFECTED FILES mercurial/cmdutil.py CHANGE DETAILS To: durin42, #hg-reviewers, yuja Cc: yuja, mercurial-devel diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -2077,6 +2077,19 @@ return changeset_templater(ui, repo, spec, match, opts, buffered) +class _regrettablereprbytes(bytes): + """Bytes subclass that makes the repr the same on Python 3 as Python 2. + + This is a huge hack. + """ + def __repr__(self): + return repr(pycompat.sysstr(self)) + +def _maybebytestr(v): + if pycompat.ispy3 and isinstance(v, bytes): + return _regrettablereprbytes(v) + return v + def showmarker(fm, marker, index=None): """utility function to display obsolescence marker in a readable way @@ -2095,7 +2108,8 @@ fm.write('date', '(%s) ', fm.formatdate(marker.date())) meta = marker.metadata().copy() meta.pop('date', None) - fm.write('metadata', '{%s}', fm.formatdict(meta, fmt='%r: %r', sep=', ')) + smeta = {_maybebytestr(k): _maybebytestr(v) for k, v in meta.iteritems()} + fm.write('metadata', '{%s}', fm.formatdict(smeta, fmt='%r: %r', sep=', ')) fm.plain('\n') def finddate(ui, repo, date):