Prosegue la mia intensa esperienza con Team Foundation Server, se va avanti così tra un po' uno dei miei mentori mi definisce "TFS Addicted" ;-)
Facendo il consulente sono quasi sempre offline vuoi perchè:
  • Il cliente per policy non mi da accesso alla rete;
  • il cliente mi da accesso alla rete (internet) ma blocca le VPN quindi non accedo a quello che mi serve della rete dell'ufficio;
  • L'UMTS di Vodafone è un furto legalizzato ;-)
  • La rete dell'uffico, raramente ma succede, è giù...
Queste motivazioni, ce ne sono probabilmente altre, rendono necessario avere un buon, anzi ottimo, supporto per il lavoro offline.
Vi ho già parlato dell'uso che si può fare di Groove quindi non vi tedierò oltre anche perchè la configurazione è di Groove è di una semplicità disarmante, mentre per la parte server il white paper che ho linkato è esaustivo.
Oggi ho approcciato invece la necessità di avere a disposizione offline il Source Control, e direte be mi sembra il minimo....si certo ma non è detto che sia una cosa scontata
SourceControl
Questa è l'area che per ora fornisce il supporto più raw al lavoro offline, il team explorer non offre nessuna funzionalità per il lavoro offline e ci sono una serie di trick da mettere in pista per cercare almeno di lavorare sereni:
  • Disabilitare da registro una malefica impostazione di Visual Studio che fa si che all'apertura l'IDE cerchi di connettersi sempre a TFS: [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\TeamFoundation]
    "AutoLoadServer"=dword:00000000

    La modifica del registro è a vostro rischio e pericolo ;-)

fatto questo sarà necessario connettersi manualmente al TFS, operazione che comunque avviene in automatico se cerchiamo di aprire una solution sotto Source Control.
E qui troviamo le prime carenze, all'apertura della solution, se siamo off-line, non ci viene chiesto se vogliamo lavorare off-line o meno ma ci vengono ritornati un po' di errori di connessione e poi una form che ci chiede se vogliamo lavorare temporaneamente senza source control o se vogliamo rimuovere i binding con il TFS... naturalmente  la scelta deve ricadere sulla prima opzione ;-)
Fatto questo lavoriamo normalmente, quasi come se fossimo connessi, non avremo più le dialog per il check-out ma in fase di salvataggio l'IDE ci informerà che il file (se era in check-in) è in sola lettura e se vogliamo sovrascriverlo, diciamo di si.
  • Una volta che siamo nuovamente connessi alla rete e il TFS è raggiungibile riapriamo la solution su cui abbiamo lavorato off-line. per sincronizzare le modifiche eseguite off-line utilizziamo un tool da riga di comando (compreso nei Power Tool di TFS):

    TFPT.exe online /deletes /exclude:Obj,Bin,*.CodeAnalysisLog.xml,*.lastcodeanalysissucceeded,*.suo,*.user,*.bak,*.temp,*.tmp

    Eseguendolo nella directory in cui c'è la solution su cui abbiamo lavorato il power tool esguirà tutti i check-out e le altre operazioni al fine di replicare sul TFS quello che abbiamo fatto. Ho sottolineato replicare perchè è fondamentale capire che il tool riesegue i passi come se li avessimo fatti noi on-line quindi nella history del changeset ci ritroveremo tutto, con gli orari un po' sballati ma comunque nella sequenza corretta
Due note molto importanti:
  1. Prima di eseguire qualsisasi cosa il tool vi mostra una bella dialog con l'elenco delle operazioni che farà, da li potete modificare quello che volete;
  2. Dopo che ha eseguito tutte le operazioni siete sempre e comunque in check-out quindi nulla è ancora sul server e questo è un'ulteriore paracadute fondamentale;
Un'ultima nota: potete includere il tool negli "External Commands" di Visual Studio, se lo fate ricordatevi di non spuntare la check box "Use Output window" perchè altrimenti la prima dialog di conferma ve la perdete...
.m