2008-11-12 13 views
2

Je voudrais appeler svn vers le haut à partir d'une page asp.net afin que les gens puissent frapper la page pour mettre à jour un dépôt. (BTW: J'utilise Beanstalk.com svn hosting qui ne permet pas les hooks post-commit, c'est pourquoi je le fais de cette façon).Comment effectuer une mise à jour SVN à partir d'ASP.NET?

Voyez ce que j'ai ci-dessous. Le processus démarre (il apparaît dans Processus dans le Gestionnaire des tâches) et se termine après plusieurs secondes sans message de sortie (au moins aucun n'est sorti sur la page). Le référentiel n'est pas mis à jour. Mais il fait quelque chose avec le dépôt parce que la prochaine fois que j'essaye de le mettre à jour manuellement à partir de la ligne de commande, il dit que le repo est verrouillé. Je dois lancer svn cleanup pour le mettre à jour.

Des idées?

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    startInfo = New System.Diagnostics.ProcessStartInfo("svn") 
    startInfo.RedirectStandardOutput = True  
    startInfo.UseShellExecute = False 
    startInfo.Arguments = "up " & Request.QueryString("path") 

    pStart.StartInfo = startInfo 
    pStart.Start() 
    pStart.WaitForExit() 

    Response.Write(pStart.StandardOutput.ReadToEnd()) 
End Sub 

Répondre

1

Vous pourriez être en mesure de le faire de manière plus efficace en utilisant une enveloppe SVN .net ou d'une bibliothèque comme celui-ci one. Je suis sûr qu'il y en a d'autres qui supporteraient aussi les limitations du haricot.

0

En utilisant SharpSvn:

using(SvnClient client = new SvnClient()) 
{ 
    client.Update(Request["path"]); 
} 

Mais je recommande de ne pas utiliser un utilisateur variable utilisée directement pour des raisons de sécurité.

2

Vous pouvez également utiliser la bibliothèque Subversion fournie avec Ankh SVN. Je l'ai utilisé dans un projet pour gérer des fichiers dans un dépôt Subversion et cela a bien fonctionné.

Si vous insistez pour utiliser le client en ligne de commande, assurez-vous de vérifier la sortie StandardError pour les messages d'erreur. Assurez-vous également que l'utilisateur que vous exécutez le processus dispose des droits appropriés.

Questions connexes