/// <summary> /// Register an migration provider with the migration engine, /// 1. Intialize migration service container and services. /// </summary> /// <param name="migrationProvider"></param> /// <param name="sourceId"></param> internal void RegisterMigrationProvider(Guid sourceId, IMigrationProvider migrationProvider) { ServiceContainer serviceContainer; Debug.Assert(m_serviceContainers.ContainsKey(sourceId), string.Format(MigrationToolkitResources.UnknownSourceId, sourceId)); if (!m_serviceContainers.TryGetValue(sourceId, out serviceContainer)) { throw new MigrationException(string.Format( MigrationToolkitResources.Culture, MigrationToolkitResources.UnknownSourceId, sourceId)); } m_serviceContainers[sourceId].AddService(typeof(IMigrationProvider), migrationProvider); m_migrationProviders.Add(sourceId, migrationProvider); migrationProvider.InitializeServices(m_serviceContainers[sourceId]); ConflictManager conflictManagementService = m_serviceContainers[sourceId].GetService(typeof(ConflictManager)) as ConflictManager; Debug.Assert(conflictManagementService != null, "conflictManager == NULL"); migrationProvider.RegisterConflictTypes(conflictManagementService); foreach (MigrationAddin MigrationAddin in m_addinManagementService.GetMigrationSourceMigrationAddins(sourceId)) { Debug.Assert(m_serviceContainers.ContainsKey(sourceId), "No ServiceContainer found for MigrationSource with Id: " + sourceId); MigrationContext MigrationContext = new MigrationContext(m_serviceContainers[sourceId], migrationProvider); m_migrationContextsByMigrationSource.Add(sourceId, MigrationContext); // Just need to create one MigrationContext that can be shared by all of the Addins for a migration source since the contents are read-only // to the Addin break; } }
/// <summary> /// Gets the service object of the specified type. /// </summary> /// <param name="serviceType">An object that specifies the type of service object to get.</param> /// <returns> /// A service object of type <paramref name="serviceType"/>. /// -or- /// null if there is no service object of type <paramref name="serviceType"/>. /// </returns> object IServiceProvider.GetService(Type serviceType) { TraceManager.TraceInformation("WSSVC:Adapter:GetService - {0}", serviceType); if (serviceType == typeof(IAnalysisProvider)) { if (analysisProvider == null) { analysisProvider = new SharePointVCAnalysisProvider(); } return(analysisProvider); } if (serviceType == typeof(IMigrationProvider)) { if (migrationProvider == null) { migrationProvider = new SharePointVCMigrationProvider(); } return(migrationProvider); } if (serviceType == typeof(IServerPathTranslationService)) { if (transalationProvider == null) { transalationProvider = new SharePointVCAdapterTranslation(); } return(transalationProvider); } return(null); }
/// <summary> /// Instantiates a new instance of the <see cref="SimpleMigrator"/> class /// </summary> /// <param name="migrationProvider">Migration provider to use to find migration classes</param> /// <param name="databaseProvider"><see cref="IDatabaseProvider{TDatabase}"/> implementation to use</param> /// <param name="logger">Logger to use to log progress</param> public SimpleMigrator( IMigrationProvider migrationProvider, IDatabaseProvider <DbConnection> databaseProvider, ILogger logger = null) : base(migrationProvider, databaseProvider, logger) { }
object IServiceProvider.GetService(Type serviceType) { TraceManager.TraceInformation("POC:Adapter:GetService - {0}", serviceType.ToString()); if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new PocVCAnalysisProvider(); } return(m_analysisProvider); } else if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new PocVCMigrationProvider(); } return(m_migrationProvider); } else if (serviceType == typeof(IServerPathTranslationService)) { if (m_serverPathTranslationProvider == null) { m_serverPathTranslationProvider = new PoCVCAdapterTranslation(); } return(m_serverPathTranslationProvider); } return(new ArgumentException("Invalid Type :" + serviceType.Name)); }
/// <summary> /// Returns the actual implementation for requested service interfaces /// </summary> public object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new SubversionVCAnalysisProvider(); } return(m_analysisProvider); } else if (serviceType == typeof(IVCDiffProvider)) { if (m_vcDiffProvider == null) { m_vcDiffProvider = new SubversionVCDiffProvider(); } return(m_vcDiffProvider); } if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new SubversionVCMigrationProvider(); } return(m_migrationProvider); } return(null); }
public MigrationRunner(IMigrationProvider migrationProvider, IMigrationLog migrationLog, IMigrationSynchronizationContext synchronizationContext, IActivator <IMigration> activator) { this.migrationProvider = migrationProvider; this.migrationLog = migrationLog; this.activator = activator; this.synchronizationContext = synchronizationContext; }
public GenerateSQL(Configuration configuration, Settings settings, ISqlFormatter sql_formatter, IFileWriter file_writer, IMigrationProvider migration_provider) { _configuration = configuration; _settings = settings; _sql_formatter = sql_formatter; _file_writer = file_writer; _migration_provider = migration_provider; }
/// <summary> /// Instantiates a new instance of the <see cref="SimpleMigrator{TDatabase, TMigrationBase}"/> class /// </summary> /// <param name="migrationProvider">Migration provider to use to find migration classes</param> /// <param name="databaseProvider">Database provider to use to interact with the version table, etc</param> /// <param name="logger">Logger to use to log progress and messages</param> public SimpleMigrator( IMigrationProvider migrationProvider, IDatabaseProvider <TConnection> databaseProvider, ILogger logger = null) { this.MigrationProvider = migrationProvider ?? throw new ArgumentNullException(nameof(migrationProvider)); this.DatabaseProvider = databaseProvider ?? throw new ArgumentNullException(nameof(databaseProvider)); this.Logger = logger; }
/// <summary> /// Gets the providers supported by this Adapter. /// </summary> /// <param name="serviceType">IAnalysisProvider, IMigrationProvider, or ILinkProvider</param> /// <returns></returns> public object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new ClearQuestAnalysisProvider(); } return(m_analysisProvider); } else if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new ClearQuestMigrationProvider(); } return(m_migrationProvider); } else if (serviceType == typeof(ILinkProvider)) { if (m_linkProvider == null) { m_linkProvider = new ClearQuestLinkProvider(); } return(m_linkProvider); } else if (serviceType == typeof(IWITDiffProvider)) { if (m_witDiffProvider == null) { m_witDiffProvider = new ClearQuestDiffProvider(); } return(m_witDiffProvider); } else if (serviceType == typeof(ISyncMonitorProvider)) { if (m_syncMonitorProvider == null) { m_syncMonitorProvider = new ClearQuestSyncMonitorProvider(); } return(m_syncMonitorProvider); } else if (serviceType == typeof(IAddin)) { if (m_userIdLookupAddin == null) { m_userIdLookupAddin = new ClearQuestUserIdLookupAddin(); } return(m_userIdLookupAddin); } else { return(null); } }
/// <summary> /// Return a service based on serviceType. /// </summary> /// <param name="serviceType"></param> /// <returns></returns> public object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new TfsFileSystemAnalysisProvider(); } return(m_analysisProvider); } else if (serviceType == typeof(IServerPathTranslationService)) { if (m_serverPathTranslationProvider == null) { m_serverPathTranslationProvider = new TfsFileSystemTranslationService(); } return(m_serverPathTranslationProvider); } else if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new TfsFileSystemMigrationProvider(); } return(m_migrationProvider); } else if (serviceType == typeof(IVCDiffProvider)) { if (m_diffProvider == null) { m_diffProvider = new TfsFileSystemDiffProvider(); } return(m_diffProvider); } else if (serviceType == typeof(ISyncMonitorProvider)) { if (m_syncMonitorProvider == null) { m_syncMonitorProvider = new TfsFileSystemSyncMonitorProvider(); } return(m_syncMonitorProvider); } else if (serviceType == typeof(IMigrationItemSerializer)) { if (m_migrationItemSerializer == null) { m_migrationItemSerializer = new TfsFileSystemMigrationItemSerializer(); } return(m_migrationItemSerializer); } return(null); }
public virtual object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new Tfs2010WitAnalysisProvider(); } return(m_analysisProvider); } if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new Tfs2010WitMigrationProvider(); } return(m_migrationProvider); } if (serviceType == typeof(ILinkProvider)) { if (m_linkProvider == null) { m_linkProvider = new Tfs2010LinkProvider(); } return(m_linkProvider); } if (serviceType == typeof(IWITDiffProvider)) { if (m_witDiffProvider == null) { m_witDiffProvider = new TfsWITDiffProvider(); } return(m_witDiffProvider); } if (serviceType == typeof(ISyncMonitorProvider)) { if (m_syncMonitorProvider == null) { m_syncMonitorProvider = new TfsWITSyncMonitorProvider(); } return(m_syncMonitorProvider); } return(null); }
public object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new TfsVCAnalysisProvider(); } return(m_analysisProvider); } else if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new TfsVCMigrationProvider(); } return(m_migrationProvider); } else if (serviceType == typeof(IVCDiffProvider)) { if (m_vcDiffProvider == null) { m_vcDiffProvider = new TfsVCDiffProvider(); } return(m_vcDiffProvider); } else if (serviceType == typeof(IServerPathTranslationService)) { if (m_serverPathTranslationProvider == null) { m_serverPathTranslationProvider = new TFSVCServerPathTranslationService(); } return(m_serverPathTranslationProvider); } else if (serviceType == typeof(ISyncMonitorProvider)) { if (m_syncMonitorProvider == null) { m_syncMonitorProvider = new TfsVCSyncMonitorProvider(); } return(m_syncMonitorProvider); } return(null); }
/// <summary> /// Return a service based on serviceType. /// </summary> /// <param name="serviceType"></param> /// <returns></returns> public object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new ClearCaseSelectedHistoryAnalysisProvider(true); } return(m_analysisProvider); } else if (serviceType == typeof(IServerPathTranslationService)) { if (m_serverPathTranslationProvider == null) { m_serverPathTranslationProvider = new CCTranslationService(); } return(m_serverPathTranslationProvider); } else if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new ClearCaseMigrationProvider(new TfsFileSystemMigrationItemSerializer(), "HWMLastSyncedTfsChangeset"); } return(m_migrationProvider); } else if (serviceType == typeof(IVCDiffProvider)) { if (m_diffProvider == null) { m_diffProvider = new ClearCaseDiffProvider(); } return(m_diffProvider); } else if (serviceType == typeof(ISyncMonitorProvider)) { if (m_syncMonitorProvider == null) { m_syncMonitorProvider = (ISyncMonitorProvider)m_analysisProvider.GetService(typeof(ISyncMonitorProvider)); } return(m_syncMonitorProvider); } return(null); }
/// <summary> /// Return a service based on serviceType. /// </summary> /// <param name="serviceType"></param> /// <returns></returns> public object GetService(Type serviceType) { if (serviceType == typeof(IAnalysisProvider)) { if (m_analysisProvider == null) { m_analysisProvider = new ClearCaseAnalysisProvider(); } return(m_analysisProvider); } else if (serviceType == typeof(IServerPathTranslationService)) { if (m_serverPathTranslationProvider == null) { m_serverPathTranslationProvider = new CCTranslationService(); } return(m_serverPathTranslationProvider); } else if (serviceType == typeof(IMigrationProvider)) { if (m_migrationProvider == null) { m_migrationProvider = new ClearCaseMigrationProvider(); } return(m_migrationProvider); } else if (serviceType == typeof(IVCDiffProvider)) { if (m_diffProvider == null) { m_diffProvider = new ClearCaseDiffProvider(); } return(m_diffProvider); } else if (serviceType == typeof(ISyncMonitorProvider)) { if (m_syncMonitorProvider == null) { m_syncMonitorProvider = new ClearCaseSyncMonitorProvider(); } return(m_syncMonitorProvider); } return(null); }
public MigrationViewer(Configuration configuration, IMigrationProvider migration_provider) { _migration_provider = migration_provider; _configuration = configuration; }
public MigrationRunner(IMigrationProvider migrationProvider, IMigrationLog migrationLog, IMigrationSynchronizationContext synchronizationContext) : this(migrationProvider, migrationLog, synchronizationContext, new ReflectionActivator <IMigration>()) { }
internal MigrationContext(IServiceContainer tookitServiceContainer, IMigrationProvider migrationProvider) { TookitServiceContainer = tookitServiceContainer; }
static int Main(string[] args) { try { _settings = Settings.Load(); _file_writer = new FileWriter(); _configuration = new Configuration(args); _sql_formatter = new SQLServerFormatter(_configuration, _settings); _database_provider = new SQLDatabaseProvider(_configuration, _settings, _sql_formatter); _migration_provider = new JsonFileMigrationProvider(_configuration, _settings, _database_provider); if (_configuration.WriteHelp) { _humpback_command = new Help(_configuration); } else if (_configuration.Generate) { Console.WriteLine("current project: " + _settings.CurrentProject); _settings.EnsureDirectories(); _humpback_command = new Generator(_configuration, _settings, _file_writer); } else if (_configuration.List) { _settings.EnsureDirectories(); _humpback_command = new MigrationViewer(_configuration, _migration_provider); } else if (_configuration.File) { _settings.EnsureDirectories(); _humpback_command = new SourceEditor(_configuration, _migration_provider, new MigrationViewer(_configuration, _migration_provider)); } else if (_configuration.Migrate) { Console.WriteLine("current project: " + _settings.CurrentProject); _settings.EnsureDirectories(); _humpback_command = new Migrate(_configuration, _database_provider, _migration_provider); } else if (_configuration.Sql) { Console.WriteLine("current project: " + _settings.CurrentProject); _settings.EnsureDirectories(); _humpback_command = new GenerateSQL(_configuration, _settings, _sql_formatter, _file_writer, _migration_provider); } else if (_configuration.Env) { _humpback_command = new SettingsActions(_configuration, _settings); } _humpback_command.Execute(); } catch (Exception e) { Console.WriteLine(e.Message); if (_configuration != null && _configuration.Verbose) { Console.WriteLine(e.ToString()); } if (Debugger.IsAttached) { Console.ReadLine(); } return(-1); } if (Debugger.IsAttached) { Console.ReadLine(); } return(0); }
public SourceEditor(Configuration configuration, IMigrationProvider migration_provider, MigrationViewer viewer) { _migration_provider = migration_provider; _configuration = configuration; list_viewer = viewer; }
public async Task <IEnumerable <MigrationHistory> > ExecuteAsync(IMigrationProvider provider, CancellationToken cancellationToken = default) { // Find starting point. await using var latest = await provider.GetLatestAsync(cancellationToken); if (latest == null) { this.logger.LogWarning("No any available migrations to apply."); return(Enumerable.Empty <MigrationHistory>()); } var histories = await this.connection.ListHistoryAsync(latest.Version.Major, cancellationToken); var current = histories.LastOrDefault(); if (current != null) { // Make sure the latest migration to apply is really latest. if ((await this.connection.ListHistoryAsync(latest.Version.Major + 1, cancellationToken)).Any() || current.Version > latest.Version) { this.logger.LogWarning("Cannot apply the latest migration {Latest} due to the database is already applied by newer version.", latest); return(Enumerable.Empty <MigrationHistory>()); } if (current.Version == latest.Version) { this.logger.LogInformation("The database is already in the latest version {Current}.", current.Version); return(Enumerable.Empty <MigrationHistory>()); } } else { // Find the latest major version of the database. for (var i = latest.Version.Major - 1; i >= 0; i--) { histories = await this.connection.ListHistoryAsync(i, cancellationToken); if (histories.Any()) { break; } } current = histories.LastOrDefault(); } // Execute migrations. var result = new List <MigrationHistory>(); if (current == null) { this.logger.LogInformation("No any migrations have been applied to the database yet."); } else { this.logger.LogInformation("The current database version is {Current}.", current.Version); } for (; ;) { // Find next migration. IMigration?migration; if (current == null) { // The database is a brand new. migration = (await provider.GetAsync(new(0, 0), cancellationToken)) !; } else if (current.Version.Minor == 0) { // The database is in the first (0) minor version. We are safe to jump to next major version to speed up. migration = await provider.GetAsync(current.Version.IncreaseMajor(), cancellationToken); if (migration == null) { // No next major version is available, switch to next minor version instead. migration = await provider.GetAsync(current.Version.IncreaseMinor(), cancellationToken); if (migration == null) { // No more migrations. break; } } } else { // The database is in the middle of major version. Apply all remaining minor versions. migration = await provider.GetAsync(current.Version.IncreaseMinor(), cancellationToken); if (migration == null) { // No more minor versions. Try to skip the next major version if it is possible to speed up. migration = await provider.GetAsync(current.Version.IncreaseMajor().IncreaseMajor(), cancellationToken); if (migration == null) { // The next major version is the latest one. Apply all its minor versions. migration = await provider.GetAsync(new(current.Version.Major + 1, 1), cancellationToken); if (migration == null) { // No more migrations. break; } } } } // Execute migration. await using (migration) { this.logger.LogInformation("Applying migration: {Migration}", migration); foreach (var statement in await migration.ListStatementAsync(cancellationToken)) { await this.connection.ExecuteMigrationAsync(statement); } current = new MigrationHistory(migration.Version, DateTime.Now); } await this.connection.CreateHistoryAsync(current); result.Add(current); } this.logger.LogInformation("{Count} migration(s) has been applied successfully.", result.Count); return(result); }
public Migrate(ConfigurationOptions.Configuration configuration, IDatabaseProvider database_provider, IMigrationProvider migration_provider) { _configuration = configuration; _database_provider = database_provider; _migration_provider = migration_provider; }