2010-05-07 17 views
19

He hecho un svn:external en mi repositorio. Todo funciona bien, excepto el resultado del comando svn status. En la salida hay mucha información que no necesito:No mostrar svn: externals en estado svn

$ svn st 
X  lib 

Performing status on external item at 'lib' 

Puedo correr svn st --ignore-externals -q y puedo colocar esta línea en un pequeño script, pero tal vez hay una mejor solución. ¿Cómo puedo ver el estado de mi copia de trabajo sin ver información sobre externos?

+1

1 Tengo el mismo problema, en lugar hubiera gustado --ignore-externos sean el predeterminado o configurable para convertirse en predeterminado. –

+2

Para que quede claro: -q (modo silencioso) elimina la línea "X lib" y --ignore-externals quita la línea "Realizar el estado en el elemento externo en 'lib'". Mejor actualizar la respuesta en base a esto. –

+2

Por lo que vale, http://subversion.tigris.org/issues/show_bug.cgi?id=1935 tiene una larga discusión, que aún no he terminado de leer. Hasta ahora, parece que se ha establecido un consenso razonable para solucionar esto en 2004 .../-: – tripleee

Respuesta

0

La búsqueda se vuelve una aplicación clever Bash script que anula el comando svn con un guión. Sin embargo, quería hacer algo similar en Windows. Eliminar el directorio svn de su PATH, a continuación, crear una secuencia de comandos por lotes denominado svn.bat y ponerlo en algún lugar de su PATH (como C:\Windows):

@echo off 
setlocal 

if (%1)==(st) goto :match 
if (%1)==(stat) goto :match 
if (%1)==(status) goto :match 

:: If not running Status command, just pass the args along 
"C:\Program Files\SlikSvn\bin\svn" %* 
goto :eof 

:match 

:: Init variables 
set svnargs1= 
set svnargs2=--ignore-externals 

:: Loop through arguments 
:loop 
if "%~1"=="" goto :cont 

:: Look for ignore externals flag 
if "%~1"=="--examine-externals" (
    set svnargs2= 
) else (
    if "%~1"=="-h" (
     set svnargs2= 
    ) 

    set svnargs1=%svnargs1% %1% 
) 


shift & goto :loop 
:cont 

:: Call svn 
"C:\Program Files\SlikSvn\bin\svn" %svnargs1% %svnargs2% 
0

Creo que hay una respuesta aún realmente resuelve el problema en el sentido de que si los cambios en una parte de svn: externals se ha realizado, por supuesto, deberían mostrarse. Esto, de manera propagable, no tiene sentido para los repositorios realmente externos. Pero utilizo svn: externals para agregar una carpeta de compilación general desde el mismo repositorio en proyectos (porque no existe una jerarquía general de los módulos). Y no quiero usar las opciones --ignore-externals -q ya que pierdo información sobre archivos no agregados y cambios en el script de compilación general que he realizado en este proyecto (que podría querer confirmar). Mi solución fue parchar la implementación de línea de comando de subversión java svnkit.

AbstractSVNCommand.registerCommand(new SVNStatusCommand()); 
final ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
final PrintStream stream = new PrintStream(bos); 

final SVNCommandLine commandLine = new SVNCommandLine(); 
commandLine.init(new String[] { "status", "PATH..." }); 

final SVNCommandEnvironment env = new SVNCommandEnvironment("mySvn", stream, stream, System.in); 
env.init(commandLine); 
env.initClientManager(); 

final SVNStatusCommand svnStatusCall = new SVNStatusCommand(); 
svnStatusCall.init(env); 
svnStatusCall.run(); 
stream.flush(); 
String result = new String(bos.toByteArray()); 

StringBuffer buffer = new StringBuffer(); 
Scanner scanner = new Scanner(result); 
while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    if (line.startsWith("X") || line.startsWith("Performing status on external item at")) { 
     // ignore this output 
    } else if (line.trim().isEmpty() == false) { 
     buffer.append(line + "\n"); 
    } 
} 

System.out.println(buffer.toString()); 

Esto resuelve el problema porque los cambios en factores externos también están marcados con 'M' para modificar ...

Cuestiones relacionadas