private Dictionary <MergeRequestKey, Version> collectLatestVersions(ILocalCommitStorage repo) { Dictionary <MergeRequestKey, Version> result = new Dictionary <MergeRequestKey, Version>(); IEnumerable <MergeRequestKey> mergeRequestKeys = _mergeRequestCache.GetMergeRequests(repo.ProjectKey) .Select(x => new MergeRequestKey(repo.ProjectKey, x.IId)); foreach (MergeRequestKey mrk in mergeRequestKeys) { Version version = _mergeRequestCache.GetLatestVersion(mrk); bool newKey = !_statistic.ContainsKey(mrk) || !_statistic[mrk].HasValue; if (version == null || (!newKey && version.Created_At <= _statistic[mrk].Value.LatestChange)) { continue; } Trace.TraceInformation(String.Format( "[GitBasedSizeCollector] Git statistic will be updated for MR: " + "Host={0}, Project={1}, IId={2}. Latest version created at: {3}", mrk.ProjectKey.HostName, mrk.ProjectKey.ProjectName, mrk.IId, version.Created_At.ToLocalTime().ToString())); result.Add(mrk, version); } return(result); }
public CommitStorageUpdateContext GetContext() { if (_versions == null) { Debug.Assert(false); return(null); } if (!_versions.Any()) { return(null); } Dictionary <string, HashSet <string> > baseToHeads = new Dictionary <string, HashSet <string> >(); foreach (Version version in _versions) { string baseSha = version.Base_Commit_SHA; string headSha = version.Head_Commit_SHA; if (baseSha != null && headSha != null && baseSha != headSha) { if (!baseToHeads.ContainsKey(baseSha)) { baseToHeads[baseSha] = new HashSet <string>(); } baseToHeads[baseSha].Add(headSha); } } Version latestVersion = _versions.OrderBy(x => x.Created_At).LastOrDefault(); return(new FullUpdateContext(latestVersion.Created_At, new BaseToHeadsCollection( baseToHeads.ToDictionary( item => new CommitInfo(item.Key), item => item.Value.Select(x => new RelativeCommitInfo(x, null)))))); }