+
+class Person:
+ """An author, committer, etc."""
+ def __init__(self, name = None, email = None, date = '',
+ desc = None):
+ if name or email or date:
+ assert not desc
+ self.name = name
+ self.email = email
+ self.date = date
+ elif desc:
+ assert not (name or email or date)
+ def parse_desc(s):
+ m = re.match(r'^(.+)<(.+)>(.*)$', s)
+ assert m
+ return [x.strip() or None for x in m.groups()]
+ self.name, self.email, self.date = parse_desc(desc)
+ def set_name(self, val):
+ if val:
+ self.name = val
+ def set_email(self, val):
+ if val:
+ self.email = val
+ def set_date(self, val):
+ if val:
+ self.date = val
+ def __str__(self):
+ if self.name and self.email:
+ return '%s <%s>' % (self.name, self.email)
+ else:
+ raise GitException, 'not enough identity data'
+