使用 SharpSvn 检查目录是否为外部目录

Check if directory is external using SharpSvn

我目前正在尝试使用 SharpSvn 确定工作副本中的目录是否为外部目录。对于文件来说很容易,因为 SvnStatusEventArgs 中有选项 IsFileExternal,但是对于目录来说似乎并不那么容易。

运行 目录上的 svn status 命令没有 return 任何信息,这是有道理的,因为外部定义附加到父目录。但是父目录上的 运行 svn status 表示由于外部定义而包含的目录在那里。

在 SharpSvn 中做同样的事情没有帮助。没有迹象表明任何子目录是外部的。

我的第一个想法是检查父目录是否有任何外部定义,但如果有文件和目录的外部定义,这可能是个问题。

有没有人知道如何解决这个问题?

看来我的第一个想法实现了。要检查任何项目是否为外部项目,以下内容会有所帮助:

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;
    }