contrib/hg-ssh
author Benoit Boissinot <bboissin@gmail.com>
Thu, 01 Dec 2005 10:48:29 -0600
changeset 1564 34579a67fa71
parent 1537 583b3696d24d
child 1640 9a5b778f7e2d
permissions -rwxr-xr-x
Re: [PATCH 2 of 3] remove walk warning about nonexistent files On 11/15/05, Robin Farine <robin.farine@terminus.org> wrote: > # HG changeset patch > # User Robin Farine <robin.farine@terminus.org> > # Node ID ce0a3cc309a8d1e81278ec01a3c61fbb99c691f4 > # Parent feb77e0951e74d75c213e8471f107fdcc124c876 > remove walk warning about nonexistent files > > diff -r feb77e0951e7 -r ce0a3cc309a8 mercurial/dirstate.py > --- a/mercurial/dirstate.py Tue Nov 15 08:42:45 2005 +0100 > +++ b/mercurial/dirstate.py Tue Nov 15 08:59:50 2005 +0100 > @@ -336,9 +336,6 @@ > try: > st = os.lstat(f) > except OSError, inst: > - if ff not in dc: self.ui.warn('%s: %s\n' % ( > - util.pathto(self.getcwd(), ff), > - inst.strerror)) > continue > if stat.S_ISDIR(st.st_mode): > cmp1 = (lambda x, y: cmp(x[1], y[1])) this break some tests, a better fix would be to check if ff can be a directory prefix from files in dc you can try the attached patch. Benoit

#!/usr/bin/env python
#
# Copyright 2005 by Intevation GmbH <intevation@intevation.de>
# Author(s):
# Thomas Arendsen Hein <thomas@intevation.de>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.

"""
hg-ssh - a wrapper for ssh access to a limited set of mercurial repos

To be used in ~/.ssh/authorized_keys with the "command" option, see sshd(8):
command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...
(probably together with these other useful options:
 no-port-forwarding,no-X11-forwarding,no-agent-forwarding)

This allows pull/push over ssh to to the repositories given as arguments.

If all your repositories are subdirectories of a common directory, you can
allow shorter paths with:
command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2"
"""

from mercurial import commands

import sys, os

cwd = os.getcwd()
allowed_paths = [os.path.normpath(os.path.join(cwd, os.path.expanduser(path)))
                 for path in sys.argv[1:]]
orig_cmd = os.getenv('SSH_ORIGINAL_COMMAND', '?')

if orig_cmd.startswith('hg -R ') and orig_cmd.endswith(' serve --stdio'):
    path = orig_cmd[6:-14]
    repo = os.path.normpath(os.path.join(cwd, os.path.expanduser(path)))
    if repo in allowed_paths:
        commands.dispatch(['-R', repo, 'serve', '--stdio'])
    else:
        sys.stderr.write("Illegal repository %r\n" % repo)
        sys.exit(-1)
else:
    sys.stderr.write("Illegal command %r\n" % orig_cmd)
    sys.exit(-1)