diff options
author | Rob Mensching <rob@firegiant.com> | 2022-08-10 12:57:14 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2022-08-10 17:31:40 -0700 |
commit | 2067f5acbfd7593f10ac2607f96df4457002b4c3 (patch) | |
tree | fdf959305e4da5fc514a401548d3270a6116fc2c | |
parent | 240b663ad5fc94ed6d19c966b5c9105a176ecf40 (diff) | |
download | wix-2067f5acbfd7593f10ac2607f96df4457002b4c3.tar.gz wix-2067f5acbfd7593f10ac2607f96df4457002b4c3.tar.bz2 wix-2067f5acbfd7593f10ac2607f96df4457002b4c3.zip |
Preprocessor only fails if current document does not parse
Previously, preprocessor would not return successfully processed files
if an error was encountered with this file or any previous file. No the
preprocessor will only fail if the current processed file generates any
errors.
5 files changed, 41 insertions, 15 deletions
diff --git a/src/api/wix/WixToolset.Extensibility/Services/IMessaging.cs b/src/api/wix/WixToolset.Extensibility/Services/IMessaging.cs index fe77f2a4..15e17e63 100644 --- a/src/api/wix/WixToolset.Extensibility/Services/IMessaging.cs +++ b/src/api/wix/WixToolset.Extensibility/Services/IMessaging.cs | |||
@@ -16,6 +16,12 @@ namespace WixToolset.Extensibility.Services | |||
16 | bool EncounteredError { get; } | 16 | bool EncounteredError { get; } |
17 | 17 | ||
18 | /// <summary> | 18 | /// <summary> |
19 | /// Gets the number of errors encountered thus far. | ||
20 | /// </summary> | ||
21 | /// <value>The number of errors encountered.</value> | ||
22 | int ErrorCount { get; } | ||
23 | |||
24 | /// <summary> | ||
19 | /// Gets the last error code encountered during messaging. | 25 | /// Gets the last error code encountered during messaging. |
20 | /// </summary> | 26 | /// </summary> |
21 | /// <value>The exit code for the process.</value> | 27 | /// <value>The exit code for the process.</value> |
diff --git a/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs b/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs index e63c727c..a00b4b12 100644 --- a/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs +++ b/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs | |||
@@ -157,7 +157,7 @@ namespace WixToolset.Core.CommandLine | |||
157 | { | 157 | { |
158 | var document = this.Preprocess(preprocessorVariables, sourceFile, includeSearchPaths, cancellationToken); | 158 | var document = this.Preprocess(preprocessorVariables, sourceFile, includeSearchPaths, cancellationToken); |
159 | 159 | ||
160 | if (this.Messaging.EncounteredError) | 160 | if (document == null) |
161 | { | 161 | { |
162 | continue; | 162 | continue; |
163 | } | 163 | } |
@@ -358,7 +358,7 @@ namespace WixToolset.Core.CommandLine | |||
358 | { | 358 | { |
359 | var document = this.Preprocess(preprocessorVariables, loc, includeSearchPaths, cancellationToken); | 359 | var document = this.Preprocess(preprocessorVariables, loc, includeSearchPaths, cancellationToken); |
360 | 360 | ||
361 | if (this.Messaging.EncounteredError) | 361 | if (document == null) |
362 | { | 362 | { |
363 | continue; | 363 | continue; |
364 | } | 364 | } |
diff --git a/src/wix/WixToolset.Core/ExtensibilityServices/Messaging.cs b/src/wix/WixToolset.Core/ExtensibilityServices/Messaging.cs index 280d845c..9a7413f4 100644 --- a/src/wix/WixToolset.Core/ExtensibilityServices/Messaging.cs +++ b/src/wix/WixToolset.Core/ExtensibilityServices/Messaging.cs | |||
@@ -13,7 +13,9 @@ namespace WixToolset.Core.ExtensibilityServices | |||
13 | private readonly HashSet<int> suppressedWarnings = new HashSet<int>(); | 13 | private readonly HashSet<int> suppressedWarnings = new HashSet<int>(); |
14 | private readonly HashSet<int> warningsAsErrors = new HashSet<int>(); | 14 | private readonly HashSet<int> warningsAsErrors = new HashSet<int>(); |
15 | 15 | ||
16 | public bool EncounteredError { get; private set; } | 16 | public bool EncounteredError => this.ErrorCount > 0; |
17 | |||
18 | public int ErrorCount { get; private set; } | ||
17 | 19 | ||
18 | public int LastErrorNumber { get; private set; } | 20 | public int LastErrorNumber { get; private set; } |
19 | 21 | ||
@@ -49,7 +51,7 @@ namespace WixToolset.Core.ExtensibilityServices | |||
49 | 51 | ||
50 | if (level == MessageLevel.Error) | 52 | if (level == MessageLevel.Error) |
51 | { | 53 | { |
52 | this.EncounteredError = true; | 54 | ++this.ErrorCount; |
53 | this.LastErrorNumber = message.Id; | 55 | this.LastErrorNumber = message.Id; |
54 | } | 56 | } |
55 | 57 | ||
diff --git a/src/wix/WixToolset.Core/Preprocessor.cs b/src/wix/WixToolset.Core/Preprocessor.cs index 084da8d0..a71e5bb7 100644 --- a/src/wix/WixToolset.Core/Preprocessor.cs +++ b/src/wix/WixToolset.Core/Preprocessor.cs | |||
@@ -141,6 +141,8 @@ namespace WixToolset.Core | |||
141 | { | 141 | { |
142 | state.CurrentFileStack.Push(state.Helper.GetVariableValue(state.Context, "sys", "SOURCEFILEDIR")); | 142 | state.CurrentFileStack.Push(state.Helper.GetVariableValue(state.Context, "sys", "SOURCEFILEDIR")); |
143 | 143 | ||
144 | var beforeErrorCount = this.Messaging.ErrorCount; | ||
145 | |||
144 | // Process the reader into the output. | 146 | // Process the reader into the output. |
145 | IPreprocessResult result = null; | 147 | IPreprocessResult result = null; |
146 | try | 148 | try |
@@ -150,7 +152,7 @@ namespace WixToolset.Core | |||
150 | // Fire event with post-processed document. | 152 | // Fire event with post-processed document. |
151 | this.ProcessedStream?.Invoke(this, new ProcessedStreamEventArgs(state.Context.SourcePath, state.Output)); | 153 | this.ProcessedStream?.Invoke(this, new ProcessedStreamEventArgs(state.Context.SourcePath, state.Output)); |
152 | 154 | ||
153 | if (!this.Messaging.EncounteredError) | 155 | if (beforeErrorCount == this.Messaging.ErrorCount) |
154 | { | 156 | { |
155 | result = this.ServiceProvider.GetService<IPreprocessResult>(); | 157 | result = this.ServiceProvider.GetService<IPreprocessResult>(); |
156 | result.Document = state.Output; | 158 | result.Document = state.Output; |
@@ -292,7 +294,7 @@ namespace WixToolset.Core | |||
292 | if (XmlNodeType.ProcessingInstruction == reader.NodeType) | 294 | if (XmlNodeType.ProcessingInstruction == reader.NodeType) |
293 | { | 295 | { |
294 | var ignore = false; | 296 | var ignore = false; |
295 | string name = null; | 297 | string name; |
296 | 298 | ||
297 | switch (reader.LocalName) | 299 | switch (reader.LocalName) |
298 | { | 300 | { |
@@ -423,7 +425,6 @@ namespace WixToolset.Core | |||
423 | break; | 425 | break; |
424 | } | 426 | } |
425 | } | 427 | } |
426 | |||
427 | } | 428 | } |
428 | //else | 429 | //else |
429 | //{ | 430 | //{ |
@@ -826,7 +827,7 @@ namespace WixToolset.Core | |||
826 | private string GetNextToken(ProcessingState state, string originalExpression, ref string expression, out bool stringLiteral) | 827 | private string GetNextToken(ProcessingState state, string originalExpression, ref string expression, out bool stringLiteral) |
827 | { | 828 | { |
828 | stringLiteral = false; | 829 | stringLiteral = false; |
829 | var token = String.Empty; | 830 | string token; |
830 | expression = expression.Trim(); | 831 | expression = expression.Trim(); |
831 | if (0 == expression.Length) | 832 | if (0 == expression.Length) |
832 | { | 833 | { |
@@ -1280,7 +1281,7 @@ namespace WixToolset.Core | |||
1280 | /// <returns>Boolean to indicate if the expression is true or false</returns> | 1281 | /// <returns>Boolean to indicate if the expression is true or false</returns> |
1281 | private bool EvaluateExpressionRecurse(ProcessingState state, string originalExpression, ref string expression, PreprocessorOperation prevResultOperation, bool prevResult) | 1282 | private bool EvaluateExpressionRecurse(ProcessingState state, string originalExpression, ref string expression, PreprocessorOperation prevResultOperation, bool prevResult) |
1282 | { | 1283 | { |
1283 | var expressionValue = false; | 1284 | bool expressionValue; |
1284 | expression = expression.Trim(); | 1285 | expression = expression.Trim(); |
1285 | if (expression.Length == 0) | 1286 | if (expression.Length == 0) |
1286 | { | 1287 | { |
diff --git a/src/wix/test/WixToolsetTest.Converters/Mocks/MockMessaging.cs b/src/wix/test/WixToolsetTest.Converters/Mocks/MockMessaging.cs index 77821a1c..2bc10772 100644 --- a/src/wix/test/WixToolsetTest.Converters/Mocks/MockMessaging.cs +++ b/src/wix/test/WixToolsetTest.Converters/Mocks/MockMessaging.cs | |||
@@ -12,7 +12,9 @@ namespace WixToolsetTest.Converters.Mocks | |||
12 | { | 12 | { |
13 | public List<Message> Messages { get; } = new List<Message>(); | 13 | public List<Message> Messages { get; } = new List<Message>(); |
14 | 14 | ||
15 | public bool EncounteredError { get; private set; } | 15 | public bool EncounteredError => this.ErrorCount > 0; |
16 | |||
17 | public int ErrorCount { get; private set; } | ||
16 | 18 | ||
17 | public int LastErrorNumber { get; } | 19 | public int LastErrorNumber { get; } |
18 | 20 | ||
@@ -22,18 +24,33 @@ namespace WixToolsetTest.Converters.Mocks | |||
22 | 24 | ||
23 | public bool WarningsAsError { get; set; } | 25 | public bool WarningsAsError { get; set; } |
24 | 26 | ||
25 | public void ElevateWarningMessage(int warningNumber) => throw new NotImplementedException(); | 27 | public void ElevateWarningMessage(int warningNumber) |
28 | { | ||
29 | throw new NotImplementedException(); | ||
30 | } | ||
26 | 31 | ||
27 | public void SetListener(IMessageListener listener) => throw new NotImplementedException(); | 32 | public void SetListener(IMessageListener listener) |
33 | { | ||
34 | throw new NotImplementedException(); | ||
35 | } | ||
28 | 36 | ||
29 | public void SuppressWarningMessage(int warningNumber) => throw new NotImplementedException(); | 37 | public void SuppressWarningMessage(int warningNumber) |
38 | { | ||
39 | throw new NotImplementedException(); | ||
40 | } | ||
30 | 41 | ||
31 | public void Write(Message message) | 42 | public void Write(Message message) |
32 | { | 43 | { |
33 | this.Messages.Add(message); | 44 | this.Messages.Add(message); |
34 | this.EncounteredError |= message.Level == MessageLevel.Error; | 45 | if (message.Level == MessageLevel.Error) |
46 | { | ||
47 | ++this.ErrorCount; | ||
48 | } | ||
35 | } | 49 | } |
36 | 50 | ||
37 | public void Write(string message, bool verbose = false) => throw new NotImplementedException(); | 51 | public void Write(string message, bool verbose = false) |
52 | { | ||
53 | throw new NotImplementedException(); | ||
54 | } | ||
38 | } | 55 | } |
39 | } | 56 | } |