[TFS]: Check-In policy skippate 2

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}rnDate:tt{2}rnOwner:tt{3}rnComment:t"{4}"rn",
  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???? tongue-out), concordo sul fatto che se esiste un object model, è cosa buona e giusta usarlo Smile (specie per un discorso relativo alle permission).

Un ringraziamento va a Lorenzo e Janky per la segnalazione Smile.

Technorati Tags: ,