diff options
Diffstat (limited to 'src/WixToolset.Core/Bind/TransferFilesCommand.cs')
| -rw-r--r-- | src/WixToolset.Core/Bind/TransferFilesCommand.cs | 61 |
1 files changed, 21 insertions, 40 deletions
diff --git a/src/WixToolset.Core/Bind/TransferFilesCommand.cs b/src/WixToolset.Core/Bind/TransferFilesCommand.cs index 719b8b20..f116569c 100644 --- a/src/WixToolset.Core/Bind/TransferFilesCommand.cs +++ b/src/WixToolset.Core/Bind/TransferFilesCommand.cs | |||
| @@ -1,29 +1,37 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. |
| 2 | 2 | ||
| 3 | namespace WixToolset.Bind | 3 | namespace WixToolset.Core.Bind |
| 4 | { | 4 | { |
| 5 | using System; | 5 | using System; |
| 6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
| 7 | using System.IO; | 7 | using System.IO; |
| 8 | using System.Security.AccessControl; | 8 | using System.Security.AccessControl; |
| 9 | using WixToolset.Data; | 9 | using WixToolset.Data; |
| 10 | using WixToolset.Data.Bind; | ||
| 10 | using WixToolset.Extensibility; | 11 | using WixToolset.Extensibility; |
| 11 | 12 | ||
| 12 | internal class TransferFilesCommand : ICommand | 13 | internal class TransferFilesCommand |
| 13 | { | 14 | { |
| 14 | public IEnumerable<IBinderFileManager> FileManagers { private get; set; } | 15 | public TransferFilesCommand(IEnumerable<BindPath> bindPaths, IEnumerable<IBinderExtension> extensions, IEnumerable<FileTransfer> fileTransfers, bool suppressAclReset) |
| 16 | { | ||
| 17 | this.FileResolver = new FileResolver(bindPaths, extensions); | ||
| 18 | this.FileTransfers = fileTransfers; | ||
| 19 | this.SuppressAclReset = suppressAclReset; | ||
| 20 | } | ||
| 21 | |||
| 22 | private FileResolver FileResolver { get; } | ||
| 15 | 23 | ||
| 16 | public IEnumerable<FileTransfer> FileTransfers { private get; set; } | 24 | private IEnumerable<FileTransfer> FileTransfers { get; } |
| 17 | 25 | ||
| 18 | public bool SuppressAclReset { private get; set; } | 26 | private bool SuppressAclReset { get; } |
| 19 | 27 | ||
| 20 | public void Execute() | 28 | public void Execute() |
| 21 | { | 29 | { |
| 22 | List<string> destinationFiles = new List<string>(); | 30 | List<string> destinationFiles = new List<string>(); |
| 23 | 31 | ||
| 24 | foreach (FileTransfer fileTransfer in this.FileTransfers) | 32 | foreach (var fileTransfer in this.FileTransfers) |
| 25 | { | 33 | { |
| 26 | string fileSource = this.ResolveFile(fileTransfer.Source, fileTransfer.Type, fileTransfer.SourceLineNumbers, BindStage.Normal); | 34 | string fileSource = this.FileResolver.ResolveFile(fileTransfer.Source, fileTransfer.Type, fileTransfer.SourceLineNumbers, BindStage.Normal); |
| 27 | 35 | ||
| 28 | // If the source and destination are identical, then there's nothing to do here | 36 | // If the source and destination are identical, then there's nothing to do here |
| 29 | if (0 == String.Compare(fileSource, fileTransfer.Destination, StringComparison.OrdinalIgnoreCase)) | 37 | if (0 == String.Compare(fileSource, fileTransfer.Destination, StringComparison.OrdinalIgnoreCase)) |
| @@ -165,44 +173,17 @@ namespace WixToolset.Bind | |||
| 165 | } | 173 | } |
| 166 | } | 174 | } |
| 167 | 175 | ||
| 168 | private string ResolveFile(string source, string type, SourceLineNumber sourceLineNumbers, BindStage bindStage) | 176 | private void TransferFile(bool move, string source, string destination) |
| 169 | { | 177 | { |
| 170 | string path = null; | 178 | bool complete = false; |
| 171 | foreach (IBinderFileManager fileManager in this.FileManagers) | ||
| 172 | { | ||
| 173 | path = fileManager.ResolveFile(source, type, sourceLineNumbers, bindStage); | ||
| 174 | if (null != path) | ||
| 175 | { | ||
| 176 | break; | ||
| 177 | } | ||
| 178 | } | ||
| 179 | 179 | ||
| 180 | if (null == path) | 180 | if (move) |
| 181 | { | 181 | { |
| 182 | throw new WixFileNotFoundException(sourceLineNumbers, source, type); | 182 | complete = this.FileResolver.MoveFile(source, destination, true); |
| 183 | } | 183 | } |
| 184 | 184 | else | |
| 185 | return path; | ||
| 186 | } | ||
| 187 | |||
| 188 | private void TransferFile(bool move, string source, string destination) | ||
| 189 | { | ||
| 190 | bool complete = false; | ||
| 191 | foreach (IBinderFileManager fileManager in this.FileManagers) | ||
| 192 | { | 185 | { |
| 193 | if (move) | 186 | complete = this.FileResolver.CopyFile(source, destination, true); |
| 194 | { | ||
| 195 | complete = fileManager.MoveFile(source, destination, true); | ||
| 196 | } | ||
| 197 | else | ||
| 198 | { | ||
| 199 | complete = fileManager.CopyFile(source, destination, true); | ||
| 200 | } | ||
| 201 | |||
| 202 | if (complete) | ||
| 203 | { | ||
| 204 | break; | ||
| 205 | } | ||
| 206 | } | 187 | } |
| 207 | 188 | ||
| 208 | if (!complete) | 189 | if (!complete) |
