# HG changeset patch # User Pierre-Yves David # Date 1315945168 -7200 # Node ID c7dd26dec7fc5c34d8a7d655300379516f7a1ff6 # Parent c0143040693b14f1bb006f4cca45fa1d32b6cdd2 [obsolete] update docstring diff -r c0143040693b -r c7dd26dec7fc hgext/obsolete.py --- a/hgext/obsolete.py Tue Sep 13 21:40:37 2011 +0200 +++ b/hgext/obsolete.py Tue Sep 13 22:19:28 2011 +0200 @@ -101,6 +101,9 @@ ohidden = context.changectx.hidden def hidden(ctx): + """hacked version fo hidden that also initialize hiddenrevs set + + XXX we need something cleaner""" # hack to fill hiddenrevs # compute hidden (XXX should move elsewhere) if not getattr(ctx._repo.changelog, 'hiddeninit', False): @@ -116,45 +119,53 @@ ############################# def revsetobsolete(repo, subset, x): + """filter obsolet entry""" args = revset.getargs(x, 0, 0, 'publicheads takes no arguments') - return [r for r in subset if repo[r].obsolete()] # XXX slow + # XXX slow stop using context + return [r for r in subset if repo[r].obsolete()] ### Other Extension compat ############################ def concludenode(orig, repo, rev, *args, **kwargs): + """wrapper for rebase 's concludenode that set obsolete relation""" newrev = orig(repo, rev, *args, **kwargs) oldnode = repo[rev].node() newnode = repo[newrev].node() repo.addobsolete(newnode, oldnode) return newrev +### Filter obsolet changeset +############################ + +def filterobsoleteout(orig, repo, remote, *args,**kwargs): + """wrapper for findcommonoutgoing that remove obsolete changeset + + This behaviour is temporary""" + common, heads = orig(repo, remote, *args, **kwargs) + + # filter obsolete + heads = set(map(repo.changelog.rev, heads)) + obsoletes = set() + for obj in repo._obsobjrels: + try: + obsoletes.add(repo.changelog.rev(obj)) + except error.LookupError: + pass # we don't have this node locally + + outgoing = set(repo.changelog.ancestors(*heads)) + outgoing.update(heads) + + selected = outgoing - obsoletes + heads = sorted(map(repo.changelog.node, selected)) + + return common, heads def extsetup(ui): revset.symbols["obsolete"] = revsetobsolete - def filterobsoleteout(orig, repo, remote, *args,**kwargs): - common, heads = orig(repo, remote, *args, **kwargs) + extensions.wrapfunction(discovery, 'findcommonoutgoing', filterobsoleteout) - # filter obsolete - heads = set(map(repo.changelog.rev, heads)) - obsoletes = set() - for obj in repo._obsobjrels: - try: - obsoletes.add(repo.changelog.rev(obj)) - except error.LookupError: - pass # we don't have this node locally - - outgoing = set(repo.changelog.ancestors(*heads)) - outgoing.update(heads) - - selected = outgoing - obsoletes - heads = sorted(map(repo.changelog.node, selected)) - - return common, heads - - extensions.wrapfunction(discovery, 'findcommonoutgoing', filterobsoleteout) - try: rebase = extensions.find('rebase') if rebase: @@ -166,6 +177,7 @@ ######################################### def pushobsolete(repo, key, old, raw): + """push obsolete relation through pushkey""" assert key == "relations" w = repo.wlock() try: @@ -184,6 +196,9 @@ w.release() def listobsolete(repo): + """dump all obsolete relation in + + XXX this have be improved""" tmp = StringIO() _obsserialise(repo._obssubrels, tmp) return {'relations': tmp.getvalue()} @@ -196,7 +211,7 @@ def cmddebugobsolete(ui, repo, subject, object): """Add an obsolete relation between a too node - + The subject is expected to be a newer version of the object""" sub = repo[subject] obj = repo[object] @@ -209,11 +224,21 @@ ############################# def _obsserialise(obssubrels, flike): + """serialise an obsolete relation mapping in a plain text one + + this is for subject -> [objects] mapping + + format is:: + + \n""" for sub, objs in obssubrels.iteritems(): for obj in objs: flike.write('%s %s\n' % (hex(sub), hex(obj))) def _obsdeserialise(flike): + """read a file like object serialised with _obsserialise + + this desierialize into a {subject -> objects} mapping""" rels = {} for line in flike: subhex, objhex = line.split() @@ -229,6 +254,7 @@ opush = repo.push orollback = repo.rollback o_writejournal = repo._writejournal + ocancopy = repo.cancopy class obsoletingrepo(repo.__class__): @@ -298,11 +324,13 @@ ### local clone support def cancopy(self): - return not bool(self._obsobjrels) # you can't copy if there is obsolete + """wrapper on cancopy that deny copy if there is obsolete relation""" + return ocancopy() and not bool(self._obsobjrels) # you can't copy if there is obsolete ### pull // push support def pull(self, remote, *args, **kwargs): + """wrapper around push that push obsolete relation""" result = opull(remote, *args, **kwargs) if 'obsolete' in remote.listkeys('namespaces'): tmp = StringIO() @@ -315,6 +343,7 @@ return result def push(self, remote, *args, **opts): + """wrapper around pull that pull obsolete relation""" result = opush(remote, *args, **opts) if 'obsolete' in remote.listkeys('namespaces'): tmp = StringIO() @@ -328,6 +357,7 @@ ### rollback support def _writejournal(self, desc): + """wrapped version of _writejournal that save obsolete data""" entries = list(o_writejournal(desc)) filename = 'obsolete-relations' filepath = self.join(filename) @@ -339,6 +369,7 @@ return tuple(entries) def rollback(self, dryrun=False): + """wrapped version of rollback that restore obsolete data""" wlock = lock = None try: wlock = self.wlock()