Pagina 2 di 2

Re: [Bash] Svn Update

Inviato: venerdì 22 agosto 2008, 19:55
da Volans
Dall'output sembra di si, ma da `svn help info` sembra di no... :)

Re: [Bash] Svn Update

Inviato: venerdì 22 agosto 2008, 22:18
da Demiurgo
Volans ha scritto: Dall'output sembra di si, ma da `svn help info` sembra di no... :)
Dannazione  >:(

Quindi? hai qualche idea in particolare?

Re: [Bash] Svn Update

Inviato: domenica 24 agosto 2008, 12:05
da Demiurgo
Dai ragazzi! ;D non siate timidi!

Ne ho bisogno!  >:(

Re: [Bash] Svn Update

Inviato: mercoledì 27 agosto 2008, 12:39
da Demiurgo
Markon ha scritto: Potrebbe essere un'idea, ma dovresti essere sicuro che se l'output è maggiore di uno allora ci sono aggiornamenti, nel senso che a me con emesene mi dà questo:

Codice: Seleziona tutto

$ svn status -u emesene/
?                   emesene/MANIFEST
Stato rispetto alla revisione:   1453
Però a quanto pare non è un aggiornamento, quindi non saprei...
Ciao ;)
Potresti provare con il comando

Codice: Seleziona tutto

svn status -uq
non dovrebbe visualizzarti il ? ed in quel caso saremo a posto...

Il ? indica un file presente nella tua copia locale ma non ne repository...

Re: [Bash] Svn Update

Inviato: mercoledì 27 agosto 2008, 12:47
da Volans
Qual'è la domanda?
I file con "?" sono quelli che non sono sotto il controllo di SVN, quindi non puoi averli scaricati da SVN ma sono files aggiunti localmente. (pensa ad un programma che si compila, tu scarichi i sorgenti e lo compili, dopo avrai tanti files "nuovi" che se fai un svn status ti dice che non sono sotto il controllo di SVN)

Re: [Bash] Svn Update

Inviato: mercoledì 27 agosto 2008, 13:28
da Demiurgo
La mia richiesta era specifica per Markon perchè, per quanto ho capito, con il parametro q non segnala i ? e quindi sarebbe la soluzione al nostro problema, volevo solo la conferma da parte sua:

Ho trovato un comando molto interessante con i quel potrei risolvere il problema:

Codice: Seleziona tutto

svn status -uq > svnstatus.txt
$rev=`wc --lines svnstatus.txt | grep svnstatus.txt`
Potrebbe andare?

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 1:33
da Volans
Se proprio vogliamo trovare il pelo nell'uovo il -uq te lo avevo suggerito io ;)
Comunque come ti ho già detto prima se fai un controllo di questo genere io andrei a controllare che effettivamente ci sono dei file da aggiornare (simbolo *) e che non ci siano conflitti dopo l'update.
Il tuo comando non mi è chiaro, wc -l ritorna il numero di righe, a cosa ti serve fare il grep del nome del file?

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 11:53
da Demiurgo
Volans ha scritto: Se proprio vogliamo trovare il pelo nell'uovo il -uq te lo avevo suggerito io ;)
Sisi, lo so ... non mi prendo il merito, ho solo seguito il tuo consiglio! ;D
Volans ha scritto: Comunque come ti ho già detto prima se fai un controllo di questo genere io andrei a controllare che effettivamente ci sono dei file da aggiornare (simbolo *) e che non ci siano conflitti dopo l'update.
se non mi sbaglio il simbolo * viene utilizzato per i file Nuovi, per quelli modificati ad esempio si utilizza la M...
Volans ha scritto: Il tuo comando non mi è chiaro, wc -l ritorna il numero di righe, a cosa ti serve fare il grep del nome del file?
L'output del comando diventa di questo tipo:

Codice: Seleziona tutto

 [numero_righe] [nome_file] 
quindi per inserirlo in una variabile devo eliminare la parola svnstatus.txt... mi sbaglio??

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 12:17
da Volans
Ci sono alcune incongruenze:
- come puoi vedere leggendo `svn help status` la M è per i file modificati in locale mentre l'asterisco è per quelli che saranno aggiornati se si fa un `svn up`
- wc -l non mi sembra una buona soluzione perché tu devi controllare che ci sia almeno un file da aggiornare, se ci sono file modificati in locale non ti cambia nulla. Inoltre se usi wc -l devi togliere il nome del file, quindi usare `wc -l file | sed s/' .*$'/''/`e non grep
- come ti ho già detto sopra se c'è la rete puoi anche fare comunque un `svn up`, l'unica cosa è che devi controllare l'output per evitare conflitti.

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 12:28
da Demiurgo
Quindi mi suggerisci di fare così??

Codice: Seleziona tutto

svn status -uq > svnstatus.txt
$rev=`wc -l file | sed s/' .*$'/''/`
L'utente non deve modificare i file in locale e, nel caso in cui lo faccia, è tenuto comunque ad inviarli a noi amministratori in modo da poter rendere disponibile l'aggiornamento a tutti...

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 12:33
da Volans
Io di solito quando programmo cerco di fare tutto "user-free" e "bug-free", mentre la seconda accezione è ovvia, con la prima intendo prendere in considerazione qualsiasi comportamento l'utente potrà avere, anche il più assurdo, perché non sai mai che può fare un utente.

Per questo motivo, dato che sia per fare `svn status -u` che per fare `svn up` serve avere una connessione attiva, farei direttamente l'up e mi concentrerei sull'output dell'up così da evidenziare eventuali anomalie, conflitti eccc
Magari aggiungendo prima un controllo per vedere se la rete è attiva.

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 12:41
da Demiurgo
Volans ha scritto: Per questo motivo, dato che sia per fare `svn status -u` che per fare `svn up` serve avere una connessione attiva, farei direttamente l'up e mi concentrerei sull'output dell'up così da evidenziare eventuali anomalie, conflitti eccc
Se io faccio svn up questo mio aggiorna tutto ogni volta che avvio il programma, mentre io preferirei dare la possibilità all'utente di scegliere se effettuare l'update o meno...
Volans ha scritto: Magari aggiungendo prima un controllo per vedere se la rete è attiva.

Codice: Seleziona tutto

var=`ping -c 1 www.google.com | grep "received" | awk '{print $4}'`

if [ $var = 1 ]; then 
     echo "Done"; 
else
     echo "Err"; 
fi
Penso vada bene no? ;) Fonte: http://forum.ubuntu-it.org/viewtopic.php?t=211918

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 13:22
da Demiurgo
Ho creato uno script di prova così:

