/// <summary> /// Gets the root directory of the repository, derived from the current directory and svn info /// </summary> /// <returns></returns> public string GetLocalRootDirectory() { Regex urlRegEx = new Regex(@"^(\s)*URL(\s)*:(\s)*(?<url>(\S)*)(\s)*$", RegexOptions.ExplicitCapture); ProcessReader procReader = new ProcessReader(LogOptions.None); string svnInfo = procReader.RunExecutable(ClientExe, false, "info"); string url = null; if (svnInfo != null) { StringReader sr = new StringReader(svnInfo); while (url == null) { string l = sr.ReadLine(); if (l == null) break; Match urlMatch = urlRegEx.Match(l); if (urlMatch.Success) { url = urlMatch.Groups[1].Value; } } } // the client is unused in Subversion, so generate our from the computer name return GetLocalRootDirectory(url); }
private string RunClient(string commandLine, bool eatFirstLine) { if (SourceControl.ServerType != SourceControlType.SUBVERSION) return null; ProcessReader procReader = new ProcessReader(LogLevel); return procReader.RunExecutable(ClientExe, eatFirstLine, commandLine); }
/// <summary> /// Gets the client settings. /// </summary> /// <returns></returns> public static SourceControlSettings GetSettings() { SourceControlSettings settings = new SourceControlSettings(); settings.Port = Environment.GetEnvironmentVariable("SVNURL"); string path = Environment.GetEnvironmentVariable("path").Replace("\"", ""); string[] pathArray = path.Split(';'); for (int i = 0; i < pathArray.Length; ++i) { string svn = Path.Combine(pathArray[i], "svn.exe"); if (File.Exists(svn)) { settings.ClientExe = svn; break; } } // get override settings from svn info output // Example: // D:\projects\Malevich\Malevich>svn info // Path: . // URL: https://malevich.svn.codeplex.com/svn/Malevich // Repository Root: https://malevich.svn.codeplex.com/svn // Repository UUID: 8ead0314-7f71-49e1-95c8-3147638646d4 // Revision: 40756 // Node Kind: directory // Schedule: normal // Last Changed Author: unknown // Last Changed Rev: 35869 // Last Changed Date: 2010-01-10 23:37:13 -0800 (Sun, 10 Jan 2010) if (settings.ClientExe != null) { Regex portRegex = new Regex(@"^(\s)*Repository Root(\s)*:(\s)*(?<url>(\S)*)(\s)*$", RegexOptions.ExplicitCapture); Regex urlRegEx = new Regex(@"^(\s)*URL(\s)*:(\s)*(?<url>(\S)*)(\s)*$", RegexOptions.ExplicitCapture); ProcessReader procReader = new ProcessReader(LogOptions.None); string svnInfo = procReader.RunExecutable(settings.ClientExe, false, "info"); string url = null; if (svnInfo != null) { StringReader sr = new StringReader(svnInfo); while (settings.Port == null || url == null) { string l = sr.ReadLine(); if (l == null) break; if (settings.Port == null) { Match portMatch = portRegex.Match(l); if (portMatch.Success) { settings.Port = portMatch.Groups[1].Value; } } Match urlMatch = urlRegEx.Match(l); if (urlMatch.Success) { url = urlMatch.Groups[1].Value; } } } // the client is unused in Subversion, so generate our from the computer name string localRoot = GetLocalRootDirectory(url); if (localRoot != null) { settings.Client = Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + localRoot; } } return settings; }