Parando os traficantes de quebrar meu repositório central do Mercurial [fechado]

7

Estou rodando o repositório mercurial central, e entendo que o comando normal "push" será interrompido se o usuário remoto estiver tentando forçar vários "head" s para o meu repositório central. A intenção é que o usuário remoto primeiro puxe e mescle antes de tentar empurrar novamente.

No entanto, usar hg push --force substituirá isso. Eu gostaria de bloquear esse comportamento.

No momento, estou usando o hgwebdir.cgi mais algumas coisas do apache-auth para limitar a capacidade de pull e push dos usuários.

EDIT: um gancho pretxnchangegroup resolveu o problema. Hook trabalhou:

#!/bin/bash
# force-one-head
# add the following to <repository>/.hg/hgrc :
# [hooks]
# pretxnchangegroup.forceonehead = /path/to/force-one-head

if [[ 'hg heads -q | wc -l' -gt 1 ]]; then
    echo "There are multiple heads."
    echo "Please 'hg pull' and get your repository up to date first."
    echo "Also, don't 'hg push --force' because that won't work either."
    exit 1
fi
    
por user9748 05.07.2009 / 19:20

3 respostas

6

Esta não é uma alteração do Apache, mas você precisa configurá-la no próprio repositório do Mercurial.

Você pode configurar ganchos que executam um script antes de aceitar um push no seu repositório. Nos scripts acionados pelos ganchos pretxncommit ou pretxnchangegroup , você pode verificar se essas alterações criam um novo cabeçalho e recusam-nas.

Veja o capítulo sobre ganchos no Hg Book para saber mais detalhes.

    
por 05.07.2009 / 20:24
1

Não há nenhum gancho fornecido que criará esse comportamento. Você precisará escrever você mesmo.

    
por 06.07.2009 / 16:07
0

Considere colocar o repositório em um servidor controlado por acesso e, em seguida, implementar servidor mercurial (anteriormente conhecido como hg-admin-tools). Os usuários utilizam o SSH (do Windows ou Linux) e estão sujeitos aos seus controles de acesso.

Existem dois arquivos de permissões que lhe darão um controle refinado sobre quem pode ler versus enviar. Diversos repositórios podem ser configurados em um sistema de gerenciamento, para que você não precise instalá-lo repetidamente.

    
por 06.07.2009 / 16:31