From 83b44874c5b380f3bf5e284ac1e46dddadda9594 Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Fri, 10 Sep 2010 12:30:12 +0200 Subject: Add posibility to use variables in rule files "declare var=value" now "${var}" in any line will be replaced by "value" --- src/ruleparser.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/ruleparser.cpp b/src/ruleparser.cpp index 07269c1..10a22ac 100644 --- a/src/ruleparser.cpp +++ b/src/ruleparser.cpp @@ -82,6 +82,10 @@ void Rules::load() QRegExp matchRevLine("(min|max) revision (\\d+)", Qt::CaseInsensitive); QRegExp matchAnnotateLine("annotated\\s+(\\S+)", Qt::CaseInsensitive); QRegExp matchPrefixLine("prefix\\s+(\\S+)", Qt::CaseInsensitive); + QRegExp declareLine("declare\\s+(\\S+)\\s*=\\s*(\\S+)", Qt::CaseInsensitive); + QRegExp variableLine("\\$\\{(\\S+)\\}", Qt::CaseInsensitive); + + QMap variables; enum { ReadingNone, ReadingRepository, ReadingMatch } state = ReadingNone; Repository repo; @@ -101,6 +105,12 @@ void Rules::load() if (line.isEmpty()) continue; + int index = variableLine.indexIn(line); + if ( index != -1 ) { + if (!variables.contains(variableLine.cap(1))) + qFatal("Undeclared variable: %s", qPrintable(variableLine.cap(1))); + line = line.replace(variableLine, variables[variableLine.cap(1)]); + } if (state == ReadingRepository) { if (matchBranchLine.exactMatch(line)) { Repository::Branch branch; @@ -169,6 +179,7 @@ void Rules::load() bool isRepositoryRule = repoLine.exactMatch(line); bool isMatchRule = matchLine.exactMatch(line); + bool isVariableRule = declareLine.exactMatch(line); if (isRepositoryRule) { // repository rule @@ -182,6 +193,10 @@ void Rules::load() match = Match(); match.rx = QRegExp(matchLine.cap(1), Qt::CaseSensitive, QRegExp::RegExp2); match.lineNumber = lineNumber; + } else if (isVariableRule) { + QString variable = declareLine.cap(1); + QString value = declareLine.cap(2); + variables.insert(variable, value); } else { qFatal("Malformed line in rules file: line %d: %s", lineNumber, qPrintable(origLine)); -- cgit v1.2.1