public IEnumerable<VersionInfo> GetVersionInfo (IEnumerable<FilePath> paths, VersionInfoQueryFlags queryFlags = VersionInfoQueryFlags.None)
{
if ((queryFlags & VersionInfoQueryFlags.IgnoreCache) != 0) {
// We shouldn't use IEnumerable because elements don't save property modifications.
var res = OnGetVersionInfo (paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0).ToList ();
infoCache.SetStatus (res);
return res;
}
List<FilePath> pathsToQuery = new List<FilePath> ();
var result = new List<VersionInfo> ();
foreach (var p in paths) {
var vi = infoCache.GetStatus (p);
if (vi != null) {
result.Add (vi);
// This status has been invalidated, query it asynchronously
if (vi.RequiresRefresh)
pathsToQuery.Add (p);
}
else {
// If there is no cached status, query it asynchronously
vi = new VersionInfo (p, "", Directory.Exists (p), VersionStatus.Versioned, null, VersionStatus.Versioned, null);
infoCache.SetStatus (vi, false);
result.Add (vi);
pathsToQuery.Add (p);
}
// Console.WriteLine ("GetVersionInfo " + string.Join (", ", paths.Select (p => p.FullPath)));
}
if (pathsToQuery.Count > 0)
AddQuery (new VersionInfoQuery () { Paths = pathsToQuery, QueryFlags = queryFlags });
return result;
}