Team System: data dei file

Estraendo files da un server Team Foundation la data dei files presenti sul disco viene impostata alla data in cui questi sono stati estratti. Non che ci veda niente di strano, anzi... Purtroppo però numerose persone che erano abiuate ad usare Visual Source Safe sentono questo come un problema (non chiedetemi perché, ma vi garantisco che almeno una decina di persone me l'ha segnalato).

Soluzione? Creare un programmino (console) che imposti la data dei file NON ESTRATTI in base alla data dell'ultimo checkin (scusate la lunghezza):

public static void ChangeDate(string ServerName, string workspaceName, string workspaceOwner, string pattern, bool subDirectories)
{
    TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(ServerName);
    VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
    Workspace ws;
    if (string.IsNullOrEmpty(workspaceOwner))
        ws = WorkspaceSettings.GetWorkspace(vcs, workspaceName);
    else
        ws = WorkspaceSettings.GetWorkspace(vcs, workspaceName, workspaceOwner);
    if (ws == null)
        Console.WriteLine("Workspace specified doesn't exists.");
    else
    {
        //Cerco la lista dei files specificati
        ItemSet items;
        if (subDirectories)
            items = vcs.GetItems(pattern, RecursionType.Full);
        else
            items = vcs.GetItems(pattern, RecursionType.None);
        //Controllo ogni singolo Item
        foreach (Item item in items.Items)
        {
            if (ws.IsServerPathMapped(item.ServerItem))
            {
                //Trovo il file locale
                string file = ws.GetLocalItemForServerItem(item.ServerItem);
                System.IO.FileAttributes fileAttributes = System.IO.File.GetAttributes(file);
                //Se il file é readonly ri-applico la data altrimenti lo considero estratto e non gli cambio data
                if ((fileAttributes & System.IO.FileAttributes.ReadOnly) == System.IO.FileAttributes.ReadOnly)
                {
                    //Per cambiare la data devo prima rimuovere l'attributo di readonly
                    System.IO.File.SetAttributes(file, fileAttributes & ~System.IO.FileAttributes.ReadOnly);
                    System.IO.File.SetLastWriteTime(file, item.CheckinDate);
                    System.IO.File.SetAttributes(file, fileAttributes);
                    Console.WriteLine(item.CheckinDate.ToString() + file);
                }
                else
                    Console.WriteLine("checkedout " + file);
                //Console.WriteLine(item.ServerItem + " is mapped as " + file.FullName);
            }
            else
                Console.WriteLine(item.ServerItem + " is not mapped");
        }
        Console.WriteLine("Workspace's name is: " + ws.DisplayName);
    }
}

Print | posted on lunedì 30 luglio 2007 17:36

Comments have been closed on this topic.