public CommitVersionInfo GetVersionInfo(Commit c) { string commitSha = c.Sha; CommitVersionInfo info; if (_versionsCache.TryGetValue(commitSha, out info)) { return(info); } IFullTagCommit thisCommit = GetCommit(commitSha); IFullTagCommit contentCommit = thisCommit ?? GetCommit(c.Tree.Sha); CommitVersionInfo prevCommitParent, prevMaxCommitParent; ReadParentInfo(c, out prevCommitParent, out prevMaxCommitParent); info = new CommitVersionInfo(this, commitSha, thisCommit, contentCommit, prevCommitParent, prevMaxCommitParent); _versionsCache.Add(commitSha, info); return(info); }
internal CommitVersionInfo( TagCollector tagCollector, string commitSha, IFullTagCommit thisCommit, IFullTagCommit contentCommit, CommitVersionInfo prevCommitParent, CommitVersionInfo prevMaxCommitParent ) { Debug.Assert( thisCommit == null || thisCommit.ThisTag != null ); Debug.Assert( thisCommit == null || contentCommit == thisCommit, "this commit exists => content commit is this commit" ); _tagCollector = tagCollector; _commitSha = commitSha; _thisCommit = thisCommit; _contentCommit = contentCommit; if( prevCommitParent != null ) { _prevCommit = prevCommitParent._thisCommit != null ? prevCommitParent : prevCommitParent._prevCommit; } if( prevMaxCommitParent != null ) { Debug.Assert( prevMaxCommitParent.PreviousMaxTag == null || prevMaxCommitParent._prevMaxCommit != null ); if( prevMaxCommitParent._prevMaxCommit == null || prevMaxCommitParent.BestContentTag > prevMaxCommitParent.PreviousMaxTag ) { Debug.Assert( prevMaxCommitParent.MaxTag == prevMaxCommitParent.BestContentTag ); _prevMaxCommit = prevMaxCommitParent; _maxCommitDepth = 1; } else { Debug.Assert( prevMaxCommitParent.MaxTag == prevMaxCommitParent.PreviousMaxTag ); _prevMaxCommit = prevMaxCommitParent._prevMaxCommit; _maxCommitDepth = prevMaxCommitParent._maxCommitDepth + 1; } Debug.Assert( _prevMaxCommit != null ); } _maxCommit = BestContentTag >= PreviousMaxTag ? (_contentCommit != null ? _contentCommit.BestCommit : null) : (_prevMaxCommit._contentCommit != null ? _prevMaxCommit._contentCommit.BestCommit : null); }
internal CommitVersionInfo( TagCollector tagCollector, string commitSha, IFullTagCommit thisCommit, IFullTagCommit contentCommit, CommitVersionInfo prevCommitParent, CommitVersionInfo prevMaxCommitParent) { Debug.Assert(thisCommit == null || thisCommit.ThisTag != null); Debug.Assert(thisCommit == null || contentCommit == thisCommit, "this commit exists => content commit is this commit"); _tagCollector = tagCollector; _commitSha = commitSha; _thisCommit = thisCommit; _contentCommit = contentCommit; if (prevCommitParent != null) { _prevCommit = prevCommitParent._thisCommit != null ? prevCommitParent : prevCommitParent._prevCommit; } if (prevMaxCommitParent != null) { Debug.Assert(prevMaxCommitParent.PreviousMaxTag == null || prevMaxCommitParent._prevMaxCommit != null); if (prevMaxCommitParent._prevMaxCommit == null || prevMaxCommitParent.BestContentTag > prevMaxCommitParent.PreviousMaxTag) { Debug.Assert(prevMaxCommitParent.MaxTag == prevMaxCommitParent.BestContentTag); _prevMaxCommit = prevMaxCommitParent; _maxCommitDepth = 1; } else { Debug.Assert(prevMaxCommitParent.MaxTag == prevMaxCommitParent.PreviousMaxTag); _prevMaxCommit = prevMaxCommitParent._prevMaxCommit; _maxCommitDepth = prevMaxCommitParent._maxCommitDepth + 1; } Debug.Assert(_prevMaxCommit != null); } _maxCommit = BestContentTag >= PreviousMaxTag ? (_contentCommit != null ? _contentCommit.BestCommit : null) : (_prevMaxCommit._contentCommit != null ? _prevMaxCommit._contentCommit.BestCommit : null); }