2010-05-07 19 views
19

Ho creato uno svn:external nel mio repository. Tutto funziona correttamente, tranne l'output del comando svn status. In uscita c'è sacco di informazioni non ho bisogno:Non mostrare svn: esterni in stato svn

$ svn st 
X  lib 

Performing status on external item at 'lib' 

posso correre svn st --ignore-externals -q e posso mettere questa linea in un piccolo script, ma forse c'è soluzione migliore. Come posso vedere lo stato della mia copia di lavoro senza visualizzare informazioni sugli esterni?

+1

+1 hanno lo stesso problema, avrei preferito voluto --ignore-esterni siano il predefinito o configurabile per diventare predefinito. –

+2

Giusto per essere chiari: -q (modalità silenziosa) rimuove la riga "X lib" e --ignore-esterni rimuove la riga "Esecuzione dello stato sull'elemento esterno su" lib "". Meglio per aggiornare la risposta sulla base di questo. –

+2

Per quello che vale, http://subversion.tigris.org/issues/show_bug.cgi?id=1935 ha una lunga discussione, che non ho ancora finito di leggere. Finora, sembra che un ragionevole consenso sulla correzione di ciò sarebbe stato stabilito nel 2004 .../-: – tripleee

risposta

0

Ricerca salta fuori un'implementazione clever Bash script che sostituisce il comando svn con uno script. Tuttavia, volevo fare qualcosa di simile in Windows. Rimuovere la directory svn dal PATH, quindi creare uno script batch chiamato svn.bat e metterlo da qualche parte nel vostro PATH (come 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

Penso che nessuna risposta ancora risolve veramente il problema, nel senso che se i cambiamenti in una parte di svn: gli esterni sono stati fatti, ovviamente dovrebbero essere visualizzati. Ciò non ha alcun senso per i repository esterni. Ma io uso svn: esternals per aggiungere una cartella generica di build dallo stesso repository ai progetti (perché non esiste una gerarchia generale dei moduli). E non voglio usare le opzioni --ignore-externals -q perché ho perso le informazioni sui file non aggiunti e le modifiche nello script di generazione generale che ho fatto in questo progetto (che potrei voler commettere). La mia soluzione è stata quella di applicare patch alla sottoversione java command line instlemantation 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()); 

Questo risolve il problema perché variazioni esterni sono contrassegnati con 'M' di modifica ...

Problemi correlati