Per tenere sotto controllo i file estratti nel source control ed evitare che qualcuno si dimentichi di archiviare le modifiche fatte o che per distrazione mantenga i file estratti per mesi, ho creato una programma di notifica.
L’idea è semplice se un file è estratto da più di 10 giorni si vene avvisati tramite una mail.
Il metodo GetPendingChanges ritorna tramite delle classi contenitore (PendingUser e PendingInfo) l’elenco delle persone e dei file che sono estratti.
public IList<PendingUser> GetPendingChanges(DateTime dateOffset)
{
//Si collega a l'istanza di Tfs
TeamFoundationServer tfs = new TeamFoundationServer("ServerName");
//Ottiene il servizio per la gestione del codice sorgente
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
//Esegue una query a partire dalla route del source control tutte le Pending Changes
PendingSet[] pendingSet = vcs.QueryPendingSets(new string[1] { "$/" }, RecursionType.Full, null, null);
IList<PendingUser> pendigsUser = new List<PendingUser>();
//Cicla il set di Pending Changes
foreach (PendingSet set in pendingSet)
{
IList<PendingInfo> pendingsInfo = new List<PendingInfo>();
foreach (PendingChange change in set.PendingChanges)
{
//Se la data è compresa nel range da valutare
if (dateOffset > change.CreationDate)
{
PendingInfo pendingInfo = new PendingInfo();
pendingInfo.FileName = change.FileName;
pendingInfo.ChangeDate = change.CreationDate;
pendingInfo.LocalPath = change.LocalItem;
pendingInfo.ServerPath = change.ServerItem;
pendingInfo.Computer = set.Computer;
pendingInfo.WorkSpace = set.Name;
pendingsInfo.Add(pendingInfo);
}
}
if (pendingsInfo.Count > 0)
pendigsUser.Add(new PendingUser(set.OwnerName, pendingsInfo));
}
return pendigsUser;
}
Per trovare l’indirizzo mail a partire del nome dell’utente
public string GetAddressMail(string displayName)
{
IGroupSecurityService gss = (IGroupSecurityService)tfs.GetService(typeof(IGroupSecurityService));
Identity identity = gss.ReadIdentity(SearchFactor.EveryoneApplicationGroup, "Team Foundation Valid Users", QueryMembership.Expanded);
Identity[] identities = gss.ReadIdentities(SearchFactor.Sid, identity.Members, QueryMembership.None);
foreach (Identity iden in identities)
{
if (iden.Type == IdentityType.WindowsUser)
{
if (string.Equals(iden.DisplayName, displayName))
{
return iden.MailAddress;
}
}
}
return null;
}
Tag di Technorati:
Tfs,
SourceControl,
Mail