[PATCH 4 of 4] changelog: lazy decode user (API)
Martin von Zweigbergk
martinvonz at google.com
Mon Feb 29 06:00:14 UTC 2016
On Sun, Feb 28, 2016 at 9:26 AM, Gregory Szorc <gregory.szorc at gmail.com> wrote:
> They are actually a bit more expensive!
I thought so...
> I wanted to test the waters around
> refactoring the parsing logic before I wrote the more complicated patches :)
... but that explains it. The series looks good to me, but seems like
something Matt (on CC) might have more opinion about.
>
> On Feb 28, 2016, at 07:58, Martin von Zweigbergk <martinvonz at google.com>
> wrote:
>
> How about timestamp+extras? I would think most callers don't need those
> either. Are they cheaper to decode/parse?
>
> On Sat, Feb 27, 2016, 23:27 Gregory Szorc <gregory.szorc at gmail.com> wrote:
>>
>> # HG changeset patch
>> # User Gregory Szorc <gregory.szorc at gmail.com>
>> # Date 1456641258 28800
>> # Sat Feb 27 22:34:18 2016 -0800
>> # Node ID ee98b780730118e8a8948396507633a0460c154e
>> # Parent 8427442ba08dd8dc324ea9e1fd30f65c89b2b753
>> changelog: lazy decode user (API)
>>
>> This appears to show a similar speedup as the previous patch.
>>
>> diff --git a/mercurial/changelog.py b/mercurial/changelog.py
>> --- a/mercurial/changelog.py
>> +++ b/mercurial/changelog.py
>> @@ -332,30 +332,30 @@ class changelog(revlog.revlog):
>> : older versions ignore it
>> files\n\n : files modified by the cset, no \n or \r allowed
>> (.*) : comment (free text, ideally utf-8)
>>
>> changelog v0 doesn't use extra
>>
>> Returns a 6-tuple consisting of the following:
>> - manifest node (binary)
>> - - user (encoding.localstr)
>> + - user (binary)
>> - (time, timezone) 2-tuple of a float and int offset
>> - list of files modified by the cset
>> - commit message / description (binary)
>> - dict of extra entries
>> """
>> text = self.revision(node)
>> if not text:
>> return nullid, "", (0, 0), [], "", _defaultextra
>> last = text.index("\n\n")
>> desc = text[last + 2:]
>> l = text[:last].split('\n')
>> manifest = bin(l[0])
>> - user = encoding.tolocal(l[1])
>> + user = l[1]
>>
>> tdata = l[2].split(' ', 2)
>> if len(tdata) != 3:
>> time = float(tdata[0])
>> try:
>> # various tools did silly things with the time zone
>> field.
>> timezone = int(tdata[1])
>> except ValueError:
>> diff --git a/mercurial/context.py b/mercurial/context.py
>> --- a/mercurial/context.py
>> +++ b/mercurial/context.py
>> @@ -543,17 +543,17 @@ class changectx(basectx):
>> return [changectx(repo, p1), changectx(repo, p2)]
>>
>> def changeset(self):
>> return self._changeset
>> def manifestnode(self):
>> return self._changeset[0]
>>
>> def user(self):
>> - return self._changeset[1]
>> + return encoding.tolocal(self._changeset[1])
>> def date(self):
>> return self._changeset[2]
>> def files(self):
>> return self._changeset[3]
>> def description(self):
>> return encoding.tolocal(self._changeset[4])
>> def branch(self):
>> return encoding.tolocal(self._changeset[5].get("branch"))
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list