Simone lo aveva annunciato l’11 Agosto, ma ero a godermi il sole della Puglia, così ho aspettato oggi (primo gg in cui sono riuscito a trovare un po’ di tempo) per fare l’aggiornamento del blog engine alla versione 2.0 di Subtext.
Direttamente dal Post di Simone, ecco le principali novità:
In questo post, vengono inoltre citati altri piccoli (ma comodi) miglioramenti apportati.
Per l’aggiornamento, vi consiglio di seguire direttamente la guida ufficiale.
In tutto, mi ci è voluta un oretta tra dowload, ftp, configurazione, spostamento di immagini, skinn custom etc., ma tutto ha funzionato senza il minimo intoppo.
Se navigando sul blog doveste riscontrare qualche problema, contattatemi
.
Enjoy 
Nel precedente post, ho mostrato come visualizzare i check-in eseguiti su TFS skippando le regole impostate. Subito dopo, Lorenzo e Janky mi hanno fatto notare nei commenti che si deve evitare di leggere/scrivere direttamente sul Data Base di TFS.
Team Foundation Server, come noto, espone un Object Model molto evoluto che, in sostanza, permette di farci qualsiasi cosa. Ed in effetti, è bastata un oretta per raggiungere praticamente lo stesso risultato con poche righe di codice:
1: using System;
2: using System.Collections;
3: using Microsoft.TeamFoundation.Client;
4: using Microsoft.TeamFoundation.VersionControl.Client;
5:
6: namespace TFSTest {
7: class Program {
8: static void Main(string[] args) {
9: ICredentialsProvider provider = new UICredentialsProvider();
10: TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("mig-server", provider);
11: tfs.Authenticate();
12: VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
13: IEnumerable changesets = vcs.QueryHistory("$/TestProject", VersionSpec.Latest, 0, RecursionType.Full, null, null, null, int.MaxValue, false, false);
14: foreach (Changeset changeset in changesets) {
15: if (changeset.PolicyOverride.PolicyFailures.Length > 0) {
16: Console.WriteLine(
17: "Changeset ID:\t{0}:{1}\r\nDate:\t\t{2}\r\nOwner:\t\t{3}\r\nComment:\t\"{4}\"\r\n",
18: changeset.ChangesetId,
19: changeset.Comment,
20: changeset.CreationDate,
21: changeset.Owner,
22: changeset.PolicyOverride.Comment);
23: }
24: }
25: Console.ReadLine();
26: }
27: }
28: }
In particolare, dopo aver eseguito la connessione al TFS, si recupera l’istanza del version control di cui viene invocato il metodo QueryHistory il cui scopo è quello di
“Retrieves an enumerable collection of changesets matching the specified items and versions.”
Fatto questo, prendiamo tutti i changeset con almeno una PolicyFailures ed il gioco è fatto:
Changeset ID: 35:Check In di Test
Date: 30/08/2008 1.48.51
Owner: Mighell
Comment: "Test Policy Failure comment"
Changeset ID: 34:Check In di Test
Date: 30/08/2008 01.28.27
Owner: Mighell
Comment: "Policy Skippata"
In conclusione, sebbene trovi più comoda la query del post precedente e sono ASSOLUTAMENTE D’ACCORDO sul fatto che NON SI DEVE SCRIVERE DIRETTAMENTE SUL DATA BASE DI TFS (ma nemmeno una letturina????
), concordo sul fatto che se esiste un object model, è cosa buona e giusta usarlo
(specie per un discorso relativo alle permission).
Un ringraziamento va a Lorenzo e Janky per la segnalazione
.
Technorati Tags:
TFS,
check-in policy
UPDATE: dopo le segnalazioni di Lorenzo e Janky nei commenti, qui c’è spiegato come ottenere lo stesso risultato in modo corretto, usando l’object model di TFS
Come molti ormai sapranno, utilizzando TFS è possibile impostare una serie di check-in policy (approfondisco la cosa in un altro post). In breve, queste policy consentono di evitare il submit “selvaggio” di codice nel repository migliorandone, se vogliamo, la qualità.
Una delle chek-in policy che abilito immediatamente quando avvio un progetto è relativa ai Work Item. In sostanza, ogni check-in nel repository DEVE essere associato ad un Work Item. Questo permette in prima battuta di tenere traccia del lavoro svolto e di capire quali righe di codice sono state modificate per implementare una certa modifica o per correggere un bug. In situazioni più evolute, può permettere la promozione del codice negli step successivi del processo di sviluppo (sviluppo, testing, preproduzione, produzione).
C’è però una esigenza che mi si è posta oggi: durante la fase di chek-in, in presenza di una rule, viene data la possibilità allo sviluppatore di “saltarla”, a patto però che ne venga spiegato il motivo con un commento (obbligatorio). Quello che mi serviva, era un elenco dei chek-in fatti skippando le regole. Fortunatamente, alla base di TFS c’è Sql Server. Sono bastati quindi pochi minuti per capire dove reperire le informazioni e scrivere la seguente query:
1: select [changeset].[changeset id]
2: , [changeset].changeset
3: , [Code Churn].Date
4: , [Person].Person
5: , [changeset].[Policy Override Comment]
6: from [work item]
7: join [work item changeset] on [work item].__Id=[work item changeset].[work item]
8: right join [Changeset] on [work item changeset].Changeset=[Changeset].__Id
9: join [Code Churn] on [Changeset].__Id=[Code Churn].Changeset
10: join [Person] on [Code Churn].[Checked in By]=[Person].__Id
11: where [changeset].[Policy Override Comment] is not null
12: order by date desc
Il risultato della query è:
| changeset id |
changeset |
Date |
Person |
Policy Override Comment |
| 848 |
Changeset 848: Modific … |
2008-08-26 |
Mighell |
Regola skippata |
| 846 |
Changeset 846: Escluso … |
2008-08-25 |
Mighell |
Regola skippata |
(2 row(s) affected)
Ritengo questa sorta di report molto utile, specie nella fase iniziale di utilizzo dello strumento da parte di un team già avviato (e non abituato ad una sorta di formalizzazione dei processi di sviluppo). Nel mio caso specifico, cercherò di capire con lo sviluppatore in questione i motivi che lo hanno spinto a bypassare la regola. Potrebbe essere inesperienza o eccessiva granularità dei WorkItem.
IMHO, chiarire questi punti subito è importantissimo, specie se si vuole arrivare alla promozione automatica del codice nei diversi ambienti. Di fronte alla situazione evidenziata dalla query, si corre il rischio di non promuovere tutto il codice, con rischi facilmente immaginabili.
TFS non è assolutamente (solo)un repository di codice sorgente. E’ uno strumento che ti spinge ad usare una metodologia, ti spinge ad organizzare per bene il lavoro ed a farlo meglio.
Enjoy 
PS: non so se la query che ho scritto è ottimizzata o se c’è già qualcosa che mi tira fuori le informazioni in altri modi, quindi prendetela “as is”, e se avete qualche suggerimento, non esitate a contattarmi o a commentare questo post.
Ieri mi è capitato un problema apparentemente strano con TFS. Modificando un qualsiasi WorkItem (di qualsiasi tipo ed in qualsiasi Team Project), mi tornava indietro il seguente errore:
TF26212: Team Foundation Server could not save your changes. There may be problems with the work item type definition. Try again or contact your Team Foundation Server administrator.
In prima battuta, ho cercato il problema tra i permessi del TFS. Essendo l’Admin del TFS, ho potuto cambiare le permission fino a toglierle del tutto e riassegnarle nuovamente. Operazione che non ha portato a nessun risultato.
Essendo un momento di pausa, ho avuto la possibilità di riavviare la macchina con il TFS. Anche questa operazione non ha prodotto nessun risultato. Così, preso dallo sconforto, ho aperto google e, dopo svariate ricerche e prove, sono capitato su questo post in cui ho trovato questo:
I shut down VSTS, deleted the TFS cache folder (“c:\documents and settings\[username]\local settings\application data\microsoft\team foundation”), and restarted VSTS. Went into Team Explorer. Opened the Team Queries folder and sure enough -- everything was back to normal
In effetti, la pulizia della cache ha funzionato e tutto ha ripreso a funzionare regolarmente.
Ma perchè si è verificato questo problema?
Francamente non ho avuto modo di indagare a fondo sul problema, ma una idea me la sono fatta. Abbiamo iniziato da poco ad usare TFS e, qualche gg fa, si è corrotto un file differenziale della VM su cui è installato. Abbiamo così ripristinato il backup precedente contenete però solo l’installazione del TFS (il problema si è verificato praticamente subito dopo aver importato tutti i sorgenti).
Essendo in ferie e con collegamento UMTS, per mettere in condizione i colleghi di riprendere a lavorare, ho reimportato tutti i sorgenti da VSS, assegnando però i permessi in modo diverso rispetto alla soluzione pre-crash.
L’ipotesi è che questa variazione di configurazione abbia generato una sorta di discrepanza tra quanto presente nella cache e quanto realmente esistente sul server, causando il problema oggetto di questo post.
Comunqe….il problema adesso sembra essersi risolto.
Se ho qualche altra informazione a riguardo, la aggiungo in coda a questo post.
Enjoy 
Technorati Tags:
TFS,
Errori
Finalmente l’amico Christian ha deciso di aprire il suo blog!!!
Ho lavorato con lui per 6 mesi ed è una persona davvero in gamba quindi…vi consiglio di seguirlo qui: http://www.fugini.net/
Benvenuto Christian 
( o forse sarebbe meglio 
Tempo fa, sono stato intervistato dal nostro Alead
.
Se vi interessa, il testo completo dell’intervista è qui: Intervista ai Microsoft MVP- Michele Locuratolo .
Grazie mille Alead!
Assolutamente NO! E’ un Aperitivo Classico!
Una delle cose che più mi piacciono di Cisternino, sono le iniziative organizzate sia dagli enti locali, ma soprattutto quelle organizzate dal famoso Bar FOD, in piazza.
Da diversi anni ormai, la domenica è appuntamento fisso con l’aperitivo classico. Come è facile intuire dal nome, si tratta di gustare un ottimo aperitivo ascoltando 1 ora di musica classica rigorosamente dal vivo:
La cosa che apprezzo davvero dei ragazzi proprietari del bar, è che queste iniziative vengono fatte davvero per il piacere di farle e non solo per guadagnarci di più.
Al costo di un normalissimo aperitivo (€. 6,00), ci si può accomodare al centro della piazza, gustare ottimi drink ed ascoltare buona musica.
Cosa si può volere di più?
.
Vi lascio con un breve spezzone di un video girato ieri. Vi confesso che ho avuto la pelle d’oca tutto il tempo
:
Da ieri sono iniziate ufficialmente le mie ferie
.
Quest’anno, come un paio di anni fa, sono all’ormai famoso .netTrullo
. Se siete in puglia e vi va di farvi una bella mangiata di carne, accompagnata da un buon vinello fatto in casa, contattatemi che ci si organizza
.
PS: il bar fod ha ancora la wireless gratis 