No se puede leer la raíz

Así que estoy usando SharpSVN (SharpSvn.1.7-x86 1.7008.2243) y sigo teniendo un problema. Cada vez que trato de usar el SvnWorkingCopyClient en un repository que está en la raíz de una unidad (por ejemplo, decir que tengo la unidad D:\ y es un repository), me arroja un error svn_dirent_is_absolute .

De hecho, el único command que pude encontrar que no me importó fue SvnClient.GetUriFromWorkingCopy(string)

¿Alguna idea sobre cómo podría resolver esto (aparte de mover mi copy de trabajo o vincular el sistema de files)? Espero encontrar un path en el código, o una alternativa para evitar esta limitación (ya que parece que SVN 1.7 ya no tiene esta limitación).

Aquí hay un código?

 private void fakeFunction(){ var RootPath="d:\"; using (var client = new SharpSvn.SvnClient()) using(var workingClient = new SvnWorkingCopyClient()) { SvnWorkingCopyVersion workingVersion = null; // Exception happens here if (workingClient.GetVersion(this.RootPath, out workingVersion)) { CurrentRevision = workingVersion.End; // This will resolve just fine var targetUri = client.GetUriFromWorkingCopy(RootPath); var target = SvnTarget.FromUri(targetUri); SvnInfoEventArgs info = null; if (client.GetInfo(target, out info)) { if (workingVersion.End != info.Revision) { System.Collections.ObjectModel.Collection<SvnLogEventArgs> logEventArgs = null; if (client.GetLog(targetUri, out logEventArgs)) { var oldBack = Console.BackgroundColor; var oldFor = Console.ForegroundColor; Console.BackgroundColor = ConsoleColor.DarkMagenta; Console.ForegroundColor = ConsoleColor.White; foreach (var l in logEventArgs) { Console.WriteLine("[{0}-{1}]-{2}", l.Revision, l.Author, l.LogMessage); } Console.BackgroundColor = oldBack; Console.ForegroundColor = oldFor; } System.Console.WriteLine("Repo not up to date."); } } } } } 

También tropecé con este http://subversion.tigris.org/issues/show_bug.cgi?id=3535 y http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&viewType=browseAll&dsMessageId=2456472

Entonces, dado que eso pasó mucho time atrás, ¿no debería seguir siendo un problema?

SharSVN tiene problemas con las routes de acceso raíz, como podemos leer en los files de correo. Sin embargo, podemos hacer pequeños hack para su ocasión:

  1. Descargar el package completo sharpsvn http://sharpsvn.open.collab.net/files/documents/180/5569/SSvnEx-1.7002.1998.zip
  2. Copie svnversion.exe a su directory bin
  3. Entonces necesitamos un método de pirateo para get la versión

      public static bool GetVersionHack(string appPath,string targetPath,out long version) { // <param name="appPath">Path to svnversion.exe</param> // <param name="path">Target path</param> // <param name="version">Result version</param> Process p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.FileName = appPath; p.StartInfo.Arguments = targetPath + " -n"; p.Start(); //read svnversion.exe result string output = p.StandardOutput.ReadToEnd(); p.WaitForExit(); output = output.Replace("M", ""); output = output.Replace("S", ""); output = output.Replace("P", ""); //valid results //4123:4168 mixed revision working copy //4168M modified working copy //4123S switched working copy //4123P partial working copy, from a sparse checkout //4123:4168MS mixed revision, modified, switched working copy return long.TryParse(output, out version); } 
  4. Y modifique su método falso código fuente completo

Claro que es un trabajo sucio pero puede ser útil. Tenga cuidado con los resultados de svnversion.exe GetVersionHack no es ideal.

Un kludge es "…" llegar hasta la raíz desde su directory actual:

 [pwd = C:\USERS\franklin\absrel] root = ..\..\.. 

Si se queja de la ruta absoluta, intente definir la ruta de acceso unc. Comparta su D: \ unidad que es su svn repo. Luego acceda usando

  var RootPath="\\<servername>\D$";