2009-06-08 27 views
5

Me gustaría agregar todos los archivos no versionados bajo un directorio a SVN usando SharpSVN.Agregar archivo usando SharpSVN

Probé comandos regulares SVN en la línea de comandos en primer lugar:

C:\temp\CheckoutDir> svn status -v 

veo todos los subdirectorios, todos los archivos que ya estén marcados, unos nuevos archivos etiquetados, nada con la "L "?" "indicación de bloqueo

C:\temp\CheckoutDir> svn add . --force 

Esto se traduce en todos los nuevos archivos en los subdirectorios, que ya se encuentran bajo el control de versiones a sí mismos, que se añade.

Me gustaría hacer lo mismo con SharpSVN. Copio algunos archivos adicionales en el mismo directorio y ejecutar este código:

... 
using (SharpSvn.SvnClient svn = new SvnClient()) 
{ 
    SvnAddArgs saa = new SvnAddArgs(); 
    saa.Force = true; 
    saa.Depth = SvnDepth.Infinity; 
    try 
    { 
     svn.Add(@"C:\temp\CheckoutDir\." , saa); 
    } 
    catch (SvnException exc) 
    { 
     Log(@"SVN Exception: " + exc.Message + " - " + exc.File); 
    } 
} 

Pero una SvnException se eleva:

  • SvnException.Message: copia de trabajo 'C: \ temp \ CheckoutDir' encerrados
  • SvnException.File: .. \ .. \ .. \ subversión \ libsvn_wc \ lock.c"

Ningún otro ejemplo svnclient se está ejecutando en mi código, también intentamos llamar

svn.cleanup() 

justo antes del Agregar, pero sin éxito.

Dado que el documentation es bastante vago;), Me preguntaba si alguien aquí sabía la respuesta.

¡Gracias de antemano!

Ene

+1

¿Has intentado preguntar en los foros de discusión de SharpSVN? Probablemente puedas obtener una mejor respuesta allí. – hao

+0

Mientras tanto, miré en el código de pruebas de unidad: http://sharpsvn.open.collab.net/source/browse/sharpsvn/trunk/src/SharpSvn.Tests/Commands/AddTests.cs TestAddDirectoryRecursively hace algo similar, pero agrega un nuevo directorio1 en WorkingcopyPath y todo en él. Me gustaría agregar todo en WorkingCopyPath. – jan

Respuesta

5

Utilice esta mi herramienta http://svncompletesync.codeplex.com/ o tómelo como muestra. Hace exactamente lo que necesita.

+0

Gran herramienta Malcom, hace exactamente lo que dice en la caja. +1 –

1

creo que no debería sufijo el camino con un ''. Proveedores:

svn.Add(@"C:\temp\CheckoutDir" , saa); 

Por favor, no hablar más de esto en la lista de placas/correo SharpSvn discusión, porque el comportamiento que está viendo podría ser un error.

+0

El código que propones me dice: "C: \ temp" no está bajo control de versión. Lo cual está bien. Pero no me ayuda. Publicaré en los foros tan pronto como pueda. ¡Gracias! – jan

2

Probé la herramienta de Malcolm pero no pude ejecutarla ahora que parece que tiene algunos años, pero después de mirar el código fuente parece que esto es realmente todo lo que necesita para sincronizar la marca local carpeta de salida con el que está en SVN:

string _localCheckoutPath = @"C:\temp\CheckoutDir\"; 
SvnClient client = new SvnClient(); 

Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>(); 
client.GetStatus(_localCheckoutPath, out changedFiles); 

//delete files from subversion that are not in filesystem 
//add files to suversion , that are new in filesystem 

foreach (SvnStatusEventArgs changedFile in changedFiles) 
{ 
    if (changedFile.LocalContentStatus == SvnStatus.Missing) 
    { 
     client.Delete(changedFile.Path); 
    } 
    if (changedFile.LocalContentStatus == SvnStatus.NotVersioned) 
    { 
     client.Add(changedFile.Path); 
    } 
} 

SvnCommitArgs ca = new SvnCommitArgs(); 
ca.LogMessage = "Some message..."; 

client.Commit(_localCheckoutPath, ca); 
Cuestiones relacionadas