2010-01-15 7 views
2

Je suis nouveau à SharpSVN et SVN en général. J'essaye d'implémenter un hook pré-commit quand l'utilisateur commet un certain type de fichier XML; Je vais devoir intercepter le fichier et l'analyser pour m'assurer qu'ils ont inclus certains éléments avant que j'autorise l'engagement du fichier.Comment accéder aux informations de fichier dans un hook de pré-validation en utilisant SharpSVN

Comme il semble que SVN soumet deux arguments; le chemin du référentiel et la transaction; Je devrai utiliser ces deux éléments pour intercepter le fichier. Est-ce que quelqu'un sait ce que j'ai besoin d'utiliser dans SharpSVN pour obtenir des informations de fichier basées sur ces deux paramètres?

Merci, Flea #

Répondre

4

Vous pouvez le faire en utilisant le SvnLookClient builtin.

Pour l'utiliser, vous devez d'abord utiliser un SvnLookOrigin. SharpSvn contient l'analyse standard des arguments qui "sait" quels arguments sont passés à chaque type de hook. Cela vous donne accès à ce SvnLookOrigin:

SvnHookArguments ha; 
if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PreCommit, false, out ha)) 
{ 
    Console.Error.WriteLine("Invalid arguments"); 
    Environment.Exit(1); 
} 

Obtenir les fichiers modifiés et le contenu de ces fichiers sur la base des arguments analysés

using (SvnLookClient cl = new SvnLookClient()) 
{ 
    Collection<SvnChangedEventArgs> changedItems; 
    cl.GetChanged(ha.LookOrigin, out changedItems); 

    foreach(var item in changedItems) 
    { 
     if(!IsXmlFile(item)) continue; 

     using(MemoryStream ms = new MemoryStream()) 
     { 
      cl.Write(ha.LookOrigin, item.Path, stream); 

      VerifyXMLStream(stream); 
     } 
    } 
} 

Modifier: Ecrire à Console.Error et Environment.Exit(1) pour signaler les erreurs (sortie non nul).

Questions connexes