X-Git-Url: http://andersk.mit.edu/gitweb/svn-all-fast-export.git/blobdiff_plain/f97a8dff0675251aadc60d1c06ce5315eae2c36b..HEAD:/src/ruleparser.cpp diff --git a/src/ruleparser.cpp b/src/ruleparser.cpp index da05749..6e799c4 100644 --- a/src/ruleparser.cpp +++ b/src/ruleparser.cpp @@ -48,12 +48,14 @@ void Rules::load() // initialize the regexps we will use QRegExp repoLine("create repository\\s+(\\S+)", Qt::CaseInsensitive); - QRegExp repoBranchLine("branch\\s+(\\S+)\\s+from\\s+(\\S+)", Qt::CaseInsensitive); + QRegExp repoBranchLine("branch\\s+(\\S+)", Qt::CaseInsensitive); QRegExp matchLine("match\\s+(.*)", Qt::CaseInsensitive); + QRegExp matchActionLine("action\\s+(\\w+)", Qt::CaseInsensitive); QRegExp matchRepoLine("repository\\s+(\\S+)", Qt::CaseInsensitive); QRegExp matchBranchLine("branch\\s+(\\S+)", Qt::CaseInsensitive); QRegExp matchRevLine("(min|max) revision (\\d+)", Qt::CaseInsensitive); + QRegExp matchAnnotateLine("annotated\\s+(\\S+)", Qt::CaseInsensitive); QTextStream s(&file); enum { ReadingNone, ReadingRepository, ReadingMatch } state = ReadingNone; @@ -76,7 +78,6 @@ void Rules::load() if (repoBranchLine.exactMatch(line)) { Repository::Branch branch; branch.name = repoBranchLine.cap(1); - branch.branchFrom = repoBranchLine.cap(2); repo.branches += branch; continue; @@ -98,7 +99,23 @@ void Rules::load() else // must be max match.maxRevision = matchRevLine.cap(2).toInt(); continue; + } else if (matchActionLine.exactMatch(line)) { + QString action = matchActionLine.cap(1); + if (action == "export") + match.action = Match::Export; + else if (action == "ignore") + match.action = Match::Ignore; + else if (action == "recurse") + match.action = Match::Recurse; + else + qFatal("Invalid action \"%s\" on line %d", qPrintable(action), lineNumber); + continue; + } else if (matchAnnotateLine.exactMatch(line)) { + match.annotate = matchAnnotateLine.cap(1) == "true"; + continue; } else if (line == "end match") { + if (!match.repository.isEmpty()) + match.action = Match::Export; m_matchRules += match; state = ReadingNone; continue; @@ -126,3 +143,12 @@ void Rules::load() } } } + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug s, const Rules::Match &rule) +{ + s.nospace() << rule.rx.pattern() << " (line " << rule.lineNumber << ")"; + return s.space(); +} + +#endif