[PATCH 2 of 9 hglib] hglib: introduce a changeset class instead of using namedtuple
Idan Kamara
idankk86 at gmail.com
Thu Jul 28 14:58:55 CDT 2011
# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1311450939 -10800
# Node ID ed6263fadf3c457582278b89d7eed0bbcf7b6f43
# Parent 248d1121db656af449298303f2dcba16e71421dc
hglib: introduce a changeset class instead of using namedtuple
so we can easily extend it, for our own __str__, __eq__ etc.
diff -r 248d1121db65 -r ed6263fadf3c hglib/hglib.py
--- a/hglib/hglib.py Sat Jul 23 22:55:39 2011 +0300
+++ b/hglib/hglib.py Sat Jul 23 22:55:39 2011 +0300
@@ -3,9 +3,46 @@
HGPATH = 'hg'
-changeset = collections.namedtuple('changeset', 'rev, node, tags, '
- 'branch, author, desc')
+class changeset(object):
+ def __init__(self, rev, node, tags, branch, author, desc):
+ self.rev = rev
+ self.node = node
+ self.tags = tags
+ self.branch = branch
+ self.author = author
+ self.desc = desc
+ def __repr__(self):
+ s = '%s:%s' % (self.rev, self.node[:10])
+ s += ', branch=' + repr(self.branch)
+ if self.tags:
+ s += ', tags=' + repr(self.tags)
+ s += ', author=' + repr(self.author)
+ s += ', desc=' + repr(cStringIO.StringIO(self.desc).readline())
+
+ return '<changeset %s>' % s
+
+ def __str__(self):
+ return self.node
+
+ def __eq__(self, other):
+ return self.node == other.node
+
+ def __ne__(self, other):
+ return not self == other
+
+ @staticmethod
+ def fromtemplate(splitted):
+ """
+ splitted is a list of fields according to templates.changeset
+
+ >>> exp = [changeset('0', '1', '2', '3', '4', '5'), \
+ changeset('6', '7', '8', '9', '10', '11')]
+ >>> exp == changeset.fromtemplate(['0', '1', '2', '3', '4', '5', \
+ '6', '7', '8', '9', '10', '11'])
+ True
+ """
+ return [changeset(*rev) for rev in util.grouper(6, splitted)]
def connect(path=None, encoding=None, configs=None):
''' starts a cmdserver for the given path (or for a repository found in the
@@ -67,10 +104,6 @@
else:
return channel, self.server.stdout.read(length)
- def _parsechangesets(self, splitted):
- '''splitted is a list of fields according to templates.changeset'''
- return [changeset._make(rev) for rev in util.grouper(6, splitted)]
-
def runcommand(self, args, inchannels, outchannels):
def writeblock(data):
self.server.stdin.write(struct.pack(self.inputfmt, len(data)))
@@ -166,7 +199,7 @@
out = self.outputruncommand(args)[1]
out = out.split('\0')[:-1]
- return self._parsechangesets(out)
+ return changeset.fromtemplate(out)
def incoming(self, revrange=[], path=None):
args = util.commandlinebuilder('incoming')
@@ -177,7 +210,7 @@
ret, out, err = self.outputruncommand(args, raiseonerror=False)
if not ret:
out = util.eatlines(out, 2).split('\0')[:-1]
- return self._parsechangesets(out)
+ return changeset.fromtemplate(out)
elif ret == 1:
return []
else:
@@ -192,7 +225,7 @@
ret, out, err = self.outputruncommand(args, raiseonerror=False)
if not ret:
out = util.eatlines(out, 2).split('\0')[:-1]
- return self._parsechangesets(out)
+ return changeset.fromtemplate(out)
elif ret == 1:
return []
else:
@@ -243,7 +276,7 @@
out = self.outputruncommand(['tip'] + templates.changeset)[1]
out = out.split('\0')
- return self._parsechangesets(out)[0]
+ return changeset.fromtemplate(out)[0]
def branch(self, name=None):
if not name:
More information about the Mercurial-devel
mailing list