Pagina 1 di 2
[Risolto] [Bash] Svn Update
Inviato: mercoledì 20 agosto 2008, 18:53
da Demiurgo
Ciao a tutti ragazzi...
Sono alle prese con un carinissimo progetto in bash che si aggiorna tramite svn quando l'utente clicca sul tasto "aggiorna", quello che vorrei fare è una funzione con if che mi permetta di fare ciò:
Si connette a svn e controlla se sono presenti aggiornamenti ad ogni avvio, se sono presenti mostra un messaggio e richiede all'utente di fare l'update, invece se non sono presenti aggiornamenti il programma prosegue normalmente... qualcuno ha idee?? (b2b)
Re: [Bash] Svn Update
Inviato: mercoledì 20 agosto 2008, 22:59
da Markon
Ciao!
Allora, dovresti fare uno script bash/perl/python o come vuoi che faccia questa cosa:
svn info PacchettoDaControllare.
Solitamente rilascia delle informazioni, che tu devi confrontare.
Ad esempio:
Codice: Seleziona tutto
Percorso: emesene
URL: https://emesene.svn.sourceforge.net/svnroot/emesene/trunk/emesene
Repository: https://emesene.svn.sourceforge.net/svnroot/emesene
UUID del Repository: 1e86ae66-1a1c-0410-8f2d-e5c3504d5e31
Revisione: 1449
Tipo di Nodo: directory
Azione: normale
Autore dell'Ultimo Cambiamento: JoinTheHell
Revisione dell'Ultimo Cambiamento: 1437
Data dell'Ultimo Cambiamento: 2008-07-28 14:56:12 +0200(lun, 28 lug 2008)
Come puoi notare la Revisione e la Revisione dell'ultimo cambiamento non corrispondono, perchè non aggiorno da un po'. Per cui dovresti controllare quelle due cose. Se sono diverse, allora aggiorni.
Ciao

