2017-07-20 23 views
2

J'utilise la bibliothèque SharpSvn pour accéder à Subversion. J'ai l'obligation de vérifier si un dossier spécifique fait partie du référentiel subversion.Vérifier si le dossier est versionné dans Subversion en utilisant SharpSvn

Après quelques googler, je trouve le code ci-dessous -

SvnClient client = new SvnClient(); 
Collection<SvnStatusEventArgs> args2; 
bool result1 = client.GetStatus(@"D:\SVNMapping\demo\trunk\NewFolder", new SvnStatusArgs(), out args2); 

result1 devient vrai, mais args2 [0] valeur .Versioned est retourné comme fausse. Mais, le dossier ci-dessus est versionné et je peux le confirmer en fonction de l'icône -

enter image description here

Je ne sais pas ce que je suis absent dans cette utilisation de l'API ou si l'API lui-même est incorrect pour mon exigence.

Toute aide est fortement appréciée.

+0

Quelqu'un peut-il répondre à ma question? – kvk938

Répondre

2

Si vous voulez seulement vérifier si un répertoire est sous contrôle de version, il sera plus facile d'utiliser svn info. Dans SharpSvn, vous pouvez le faire par exemple. comme ceci:

/// <summary> 
    /// Checks whether the specified path is under version control or not. 
    /// </summary> 
    /// <remarks> 
    /// Internally, the "svn info" command is used (no network access required). 
    /// </remarks> 
    /// <param name="path">The path to check.</param> 
    /// <returns>True, if the path is under version control, else false.</returns> 
    private bool CheckIfPathIsUnderVersionControl(string path) 
    { 
     using (SvnClient svnClient = new SvnClient()) 
     { 
      // use ThrowOnError = false to avoid exception in case the path does 
      // not point to a versioned item 
      SvnInfoArgs svnInfoArgs = new SvnInfoArgs() { ThrowOnError = false }; 
      Collection<SvnInfoEventArgs> svnInfo; 
      return svnClient.GetInfo(SvnTarget.FromString(path), svnInfoArgs, out svnInfo); 
     } 
    } 

Si vous voulez savoir dans quel dépôt l'élément est versionné, vous pouvez retourner ces informations de la SvnInfoArgs aussi.

Si vous voulez vraiment utiliser svn status alors vous devriez jeter un oeil à this des questions car il explique pourquoi l'option RetrieveAllEntries doit être définie dans les SvnStatusArgs options et here.

+0

Merci royalTS pour les deux liens. Les deux travaillent pour moi. – kvk938

+0

@ kvk938 si cela a fonctionné, pourriez-vous s'il vous plaît marquer la réponse comme acceptée pour d'autres utilisateurs? – royalTS

0

Vous pouvez également utiliser la méthode GetUriFromWorkingCopy()

if (client.GetUriFromWorkingCopy(path) != null) 
{ //path under version control 
} 
else { //path not under version control }