2017-08-14 14 views
1

現在、作業コピー内のディレクトリがSharpSvnを使用しているかどうかを判断しようとしています。ファイルの場合は、SvnStatusEventArgsにオプションIsFileExternalがあるので非常に簡単ですが、ディレクトリの場合はそれほど簡単ではないようです。SharpSvnを使用してディレクトリが外部にあるかどうかをチェック

ディレクトリでsvn statusコマンドを実行しても、外部定義が親ディレクトリに関連付けられているため、意味をなさない情報は返されません。しかし、親ディレクトリでsvn statusを実行すると、外部定義のためにそこに含まれているディレクトリが存在することが通知されます。

SharpSvnで同じことをすることは役に立ちません。サブディレクトリが外部であることを示すものはありません。

私の最初のアイデアは、親ディレクトリの外部定義があるかどうかを確認することでしたが、ファイルとディレクトリの定義が外部にある場合は問題になる可能性があります。

誰もがこの問題を解決する方法やアイデアを持っていますか?

答えて

1

私の最初のアイデアはうまくいったようです。外部アイテムがあるかどうかを確認するには、次のようにします。

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; 
    } 
関連する問題