static void PerformRenumberOnPartsFile(RMGenPart part, ref List <ComparedPath> comparedPaths, string rootPath, string _namespace) { Exception outEx; if (part.Files == null) { return; } foreach (RMGenFile file in part.Files) { if (string.IsNullOrWhiteSpace(file.Path)) { continue; } ComparedPath comparedPath = new ComparedPath(); comparedPath.Old = file.Path; string newPath = string.Empty; try { newPath = Path.GetDirectoryName(file.Path); } catch (Exception ex) { Logger.WriteErrorLog(LoggerMessages.GeneratorPartsManager.RenumberParts.Error.InvalidPath(file.Path), _namespace, ex, BasicDebugLogger.DebugErrorType.CriticalError); throw; } try { newPath += "\\" + file.RetrieveInstallFileName(part.implicitID); } catch (Exception ex) { Logger.WriteErrorLog(LoggerMessages.GeneratorPartsManager.RenumberParts.Error.InvalidPart(comparedPath.Old), _namespace, ex, BasicDebugLogger.DebugErrorType.CriticalError); throw; } comparedPath.New = newPath; string completeOldPath = rootPath + "\\" + comparedPath.Old; string completeTempPath = PMFileSystem.PackMan_TempRenumberDir + "\\" + comparedPath.New; string dirPath = null; try { dirPath = Path.GetDirectoryName(completeTempPath); } catch (Exception ex) { Logger.WriteErrorLog(LoggerMessages.GeneratorPartsManager.RenumberParts.Error.InvalidTempPath(file.Path), _namespace, ex, BasicDebugLogger.DebugErrorType.CriticalError); throw; } if (!Directory.Exists(dirPath) && Helper.CreateFolderSafely(dirPath, _namespace, out outEx, LoggerMessages.GeneralError.CREATE_REQUIRED_DIR_FAILED_ARG) == CreateFolderResult.UserCancelled) { throw outEx; } MoveFileResult moveRes = Helper.MoveFileSafely(completeOldPath, completeTempPath, true, _namespace, out outEx , new MoveFileLogMessages(sourceFileNotFound: LoggerMessages.GeneratorPartsManager.RenumberParts.Error.UnableMoveToTempSrcNotFound , moveFileFailed: LoggerMessages.GeneratorPartsManager.RenumberParts.Error.UnableMoveToTemp)); if (moveRes == MoveFileResult.UserCancelled || moveRes == MoveFileResult.SourceFileNotFound) { throw outEx; } comparedPaths.Add(comparedPath); } }
public static void RenumberParts(string parentFolderPath, string _namespace, out LogDataList log, bool relinkGlobalPackages = false) { log = new LogDataList(); log.WriteInformationLog(LoggerMessages.GeneratorPartsManager.RenumberParts.Info.RENUMBER_START + parentFolderPath + ".", _namespace); Exception outEx; if (!Directory.Exists(parentFolderPath)) { return; } if (Helper.DeleteFolderSafely(PMFileSystem.PackMan_TempRenumberDir, _namespace, out outEx, LoggerMessages.GeneralError.UNABLE_DELETE_TEMP_DIR_ARG) == DeleteFolderResult.UserCancelled) { throw outEx; } if (Helper.CreateFolderSafely(PMFileSystem.PackMan_TempRenumberDir, _namespace, out outEx, LoggerMessages.GeneralError.UNABLE_CREATE_TEMP_DIR_ARG) == CreateFolderResult.UserCancelled) { throw outEx; } RMPackage tempGenPack = new RMPackage(); tempGenPack.Name = "Generator Parts Renumber Class"; LogDataList outLog; RMImplicit.RetrievePackFromDir(parentFolderPath, _namespace, true, out outLog, ref tempGenPack); log.AppendLogs(outLog); if (tempGenPack.Collections == null || tempGenPack.Collections.Count == 0) { return; } List <ComparedPath> comparedPaths = null; foreach (RMCollection collection in tempGenPack.Collections) { if (collection is RMGeneratorCollection) { RMGeneratorCollection genCollection = collection as RMGeneratorCollection; try { if (genCollection.Parts != null) { comparedPaths = PerformRenumber(genCollection, parentFolderPath, _namespace); } } catch (Exception ex) { Logger.WriteErrorLog(LoggerMessages.GeneratorPartsManager.RenumberParts.Error.RENUMBER_ABORT_GENERAL, _namespace, ex, BasicDebugLogger.DebugErrorType.CriticalError); throw; } } } if (comparedPaths != null && comparedPaths.Count > 0) { foreach (ComparedPath comparedPath in comparedPaths) { string completeTempPath = PMFileSystem.PackMan_TempRenumberDir + "\\" + comparedPath.New; string completeFinalPath = parentFolderPath + "\\" + comparedPath.New; MoveFileResult moveResult = Helper.MoveFileSafely(completeTempPath, completeFinalPath, true, _namespace, out outEx, new MoveFileLogMessages(sourceFileNotFound: LoggerMessages.GeneratorPartsManager.RenumberParts.Error.UnableMoveFinalSrcNotFound , moveFileFailed: LoggerMessages.GeneratorPartsManager.RenumberParts.Error.UnableMoveFinal)); if (moveResult == MoveFileResult.UserCancelled || moveResult == MoveFileResult.SourceFileNotFound) { throw outEx; } if (relinkGlobalPackages && PackageManagement.GlobalPackages != null) { foreach (InstalledPackage package in PackageManagement.GlobalPackages) { if (package.Package != null) { RMGenFile foundFile = package.Package.FindGenFileWithPath(comparedPath.Old); if (foundFile != null) { foundFile.Path = comparedPath.New; package.ChangesMade = true; goto continuehere; } } } } continuehere :; } if (relinkGlobalPackages && PackageManagement.GlobalPackages != null) { foreach (InstalledPackage package in PackageManagement.GlobalPackages) { if (package.ChangesMade && package.Package != null) { package.Package.SaveToFile(package.XMLPath, _namespace, logMessage : new WriteAllTextLogMessages(writeFailed : LoggerMessages.GeneratorPartsManager.RenumberParts.Error.FailedSaveXML)); package.ChangesMade = false; } } } } Helper.DeleteFolderSafely(PMFileSystem.PackMan_TempRenumberDir, _namespace, out outEx, LoggerMessages.GeneralError.UNABLE_DELETE_TEMP_DIR_ARG); log.WriteInformationLog(LoggerMessages.GeneratorPartsManager.RenumberParts.Info.RENUMBER_END + parentFolderPath + ".", _namespace); }