Codice: Seleziona tutto

var=`ping -c 1 www.google.com | grep "received" | awk '{print $4}'`

if [ $var = 1 ]; then 
	svn status -uq > svnstatus.txt
	$rev=`wc -l svnstatus.txt | sed s/' .*$'/''/`
	zenity --info --text="in numero di righe è $rev"
else
     zenity --error --text="Impossibile controllare gli Aggiornamenti"
fi
Sembra funzionare per quanto riguarda la parte del ping ma quando va a controllare gli aggiornamenti restituisce da terminale questo errore:
line 5: =1: command not found
e la schermata di zenity che dovrebbe apparire dopo, quella dove viene specificata visualmente la variabile, rimane vuota... ovvero appare scritto:
il numero di righe è
senza scrivere nessun numero...

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 15:50
da Volans
le variabili le definisci senza il dollaro, solo quando le richiami devi usare il dollaro, potrebbe tornarti utile guardare qualche guida di bash a partire dal nostro wiki ;)

Anche se continuo a non capire l'utilità di dire all'utente che ci sono N righe nell'svn up, se conosce svn preferirebbe vedere direttamente l'output, se non lo conosce non sa cosa voglia dire... ma queste sono scelte implementative che sta a voi fare ;)

Re: [Bash] Svn Update

Inviato: giovedì 28 agosto 2008, 18:00
da Demiurgo
Volans ha scritto: le variabili le definisci senza il dollaro, solo quando le richiami devi usare il dollaro, potrebbe tornarti utile guardare qualche guida di bash a partire dal nostro wiki ;)
Scusa avevo sbagliato a scrivere...
Volans ha scritto: Anche se continuo a non capire l'utilità di dire all'utente che ci sono N righe nell'svn up, se conosce svn preferirebbe vedere direttamente l'output, se non lo conosce non sa cosa voglia dire... ma queste sono scelte implementative che sta a voi fare ;)
Non voglio dire all'utente quante righe ci sono... mi serve a me per capire se fino a li va tutto bene con quella variabile..

Adesso penso di farcela da solo, se avrò altri problemi provvederò a contattarvi... grazie!

Re: [Bash] Svn Update

Inviato: martedì 9 settembre 2008, 10:41
da Demiurgo
Risolto  ;D (good)

Codice: Seleziona tutto

#!/bin/bash

var=`ping -c 1 www.google.it | grep "received" | awk '{print $4}'`

if [ $var = 1 ]
	then 
	#Ricevo la revisione del Server
	svn info [percorso_server] | grep Revisione: > svnstatus.txt
	sed -i 's/Revisione: //g' svnstatus.txt
	revsvn=` sed -n '1p' svnstatus.txt`

	#Ricevo la revisione Locale
	svn info [percorso_locale] | grep Revisione: > svnstatuslocale.txt
	sed -i 's/Revisione: //g' svnstatuslocale.txt
	revsvnloc=` sed -n '1p' svnstatuslocale.txt`

	rm svnstatus.txt svnstatuslocale.txt
	#Confronto i numeri delle due revisioni 
	if [ $revsvn -eq $revsvnloc ]
	    then
	            zenity --info --text="Non sono presenti aggiornamenti"
	    else
	            zenity --question --text="Sono presenti aggiornamenti\n si desidera fare l'update?"
			if [ $? -eq 0 ]
			then
				pass=`zenity --entry --hide-text --text="Inserisci la password di root .:" --title="Update..."`
				echo "$pass" | sudo -S svn up [percorso_locale] | tee >(zenity --text-info --title="Update...")
			else
			zenity --text="Aggiornamento annullato..."
			fi
	fi
else
zenity --error --text="Impossibile controllare la presenza di aggiornamenti" --title="Errore!"
fi
Enjoy! ;D