Config: add MigrateAppConfig

This commit is contained in:
Jonathan Jenne 2023-09-29 13:14:39 +02:00
parent e2d67ab6d7
commit 7a6537d529

View File

@ -1,4 +1,5 @@
Imports DigitalData.Modules.Base Imports System.IO
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Public Class ConfigUtils Public Class ConfigUtils
@ -6,6 +7,7 @@ Public Class ConfigUtils
Private _File As FilesystemEx Private _File As FilesystemEx
Private Const MIGRATE_DIRECTORY As String = "Migrate" Private Const MIGRATE_DIRECTORY As String = "Migrate"
Private Const USER_CONFIG As String = "UserConfig.xml"
Public Sub New(LogConfig As LogConfig) Public Sub New(LogConfig As LogConfig)
@ -21,98 +23,131 @@ Public Class ConfigUtils
End If End If
End Function End Function
Public Function MigrateAppDataConfig(pUserAppDataPath As String, pProductName As String, pOldProductName As String)
Dim oNewDirPath = pUserAppDataPath
Dim oOldDirPath = oNewDirPath.Replace(pProductName, pOldProductName)
Dim oNewFilePath = Path.Combine(oNewDirPath, USER_CONFIG)
Dim oOldFilePath = Path.Combine(oOldDirPath, USER_CONFIG)
' If there is already a new config, exit.
If File.Exists(oNewFilePath) Then
Return True
End If
' If there is no old config, exit.
If Not File.Exists(oOldFilePath) Then
Return True
End If
Try
If Not Directory.Exists(oNewDirPath) Then
Directory.CreateDirectory(oNewDirPath)
End If
_Logger.Info("Migrating Config from [{0}] to [{1}]", pOldProductName, pProductName)
File.Copy(oOldFilePath, oNewFilePath)
Return True
Catch ex As Exception
_Logger.Warn("Error while Migrating Config")
_Logger.Error(ex)
Return False
End Try
End Function
Public Sub MigrateConfig(SourceDirectory As String, TargetDirectory As String, Optional FilePattern As String = "*.*") Public Sub MigrateConfig(SourceDirectory As String, TargetDirectory As String, Optional FilePattern As String = "*.*")
If IO.Directory.Exists(TargetDirectory) Then 'If IO.Directory.Exists(TargetDirectory) Then
_Logger.Warn("Config Migration aborted because new config directory [{0}] already exists!", TargetDirectory) ' _Logger.Warn("Config Migration aborted because new config directory [{0}] already exists!", TargetDirectory)
Exit Sub ' Exit Sub
End If 'End If
_Logger.Debug("Creating TargetDirectory [{0}]", TargetDirectory) '_Logger.Debug("Creating TargetDirectory [{0}]", TargetDirectory)
' Create target directory '' Create target directory
Try 'Try
IO.Directory.CreateDirectory(TargetDirectory) ' IO.Directory.CreateDirectory(TargetDirectory)
Catch ex As Exception 'Catch ex As Exception
_Logger.Warn("Config Migration aborted because new config directory [{0}] could not be created!", TargetDirectory) ' _Logger.Warn("Config Migration aborted because new config directory [{0}] could not be created!", TargetDirectory)
_Logger.Error(ex) ' _Logger.Error(ex)
Exit Sub ' Exit Sub
End Try 'End Try
' Create Migration directory '' Create Migration directory
Dim oMigrationDirectory = IO.Path.Combine(SourceDirectory, MIGRATE_DIRECTORY) 'Dim oMigrationDirectory = IO.Path.Combine(SourceDirectory, MIGRATE_DIRECTORY)
_Logger.Debug("Creating MigrationDirectory [{0}]", oMigrationDirectory) '_Logger.Debug("Creating MigrationDirectory [{0}]", oMigrationDirectory)
Try 'Try
IO.Directory.CreateDirectory(oMigrationDirectory) ' IO.Directory.CreateDirectory(oMigrationDirectory)
Catch ex As Exception 'Catch ex As Exception
_Logger.Warn("Config Migration aborted because migration directory [{0}] could not be created!", oMigrationDirectory) ' _Logger.Warn("Config Migration aborted because migration directory [{0}] could not be created!", oMigrationDirectory)
_Logger.Error(ex) ' _Logger.Error(ex)
Exit Sub ' Exit Sub
End Try 'End Try
' Copy individual files from top level directory '' Copy individual files from top level directory
For Each oPath In IO.Directory.EnumerateFiles(SourceDirectory, FilePattern) 'For Each oPath In IO.Directory.EnumerateFiles(SourceDirectory, FilePattern)
Dim oFileInfo = New IO.FileInfo(oPath) ' Dim oFileInfo = New IO.FileInfo(oPath)
_Logger.Debug("Processing file [{0}]", oFileInfo.Name) ' _Logger.Debug("Processing file [{0}]", oFileInfo.Name)
_Logger.Debug("Copying [{0}] to TargetDirectory..", oFileInfo.Name) ' _Logger.Debug("Copying [{0}] to TargetDirectory..", oFileInfo.Name)
' Copy to target directory ' ' Copy to target directory
Try ' Try
IO.File.Copy(oPath, IO.Path.Combine(TargetDirectory, oFileInfo.Name)) ' IO.File.Copy(oPath, IO.Path.Combine(TargetDirectory, oFileInfo.Name))
Catch ex As Exception ' Catch ex As Exception
_Logger.Warn("Could not move old config file {0} to new config location {1}", oFileInfo.Name, TargetDirectory) ' _Logger.Warn("Could not move old config file {0} to new config location {1}", oFileInfo.Name, TargetDirectory)
_Logger.Error(ex) ' _Logger.Error(ex)
End Try ' End Try
_Logger.Debug("Moving [{0}] to MigrationDirectory..", oFileInfo.Name) ' _Logger.Debug("Moving [{0}] to MigrationDirectory..", oFileInfo.Name)
' Move to migration directory ' ' Move to migration directory
Try ' Try
IO.File.Move(oPath, IO.Path.Combine(oMigrationDirectory, oFileInfo.Name)) ' IO.File.Move(oPath, IO.Path.Combine(oMigrationDirectory, oFileInfo.Name))
Catch ex As Exception ' Catch ex As Exception
_Logger.Warn("Could not move old config file {0} to migration directory {1}", oFileInfo.Name, oMigrationDirectory) ' _Logger.Warn("Could not move old config file {0} to migration directory {1}", oFileInfo.Name, oMigrationDirectory)
_Logger.Error(ex) ' _Logger.Error(ex)
End Try ' End Try
Next 'Next
For Each oDirectoryPath In IO.Directory.EnumerateDirectories(SourceDirectory, "*", IO.SearchOption.TopDirectoryOnly) 'For Each oDirectoryPath In IO.Directory.EnumerateDirectories(SourceDirectory, "*", IO.SearchOption.TopDirectoryOnly)
Dim oDirInfo As New IO.DirectoryInfo(oDirectoryPath) ' Dim oDirInfo As New IO.DirectoryInfo(oDirectoryPath)
_Logger.Debug("Processing directory [{0}]", oDirInfo.Name) ' _Logger.Debug("Processing directory [{0}]", oDirInfo.Name)
' Don't copy TargetDirectory if subpath of SourceDirectory or if MigrationDirectory ' ' Don't copy TargetDirectory if subpath of SourceDirectory or if MigrationDirectory
If oDirInfo.FullName = TargetDirectory Or oDirInfo.FullName = oMigrationDirectory Then ' If oDirInfo.FullName = TargetDirectory Or oDirInfo.FullName = oMigrationDirectory Then
_Logger.Debug("Directory [{0}] should not be copied. Skipping.", oDirInfo.Name) ' _Logger.Debug("Directory [{0}] should not be copied. Skipping.", oDirInfo.Name)
Continue For ' Continue For
End If ' End If
' Copy directory to TargetDirectory ' ' Copy directory to TargetDirectory
Dim oNewDirectoryPath = IO.Path.Combine(TargetDirectory, oDirInfo.Name) ' Dim oNewDirectoryPath = IO.Path.Combine(TargetDirectory, oDirInfo.Name)
_Logger.Debug("Copying [{0}] to TargetDirectory..", oDirInfo.Name) ' _Logger.Debug("Copying [{0}] to TargetDirectory..", oDirInfo.Name)
Try ' Try
_File.CopyDirectory(oDirInfo.FullName, oNewDirectoryPath, True) ' _File.CopyDirectory(oDirInfo.FullName, oNewDirectoryPath, True)
Catch ex As Exception ' Catch ex As Exception
_Logger.Warn("Could not move directory [{0}] to new path [{1}]", oDirInfo.FullName, oNewDirectoryPath) ' _Logger.Warn("Could not move directory [{0}] to new path [{1}]", oDirInfo.FullName, oNewDirectoryPath)
_Logger.Error(ex) ' _Logger.Error(ex)
End Try ' End Try
_Logger.Debug("Copying [{0}] to MigrationDirectory..", oDirInfo.Name) ' _Logger.Debug("Copying [{0}] to MigrationDirectory..", oDirInfo.Name)
' Copy directory to MigrationDirectory ' ' Copy directory to MigrationDirectory
Dim oMigrationDirectoryPath = IO.Path.Combine(oMigrationDirectory, oDirInfo.Name) ' Dim oMigrationDirectoryPath = IO.Path.Combine(oMigrationDirectory, oDirInfo.Name)
Try ' Try
_File.CopyDirectory(oDirInfo.FullName, oMigrationDirectoryPath, True) ' _File.CopyDirectory(oDirInfo.FullName, oMigrationDirectoryPath, True)
Catch ex As Exception ' Catch ex As Exception
_Logger.Error(ex) ' _Logger.Error(ex)
_Logger.Warn("Could not move directory [{0}] to migration directory [{1}]", oDirInfo.FullName, oMigrationDirectoryPath) ' _Logger.Warn("Could not move directory [{0}] to migration directory [{1}]", oDirInfo.FullName, oMigrationDirectoryPath)
End Try ' End Try
_Logger.Debug("Deleting [{0}]..", oDirInfo.Name) ' _Logger.Debug("Deleting [{0}]..", oDirInfo.Name)
' Delete directory ' ' Delete directory
Try ' Try
IO.Directory.Delete(oDirInfo.FullName, True) ' IO.Directory.Delete(oDirInfo.FullName, True)
Catch ex As Exception ' Catch ex As Exception
_Logger.Error(ex) ' _Logger.Error(ex)
_Logger.Warn("Could not delete directory [{0}]", oDirInfo.FullName) ' _Logger.Warn("Could not delete directory [{0}]", oDirInfo.FullName)
End Try ' End Try
Next 'Next
End Sub End Sub
End Class End Class