restringindo push para repositórios Mercurial selecionados usando comandos forçados 'ssh' e 'hg-ssh'

1

O contexto desta questão é o hg-ssh script. É útil, mas não essencial, saber algo sobre o Mercurial . Esse script configura um comando forçado usando chaves públicas para que a configuração de chave pública fornecida no servidor permita que apenas o proprietário da chave privada correspondente envie para um conjunto permitido de repositórios no servidor. Esses comandos forçados geralmente são prefixados para a chave pública no arquivo ~/.ssh/authorized_keys no servidor. Com relação a esse conjunto permitido, a documentação antes do script no link acima diz:

You can use pattern matching of your normal shell, e.g.:
command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}"

A ideia é permitir apenas empurrar para repositórios no servidor que correspondam a esse padrão. Eu tenho usado hg-ssh com o comando forçado

command="cd /srv/hg && /usr/local/bin/hg-ssh * */* */*/* */*/*/*",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa [...]

para corresponder a todos os repositórios (até um certo número de componentes de caminho) em /srv/hg , usando o shell globbing. Eu percebi tardiamente que não é caminhos de correspondência que contenham componentes começando com . . Meu exemplo atual em funcionamento é o repositório MQ /srv/hg/faheem/bixfile/.hg/patches . Então, minha pergunta é: posso selecionar um padrão que corresponda a todos os caminhos ? Eu preferiria usar shell globbing, que é menos uma dor de cabeça do que as expressões regulares em geral, mas eu tomaria uma expressão regular se globbing não fosse uma opção.

    
por Faheem Mitha 03.07.2011 / 23:02

1 resposta

2

Para correspondências recursivas, a ferramenta certa geralmente é find . Como você deseja corresponder todos os arquivos no diretório atual e em seus subdiretórios recursivamente, mas apenas até uma determinada profundidade, especifique -maxdepth . Isso não está em POSIX , mas existe em todos os atuais * BSD e no GNU find (Linux , Cygwin) e no Busybox (Linux embarcado), então é uma aposta segura que você o tenha. -exec … {} + é uma adição relativamente recente ao POSIX, mas já existe no GNU e no FreeBSD / NetBSD / OSX há algum tempo.

cd /srv/hg && find . -type d -maxdepth 3 -exec /usr/local/bin/hg-ssh {} +

(Adicionei -type d porque parece que você deseja corresponder apenas aos diretórios, mesmo que sua tentativa com * */* etc. corresponda a arquivos de todos os tipos.)

    
por 03.07.2011 / 23:11