2009-05-15 12 views
38

Sto scrivendo uno script che aggiungerà un nuovo progetto nel repository, in base al nome fornito dall'utente. In parte ciò implica il controllo che un URL con lo stesso nome non esista già nel repository.Verificare che un URL del repository svn non esista

Nel repository, tutti i progetti della nostra squadra sono memorizzati in

https://developernetwork.repo.net/svn/Projects/

Diciamo che l'utente vuole chiamare il progetto "Calcolatrice" ed esegue lo script. In questo caso, dobbiamo fare in modo che la segue non esiste già nel repository

https://developernetwork.repo.net/svn/Projects/Calculator/

C'è un comando svn che posso usare per realizzare questo? Sfortunatamente non riesco a vedere un comando appropriato che possa essere usato nella documentazione di svn (http://svnbook.red-bean.com/en/1.0/svn-book.html).

+3

La documentazione si collega a è il modo fuori di data, per svn 1.0. Leggi http://svnbook.red-bean.com/nightly/en/index.html per gli ultimi documenti. –

risposta

37

Si può semplicemente utilizzare

svn ls https://developernetwork.repo.net/svn/Projects/Calculator/ 

Essa vi dirà se il repository (directory) esiste o non.

Aggiornamento

per le directory con molti file usano:

svn ls http://server/svn/foo --depth empty 
+0

Questo funziona. Se la directory non esiste ricevo il seguente errore: svn: URL 'https://developernetwork.repo.net/svn/Projects/Calculator/ ' inesistente in quella revisione. Questa dovrebbe essere una stringa di ricerca abbastanza buona. Appena fuori interesse, c'è un modo migliore per lo script di analizzare i risultati rispetto alla ricerca dell'output di testo per una corrispondenza "inesistente in quella revisione"? – Andy

+0

Come suggerito nell'altro commento, la ricerca di "inesistente" potrebbe non essere l'ideale in quanto il messaggio di errore cambia da versione a versione, ad es. svn 1.6.1 ha cambiato l'errore msg in 'svn: Nessun repository trovato in' svn + ssh: // '. Tuttavia, l'analisi di xml non è affidabile a partire da svn 1.6.1, se il repository non è esatto, restituirà un xml incompleto che non è analizzabile. Quello peggiorerebbe. Il modo migliore che posso pensare è probabilmente quello di verificare se l'url del repository originale che hai inviato è nel messaggio di risposta. Sembra essere garantito che verrà restituito se qualcosa è andato storto. – Liwen

+0

Grazie. Dover analizzare l'output testuale dei comandi è uno degli aspetti meno divertenti dello scripting, ma deve essere fatto. Verificherò quindi l'URL del repository nel messaggio di ritorno. – Andy

8

Per ricevere informazioni su qualsiasi repository esistente (ad esempio, per eventualmente arricchire un messaggio di errore) si potrebbe anche usare

svn info https://developernetwork.repo.net/svn/Projects/Calculator/ 

Per un progetto non esistente sarà sufficiente restituire

svn: Could not open the requested SVN filesystem 
+0

In realtà, la mia versione di Slik SVN restituito: https://developernetwork.repo.net/svn/Projects/Calculator/ : (Non è un URL valido) svn: Si è verificato un problema; vedere altri errori per i dettagli Tuttavia, "Non un URL valido" dovrebbe essere una stringa di ricerca sufficientemente buona. Solo per interesse, c'è un modo migliore per lo script di analizzare i risultati rispetto alla ricerca dell'output di testo per una stringa "Not a valid URL"? – Andy

+0

Considerati i diversi possibili messaggi di errore che potrebbero derivare da diverse build di svn, dovresti considerare di analizzare la stringa di output per un pattern positivo anziché negativo. Cioè, prova per il verificarsi di qualcosa che non otterrai quando il repository NON esiste. Qui, CollabNet SVN 1.6.1 (Windows) offre la possibilità di attivare l'output xml tramite il parametro '--xml'. Personalmente vorrei solo verificare l'esistenza dell'elemento UUID, che dovrebbe essere incluso in tutti i dati 'info' (correggimi se non lo sono). – amain

+0

Grazie. Non abbiamo ancora il server 1.5.0 ancora in esecuzione, quindi annoterò il tuo commento e lo inserirò nell'elenco delle cose da fare. – Andy

40

Invece di controllare per le stringhe di ritorno vorrei solo controllare il codice di ritorno:

sia

svn ls REPOSITORY/PATH 

e

svn info REPOSITORY/PATH 

ritorno 0 se tutto è andato bene, e 1 se le cose fossero andate storte; è possibile verificare velocemente fuori:

echo $? 

così in uno script bash proprio fare qualcosa di simile:

error=$? 
if [ $error -ne 0 ]; then 
     YOUR ERROR HANDLING 
fi 

opere come una vera delizia!

+0

Grazie per il tuo commento. È anche possibile farlo nel bel mezzo di uno script Perl. In ogni caso, questa è diventata una domanda accademica poiché il progetto a cui stavo lavorando è stato demolito! – Andy

+1

scusa per il tuo progetto! speriamo che questa risposta sia utile per qualcun altro .. – Stefano

+3

Questo dovrebbe essere contrassegnato come la risposta corretta – MatteoSp

2

Affronto il problema precedente e ho provato fino in fondo. non funziona per me .. se accediamo a svn con un percorso non in svn è fallito con errore e lo script della shell si interromperà.

Invece di accedere a un percorso sconosciuto, ciò che ho ottenuto è ottenere l'elenco di directory della cartella padre e controllare se la corrispondenza di uno contiene o meno.

ottenere tutti i progetti formano la vostra directory principale (se si vuole trovare uno specifico tag allora il vostro genitore percorso di directory dovrebbe essere https://developernetwork.repo.net/svn/Projects/Calculator/tags)

projects=$(svn ls https://developernetwork.repo.net/svn/Projects/) 

quindi controllare esiste cartella del progetto. Ricorda di aggiungi / dopo il nome del tuo progetto.

projectName="Calculator/" 
for i in $projects; do 
    if [ "$i" == "$projectName/" ]; 
     then 
     echo Project Exist 
     else 
     echo Project does not exist 
    fi 
done 

semplice.

1

Avrei commentato una risposta esistente ma non ho una reputazione sufficiente.

Volevo scoprire se un file è stato importato con successo o meno, quindi ho provato "svn info" e "svn ls" con "echo $?". Ho potuto ottenere solo un codice di ritorno zero/non zero quando ho usato "svn ls": "svn info" ha sempre restituito zero.

Questo era con subversion 1.5.5 su RedHer RHEL6.

0

Come @A Scott dice, lo echo $? non può essere utilizzato per sapere se l'URL è corretto (sono su Mac OS 10.11 e SVN client 1.9.5).

Per i potenziali futuri lettori, io uso questa soluzione:

content=$(svn info $SVN_TAG_URL) 

if [[ -z $content ]]; then 
    echo "The SVN URL doesn't exist"; exit 
fi 
Problemi correlati