Skip to content

Commit 3750637

Browse files
committed
Make driver builder not create cabs but instead leave drivers extracted
1 parent 2f5df7e commit 3750637

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

src/MobilePackageGen.Common/DriverBuilder.cs

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ private static int GetPackageCount(IEnumerable<IDisk> disks)
7373
return count;
7474
}
7575

76-
private static List<CabinetFileInfo> GetCabinetFileInfoForCbsPackage(string inf, IPartition partition)
76+
private static List<CabinetFileInfo> GetCabinetFileInfoForCbsPackage(string driverFolder, IPartition partition)
7777
{
7878
List<CabinetFileInfo> fileMappings = [];
7979

8080
IFileSystem fileSystem = partition.FileSystem!;
8181

82-
foreach (string entry in fileSystem.GetFiles(inf, "*", SearchOption.AllDirectories))
82+
foreach (string entry in fileSystem.GetFiles(driverFolder, "*", SearchOption.AllDirectories))
8383
{
8484
if (fileSystem.DirectoryExists(entry))
8585
{
@@ -147,32 +147,42 @@ private static void BuildCabinets(IEnumerable<IDisk> disks, string outputPath, U
147147

148148
string fileStatus = "";
149149

150-
if (!File.Exists(cabFile))
150+
// Trim fileName from output
151+
string DestinationFolder = Path.GetDirectoryName(cabFile)!;
152+
153+
if (!Directory.Exists(DestinationFolder))
151154
{
152155
IEnumerable<CabinetFileInfo> fileMappings = GetCabinetFileInfoForCbsPackage(folder, partition);
153156

154-
// Cab Creation is only supported on Windows
155-
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
157+
if (fileMappings.Any())
156158
{
157-
if (fileMappings.Any())
159+
if (Path.GetDirectoryName(cabFile) is string directory && !Directory.Exists(directory))
158160
{
159-
if (Path.GetDirectoryName(cabFile) is string directory && !Directory.Exists(directory))
161+
Directory.CreateDirectory(directory);
162+
}
163+
164+
foreach (CabinetFileInfo fileMapping in fileMappings)
165+
{
166+
string fileDestinationPath = Path.Combine(DestinationFolder, fileMapping.FileName);
167+
string? fileRootPath = Path.GetDirectoryName(fileDestinationPath)!;
168+
169+
if (!Directory.Exists(fileRootPath))
160170
{
161-
Directory.CreateDirectory(directory);
171+
Directory.CreateDirectory(fileRootPath);
162172
}
163173

164-
CabinetBuilder.BuildCab(cabFile, fileMappings, ref fileStatus);
165-
}
166-
}
174+
using FileStream fileStream = new(fileDestinationPath, FileMode.Create);
175+
fileMapping.FileStream.CopyTo(fileStream);
176+
fileMapping.FileStream.Close();
167177

168-
foreach (CabinetFileInfo fileMapping in fileMappings)
169-
{
170-
fileMapping.FileStream.Close();
178+
File.SetAttributes(fileDestinationPath, fileMapping.Attributes);
179+
File.SetLastWriteTimeUtc(fileDestinationPath, fileMapping.DateTime);
180+
}
171181
}
172182
}
173183
else
174184
{
175-
Logging.Log($"CAB already exists! Skipping. {cabFile}", LoggingLevel.Warning);
185+
Logging.Log($"Driver already exists! Skipping. {DestinationFolder}", LoggingLevel.Warning);
176186
}
177187

178188
if (i != packagesCount - 1)

0 commit comments

Comments
 (0)