BlogTalkRadio.Tools.CFT.DirectoryProcessor.PerformTransformations C# (CSharp) Method

PerformTransformations() public method

public PerformTransformations ( string configurationName, bool dry = false ) : void
configurationName string
dry bool
return void
        public void PerformTransformations(string configurationName, bool dry = false)
        {
            Trace.TraceInformation("Starting Transformation Process at {0} with {1} configuration", BaseDirectory, configurationName);

            foreach (var originalFile in GetConfigFiles())
            {
                var sourceFile = originalFile;

                var destinationFile = originalFile.Replace(BaseDirectory, DestinationDirectory).Replace(ConventionFileExtension, ".");
                var destinationFileTemp = destinationFile + ".tmp";
                var transformations = new List<string>();

                if (configurationName.Contains(Conventions.Default.NameSeparator))
                {
                    StringBuilder transformationName = null;
                    foreach (string part in configurationName.Split(new[] { Conventions.Default.NameSeparator }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        if (transformationName == null)
                        {
                            transformationName = new StringBuilder(part);
                        }
                        else
                        {
                            transformationName.Append(Conventions.Default.NameSeparator);
                            transformationName.Append(part);
                        }
                        var transformFile = originalFile.Replace(ConventionFileExtension, "." + transformationName + ".");
                        if (PerformTransform(sourceFile, transformFile, destinationFileTemp))
                        {
                            transformations.Add(transformationName.ToString());
                        }
                        sourceFile = destinationFileTemp;
                    }
                }
                else
                {
                    var transformFile = originalFile.Replace(ConventionFileExtension, "." + configurationName + ".");
                    if (PerformTransform(sourceFile, transformFile, destinationFileTemp))
                    {
                        transformations.Add(configurationName);
                    }
                }

                ReplaceTokensInFile(destinationFileTemp, configurationName);

                var destinationFileRelative = Path.GetFullPath(destinationFile).Substring(Path.GetFullPath(DestinationDirectory).Length);
                if (!ReplaceWithTempIfChanged(destinationFileTemp, destinationFile, dry))
                {
                    Trace.TraceInformation("Unchanged: {0}.", destinationFileRelative);
                }
                else
                {
                    if (transformations.Count < 1)
                    {
                        transformations.Add(Conventions.Default.DefaultName);
                    }
                    Trace.TraceInformation("Transformed: {0} = {1}.", string.Join(" + ", transformations), destinationFileRelative);
                }
            }
        }

Usage Example

Example #1
0
File: App.cs Project: benjamine/CFT
 public static void Transform(
     string path = null,
     [Description("Configuration Name (eg. Dev, Production)")]string configuration = null,
     string destination = null,
     [Description("A file to get Configuration name from")]string configurationFile = null,
     [Description("An environment variable to get Configuration name from")]string configurationEnv = null,
     [Description("Default Configuration name to use when not obtained from other source")]string configurationDefault = null,
     [Description("Stops with an error if a file would change. Doesn't touch any file")]bool dry = false
     )
 {
     try
     {
         var directoryProcessor = new DirectoryProcessor(path, destination);
         if (string.IsNullOrWhiteSpace(configuration))
         {
             string choice;
             configuration = new ConfigurationNameResolver
                 {
                     Filename = configurationFile,
                     EnvironmentVariable = configurationEnv,
                     Default = configurationDefault
                 }.GetConfigurationName(out choice);
             if (!string.IsNullOrWhiteSpace(configuration))
             {
                 Trace.TraceInformation(string.Format("Using {0} configuration obtained from {1}", configuration, choice));
             }
         }
         if (string.IsNullOrWhiteSpace(configuration))
         {
             directoryProcessor.CreateEmptyDestinationFiles(dry);
         }
         else
         {
             directoryProcessor.PerformTransformations(configuration, dry);
         }
     }
     catch
     {
         Environment.ExitCode = 1;
         throw;
     }
 }