From ee2bb35228e8d3c12ae0e31748075777e10f9d62 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sat, 8 Jan 2022 07:47:13 -0800 Subject: Modernize GetCabList and GetLooseFileList tasks --- src/wix/WixToolset.BuildTasks/GetCabList.cs | 14 +- src/wix/WixToolset.BuildTasks/GetLooseFileList.cs | 171 ++++++++-------------- src/wix/WixToolset.Sdk/tools/wix.signing.targets | 9 +- 3 files changed, 78 insertions(+), 116 deletions(-) diff --git a/src/wix/WixToolset.BuildTasks/GetCabList.cs b/src/wix/WixToolset.BuildTasks/GetCabList.cs index 6e8cd991..18623caa 100644 --- a/src/wix/WixToolset.BuildTasks/GetCabList.cs +++ b/src/wix/WixToolset.BuildTasks/GetCabList.cs @@ -3,6 +3,7 @@ namespace WixToolset.BuildTasks { using System; + using System.Collections.Generic; using System.IO; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; @@ -32,9 +33,8 @@ namespace WixToolset.BuildTasks /// True upon completion of the task execution. public override bool Execute() { - string databaseFile = this.Database.ItemSpec; - object[] args = { }; - System.Collections.Generic.List cabNames = new System.Collections.Generic.List(); + var cabNames = new List(); + var databaseFile = this.Database.ItemSpec; // If the file doesn't exist, no cabs to return, so exit now if (!File.Exists(databaseFile)) @@ -42,7 +42,7 @@ namespace WixToolset.BuildTasks return true; } - using (Database database = new Database(databaseFile)) + using (var database = new Database(databaseFile)) { // If the media table doesn't exist, no cabs to return, so exit now if (null == database.Tables["Media"]) @@ -50,16 +50,16 @@ namespace WixToolset.BuildTasks return true; } - System.Collections.IList records = database.ExecuteQuery("SELECT `Cabinet` FROM `Media`", args); + var databaseDirectory = Path.GetDirectoryName(databaseFile); - foreach (string cabName in records) + foreach (string cabName in database.ExecuteQuery("SELECT `Cabinet` FROM `Media`")) { if (String.IsNullOrEmpty(cabName) || cabName.StartsWith("#", StringComparison.Ordinal)) { continue; } - cabNames.Add(new TaskItem(Path.Combine(Path.GetDirectoryName(databaseFile), cabName))); + cabNames.Add(new TaskItem(Path.Combine(databaseDirectory, cabName))); } } diff --git a/src/wix/WixToolset.BuildTasks/GetLooseFileList.cs b/src/wix/WixToolset.BuildTasks/GetLooseFileList.cs index d1eb62c1..ba04a374 100644 --- a/src/wix/WixToolset.BuildTasks/GetLooseFileList.cs +++ b/src/wix/WixToolset.BuildTasks/GetLooseFileList.cs @@ -15,9 +15,6 @@ namespace WixToolset.BuildTasks /// public class GetLooseFileList : Task { - private ITaskItem database; - private ITaskItem[] looseFileList; - internal const int MsidbFileAttributesNoncompressed = 8192; internal const int MsidbFileAttributesCompressed = 16384; @@ -25,75 +22,13 @@ namespace WixToolset.BuildTasks /// The list of database files to find Loose Files in /// [Required] - public ITaskItem Database - { - get { return this.database; } - set { this.database = value; } - } + public ITaskItem Database { get; set; } /// /// The total list of Loose Files in this database /// [Output] - public ITaskItem[] LooseFileList - { - get { return this.looseFileList; } - } - - /// - /// Takes the "defaultDir" column - /// - /// Returns the corresponding sourceDir. - public string SourceDirFromDefaultDir(string defaultDir) - { - string sourceDir; - - string[] splitted = defaultDir.Split(':'); - - if (1 == splitted.Length) - { - sourceDir = splitted[0]; - } - else - { - sourceDir = splitted[1]; - } - - splitted = sourceDir.Split('|'); - - if (1 == splitted.Length) - { - sourceDir = splitted[0]; - } - else - { - sourceDir = splitted[1]; - } - - return sourceDir; - } - - /// - /// Takes the "FileName" column - /// - /// Returns the corresponding source file name. - public string SourceFileFromFileName(string fileName) - { - string sourceFile; - - string[] splitted = fileName.Split('|'); - - if (1 == splitted.Length) - { - sourceFile = splitted[0]; - } - else - { - sourceFile = splitted[1]; - } - - return sourceFile; - } + public ITaskItem[] LooseFileList { get; private set; } /// /// Gets a complete list of external Loose Files referenced by the given installer database file. @@ -101,15 +36,12 @@ namespace WixToolset.BuildTasks /// True upon completion of the task execution. public override bool Execute() { - string databaseFile = this.database.ItemSpec; - Object []emptyArgs = { }; - System.Collections.Generic.List looseFileNames = new System.Collections.Generic.List(); - Dictionary ComponentFullDirectory = new Dictionary(); - Dictionary DirectoryIdDefaultDir = new Dictionary(); - Dictionary DirectoryIdParent = new Dictionary(); - Dictionary DirectoryIdFullSource = new Dictionary(); - int i; - string databaseDir = Path.GetDirectoryName(databaseFile); + var databaseFile = this.Database.ItemSpec; + var looseFileNames = new List(); + var ComponentFullDirectory = new Dictionary(); + var DirectoryIdDefaultDir = new Dictionary(); + var DirectoryIdParent = new Dictionary(); + var DirectoryIdFullSource = new Dictionary(); // If the file doesn't exist, no Loose Files to return, so exit now if (!File.Exists(databaseFile)) @@ -117,20 +49,18 @@ namespace WixToolset.BuildTasks return true; } - using (Database database = new Database(databaseFile)) - { - bool compressed = false; - if (2 == (database.SummaryInfo.WordCount & 2)) - { - compressed = true; - } + var databaseDir = Path.GetDirectoryName(databaseFile); - // If the media table doesn't exist, no Loose Files to return, so exit now + using (var database = new Database(databaseFile)) + { + // If the File table doesn't exist, no Loose Files to return, so exit now if (null == database.Tables["File"]) { return true; } + var compressed = 2 == (database.SummaryInfo.WordCount & 2); + // Only setup all these helpful indexes if the database is marked as uncompressed. If it's marked as compressed, files are stored at the root, // so none of these indexes will be used if (!compressed) @@ -140,29 +70,28 @@ namespace WixToolset.BuildTasks return true; } - System.Collections.IList directoryRecords = database.ExecuteQuery("SELECT `Directory`,`Directory_Parent`,`DefaultDir` FROM `Directory`", emptyArgs); + var directoryRecords = database.ExecuteQuery("SELECT `Directory`,`Directory_Parent`,`DefaultDir` FROM `Directory`"); // First setup a simple index from DirectoryId to DefaultDir - for (i = 0; i < directoryRecords.Count; i += 3) + for (var i = 0; i < directoryRecords.Count; i += 3) { - string directoryId = (string)(directoryRecords[i]); - string directoryParent = (string)(directoryRecords[i + 1]); - string defaultDir = (string)(directoryRecords[i + 2]); + var directoryId = (string)directoryRecords[i]; + var directoryParent = (string)directoryRecords[i + 1]; + var defaultDir = (string)directoryRecords[i + 2]; - string sourceDir = this.SourceDirFromDefaultDir(defaultDir); + var sourceDir = this.SourceDirFromDefaultDir(defaultDir); DirectoryIdDefaultDir[directoryId] = sourceDir; DirectoryIdParent[directoryId] = directoryParent; } // Setup an index from directory Id to the full source path - for (i = 0; i < directoryRecords.Count; i += 3) + for (var i = 0; i < directoryRecords.Count; i += 3) { - string directoryId = (string)(directoryRecords[i]); - string directoryParent = (string)(directoryRecords[i + 1]); - string defaultDir = (string)(directoryRecords[i + 2]); + var directoryId = (string)directoryRecords[i]; + var directoryParent = (string)directoryRecords[i + 1]; - string sourceDir = DirectoryIdDefaultDir[directoryId]; + var sourceDir = DirectoryIdDefaultDir[directoryId]; // The TARGETDIR case if (String.IsNullOrEmpty(directoryParent)) @@ -171,7 +100,7 @@ namespace WixToolset.BuildTasks } else { - string tempDirectoryParent = directoryParent; + var tempDirectoryParent = directoryParent; while (!String.IsNullOrEmpty(tempDirectoryParent) && !String.IsNullOrEmpty(DirectoryIdParent[tempDirectoryParent])) { @@ -185,27 +114,27 @@ namespace WixToolset.BuildTasks } // Setup an index from component Id to full directory path - System.Collections.IList componentRecords = database.ExecuteQuery("SELECT `Component`,`Directory_` FROM `Component`", emptyArgs); + var componentRecords = database.ExecuteQuery("SELECT `Component`,`Directory_` FROM `Component`"); - for (i = 0; i < componentRecords.Count; i += 2) + for (var i = 0; i < componentRecords.Count; i += 2) { - string componentId = (string)(componentRecords[i]); - string componentDir = (string)(componentRecords[i + 1]); + var componentId = (string)componentRecords[i]; + var componentDir = (string)componentRecords[i + 1]; ComponentFullDirectory[componentId] = DirectoryIdFullSource[componentDir]; } } - System.Collections.IList fileRecords = database.ExecuteQuery("SELECT `Component_`,`FileName`,`Attributes` FROM `File`", emptyArgs); + var fileRecords = database.ExecuteQuery("SELECT `Component_`,`FileName`,`Attributes` FROM `File`"); - for (i = 0; i < fileRecords.Count; i += 3) + for (var i = 0; i < fileRecords.Count; i += 3) { - string componentId = (string)(fileRecords[i]); - string fileName = this.SourceFileFromFileName((string)(fileRecords[i + 1])); - int attributes = (int)(fileRecords[i + 2]); + var componentId = (string)fileRecords[i]; + var fileName = this.SourceFileFromFileName((string)fileRecords[i + 1]); + var attributes = (int)fileRecords[i + 2]; // If the whole database is marked uncompressed, use the directory layout made above - if ((!compressed && MsidbFileAttributesCompressed != (attributes & MsidbFileAttributesCompressed))) + if (!compressed && MsidbFileAttributesCompressed != (attributes & MsidbFileAttributesCompressed)) { looseFileNames.Add(new TaskItem(Path.GetFullPath(Path.Combine(ComponentFullDirectory[componentId], fileName)))); } @@ -217,9 +146,37 @@ namespace WixToolset.BuildTasks } } - this.looseFileList = looseFileNames.ToArray(); + this.LooseFileList = looseFileNames.ToArray(); return true; } + + /// + /// Takes the "defaultDir" column + /// + /// Returns the corresponding sourceDir. + public string SourceDirFromDefaultDir(string defaultDir) + { + var split = defaultDir.Split(':'); + + var sourceDir = (1 == split.Length) ? split[0] : split[1]; + + split = sourceDir.Split('|'); + + sourceDir = (1 == split.Length) ? split[0] : split[1]; + + return sourceDir; + } + + /// + /// Takes the "FileName" column + /// + /// Returns the corresponding source file name. + private string SourceFileFromFileName(string fileName) + { + var split = fileName.Split('|'); + + return (1 == split.Length) ? split[0] : split[1]; + } } } diff --git a/src/wix/WixToolset.Sdk/tools/wix.signing.targets b/src/wix/WixToolset.Sdk/tools/wix.signing.targets index 3df05d51..45556e23 100644 --- a/src/wix/WixToolset.Sdk/tools/wix.signing.targets +++ b/src/wix/WixToolset.Sdk/tools/wix.signing.targets @@ -8,8 +8,13 @@ - - + + + + + + + -- cgit v1.2.3-55-g6feb