diff options
| author | Rob Mensching <rob@firegiant.com> | 2025-03-19 07:40:06 -0700 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2025-03-19 13:51:50 -0700 |
| commit | 669057f49c207de597604f847fb6ec55f17df121 (patch) | |
| tree | a9ec84a04528b1983befe66edf7fff72aae370e3 /src | |
| parent | 05c105ed416ff3465bd234726c53ce9def49d81d (diff) | |
| download | wix-669057f49c207de597604f847fb6ec55f17df121.tar.gz wix-669057f49c207de597604f847fb6ec55f17df121.tar.bz2 wix-669057f49c207de597604f847fb6ec55f17df121.zip | |
Harvesting no longer aborts if any exclusions reference missing folders
Fixes 8989
Diffstat (limited to '')
3 files changed, 66 insertions, 26 deletions
diff --git a/src/wix/WixToolset.Core/HarvestFilesCommand.cs b/src/wix/WixToolset.Core/HarvestFilesCommand.cs index ed78e808..25698ece 100644 --- a/src/wix/WixToolset.Core/HarvestFilesCommand.cs +++ b/src/wix/WixToolset.Core/HarvestFilesCommand.cs | |||
| @@ -135,33 +135,32 @@ namespace WixToolset.Core | |||
| 135 | 135 | ||
| 136 | var files = new List<WildcardFile>(); | 136 | var files = new List<WildcardFile>(); |
| 137 | 137 | ||
| 138 | try | 138 | foreach (var pattern in patterns) |
| 139 | { | 139 | { |
| 140 | foreach (var pattern in patterns) | 140 | // Resolve bind paths, if any, which might result in multiple directories. |
| 141 | foreach (var path in this.ResolveBindPaths(sourceLineNumbers, pattern)) | ||
| 141 | { | 142 | { |
| 142 | // Resolve bind paths, if any, which might result in multiple directories. | 143 | var sourceDirectory = String.IsNullOrEmpty(sourcePath) ? Path.GetDirectoryName(sourceLineNumbers.FileName) : sourcePath; |
| 143 | foreach (var path in this.ResolveBindPaths(sourceLineNumbers, pattern)) | 144 | var recursive = path.IndexOf("**") >= 0; |
| 144 | { | 145 | var filePortion = Path.GetFileName(path); |
| 145 | var sourceDirectory = String.IsNullOrEmpty(sourcePath) ? Path.GetDirectoryName(sourceLineNumbers.FileName) : sourcePath; | 146 | var directoryPortion = Path.GetDirectoryName(path).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); |
| 146 | var recursive = path.IndexOf("**") >= 0; | ||
| 147 | var filePortion = Path.GetFileName(path); | ||
| 148 | var directoryPortion = Path.GetDirectoryName(path).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); | ||
| 149 | 147 | ||
| 150 | if (directoryPortion?.EndsWith(@"\**") == true) | 148 | if (directoryPortion?.EndsWith(@"\**") == true) |
| 151 | { | 149 | { |
| 152 | directoryPortion = directoryPortion.Substring(0, directoryPortion.Length - 3); | 150 | directoryPortion = directoryPortion.Substring(0, directoryPortion.Length - 3); |
| 153 | } | 151 | } |
| 154 | |||
| 155 | if (directoryPortion is null || directoryPortion.Length == 0 || directoryPortion == "**") | ||
| 156 | { | ||
| 157 | directoryPortion = sourceDirectory; | ||
| 158 | 152 | ||
| 159 | } | 153 | if (directoryPortion is null || directoryPortion.Length == 0 || directoryPortion == "**") |
| 160 | else if (!Path.IsPathRooted(directoryPortion)) | 154 | { |
| 161 | { | 155 | directoryPortion = sourceDirectory; |
| 162 | directoryPortion = Path.Combine(sourceDirectory, directoryPortion); | 156 | } |
| 163 | } | 157 | else if (!Path.IsPathRooted(directoryPortion)) |
| 158 | { | ||
| 159 | directoryPortion = Path.Combine(sourceDirectory, directoryPortion); | ||
| 160 | } | ||
| 164 | 161 | ||
| 162 | try | ||
| 163 | { | ||
| 165 | var recursiveDirOffset = directoryPortion.Length + 1; | 164 | var recursiveDirOffset = directoryPortion.Length + 1; |
| 166 | 165 | ||
| 167 | var foundFiles = Directory.EnumerateFiles(directoryPortion, filePortion, recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); | 166 | var foundFiles = Directory.EnumerateFiles(directoryPortion, filePortion, recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); |
| @@ -176,12 +175,12 @@ namespace WixToolset.Core | |||
| 176 | }); | 175 | }); |
| 177 | } | 176 | } |
| 178 | } | 177 | } |
| 178 | catch (DirectoryNotFoundException e) | ||
| 179 | { | ||
| 180 | this.Messaging.Write(OptimizerWarnings.ExpectedDirectory(harvestFile.SourceLineNumbers, e.Message)); | ||
| 181 | } | ||
| 179 | } | 182 | } |
| 180 | } | 183 | } |
| 181 | catch (DirectoryNotFoundException e) | ||
| 182 | { | ||
| 183 | this.Messaging.Write(OptimizerWarnings.ExpectedDirectory(harvestFile.SourceLineNumbers, e.Message)); | ||
| 184 | } | ||
| 185 | 184 | ||
| 186 | return files; | 185 | return files; |
| 187 | } | 186 | } |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs index 949746ac..a680d145 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs | |||
| @@ -57,6 +57,30 @@ namespace WixToolsetTest.CoreIntegration | |||
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | [Fact] | 59 | [Fact] |
| 60 | public void MissingHarvestExclusionsDoesNotBlockAllHarvesting() | ||
| 61 | { | ||
| 62 | Build("SomeExclusionsMissing.wxs", (msiPath, sourceFolder, baseFolder, result) => | ||
| 63 | { | ||
| 64 | var expectedWarnings = new[] | ||
| 65 | { | ||
| 66 | @"8601: Missing directory for harvesting files: Could not find a part of the path '<sourceFolder>\files2\files2_sub2\MissingDirectory'.", | ||
| 67 | @"8601: Missing directory for harvesting files: Could not find a part of the path '<sourceFolder>\files2\files2_sub2\ThisDirectoryIsAlsoMissing'.", | ||
| 68 | }; | ||
| 69 | |||
| 70 | var expectedFiles = new[] | ||
| 71 | { | ||
| 72 | @"flsCswDB8sBfZz7_oHNtra3tiFivPE=PFiles\MsiPackage\test20.txt", | ||
| 73 | @"fls4200C_IADZMINQyhQg52G3WxxfU=PFiles\MsiPackage\test21.txt", | ||
| 74 | }; | ||
| 75 | |||
| 76 | var messages = result.Messages.Select(m => FormatMessage(m, sourceFolder, baseFolder)).ToArray(); | ||
| 77 | WixAssert.CompareLineByLine(expectedWarnings, messages); | ||
| 78 | |||
| 79 | AssertFileIdsAndTargetPaths(msiPath, expectedFiles); | ||
| 80 | }, warningsAsErrors: false); | ||
| 81 | } | ||
| 82 | |||
| 83 | [Fact] | ||
| 60 | public void DuplicateFilesSomethingSomething() | 84 | public void DuplicateFilesSomethingSomething() |
| 61 | { | 85 | { |
| 62 | Build("DuplicateFiles.wxs", (_, result) => | 86 | Build("DuplicateFiles.wxs", (_, result) => |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/HarvestFiles/SomeExclusionsMissing.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/HarvestFiles/SomeExclusionsMissing.wxs new file mode 100644 index 00000000..104518bd --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/HarvestFiles/SomeExclusionsMissing.wxs | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
| 2 | <Package Id="WixToolsetTest.SomeExclusionsMissing" Name="MsiPackage" Version="1.0.0.0" Manufacturer="Example Corporation"> | ||
| 3 | |||
| 4 | <Files Include="files2\files2_sub2\**"> | ||
| 5 | <Exclude Files="files2\files2_sub2\MissingDirectory\**" /> | ||
| 6 | <Exclude Files="files2\files2_sub2\pleasedontincludeme.dat" /> | ||
| 7 | <Exclude Files="files2\files2_sub2\ThisDirectoryIsAlsoMissing\**" /> | ||
| 8 | </Files> | ||
| 9 | |||
| 10 | </Package> | ||
| 11 | |||
| 12 | <Fragment> | ||
| 13 | <StandardDirectory Id="ProgramFilesFolder"> | ||
| 14 | <Directory Id="INSTALLFOLDER" Name="MsiPackage" /> | ||
| 15 | </StandardDirectory> | ||
| 16 | </Fragment> | ||
| 17 | </Wix> | ||
