Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }