2017-08-14 24 views
1

J'essaie actuellement de déterminer si un répertoire dans une copie de travail est externe ou n'utilise pas SharpSvn. Pour un fichier, c'est assez facile, puisqu'il y a l'option IsFileExternal dans le SvnStatusEventArgs, mais pour un répertoire il semble que ce ne soit pas si simple. L'exécution de la commande svn status sur le répertoire ne renvoie aucune information, ce qui est logique, puisque la définition externe est attachée au répertoire parent. Mais l'exécution svn status sur le répertoire parent, signale que le répertoire contenu est là à cause d'une définition externe.Vérifiez si le répertoire est externe à l'aide de SharpSvn

Faire la même chose dans SharpSvn n'aide pas. Il n'y a aucune indication que n'importe quel sous-répertoire est un externe.

Ma première idée était de vérifier s'il existe des définitions externes pour le répertoire parent, mais cela peut poser un problème s'il existe des définitions pour un fichier et un répertoire externe.

Est-ce que quelqu'un a une solution ou une idée pour résoudre ce problème?

Répondre

1

Il semble que ma première idée a fonctionné. Pour vérifier si un élément est un externe, ce qui suit aidera:

private bool CheckIfItemIsExternal(string itemPath) 
    { 
     List<SvnStatusEventArgs> svnStates = new List<SvnStatusEventArgs>(); 
     using (SvnClient svnClient = new SvnClient()) 
     { 
      // use throw on error to avoid exception in case the item is not versioned 
      // use retrieve all entries option to secure that all status properties are retrieved 
      SvnStatusArgs svnStatusArgs = new SvnStatusArgs() 
      { 
       ThrowOnError = false, 
       RetrieveAllEntries = true, 
      }; 
      Collection<SvnStatusEventArgs> svnStatusResults; 
      if (svnClient.GetStatus(itemPath, svnStatusArgs, out svnStatusResults)) 
       svnStates = new List<SvnStatusEventArgs>(svnStatusResults); 
     } 

     foreach (var status in svnStates) 
     { 
      if (status.IsFileExternal) 
       return true; 
      else if (status.NodeKind == SvnNodeKind.Directory) 
      { 
       string parentDirectory = Directory.GetParent(itemPath).ToString(); 
       List<SvnPropertyListEventArgs> svnProperties = RetrieveSvnProperties(parentDirectory); 
       foreach (var itemProperties in svnProperties) 
       { 
        foreach (var property in itemProperties.Properties) 
        { 
         if (property.Key == "svn:externals" && property.StringValue.Contains(new DirectoryInfo(itemPath).Name)) 
          return true; 
        } 
       } 
      } 
     } 
     return false; 
    }