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);
}
}