====== Bazaar: Appunti ======
[[http://bazaar-vcs.org/|Bazaar]] è un version control system distribuito.
===== Cosa Installare =====
L'installazione è semplice, basta scaricare ed installare il file **//bzr-setup-[ultimaversione].exe//**. \\
:!: **Nota:** Bazaar è interamente realizzato in Python. Il file di installazione esiste in 2 versioni differenti, un //"completa"// ed una che richiede la prenza di Python. Si consiglia di scaricare quella completa. \\
Dalla sezione dei plugins scaricare ed installare **//qbzr-setup-[ultimaversione].exe//** che aggiunge un minimo di interfaccia grafica ai comandi. \\
:!: **Nota:** Dalla relase 1.6 viene distribuita con Bazaar anche una versione rudimentale del TortoiseBZR.
===== Comandi Di Base =====
Il comando fondamentale di Bazaar è **bzr**. Per un help dei principali comandi digitare
bzr help
Una QuickStart Guide può essere scaricata in formato [[http://doc.bazaar-vcs.org/bzr.dev/en/quick-reference/quick-start-summary.pdf|PDF]] o in formato [[http://doc.bazaar-vcs.org/bzr.dev/en/quick-reference/quick-start-summary.png|PNG]] (ne esiste anche un formato [[http://doc.bazaar-vcs.org/bzr.dev/en/quick-reference/quick-start-summary.svg|SVG]] ma poco leggibile).
\\ E' anche possibile trovare [[http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html|qui]] una breve introduzione in inglese.
==== Il Primo Comando ====
Prima di iniziare è necessario istruire Bazaar su chi siamo.
A meno di esigenze particolari, questa operazione in genere viene eseguita una sola volta.
bzr whoami "John Doe "
Per verificare che tutto abbia funzionato correttamente basta ripetere il comando in forma interrogativa
bzr whoami
ed il sistema risponderà
John Doe
==== Nuovo Progetto Locale ====
Per iniziare un nuovo progetto si usa il comando //**init**//. Tale comando ha due modalità operative:
* **Specificando il nome di una directory** - Crea una cartella con il nome dato dentro la quale viene messo il progetto.
* **Senza specificare il nome di una directory** - Considera la cartella corrente come cartella del progetto.
bzr init [Dir Progetto]
Se la cartella è stata creata da Bazaar entrarvi.
cd [Dir Progetto]
Aggiungere i files desiderati con il comando //**add**//. Usando solo add senza specificare altri parametri vengono presi tutti files incluse le sub-directory.
bzr add [Files]
Committare le modifiche con il comando //**commit**//. Il parametro //**-m**// consente di specificare un commento per questo commit.
bzr commit -m "Commento"
Ogni **//commit//** incrementa il numero di revisione su Bazaar.
==== Due Parole su Commit ====
Il parametro -m del comando commit è opzionale, se non viene specificato il commento Bazaar chiederà di inserirlo prima di committare.
Un eventuale diniego renderà impossibile l'operazione.
In alternativa, se le estensioni //qbzr// sono state installate, può essere usato il comando **//qcommit//** che permette di eseguire la commit graficamente.
==== Branch Remoto ====
Creare un branch remoto del progetto con il comando //**push**//.
bzr push {Percorso Remoto}
Una volta creato il branch remoto è possibile sincronizzarlo:
* Manualmente
* In automatico
Per sincronizzarlo manualmente è necessario, dopo un //**commit**//, chiamare //**push**//.
bzr commit -m "Commento"
bzr push {Percorso Remoto}
Per sincronizzarlo in automatico utilizzare il comando //**bind**// dopo il primo //**push**//.
bzr bind {Percorso Remoto}
In questo modo, ogni **commit** sul progetto in locale viene riportato anche sul branch remoto.
==== Repository Senza Albero ====
E' possibile specificare a Bazaar che il Repository è senza albero.
Questo significa che Bazaar creerà un Repository contenente solo i suoi files di controllo.
bzr init-repo --no-trees {Percorso del Repository}
==== Il Comando CheckOut ====
Per portare in locale un progetto presente sul server e poter iniziare a lavorarci usare il comando //**checkout**//.
bzr checkout {Percorso del Repository sul Server}
Il percorso del Repository può essere un'unità di rete od un URL.
Nell'esempio seguente un indirizzo in ssh.
bzr checkout bzr+ssh://john.doe@bazaar.launchpad.net/~john.doe/+junk/myproject
L'esempio precedente richiede la password ssh.
E' possibile eseguire più operazioni senza bisogno di reinserire tale password seguendo il procedimento seguente:
ssh-agent bash
ssh-add
Inserire la password e ricordarsi di non chiudere la shell.
==== Il Comando Update ====
Per aggiornare il progetto locale dal Repository sul server spostarsi nella cartella locale ed usare il comando //**update**//.
bzr update
===== Plugins =====
Bazaar può essere esteso tramite plugins. \\ Un elenco dei plugins con breve descrizione si trova [[http://bazaar-vcs.org/BzrPlugins|qui]].
\\ Molti di questi plugins si trovano su [[https://launchpad.net/|Launchpad]], un repository di codice open source che usa come sistema di versioning proprio Bazaar.
Una volta scaricati nella cartella dei plugins vengono compilati automaticamente al primo utilizzo.
===== Extmerge =====
[[http://elliotmurphy.com/2007/10/01/using-meld-with-bazaar-extmerge-plugin/|Extmerge]] è un plugin che consente di utilizzare un utility di terze parti per risolvere i conflitti.
Per installare Extmerge su Windows procedere come segue (per Linux il procedimento è analogo.):
cd %APPDATA%\bazaar\2.0\plugins
bzr branch lp:bzr-extmerge extmerge
Extmerge prevede la possibilità di leggere dal file di configurazione dei Bazaar il template per l'uso del software esterno.
# # Add this line to your ~/.bazaar/bazaar.conf
# # external_merge = 'meld-helper %r %b %t %o'
===== WinMerge & Extmerge =====
[[http://winmerge.org/|WinMerge]] è un programma Open Source per la comparazione ed il merging di files sotto windows.
Per poterlo usare con Extmerge basta installarlo, aggiungere la seguente riga al path
%programfiles%\winmerge
e modificare il file bazaar.conf coem segue
external_merge = 'winmerge %%t %%o %%r %%b'
Il tutto può essere facilmente automatizzato tramite questo batch
@echo off
C:
cd %APPDATA%\bazaar\2.0\plugins
bzr branch lp:bzr-extmerge extmerge
cd ..
Echo external_merge = 'winmerge %%t %%o %%r %%b' >> bazaar.conf
Echo.
Echo ---------------------------------
Type bazaar.conf
Echo ---------------------------------
Echo.
Echo Ricordati di mettere WinMerge nel Path !!!
Echo.
Pause
===== Esempio: Mettere in Bazaar un Progetto Delphi =====
Iniziamo da un breve elenco delle estensioni minime da aggiungere.
^ Estensione ^ Descrizione ^
| *.pas | Units |
| *.dfm | Forms |
| *.dpr | Project |
| *.dpk | Package |
| *.cfg | Compiler Config |
| *.dof | Version, Ide, ecc... |
| *.res | Resources |
| *.tlb | Type library for COM |
| *.dcr | Resources for Components |
^ Specifici di Delphi 2007 ^^
| *.dproj | Project |
| *.dproj.local | Project |
| *.identcache | ??? |
Supponiamo di trovarci già all'interno della directory del progetto. \\
Le operazioni possono essere eseguite in sequenza a mano oppure è possibile creare un batch da eseguire nella directory del progetto.
bzr init
bzr add *.pas
bzr add *.dfm
bzr add *.dpr
bzr add *.dof
bzr add *.res
bzr add *.cfg
bzr add *.bpg
bzr add *.bpk
bzr add *.dcr
bzr add *.tlb
bzr commit -m "Import iniziale"
\\