From 761b5de8c37602a8e2916615e6ee33a391cf25d4 Mon Sep 17 00:00:00 2001 From: Adeel Asghar Date: Sun, 5 Apr 2020 17:32:36 +0200 Subject: [PATCH] Check for more possible file names --- OMCompiler/Compiler/Script/CevalScript.mo | 153 +++++++++++----------- OMCompiler/Compiler/Util/Error.mo | 2 +- 2 files changed, 81 insertions(+), 74 deletions(-) diff --git a/OMCompiler/Compiler/Script/CevalScript.mo b/OMCompiler/Compiler/Script/CevalScript.mo index fa360a23e4e..5e85e4a771e 100644 --- a/OMCompiler/Compiler/Script/CevalScript.mo +++ b/OMCompiler/Compiler/Script/CevalScript.mo @@ -1468,84 +1468,27 @@ algorithm case (cache,_,"parseEncryptedPackage",Values.STRING(filename)::Values.STRING(workdir)::_,_) equation vals = {}; - if (System.regularFileExists(filename)) then - if (Util.endsWith(filename, ".mol")) then - workdir = if System.directoryExists(workdir) then workdir else System.pwd(); - if (0 == System.systemCall("unzip -q -o -d \"" + workdir + "\" \"" + filename + "\"")) then - s1 = System.basename(filename); - s2 = Util.removeLast4Char(s1); - s2 = listGet(Util.stringSplitAtChar(s2," "),1); - // possible .moc files to look for - filename1 = workdir + "/" + s2 + "/" + s2 + ".moc"; - filename2 = workdir + "/" + s2 + "/package.moc"; - filename_1 = if System.regularFileExists(filename1) then filename1 else filename2; - // possible .mo files to look for - str1 = workdir + "/" + s2 + "/" + s2 + ".mo"; - str2 = workdir + "/" + s2 + "/package.mo"; - str = if System.regularFileExists(str1) then str1 else str2; - // check if .mol contains .moc or .mo files - filename_1 = if System.regularFileExists(filename_1) then filename_1 else str; - if (System.regularFileExists(filename_1)) then - // clear the errors before! - Error.clearMessages() "Clear messages"; - Print.clearErrorBuf() "Clear error buffer"; - filename_1 = Testsuite.friendlyPath(filename_1); - (paths) = Interactive.parseFile(filename_1, "UTF-8"); - vals = List.map(paths,ValuesUtil.makeCodeTypeName); - else - Error.addMessage(Error.PACKAGE_FILE_NOT_FOUND_ERROR, {filename1, filename2, str1, str2}); - end if; - else - Error.addMessage(Error.UNABLE_TO_UNZIP_FILE, {filename}); - end if; - else - Error.addMessage(Error.EXPECTED_ENCRYPTED_PACKAGE, {filename}); - end if; - else - Error.addMessage(Error.FILE_NOT_FOUND_ERROR, {filename}); + (b, filename_1) = unZipEncryptedPackageAndCheckFile(workdir, filename); + if (b) then + // clear the errors before! + Error.clearMessages() "Clear messages"; + Print.clearErrorBuf() "Clear error buffer"; + filename_1 = Testsuite.friendlyPath(filename_1); + (paths) = Interactive.parseFile(filename_1, "UTF-8"); + vals = List.map(paths,ValuesUtil.makeCodeTypeName); end if; then (cache,ValuesUtil.makeArray(vals)); case (_,_,"loadEncryptedPackage",Values.STRING(filename)::Values.STRING(workdir)::_,_) equation - b = false; - if (System.regularFileExists(filename)) then - if (Util.endsWith(filename, ".mol")) then - workdir = if System.directoryExists(workdir) then workdir else System.pwd(); - b = false; - if (0 == System.systemCall("unzip -q -o -d \"" + workdir + "\" \"" + filename + "\"")) then - s1 = System.basename(filename); - s2 = Util.removeLast4Char(s1); - s2 = listGet(Util.stringSplitAtChar(s2," "),1); - // possible .moc files to look for - filename1 = workdir + "/" + s2 + ".moc"; - filename2 = workdir + "/" + s2 + "/package.moc"; - filename_1 = if System.regularFileExists(filename1) then filename1 else filename2; - // possible .mo files to look for - str1 = workdir + "/" + s2 + ".mo"; - str2 = workdir + "/" + s2 + "/package.mo"; - str = if System.regularFileExists(str1) then str1 else str2; - // check if .mol contains .moc or .mo files - filename_1 = if System.regularFileExists(filename_1) then filename_1 else str; - if (System.regularFileExists(filename_1)) then - execStatReset(); - filename_1 = Testsuite.friendlyPath(filename_1); - p = SymbolTable.getAbsyn(); - newp = loadFile(filename_1, "UTF-8", p, true); - execStat("loadFile("+filename_1+")"); - SymbolTable.setAbsyn(newp); - b = true; - else - Error.addMessage(Error.PACKAGE_FILE_NOT_FOUND_ERROR, {filename1, filename2, str1, str2}); - end if; - else - Error.addMessage(Error.UNABLE_TO_UNZIP_FILE, {filename}); - end if; - else - Error.addMessage(Error.EXPECTED_ENCRYPTED_PACKAGE, {filename}); - end if; - else - Error.addMessage(Error.FILE_NOT_FOUND_ERROR, {filename}); + (b, filename_1) = unZipEncryptedPackageAndCheckFile(workdir, filename); + if (b) then + execStatReset(); + filename_1 = Testsuite.friendlyPath(filename_1); + p = SymbolTable.getAbsyn(); + newp = loadFile(filename_1, "UTF-8", p, true); + execStat("loadFile("+filename_1+")"); + SymbolTable.setAbsyn(newp); end if; then (FCore.emptyCache(),Values.BOOL(b)); @@ -3247,5 +3190,69 @@ algorithm end matchcontinue; end findModelicaPath2; +protected function unZipEncryptedPackageAndCheckFile + input String inWorkdir; + input String filename; + output Boolean success; + output String outFilename; +protected + String workdir, s1, s2, s3, filename_1, filename1, filename2, filename3, filename4, str, str1, str2, str3, str4; +algorithm + success := false; + outFilename := ""; + if (System.regularFileExists(filename)) then + if (Util.endsWith(filename, ".mol")) then + workdir := if System.directoryExists(inWorkdir) then inWorkdir else System.pwd(); + if (0 == System.systemCall("unzip -q -o -d \"" + workdir + "\" \"" + filename + "\"")) then + s1 := System.basename(filename); + s2 := Util.removeLast4Char(s1); + s3 := listGet(Util.stringSplitAtChar(s2," "),1); + // possible .moc files to look for + filename1 := workdir + "/" + s2 + "/package.moc"; + filename2 := workdir + "/" + s2 + "/" + s2 + ".moc"; + filename3 := workdir + "/" + s3 + "/package.moc"; + filename4 := workdir + "/" + s3 + "/" + s3 + ".moc"; + if System.regularFileExists(filename1) then + filename_1 := filename1; + elseif System.regularFileExists(filename2) then + filename_1 := filename2; + elseif System.regularFileExists(filename3) then + filename_1 := filename3; + else + filename_1 := filename4; + end if; + // possible .mo files to look for + str1 := workdir + "/" + s2 + "/package.mo"; + str2 := workdir + "/" + s2 + "/" + s2 + ".mo"; + str3 := workdir + "/" + s3 + "/package.mo"; + str4 := workdir + "/" + s3 + "/" + s3 + ".mo"; + if System.regularFileExists(str1) then + str := str1; + elseif System.regularFileExists(str2) then + str := str2; + elseif System.regularFileExists(str3) then + str := str3; + else + str := str4; + end if; + // check if .mol contains .moc or .mo files + filename_1 := if System.regularFileExists(filename_1) then filename_1 else str; + if (System.regularFileExists(filename_1)) then + success := true; + outFilename := filename_1; + else + Error.addMessage(Error.PACKAGE_FILE_NOT_FOUND_ERROR, {filename1, filename2, filename3, filename4, str1, str2, str3, str4}); + end if; + else + Error.addMessage(Error.UNABLE_TO_UNZIP_FILE, {filename}); + end if; + else + Error.addMessage(Error.EXPECTED_ENCRYPTED_PACKAGE, {filename}); + end if; + else + Error.addMessage(Error.FILE_NOT_FOUND_ERROR, {filename}); + end if; +end unZipEncryptedPackageAndCheckFile; + annotation(__OpenModelica_Interface="backend"); end CevalScript; diff --git a/OMCompiler/Compiler/Util/Error.mo b/OMCompiler/Compiler/Util/Error.mo index 3e2af726810..dede3d597aa 100644 --- a/OMCompiler/Compiler/Util/Error.mo +++ b/OMCompiler/Compiler/Util/Error.mo @@ -1130,7 +1130,7 @@ public constant ErrorTypes.Message CONFLICTING_ALIAS_SET = ErrorTypes.MESSAGE(70 public constant ErrorTypes.Message ENCRYPTION_NOT_SUPPORTED = ErrorTypes.MESSAGE(7018, ErrorTypes.SCRIPTING(), ErrorTypes.ERROR(), Gettext.gettext("File not Found: %s. Compile OpenModelica with Encryption support.")); public constant ErrorTypes.Message PACKAGE_FILE_NOT_FOUND_ERROR = ErrorTypes.MESSAGE(7019, ErrorTypes.SCRIPTING(), ErrorTypes.ERROR(), - Gettext.gettext("Unable to find the package definition file. Looked for \"%s\", \"%s\", \"%s\" and \"%s\".")); + Gettext.gettext("Unable to find the package definition file. Looked for \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\" and \"%s\".")); public constant ErrorTypes.Message UNABLE_TO_UNZIP_FILE = ErrorTypes.MESSAGE(7020, ErrorTypes.SCRIPTING(), ErrorTypes.ERROR(), Gettext.gettext("Unable to unzip the file: %s.")); public constant ErrorTypes.Message EXPECTED_ENCRYPTED_PACKAGE = ErrorTypes.MESSAGE(7021, ErrorTypes.SCRIPTING(), ErrorTypes.ERROR(),