in Source/NuGetGallery.Operations/Tasks/RunMigrationsTask.cs [43:79]
private void ScriptMigrations(MigratorBase migrator)
{
var scriptingMigrator = new MigratorScriptingDecorator(migrator);
string start;
string target;
if (migrator.GetDatabaseMigrations().Any(s => IsMigration(s, TargetMigration)))
{
// Down migration, start is null, target is the target
start = null;
target = migrator.GetDatabaseMigrations().Single(s => IsMigration(s, TargetMigration));
}
else
{
// Up migration, go from start to target.
start = migrator.GetDatabaseMigrations().FirstOrDefault();
target = migrator.GetLocalMigrations().Single(s => IsMigration(s, TargetMigration));
}
string startName = start ?? migrator.GetDatabaseMigrations().FirstOrDefault();
string scriptFileName = String.Format("{0}-{1}.sql", startName, target);
if(File.Exists(scriptFileName)) {
Log.Error("File already exists: {0}", scriptFileName);
return;
}
// Generate script
Log.Info("Scripting migration from {0} to {1}", startName, target);
if (!WhatIf)
{
string script = scriptingMigrator.ScriptUpdate(start, target);
// Write the script
File.WriteAllText(scriptFileName, script);
}
Log.Info("Wrote script to {0}", scriptFileName);
}