bug_14028: force flag of genlib did not rebuild bin file. 20/17220/2
Antoine ELIAS [Fri, 18 Sep 2015 13:20:54 +0000 (15:20 +0200)]
Change-Id: Ifa89a0f9cc058eb96b15ce3eedc0200471be7500

scilab/CHANGES_6.0.X
scilab/modules/io/sci_gateway/cpp/sci_genlib.cpp
scilab/modules/io/tests/nonreg_tests/bug_14028.dia.ref [new file with mode: 0644]
scilab/modules/io/tests/nonreg_tests/bug_14028.tst [new file with mode: 0644]

index ca472be..cbe3500 100644 (file)
@@ -22,6 +22,8 @@ Scilab Bug Fixes
 
 * Bug #14059 fixed - Lack of performance on deletion of matrix elements.
 
+* Bug #14028 fixed - force flag of genlib did not rebuild bin file.
+
 * Bug #14024 fixed - Print of macrofile display a debug message
                      instead of macro prototype.
 
index 8b859eb..32ec49e 100644 (file)
@@ -75,11 +75,12 @@ types::Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, t
     wchar_t pstParseFile[PATH_MAX + FILENAME_MAX];
     wchar_t pstVerbose[65535];
 
-    int iNbFile                    = 0;
-    wchar_t *pstParsePath      = NULL;
-    int iParsePathLen          = 0;
-    wchar_t* pstLibName                = NULL;
-    bool bVerbose           = false;
+    int iNbFile = 0;
+    wchar_t *pstParsePath = NULL;
+    int iParsePathLen = 0;
+    wchar_t* pstLibName = NULL;
+    bool bVerbose = false;
+    bool bForce = false;
 
     if (in.size() < 1 || in.size() > 4)
     {
@@ -128,9 +129,24 @@ types::Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, t
         return types::Function::Error;
     }
 
+    //param 3, force flag
     if (in.size() > 2)
     {
-        //force flag, do nothing but keep for compatibility
+        pIT = in[2];
+        if (pIT->isBool() == false)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A sclar boolean expected.\n"), "genlib", 3);
+            return types::Function::Error;
+        }
+
+        types::Bool* p = pIT->getAs<types::Bool>();
+        if (p->isScalar() == false)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A sclar boolean expected.\n"), "genlib", 3);
+            return types::Function::Error;
+        }
+
+        bForce = p->get()[0] == 1;
     }
 
     if (in.size() > 3)
@@ -139,10 +155,18 @@ types::Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, t
         pIT = in[3];
         if (pIT->isBool() == false)
         {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A sclar boolean expected.\n"), "genlib", 3);
             return types::Function::Error;
         }
 
-        bVerbose = pIT->getAs<types::Bool>()->get()[0] == 1;
+        types::Bool* p = pIT->getAs<types::Bool>();
+        if (p->isScalar() == false)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A sclar boolean expected.\n"), "genlib", 3);
+            return types::Function::Error;
+        }
+
+        bVerbose = p->get()[0] == 1;
     }
 
     wchar_t* pstFile = pS->get(0);
@@ -215,19 +239,21 @@ types::Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, t
             std::wstring wide_md5(wmd5);
             FREE(wmd5);
 
-            //check if is exist in old file
-
-            MacroInfoList::iterator it = lstOld.find(pstPathBin);
-            if (it != lstOld.end())
+            if (bForce == false)
             {
-                if (wide_md5 == (*it).second.md5)
+                //check if is exist in old file
+                MacroInfoList::iterator it = lstOld.find(pstPathBin);
+                if (it != lstOld.end())
                 {
-                    //file not change, we can skip it
-                    AddMacroToXML(pWriter, (*it).second.name, pstPathBin, wide_md5);
-                    pLib->add((*it).second.name, new types::MacroFile((*it).second.name, stFullPathBin, pstLibName));
-                    success_files.push_back(stFullPath);
-                    funcs.push_back((*it).second.name);
-                    continue;
+                    if (wide_md5 == (*it).second.md5)
+                    {
+                        //file not change, we can skip it
+                        AddMacroToXML(pWriter, (*it).second.name, pstPathBin, wide_md5);
+                        pLib->add((*it).second.name, new types::MacroFile((*it).second.name, stFullPathBin, pstLibName));
+                        success_files.push_back(stFullPath);
+                        funcs.push_back((*it).second.name);
+                        continue;
+                    }
                 }
             }
 
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14028.dia.ref b/scilab/modules/io/tests/nonreg_tests/bug_14028.dia.ref
new file mode 100644 (file)
index 0000000..7d25faf
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14028 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14028
+//
+// <-- Short Description -->
+// force flag of genlib does not rebuild bin file.
+cd TMPDIR;
+mkdir("lib1");
+mputl(["function ret = lib_test";"  ret= ""lib1""";"endfunction"], "lib1/lib_test.sci");
+genlib("lib1lib","lib1",%f);
+info1 = fileinfo("lib1/lib_test.bin");
+genlib("lib1lib","lib1",%f);
+info2 = fileinfo("lib1/lib_test.bin");
+assert_checktrue(info1(6) == info2(6));
+mputl(["function ret = lib_test";"  ret= ""lib1.2""";"endfunction"], "lib1/lib_test.sci");
+genlib("lib1lib","lib1",%f);
+info1 = fileinfo("lib1/lib_test.bin");
+//to be sure date change
+sleep(2000);
+genlib("lib1lib","lib1",%t);
+info2 = fileinfo("lib1/lib_test.bin");
+assert_checkfalse(info1(6) == info2(6));
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14028.tst b/scilab/modules/io/tests/nonreg_tests/bug_14028.tst
new file mode 100644 (file)
index 0000000..67e84a3
--- /dev/null
@@ -0,0 +1,38 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14028 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14028
+//
+// <-- Short Description -->
+// force flag of genlib does not rebuild bin file.
+
+cd TMPDIR;
+mkdir("lib1");
+mputl(["function ret = lib_test";"  ret= ""lib1""";"endfunction"], "lib1/lib_test.sci");
+
+genlib("lib1lib","lib1",%f);
+info1 = fileinfo("lib1/lib_test.bin");
+
+genlib("lib1lib","lib1",%f);
+info2 = fileinfo("lib1/lib_test.bin");
+assert_checktrue(info1(6) == info2(6));
+
+mputl(["function ret = lib_test";"  ret= ""lib1.2""";"endfunction"], "lib1/lib_test.sci");
+genlib("lib1lib","lib1",%f);
+info1 = fileinfo("lib1/lib_test.bin");
+
+//to be sure date change
+sleep(2000);
+
+genlib("lib1lib","lib1",%t);
+info2 = fileinfo("lib1/lib_test.bin");
+assert_checkfalse(info1(6) == info2(6));