Skip to content

Commit

Permalink
Fix fatal error in GUI mode with an incorrect scenario (#487)
Browse files Browse the repository at this point in the history
En cas d'erreur de scenario, en mode batch, Khiops sort en erreur fatale "Batch mode failure" apres avoir
signale la ligne de scenario erronees au moyen d'une erreur standard.
En mode GUI, on se contente de signaler l'erreur dans le log, mais la GUI continue d'etre utilisable.

Un bug a ete introduit avec la prise en compte du pilotage par une structure json,
en sortant en erreur fatale meme dans le mode GUI.

Correction
- CommandFile
  - Set|GetBatchMode: parametrage du mode batch
  - CloseInputCommandFile: utiliosation du parametre BatchMode pour provoquer ou non une erreur fatale
- UIObject
  - BatchCommand: parametrage du mode batch du commandFile
  • Loading branch information
marcboulle authored Dec 9, 2024
1 parent 4f98968 commit 3d5d35f
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 9 deletions.
36 changes: 27 additions & 9 deletions src/Norm/base/CommandFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

CommandFile::CommandFile()
{
bBatchMode = false;
bPrintOutputInConsole = false;
fInputCommands = NULL;
fOutputCommands = NULL;
Expand All @@ -24,6 +25,7 @@ void CommandFile::Reset()
{
require(not AreCommandFilesOpened());

bBatchMode = false;
SetInputCommandFileName("");
SetInputParameterFileName("");
SetOutputCommandFileName("");
Expand Down Expand Up @@ -56,6 +58,16 @@ void CommandFile::SetOutputCommandFileName(const ALString& sFileName)
#endif
}

void CommandFile::SetBatchMode(boolean bValue)
{
bBatchMode = bValue;
}

boolean CommandFile::GetBatchMode() const
{
return bBatchMode;
}

const ALString& CommandFile::GetOutputCommandFileName() const
{
return sOutputCommandFileName;
Expand Down Expand Up @@ -217,15 +229,15 @@ boolean CommandFile::AreCommandFilesOpened() const

void CommandFile::CloseInputCommandFile()
{
static boolean bPendingFatalError = false;
static boolean bPendingError = false;
boolean bOk;
boolean bIsParserOkBeforeEnd;
boolean bIsParserOkAfterEnd;
StringVector svIdentifierPath;
ALString sValue;

// Arret immediat en cas d'erreur fatale en cours: cf. fin de la methode
if (bPendingFatalError)
// Arret immediat en cas d'erreur en cours: cf. fin de la methode
if (bPendingError)
{
assert(fInputCommands == NULL);
return;
Expand Down Expand Up @@ -269,19 +281,25 @@ void CommandFile::CloseInputCommandFile()
// Erreur fatale standard si erreur avant la fin de fichier
// On empeche une boucle infinie en cas d'erreur fatale, car la destruction des objets statiques
// et la fermeture des fichiers est appellee apres la fin du main en cas d'erreur fatale
assert(not bPendingFatalError);
assert(not bPendingError);
if (not bIsParserOkBeforeEnd)
{
AddInputCommandFileError("Analysis of input commands interrupted because of errors");
bPendingFatalError = true;
Global::AddFatalError("Command file", "", "Batch mode failure");
bPendingError = true;

// Erreur fatale uniquement en mode batch
if (GetBatchMode())
Global::AddFatalError("Command file", "", "Batch mode failure");
}
// Erreur fatale en cas d'erreurs detectees apres la fermeture du fichier
else if (not bIsParserOkAfterEnd)
{
bPendingFatalError = true,
Global::AddFatalError("Command file", "",
"Batch mode failure detected when closing input command file");
bPendingError = true;

// Erreur fatale uniquement en mode batch
if (GetBatchMode())
Global::AddFatalError("Command file", "",
"Batch mode failure detected when closing input command file");
}
}

Expand Down
8 changes: 8 additions & 0 deletions src/Norm/base/CommandFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ class CommandFile : public Object
void SetOutputCommandFileName(const ALString& sFileName);
const ALString& GetOutputCommandFileName() const;

// Mode batch, pour creer une erreur fatale en d'erreur de commande (defaut: false)
// En mode GUI, on continue dans la GUI apres avoir simplement signale l'erreur
void SetBatchMode(boolean bValue);
boolean GetBatchMode() const;

// Indique qu'il faut afficher les sorties dans la console
// Determine par le parametrage du fichier de commande en sortie
boolean GetPrintOutputInConsole() const;
Expand Down Expand Up @@ -321,6 +326,9 @@ class CommandFile : public Object
StringVector svInputCommandSearchValues;
StringVector svInputCommandReplaceValues;

// Mode batch
boolean bBatchMode;

///////////////////////////////////////////////////////////////
// Variables de gestion des fichiers et parametres de commandes

Expand Down
1 change: 1 addition & 0 deletions src/Norm/base/CommandLine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,7 @@ CommandLineOption::CommandLineOption()
nPriority = INT_MAX;
bIsUsed = false;
bIsFinal = false;
nIndexUsage = 0;
}

CommandLineOption::~CommandLineOption()
Expand Down
1 change: 1 addition & 0 deletions src/Norm/base/UIObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2106,6 +2106,7 @@ boolean UIObject::BatchCommand(const ALString& sParameter)
assert(sParameter == "");

bBatchMode = true;
commandFile.SetBatchMode(bBatchMode);
return true;
}

Expand Down

0 comments on commit 3d5d35f

Please sign in to comment.