我目前正在尝试确定工作副本中的目录是否为外部目录或不使用SharpSvn。对于文件来说这很容易,因为IsFileExternal
中有选项SvnStatusEventArgs
,但对于目录来说,这似乎并不容易。
在目录上运行svn status
命令不返回任何信息,这是有意义的,因为外部定义附加到父目录。但是在父目录上运行svn status
,由于外部定义而发出包含目录的信号。
在SharpSvn中做同样的事情也无济于事。没有迹象表明任何子目录都是外部的。
我的第一个想法是检查父目录是否有任何外部定义,但如果存在文件和外部目录的定义,则可能会出现问题。
有没有人有解决方案或想法如何解决这个问题?
答案 0 :(得分: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;
}