Skip to content

Commit 1a41c96

Browse files
committed
Add support for default values in variable substitutions.
If there is no variable 'foo' set, ${foo} exits with a fatal error. With this patch, you can use ${foo|sometext}, which will substitute to 'sometext' if the variable 'foo' isn't set. The default text may be empty.
1 parent 7f27c60 commit 1a41c96

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/ruleparser.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void Rules::load(const QString &filename)
9898
QRegExp matchAnnotateLine("annotated\\s+(\\S+)", Qt::CaseInsensitive);
9999
QRegExp matchPrefixLine("prefix\\s+(\\S+)", Qt::CaseInsensitive);
100100
QRegExp declareLine("declare\\s+("+varRegex+")\\s*=\\s*(\\S+)", Qt::CaseInsensitive);
101-
QRegExp variableLine("\\$\\{("+varRegex+")\\}", Qt::CaseInsensitive);
101+
QRegExp variableLine("\\$\\{("+varRegex+")(\\|[^}$]*)?\\}", Qt::CaseInsensitive);
102102
QRegExp includeLine("include\\s+(.*)", Qt::CaseInsensitive);
103103

104104
enum { ReadingNone, ReadingRepository, ReadingMatch } state = ReadingNone;
@@ -133,9 +133,17 @@ void Rules::load(const QString &filename)
133133
load(includeFile);
134134
} else {
135135
while( variableLine.indexIn(line) != -1 ) {
136-
if (!m_variables.contains(variableLine.cap(1)))
137-
qFatal("Undeclared variable: %s", qPrintable(variableLine.cap(1)));
138-
line = line.replace(variableLine, m_variables[variableLine.cap(1)]);
136+
QString replacement;
137+
if (m_variables.contains(variableLine.cap(1))) {
138+
replacement = m_variables[variableLine.cap(1)];
139+
} else {
140+
if (variableLine.cap(2).startsWith('|')) {
141+
replacement = variableLine.cap(2).mid(1);
142+
} else {
143+
qFatal("Undeclared variable: %s", qPrintable(variableLine.cap(1)));
144+
}
145+
}
146+
line = line.replace(variableLine, replacement);
139147
}
140148
if (state == ReadingRepository) {
141149
if (matchBranchLine.exactMatch(line)) {

0 commit comments

Comments
 (0)