Processo recomendado para revisões de código com mercurial


18

Normalmente, usamos o Perforce e o Code Collaborator da SmartBear Big Corpe agora também usaremos o Mercurial para determinados projetos.

Suporte ao Code Collaborator Mercurial (estamos usando a versão 5) e estou tentando determinar quando o melhor momento (durante o processo de confirmação / envio ao servidor) é o melhor / eficiente para uma revisão de código

obrigado


Você provavelmente deve separar as duas perguntas. (a) pertence aqui, mas (b) provavelmente pertenceria ao stackoverflow ou serverfault
blueberryfields

Obrigado @blueberryfields. Na verdade, eu corrigi o problema, o problema estava com o arquivo bin / hg.cmd estar no caminho e não no exe.
Cevulak

Respostas:


22

Na verdade, passamos quase exatamente pela mesma coisa na minha empresa recentemente. Aqui está o que fizemos:

  • Mantemos uma cópia definitiva central de todos os nossos repositórios em um servidor. Quando os desenvolvedores desejam "fazer check-out" do código, eles acessam este servidor e clonam a partir dos repositórios. Da mesma forma, quando o ciclo de desenvolvimento é concluído, o código também é enviado para o repositório apropriado.

  • Separamos repositórios estáveis ​​dos repositórios de desenvolvimento . Exigimos que o código seja revisado antes de ser enviado para um repositório estável. (Isso é significativo porque também exigimos que nossos repositórios estáveis ​​contenham o código atualmente em execução na produção, diferindo apenas pelas promoções de códigos pendentes.)

Para impor a revisão de código, escrevemos um pretxnchangegroupgancho (documentado no HG Book ). Aproveitamos o fato de que, quando esse gancho é executado, ele pode ver o repositório como se as alterações de código fossem permanentes, mas também nos dá a capacidade de impedir o envio. Basicamente, o processo é o seguinte:

  1. O desenvolvedor inicia um push no repositório estável (sim, esse é realmente o primeiro passo)
  2. O gancho é executado e pega uma lista de todos os conjuntos de alterações incluídos na transação (executando o log do HG). Em seguida, ele consulta um banco de dados que criamos para ver se esses conjuntos de alterações foram incluídos em uma revisão de código. (A tabela corresponde ao hash de um conjunto de alterações com um ID de revisão de código).
    • Se for a primeira vez que um desses conjuntos de alterações for visto, criamos uma nova Revisão de Código (usando a linha de comando do Code Collaborator) e registramos esses conjuntos de alterações no banco de dados com o ID da revisão de código.
    • Se vimos alguns (mas não todos) dos conjuntos de alterações, executamos o comando (Code Collaborator) para anexar os novos conjuntos de alterações à revisão existente e registrar esses novos conjuntos de alterações no banco de dados.
    • Se todas as alterações foram encontradas no banco de dados (ou seja, todas foram adicionadas à revisão de código), verificamos se o status da revisão de código é Completo. No entanto, se houver novos conjuntos de alterações (ou a revisão do código não estiver concluída), o gancho sai com um código de status diferente de zero (fazendo com que o Mercurial reverta a transação) e emite uma mensagem amigável sobre Erro Padrão, explicando ao desenvolvedor que a revisão do código precisa ser concluída.

Em essência, isso fornece ao desenvolvedor um processo bastante simplificado (tudo o que eles precisam fazer é pressionar hg) e automatiza completamente a criação da revisão de código (e o upload de arquivos alterados adicionais para a revisão), garantindo que todo o código seja revisado. .

Nota: Esse é um processo bastante simples (e relativamente novo para nós); portanto, pode não funcionar para todos, e pode haver alguns bugs de design que ainda não encontramos. Mas até agora, funcionou muito bem.


Você explicaria sua decisão de fazer check-in no seu ambiente estável antes da revisão do código? Para mim, estável parece ser um nome impróprio.
Jordânia

1
Provavelmente não ficou claro a partir da resposta, mas na verdade não entra no repositório, a menos que todas as alterações tenham sido adicionadas à revisão de código e a revisão esteja concluída. Se o gancho sair com um código de saída diferente de zero, o Mercurial reverterá todas as alterações que estavam sendo enviadas. Portanto, esse gancho específico fornece um local muito conveniente para não apenas obter as diferenças para a revisão, mas também impor a revisão antes que as alterações sejam permitidas no repositório.
21711 Ryan

1
Uau. Posso vir trabalhar para você?
Rich

@Ryan - Como implementamos o gancho pretxnchangegroup, o link que você fornece não fornece explicações detalhadas sobre como ele pode ser implementado, não fornece o tipo de modelo de função que devemos seguir, onde colocar o gancho. Eu não tenho experiência com python. Por favor, você poderia me redirecionar para uma fonte correta ou o modelo para o gancho pretxnchangegroup. Ta
Simple-Solution

2

Depende de como você tem sua estrutura de repositório e o que você está tentando realizar. Preferimos fazer revisões de "pré-confirmação", o que no mundo do DVCS realmente significa "pré-envio". Os DVCS são mais agradáveis ​​nesse ambiente (quando comparados aos SCMs tradicionais) porque possuem funcionalidade incorporada para salvar as alterações locais e recuperar o espaço de trabalho para que você possa trabalhar em outra coisa.

Se você deseja fazer revisões pós-envio, o fluxo de trabalho ideal depende muito da sua estrutura de repositório. Por exemplo, vamos assumir uma estrutura de repositório semelhante à discutida neste artigo sobre layouts de repositório Git . Nesse caso, convém revisar as alterações que estão sendo mescladas develop. As confirmações individuais nas ramificações dos recursos podem não fazer sentido revisar. Obviamente, todos hotfixestambém devem ser revisados ​​juntamente com as fusões master.

Se, em vez disso, você tiver um único ramo de integração no qual as pessoas estão fazendo check-in diretamente, convém revisar todos os pushs desse ramo. Provavelmente é um pouco menos eficiente, mas ainda pode funcionar. Nesse ambiente, você precisaria garantir que todas as alterações que foram enviadas foram revisadas antes de fazer um lançamento. Isso pode ser mais complicado.

Quanto a b), a única coisa que eu sugeriria é enviar um e-mail para o suporte SmartBear (support@smartbear.com) diretamente. Nós (sim, eu trabalho para o SmartBear) ficaremos felizes em ajudá-lo a resolver os problemas do seu caminho, mas não há informações suficientes nesta pergunta para corrigir seu problema. O processo normal é apenas executar o instalador e tudo funciona. Aparentemente, algo deu errado nesse processo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.