From c8c73ccddedcb64f9989e3d5a9f15240b476b551 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Fri, 27 Jul 2018 00:35:52 -0700 Subject: Remove WixFileNotFoundException, report checked paths and improve bind path command-line parsing --- src/WixToolset.Core/Bind/FileResolver.cs | 36 +++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) (limited to 'src/WixToolset.Core/Bind/FileResolver.cs') diff --git a/src/WixToolset.Core/Bind/FileResolver.cs b/src/WixToolset.Core/Bind/FileResolver.cs index 86075e46..01dfe36c 100644 --- a/src/WixToolset.Core/Bind/FileResolver.cs +++ b/src/WixToolset.Core/Bind/FileResolver.cs @@ -43,17 +43,24 @@ namespace WixToolset.Core.Bind public string Resolve(SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, string source) { + var checkedPaths = new List(); + foreach (var extension in this.LibrarianExtensions) { - var resolved = extension.Resolve(sourceLineNumbers, tupleDefinition, source); + var resolved = extension.ResolveFile(sourceLineNumbers, tupleDefinition, source); + + if (resolved?.CheckedPaths != null) + { + checkedPaths.AddRange(resolved.CheckedPaths); + } - if (null != resolved) + if (!String.IsNullOrEmpty(resolved?.Path)) { - return resolved; + return resolved?.Path; } } - return this.ResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, BindStage.Normal); + return this.MustResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, BindStage.Normal, checkedPaths); } /// @@ -66,24 +73,32 @@ namespace WixToolset.Core.Bind /// Should return a valid path for the stream to be imported. public string ResolveFile(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage) { + var checkedPaths = new List(); + foreach (var extension in this.ResolverExtensions) { var resolved = extension.ResolveFile(source, tupleDefinition, sourceLineNumbers, bindStage); - if (null != resolved) + if (resolved?.CheckedPaths != null) + { + checkedPaths.AddRange(resolved.CheckedPaths); + } + + if (!String.IsNullOrEmpty(resolved?.Path)) { - return resolved; + return resolved?.Path; } } - return this.ResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, bindStage); + return this.MustResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, bindStage, checkedPaths); } - private string ResolveUsingBindPaths(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage) + private string MustResolveUsingBindPaths(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage, List checkedPaths) { string resolved = null; // If the file exists, we're good to go. + checkedPaths.Add(source); if (CheckFileExists(source)) { resolved = source; @@ -121,6 +136,7 @@ namespace WixToolset.Core.Bind { var filePath = Path.Combine(bindPath.Path, pathWithoutSourceDir); + checkedPaths.Add(filePath); if (CheckFileExists(filePath)) { resolved = filePath; @@ -131,6 +147,7 @@ namespace WixToolset.Core.Bind { var filePath = Path.Combine(bindPath.Path, path); + checkedPaths.Add(filePath); if (CheckFileExists(filePath)) { resolved = filePath; @@ -141,10 +158,9 @@ namespace WixToolset.Core.Bind if (null == resolved) { - throw new WixFileNotFoundException(sourceLineNumbers, source, tupleDefinition.Name); + throw new WixException(ErrorMessages.FileNotFound(sourceLineNumbers, source, tupleDefinition.Name, checkedPaths)); } - // Didn't find the file. return resolved; } -- cgit v1.2.3-55-g6feb