Notificare i file estratti in Tfs

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: ,,
«maggio»
domlunmarmergiovensab
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345