hgext/replicateowner/__init__.py (43 lines of code) (raw):
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""Replicate repository group owner."""
import os
from mercurial.i18n import _
from mercurial import (
exchange,
extensions,
sshpeer,
wireprotov1server,
)
OUR_DIR = os.path.dirname(__file__)
ROOT = os.path.normpath(os.path.join(OUR_DIR, "..", ".."))
with open(os.path.join(OUR_DIR, "..", "bootstrap.py")) as f:
exec(f.read())
from mozhg.util import (
repo_owner,
)
minimumhgversion = b"4.6"
testedwith = b"4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.9"
@wireprotov1server.wireprotocommand(b"mozowner", b"", permission=b"pull")
def moz_owner_command(repo, proto):
"""Obtain the group owner of the repository."""
return repo_owner(repo)
def _capabilities(orig, *args, **kwargs):
caps = orig(*args, **kwargs)
caps.append(b"moz-owner")
return caps
class sshv1peer(sshpeer.sshv1peer):
def mozowner(self):
self.requirecap(b"moz-owner", _("moz-owner"))
return self._call(b"mozowner")
def exchange_pull_owner(orig, pullop):
res = orig(pullop)
if b"moz-owner" in pullop.stepsdone or not pullop.remote.capable(b"moz-owner"):
return res
pullop.stepsdone.add(b"moz-owner")
group = pullop.remote.mozowner()
existing = pullop.repo.vfs.tryread(b"moz-owner")
if existing != group + b"\n":
pullop.repo.ui.write(b"updating moz-owner file\n")
with pullop.repo.vfs(b"moz-owner", b"wb", atomictemp=True) as fh:
fh.write(group + b"\n")
def extsetup(ui):
extensions.wrapfunction(wireprotov1server, "_capabilities", _capabilities)
extensions.wrapfunction(exchange, "_pullobsolete", exchange_pull_owner)
sshpeer.sshv1peer = sshv1peer