public static string GetPropertyValue(FilePath svnExecutableFilePath, AbsolutePath path, string propertyName, ILogger logger) { logger.LogDebug($"Getting value of SVN property {propertyName} for {path}..."); var arguments = $@"propget {propertyName} ""{path}"" --xml"; var outputCollector = SvnCommandServicesProvider.Run(svnExecutableFilePath, arguments); // Parse output. var svnOutput = outputCollector.GetOutputText(); var document = XDocument.Parse(svnOutput); var properties = document.Element("properties"); if (!properties.Elements().Any()) { throw new Exception($"SVN automation failure.\nReceived:\n{svnOutput}"); } var expectedPath = PathUtilities.EnsureNonWindowsDirectorySeparator(path.Value); // Path value is converted to a non-Windows path. var property = properties.Elements("target").Where(x => x.Attribute("path").Value == expectedPath).Single().Element("property"); if (property.Attribute("name").Value != propertyName) { throw new Exception($"SVN automation failure.\nReceived:\n{svnOutput}"); } var output = property.Value; logger.LogInformation($"Got value of SVN property {propertyName} for {path}."); return(output); }