A melhor estratégia para escrever ganchos para o subversion no Windows [fechado]

StackOverflow https://stackoverflow.com/questions/5134

  •  08-06-2019
  •  | 
  •  

Pergunta

Qual é a melhor abordagem para escrever ganchos para Subversão no Windows?Até onde eu sei, somente os arquivos executáveis podem ser usados.Então, qual é a melhor escolha?

  • Simples arquivos de lote (muito limitada, mas, talvez, OK muito simples soluções)
  • Dedicado executável compilado aplicações (marreta para quebrar um resumo?)
  • Alguns outros híbrido escolha (como um arquivo de lote a executar um script do Powershell)
Foi útil?

Solução

Eu só passei vários dias a procrastinação exatamente sobre esta questão.Há produtos de terceiros disponíveis e abundância de PERL e Python scripts, mas eu queria algo simples e uma língua que eu estava familiarizado com isso terminou apenas escrever ganchos em um C# aplicativo de console.É muito simples:

public void Main(string[] args)
{
  string repositories = args[0];
  string transaction = args[1];

  var processStartInfo = new ProcessStartInfo
                           {
                             FileName = "svnlook.exe",
                             UseShellExecute = false,
                             CreateNoWindow = true,
                             RedirectStandardOutput = true,
                             RedirectStandardError = true,
                             Arguments = String.Format("log -t \"{0}\" \"{1}\"", transaction, repositories)
                           };

  var p = Process.Start(processStartInfo);
  var s = p.StandardOutput.ReadToEnd();
  p.WaitForExit();

  if (s == string.Empty)
  {
    Console.Error.WriteLine("Message must be provided");
    Environment.Exit(1);
  }

  Environment.Exit(0);
}

Em seguida, você pode chamar esta em pré cometer adicionando um pré-compromisso.arquivo cmd para os ganchos pasta do repositório com a seguinte linha:

[path]\PreCommit.exe %1 %2

Você pode considerar isso um exagero, mas, em última análise, é apenas a poucos minutos de codificação.O que é mais, você tem a vantagem de os .Linguagem NET suite, que IMHO é, de longe, preferível às alternativas.Vou expandir minha ganchos de fora significativamente e escrever testes apropriados contra eles como bem pouco difícil de fazer isso com um arquivo de lote do DOS!

BTW, o código foi adaptado a partir de este post.

Outras dicas

Temos complexos requisitos, como:

  1. Somente determinados usuários podem criar pastas de partes da árvore SVN, mas todos podem editar arquivos
  2. Certas extensões de arquivo não pode conter certas texto no arquivo
  3. Certas extensões de arquivo só podem ser armazenados em um subconjunto de diretórios
  4. Assim como vários mais simples como, Deve ter uma confirmação comentário
  5. Regressão testável executando novo gancho contra todas as anteriores SVN compromete-se

#5 é enorme para nós, não há melhor maneira de conhecer você não vai quebrar compromete-se a mover para a frente do que ser capaz de empurrar todas as anteriores compromete-se através de sua nova rotina.Fazer o gancho entender que 1234 foi uma revisão e 1234-1 era uma operação e tornando o argumento apropriado alterações ao chamar svnlook, etc.foi a melhor decisão que tomamos durante o processo.

Para nós, a porca tem grande o suficiente para que uma unidade totalmente testável, regressão testável, C# consola de exe fez mais sentido.Temos os arquivos de configuração que alimentam o diretório restrições, analisar o existente httpd_authz arquivo para obter "privilegiada", usuários, etc.Se não tivessem sido executado no Windows com um .LÍQUIDO de desenvolvimento de força de trabalho, eu provavelmente teria escrito tudo isso em Python, mas, uma vez que outros podem precisar para apoiá-lo no futuro, fui eu .NET mais .BAT .VBS, o Powershell bobagem.

Pessoalmente, eu acho que Powershell são diferentes o suficiente .LÍQUIDO ser praticamente inútil como um "script" de linguagem.Seria bom se a apenas linha de comandos de suporte para um produto que vem através do PS (Exchange, Windows 2k8), etc.mas se tudo o que você quer fazer é analisar alguns de texto ou acesso regular .NET objetos PS apenas adiciona um louco sintaxe e a Segurança estúpida "Cortina de Ferro" para o que poderia ser uma rápida e fácil pouco .NET app.

Seleção CaptainHook, "um simples plugin framework para escrever o Subversion usando ganchos .LÍQUIDO".

Dependendo da complexidade, cada situação é diferente, Se eu sou simplesmente mover os arquivos de volta, eu vou escrever uma rápida arquivo em lotes.Se eu quiser fazer algo mais complexo Doente, normalmente, apenas ignore o script e a parte de escrever um rápido programa c# que pode lidar com isso.

A questão é, então, você colocou que o programa c# no svn e tenha-versão :)

editar: Os benefícios de um aplicativo c# é que eu posso reutilizar fragmentos de código para criar novas rotinas, inclusive com um simples registo de saída que eu criei para lidar com gancho de log.

Eu escrevi ganchos em Python no Windows, uma vez que há muitos exemplos na net (geralmente para Linux, mas as diferenças são pequenas).Nós também usamos Trac integrado com SVN e há um Trac API acessível através de Python que permite automaticamente criar/modificar Trac bilhetes a partir de SVN scripts de gancho.

Se você tem um executável do php com a ajuda de um simples classe php pode escrever um script de gancho em php, como é mostrado aqui http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top