pushkey.py
61 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
/ mercurial / pushkey.py
Matt Mackall
|
r11367 | # pushkey.py - dispatching for pushing and pulling keys | ||
# | ||||
# Copyright 2010 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
Gregory Szorc
|
r25969 | from __future__ import absolute_import | ||
from . import ( | ||||
bookmarks, | ||||
encoding, | ||||
obsolete, | ||||
phases, | ||||
) | ||||
Matt Mackall
|
r13353 | |||
Matt Mackall
|
r11367 | def _nslist(repo): | ||
n = {} | ||||
for k in _namespaces: | ||||
n[k] = "" | ||||
Durham Goode
|
r22953 | if not obsolete.isenabled(repo, obsolete.exchangeopt): | ||
Pierre-Yves David
|
r17298 | n.pop('obsolete') | ||
Matt Mackall
|
r11367 | return n | ||
Matt Mackall
|
r13353 | _namespaces = {"namespaces": (lambda *x: False, _nslist), | ||
Pierre-Yves David
|
r15648 | "bookmarks": (bookmarks.pushbookmark, bookmarks.listbookmarks), | ||
"phases": (phases.pushphase, phases.listphases), | ||||
Pierre-Yves.David@ens-lyon.org
|
r17075 | "obsolete": (obsolete.pushmarker, obsolete.listmarkers), | ||
Pierre-Yves David
|
r15648 | } | ||
Matt Mackall
|
r11367 | |||
def register(namespace, pushkey, listkeys): | ||||
_namespaces[namespace] = (pushkey, listkeys) | ||||
def _get(namespace): | ||||
return _namespaces.get(namespace, (lambda *x: False, lambda *x: {})) | ||||
def push(repo, namespace, key, old, new): | ||||
'''should succeed iff value was old''' | ||||
pk = _get(namespace)[0] | ||||
return pk(repo, key, old, new) | ||||
def list(repo, namespace): | ||||
'''return a dict''' | ||||
lk = _get(namespace)[1] | ||||
return lk(repo) | ||||
Pierre-Yves David
|
r21661 | encode = encoding.fromlocal | ||
Pierre-Yves David
|
r21659 | decode = encoding.tolocal | ||
Pierre-Yves David
|
r21650 | def encodekeys(keys): | ||
"""encode the content of a pushkey namespace for exchange over the wire""" | ||||
Pierre-Yves David
|
r21661 | return '\n'.join(['%s\t%s' % (encode(k), encode(v)) for k, v in keys]) | ||
Pierre-Yves David
|
r21652 | |||
def decodekeys(data): | ||||
"""decode the content of a pushkey namespace from exchange over the wire""" | ||||
result = {} | ||||
for l in data.splitlines(): | ||||
k, v = l.split('\t') | ||||
Pierre-Yves David
|
r21659 | result[decode(k)] = decode(v) | ||
Pierre-Yves David
|
r21652 | return result | ||