PS: puoi farlo con le regular expressions (o REGEX)
Re: [Bash] Svn Update
Inviato: mercoledì 20 agosto 2008, 23:30
da Demiurgo
Ti dico subito che non sono molto esperto di bash per ora...
Non potrei fare una cosa del tipo:
- chiedi con svn la revisione che è online al momento
- vedi la versione che è presente in locale
- se le due versioni sono diverse ==> svn up
Non so se si può fare ma non mi sembra impossibile...
P.s. non si tratta di un singolo pacchetto come nel tuo caso ma di una serie di file!
Re: [Bash] Svn Update
Inviato: giovedì 21 agosto 2008, 11:32
da Demiurgo
ho trovato il comodissimo comando
Se ci sono differenze l'output è come questo:
Codice: Seleziona tutto
svn status -u
* 76 Multimedia/banshee
* 76 Multimedia/smile
M 76 Network/web_svr
Stato rispetto alla revisione: 83
Se invece non ci sono differenze (quindi è alla versione più aggiornata):
Una cosa un po grezza sarebbe questa: se le righe di output del comando sono maggiori di 1 allora svn up, se no continua l'esecuzione del programma... cosa ne dici??
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 9:20
da Markon
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

Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 10:58
da Demiurgo
mmmm.... quindi? altre soluzioni?
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 13:11
da Volans
Se tu non modifichi mai i file di questo repository SVN in locale ma devi solo aggiornarlo puoi usare l'opzione:
che non fa vedere i file che non sono sotto il controllo di revisione di SVN (quelli con la ? appunto).
Il controllo che puoi fare è cercare se ci sono asterischi nella colonna corretta quando ci sono più righe di output.
Se invece fai modifiche al codice, ti sconsiglio vivamente di fare update tramite script perché ti perderesti i messaggi di SVN che ti dicono se ci sono conflitti tra le modifiche locali e quelle scaricate dal repository.
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 14:03
da Demiurgo
In questo repo capita che a volte vengano fatte modifiche all'interno dei singoli file...
Tu volans come mi consigli di fare?
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 14:24
da Volans
Ma le modifiche le fai tu nella tua copia locale?
Perché altrimenti va benissimo l'update automatico.
Può dare conflitti solo se tu fai modifiche alla tua copia locale senza aver aggiornato prima e se non le committi.
Inoltre se non ci tieni ad essere super pignolo, puoi fare un `svn up` comunque, senza controllare se ci sono aggiornamenti o no. Di fatto `svn status` è una simulazione di un `svn up` e se non ci sono aggiornamenti l'`svn up` non fa altro che dirti che è già all'ultima revisione.
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 14:28
da Demiurgo
Io faccio sempre così prima di modificare i file:
- do svn up e aggiorno il tutto
- Svn commit dei file interessati dalla modifica
Scusa se ti faccio immattire con sto benedetto svn ma io non ne capisco molto, quindi ti sarei grato se potessi parlare nel modo piu' dettagliato possibile , grazie mille comunque!

Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 14:33
da Volans
Se fai sempre così non c'è problema, perché vuol dire che quando avvii il computer non hai MAI (ed è bene che non succeda mai

) files la cui copia locale è diversa da quella su SVN.
In questo caso quindi puoi anche dare un update all'avvio da script, certo non vedrai quali files sono stati aggiornati, ma se non ti interessa particolarmente puoi farlo senza problemi.
Altro controllo di sicurezza che potresti fare è prendere l'output dell' `svn up` e controllare che non ci siano conflitti, in quel caso ti salvi quello che ti serve in un file in un posto dove lo vedi di sicuro se c'è

Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 14:39
da Demiurgo
Ok... ho capito come vuoi fare ma ho qualche problema nel metterlo in pratica...
Io voglio che sia l'utente a scegliere se fare o meno l'aggiornamento, ad ogni avvio lo script deve controllare solo se sono presenti nuovi aggiornamenti, se sono presenti manda una maschera all'utente dove richiede l'aggiornamento se no il programma deve proseguire normalmente, anche perchè se faccio come dici te (con aggiornamento sempre e comunque ad ogni avvio) l'utente è costretto ogni volta a digitare la password di root per fare l'svn up... mi sbaglio?
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 16:29
da Volans
Aspetta, a questo punto sono io a non essere sicuro di aver capito cosa vuoi fare... rileggendo il tuo primo messaggio non mi è chiarissimo cosa intendi per "quando l'utente clicca sul tasto aggiorna" e non ho capito di che progetto si tratti, se da distribuire o una cosa tua personale.
`svn up` non va fatto da root, ma dall'utente che ha fatto il checkout che può tranquillamente essere l'utente standard, dipende anche da chi deve usare quei files e per farci cosa.
Se quello che vuoi fare è un'interfaccia grafica ad svn credo che ce ne siano già in giro e vari IDE o programmi di diff riescono a gestire sistemi di controllo della versione come SVN graficamente.
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 18:57
da Demiurgo
Mi spiego meglio
Ho un programma che sto costruendo con un mio collaboratore (
http://nude.netsons.org ), una raccolta di script in bash fatti con zenity con una piccola interfaccia grafica (sempre in zenity) che serve per fare una sorta di "raccoglitore" e suddivide gli script in categorie.
Quello che vorrei fare è questo: ogni volta che si avvia il programma deve essere controllato (tramite svn) se sono presenti nuove revisioni o aggiornamenti, se sono presenti allora mostra una maschera all'utente chiedendo di effettuare l'aggiornamento del programma altrimenti il programma deve proseguire normalmente, e voglio che questo si svolga ad ogni avvio del programma..
Mi sono spiegato?
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 19:04
da Volans
Chiarissimo!

Dato che fai tutto con zenity e che trattandosi di script si presuppone che l'utente sia un minimo a conoscenza di linux e del bash potresti fare un `svn status -uq` e stampare in una finestra di zenity l'output e chiedere all'utente se vuole aggiornare o no. (facendo il controllo se non ci sono aggiornamenti ovviamente)
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 19:06
da Demiurgo
Chiedo troppo dicendoti di fare tutto in background (tranne l'approvazione dell'aggiornamento da parte dell'utente)?

Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 19:17
da Volans
Non è troppo è che secondo me è concettualmente sbagliato perché se ho capito bene l'utente ha scaricato gli script facendo un svn checkout.
Ora credo sia normale che l'utente avrà modificato qualche script per adattarlo alle proprie esigenze, e magari non lo ha fatto facendo una copia da qualche altra parte ma modificando proprio quelli dentro alla cartella dove ha fatto il checkout di SVN.
Ora se in questa situazione voi avete aggiornato sul repository proprio quello script e magari modificato proprio le righe che l'utente aveva modificato in locale, si crea un Conflitto che va gestito e risolto da svn.
Per questo motivo credo che sia doveroso far vedere all'utente quali files saranno aggiornati e lasciare a lui una scelta consapevole o trovare un'altra soluzione per gli aggiornamenti.
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 19:26
da Demiurgo
Ferma Ferma...
L'utente non modifica gli script! gli utilizza solo per l'installazione di Programmi/Utility, nel caso in cui un utente voglia apportare una miglioria sarà lui ad inviarci lo script modificato e saremo quindi noi a introdurlo all'interno del server svn...
Tutte le impostazioni che l'utente deve normalmente modificare a mano modificando il testo dello script vengono risolte tramite zenity e quindi l'utilizzatore non ha altro da fare oltre che selezionare lo script che vuole avviare e seguire la procedura guidata...
Scusa se ti sto facendo impazzire
P.s. ho trovato anche il comando
che da come output:
Revisione: [numero_revisione]
Potremo trovare il modo per tagliare da questo output la parola Revisione, trovare un comando che ci dica in numero della revisione LOCALE e poi fare una semplice funzione in if che se i due numeri sono diversi fa partire la maschera di aggiornamento... no?
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 19:46
da Volans
E una volta che tramite zenity l'utente ha dato i suoi parametri per quello script dove vengono salvati, nel file scaricato da svn? (in questo caso ci sono modifiche locali

)
`svn info` puoi usarlo ma è sui singoli file o cartelle e devi usarlo due volte, una in locale e una in remoto per controllare la differenza.
Re: [Bash] Svn Update
Inviato: venerdì 22 agosto 2008, 19:52
da Demiurgo
Le impostazioni non vengono salvate! ogni volta l'utente deve rimetterle! non immaginarti script elaboratissimi, sono per coloro che per la prima volta si avvicinano al mondo di linux! (rotfl)
svn info posso usarlo sull'eseguibile che viene obbligatoriamente modificato ad ogni aggiornamento... se lo lascio senza nessun file specifico non mi da la revisione di tutto il pacchetto svn?