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);
}
}
}