X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/a5dd9b05d1136543817c697ecd0d878a1aa4d260..bd2f4130a81e68a2bb3c8d88448540ec60fe7be5:/lib/wlrepo/mercurial_backend/revision.py diff --git a/lib/wlrepo/mercurial_backend/revision.py b/lib/wlrepo/mercurial_backend/revision.py new file mode 100644 index 00000000..f05637d2 --- /dev/null +++ b/lib/wlrepo/mercurial_backend/revision.py @@ -0,0 +1,103 @@ +# -*- encoding: utf-8 -*- + +__author__= "Łukasz Rekucki" +__date__ = "$2009-10-20 12:31:48$" +__doc__ = "Module documentation." + +import wlrepo +from mercurial.node import nullid + +class MercurialRevision(wlrepo.Revision): + def __init__(self, lib, changectx): + super(MercurialRevision, self).__init__(lib) + self._changectx = changectx + + branchname = self._changectx.branch() + if branchname.startswith("$doc:"): + self._docname = branchname[5:] + self._username = None + elif branchname.startswith("$user:"): + idx = branchname.find("$doc:") + if(idx < 0): + raise ValueError("Revision %s is not a valid document revision." % changectx.hex()); + self._username = branchname[6:idx] + self._docname = branchname[idx+5:] + else: + raise ValueError("Revision %s is not a valid document revision." % changectx.hex()); + + @property + def document_name(self): + return self._docname and self._docname.decode('utf-8') + + @property + def user_name(self): + return self._username and self._username.decode('utf-8') + + def hgrev(self): + return self._changectx.node() + + def hgcontext(self): + return self._changectx + + def hgbranch(self): + return self._changectx.branch() + + @property + def timestamp(self): + return self._changectx.date()[0] + + def __unicode__(self): + return u"%s" % self._changectx.hex() + + def __str__(self): + return self.__unicode__().encode('utf-8') + + def __repr__(self): + return "%s" % self._changectx.hex() + + def ancestorof(self, other): + nodes = list(other._changectx._parents) + while nodes[0].node() != nullid: + v = nodes.pop(0) + if v == self._changectx: + return True + nodes.extend( v._parents ) + return False + + def parentof(self, other): + return self._changectx in other._changectx._parents + + def has_common_ancestor(self, other): + a = self._changectx.ancestor(other._changectx) + return (a.branch() == self._changectx.branch()) + + def has_children(self, limit_branch=False): + for child in self._changectx.children(): + cbranch = child.branch() + if (not limit_branch) or (cbranch == self.hgbranch()): + return True + return False + + def has_parent_from(self, rev): + branch = rev.hgbranch() + for parent in self._changectx.parents(): + if parent.branch() == branch: + return True + return False + + def merge_with(self, other, user, message): + message = self._library._sanitize_string(message) + lock = self._library.lock(True) + try: + self._library._checkout(self._changectx.node()) + status = self._library._merge(other._changectx.node()) + if status.isclean(): + self._library._commit(user=user, message=message) + return True + else: + return False + finally: + lock.release() + + def __eq__(self, other): + return self._changectx.node() == other._changectx.node()