Convert( System.Type conversionClass, Bam.Core.Settings toolSettings, Bam.Core.StringArray commandLine) { var stringArrayType = typeof(Bam.Core.StringArray); foreach (var i in toolSettings.Interfaces()) { var method = conversionClass.GetMethod("Convert", new[] { i, stringArrayType }); if (null == method) { throw new Bam.Core.Exception("Unable to locate method {0}.Convert({1}, {2})", conversionClass.ToString(), i.ToString(), stringArrayType); } var commands = new Bam.Core.StringArray(); try { method.Invoke(null, new object[] { toolSettings, commands }); } catch (System.Reflection.TargetInvocationException exception) { throw new Bam.Core.Exception(exception.InnerException, "Command line conversion error:"); } commandLine.AddRange(commands); } }
Execute( Bam.Core.ExecutionContext context, Bam.Core.ICommandLineTool tool, Bam.Core.StringArray commandLine, string workingDirectory = null) { var commandLineArgs = new Bam.Core.StringArray(); if (tool.InitialArguments != null) { foreach (var arg in tool.InitialArguments) { commandLineArgs.Add(arg.ToString()); } } commandLineArgs.AddRange(commandLine); if (null != tool.TerminatingArguments) { foreach (var arg in tool.TerminatingArguments) { commandLineArgs.Add(arg.ToString()); } } Execute( context, tool.Executable.ToString(), commandLineArgs, workingDirectory: workingDirectory, inheritedEnvironmentVariables: tool.InheritedEnvironmentVariables, addedEnvironmentVariables: tool.EnvironmentVariables, useResponseFileOption: tool.UseResponseFileOption); }
Convert( this C.IAdditionalSettings settings, Bam.Core.StringArray commandLine) { if (null != settings.AdditionalSettings) { commandLine.AddRange(settings.AdditionalSettings); } }
IDiskImagePolicy.CreateDMG( DiskImage sender, Bam.Core.ExecutionContext context, Bam.Core.ICommandLineTool compiler, Bam.Core.TokenizedString sourceFolderPath, Bam.Core.TokenizedString outputPath) { var volumeName = sender.CreateTokenizedString("$(OutputName)").Parse(); var tempDiskImagePathName = System.IO.Path.GetTempPath() + System.Guid.NewGuid().ToString() + ".dmg"; // must have .dmg extension var diskImagePathName = outputPath.ToString(); var commandLine = new Bam.Core.StringArray(); (sender.Settings as CommandLineProcessor.IConvertToCommandLine).Convert(commandLine); // create the disk image { var settings = sender.Settings as IDiskImageSettings; var args = new Bam.Core.StringArray(); args.Add("create"); args.AddRange(commandLine); args.Add("-srcfolder"); args.Add(System.String.Format("\"{0}\"", sourceFolderPath.ToString())); args.Add("-size"); args.Add(settings.ImageSize); args.Add("-fs"); args.Add("HFS+"); args.Add("-volname"); args.Add(System.String.Format("\"{0}\"", volumeName)); args.Add(tempDiskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } // mount disk image { var args = new Bam.Core.StringArray(); args.Add("attach"); args.AddRange(commandLine); args.Add(tempDiskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } // TODO /// do a copy // unmount disk image { var args = new Bam.Core.StringArray(); args.Add("detach"); args.AddRange(commandLine); args.Add(System.String.Format("\"/Volumes/{0}\"", volumeName)); CommandLineProcessor.Processor.Execute(context, compiler, args); } var dmgDir = System.IO.Path.GetDirectoryName(diskImagePathName); Bam.Core.IOWrapper.CreateDirectoryIfNotExists(dmgDir); // hdiutil convert myimg.dmg -format UDZO -o myoutputimg.dmg { var args = new Bam.Core.StringArray(); args.Add("convert"); args.AddRange(commandLine); args.Add(tempDiskImagePathName); args.Add("-format"); args.Add("UDZO"); args.Add("-o"); args.Add(diskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } }
IDiskImagePolicy.CreateDMG( DiskImage sender, Bam.Core.ExecutionContext context, Bam.Core.ICommandLineTool compiler, Bam.Core.TokenizedString sourceFolderPath, Bam.Core.TokenizedString outputPath) { var volumeName = sender.CreateTokenizedString("$(OutputName)").Parse(); var tempDiskImagePathName = System.IO.Path.GetTempPath() + System.Guid.NewGuid().ToString() + ".dmg"; // must have .dmg extension var diskImagePathName = outputPath.ToString(); var commandLine = new Bam.Core.StringArray(); (sender.Settings as CommandLineProcessor.IConvertToCommandLine).Convert(commandLine); // create the disk image { var settings = sender.Settings as IDiskImageSettings; var args = new Bam.Core.StringArray(); args.Add("create"); args.AddRange(commandLine); args.Add("-srcfolder"); args.Add(System.String.Format("\"{0}\"", sourceFolderPath.ToString())); args.Add("-size"); args.Add(settings.ImageSize); args.Add("-fs"); args.Add("HFS+"); args.Add("-volname"); args.Add(System.String.Format("\"{0}\"", volumeName)); args.Add(tempDiskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } // mount disk image { var args = new Bam.Core.StringArray(); args.Add("attach"); args.AddRange(commandLine); args.Add(tempDiskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } // TODO /// do a copy // unmount disk image { var args = new Bam.Core.StringArray(); args.Add("detach"); args.AddRange(commandLine); args.Add(System.String.Format("\"/Volumes/{0}\"", volumeName)); CommandLineProcessor.Processor.Execute(context, compiler, args); } var dmgDir = System.IO.Path.GetDirectoryName(diskImagePathName); if (!System.IO.Directory.Exists(dmgDir)) { System.IO.Directory.CreateDirectory(dmgDir); } // hdiutil convert myimg.dmg -format UDZO -o myoutputimg.dmg { var args = new Bam.Core.StringArray(); args.Add("convert"); args.AddRange(commandLine); args.Add(tempDiskImagePathName); args.Add("-format"); args.Add("UDZO"); args.Add("-o"); args.Add(diskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } }
public static void Execute( Bam.Core.ExecutionContext context, Bam.Core.ICommandLineTool tool, Bam.Core.StringArray commandLine, string workingDirectory = null) { var commandLineArgs = new Bam.Core.StringArray(); if (tool.InitialArguments != null) { foreach (var arg in tool.InitialArguments) { commandLineArgs.Add(arg.Parse()); } } commandLineArgs.AddRange(commandLine); if (null != tool.TerminatingArguments) { foreach (var arg in tool.TerminatingArguments) { commandLineArgs.Add(arg.Parse()); } } Execute( context, tool.Executable.Parse(), commandLineArgs, workingDirectory: workingDirectory, inheritedEnvironmentVariables: tool.InheritedEnvironmentVariables, addedEnvironmentVariables: tool.EnvironmentVariables, useResponseFileOption: tool.UseResponseFileOption); }
IDiskImagePolicy.CreateDMG( DiskImage sender, Bam.Core.ExecutionContext context, Bam.Core.ICommandLineTool compiler, Bam.Core.TokenizedString sourceFolderPath, Bam.Core.TokenizedString outputPath) { var volumeNameTS = sender.CreateTokenizedString("$(OutputName)"); lock (volumeNameTS) { if (!volumeNameTS.IsParsed) { volumeNameTS.Parse(); } } var volumeName = volumeNameTS.ToString(); var tempDiskImagePathName = System.IO.Path.GetTempPath() + System.Guid.NewGuid().ToString() + ".dmg"; // must have .dmg extension var commandLine = new Bam.Core.StringArray(); (sender.Settings as CommandLineProcessor.IConvertToCommandLine).Convert(commandLine); // create the disk image { var settings = sender.Settings as IDiskImageSettings; var args = new Bam.Core.StringArray(); args.Add("create"); args.AddRange(commandLine); args.Add("-srcfolder"); args.Add(System.String.Format("\"{0}\"", sourceFolderPath.ToString())); args.Add("-size"); args.Add(settings.ImageSize); args.Add("-fs"); args.Add("HFS+"); args.Add("-volname"); args.Add(System.String.Format("\"{0}\"", volumeName)); args.Add(tempDiskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } // mount disk image { var args = new Bam.Core.StringArray(); args.Add("attach"); args.AddRange(commandLine); args.Add(tempDiskImagePathName); CommandLineProcessor.Processor.Execute(context, compiler, args); } // TODO /// do a copy // unmount disk image { var args = new Bam.Core.StringArray(); args.Add("detach"); args.AddRange(commandLine); args.Add(System.String.Format("\"/Volumes/{0}\"", volumeName)); CommandLineProcessor.Processor.Execute(context, compiler, args); } var diskImagePathName = outputPath.ToString(); var dmgDir = System.IO.Path.GetDirectoryName(diskImagePathName); Bam.Core.IOWrapper.CreateDirectoryIfNotExists(dmgDir); // hdiutil convert myimg.dmg -format UDZO -o myoutputimg.dmg // this will fail if the output DMG exists, so always write to a temporary // file and then move into place var tempDMGPath = System.IO.Path.GetTempPath() + System.Guid.NewGuid().ToString() + ".dmg"; { var args = new Bam.Core.StringArray(); args.Add("convert"); args.AddRange(commandLine); args.Add(tempDiskImagePathName); args.Add("-format"); args.Add("UDZO"); args.Add("-o"); args.Add(tempDMGPath); CommandLineProcessor.Processor.Execute(context, compiler, args); } // move the temporary DMG to the expected location { var args = new Bam.Core.StringArray(); args.Add("-f"); args.Add("-v"); args.Add(tempDMGPath); args.Add(outputPath.ToStringQuoteIfNecessary()); // diskImagePathName CommandLineProcessor.Processor.Execute(context, Bam.Core.OSUtilities.GetInstallLocation("mv").First(), args); } }