示例#1
0
void CFullHistory::AnalyzeRevisionData()
{
    // special case: empty log

    if (headRevision == NO_REVISION)
        return;

    // we don't have a peg revision yet, set it to HEAD

    if (pegRevision == NO_REVISION)
        pegRevision = headRevision;

    // in case our path was renamed and had a different name in the past,
    // we have to find out that name now, because we will analyze the data
    // from lower to higher revisions

    startPath.reset (new CDictionaryBasedTempPath (*wcPath));

    CCopyFollowingLogIterator iterator (cache, pegRevision, *startPath);
    iterator.Retry();
    startRevision = pegRevision;

    while ((iterator.GetRevision() > 0) && !iterator.EndOfPath())
    {
        if (iterator.DataIsMissing())
        {
            iterator.ToNextAvailableData();
        }
        else
        {
            startRevision = iterator.GetRevision();
            iterator.Advance();
        }
    }

    *startPath = iterator.GetAddPath();
}