コード例 #1
0
 public string[] List()
 {
     if (!CoreContext.Configuration.Standalone || !CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsAdmin())
     {
         throw new System.Security.SecurityException();
     }
     return(MigrationCore.GetAvailableMigrations());
 }
コード例 #2
0
        public void UploadAndInit(string migratorName, string path)
        {
            if (!CoreContext.Configuration.Standalone || !CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsAdmin())
            {
                throw new System.Security.SecurityException();
            }
            if (GetOngoingMigration() != null)
            {
                throw new Exception("Migration is already in progress");
            }

            var migratorMeta = MigrationCore.GetMigrator(migratorName);

            if (migratorMeta == null)
            {
                throw new ItemNotFoundException("No such migration provider");
            }
            var cts      = new CancellationTokenSource();
            var migrator = (IMigration)Activator.CreateInstance(migratorMeta.MigratorType);

            try
            {
                migrator.Init(path, cts.Token);
            }
            catch (Exception ex)
            {
                throw new Exception($"Error while initializing {migratorMeta.MigratorInfo.Name} migrator", ex);
            }

            var ongoingMigration = new OngoingMigration {
                Migration = migrator, CancelTokenSource = cts
            };

            StoreOngoingMigration(ongoingMigration);

            ongoingMigration.ParseTask = Task.Run(migrator.Parse);
        }