Repositories management
Pierre MARECHAL [Thu, 26 Mar 2009 13:44:43 +0000 (14:44 +0100)]
scilab/modules/atoms/etc/repositories [new file with mode: 0644]
scilab/modules/atoms/macros/atomsAddRepository.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atomsDelRepository.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atomsRepositories.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atoms_internals/atomsAUWriteAccess.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atoms_internals/atomsNormalizeName.sci [new file with mode: 0644]

diff --git a/scilab/modules/atoms/etc/repositories b/scilab/modules/atoms/etc/repositories
new file mode 100644 (file)
index 0000000..18f561a
--- /dev/null
@@ -0,0 +1 @@
+http://atoms.scilab.org
\ No newline at end of file
diff --git a/scilab/modules/atoms/macros/atomsAddRepository.sci b/scilab/modules/atoms/macros/atomsAddRepository.sci
new file mode 100644 (file)
index 0000000..84ea136
--- /dev/null
@@ -0,0 +1,107 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Add an URL to the list of repositories, and returns
+
+function nbAdd = atomsAddRepository(url,allusers)
+       
+       rhs                    = argn(2);
+       nbAdd                = 0;
+       repositories         = []; // Column vector that contain user repositories
+       currentRepositories  = atomsRepositories();
+       valid_url_pattern    = "/^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(\/($|[a-zA-Z0-9\.\,\;\?\''\\\+&amp;%\$#\=~_\-]+))*$/";
+       
+       // Check number of input arguments
+       // =========================================================================
+       
+       if rhs < 1 | rhs > 2 then
+               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsAddRepository",1,2));
+       end
+       
+       // Check URLs specified as first input argument
+       // =========================================================================
+       
+       if type(url) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAddRepository",1));
+       end
+       
+       for i=1:size(url,"*")
+               if ~ regexp(url(i),valid_url_pattern,"o") == 1 then
+                       error(msprintf(gettext("%s: Wrong value for input argument #%d: This ("+url(i)+") is not a valid URL.\n"),"atomsAddRepository",1));
+               end
+       end
+       
+       // Apply changes for all users or just for me ?
+       // =========================================================================
+       
+       if rhs == 1 then
+               // By default, add the repository for all users (if we have write access
+               // of course !)
+               if atomsAUWriteAccess() then
+                       allusers = %T; 
+               else
+                       allusers = %F;
+               end
+       
+       else
+               // Just check if it's a boolean
+               if type(allusers) <> 4 then
+                       error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsDelRepository",2));
+               end
+               
+               // Check if we have the write access
+               if allusers & ~ atomsAUWriteAccess() then
+                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsDelRepository",2,pathconvert(SCI+"/.atoms")));
+               end
+       end
+       
+       // Define the path of the file that will record the change according to
+       // the "allusers" value
+       // =========================================================================
+       
+       if allusers then
+               atoms_directory = pathconvert(SCI+"/.atoms");
+       else
+               atoms_directory = pathconvert(SCIHOME+"/atoms");
+       end
+       
+       // Does the atoms_directory exist, if not create it
+       // =========================================================================
+       
+       if ~ isdir(atoms_directory) then
+               mkdir(atoms_directory);
+       end
+       
+       // Does the SCIHOME/atoms/repositories exist, if yes load it
+       // =========================================================================
+       
+       if fileinfo(atoms_directory+"repositories") <> [] then
+               repositories = mgetl(atoms_directory+"repositories");
+       end
+       
+       // Loop on each URL specified as input argument
+       // =========================================================================
+       
+       for i=1:size(url,"*")
+               disp(currentRepositories);
+               // Add the URL only if it doesn't already exist
+               if find( currentRepositories == url(i) ) == [] then
+                       repositories = [ repositories ; url(i) ];
+                       nbAdd = nbAdd + 1;
+               end
+       end
+       
+       // Apply changes
+       // =========================================================================
+       
+       if nbAdd > 0 then
+               mputl(repositories, atoms_directory+"repositories");
+       end
+       
+endfunction
diff --git a/scilab/modules/atoms/macros/atomsDelRepository.sci b/scilab/modules/atoms/macros/atomsDelRepository.sci
new file mode 100644 (file)
index 0000000..09b81fd
--- /dev/null
@@ -0,0 +1,94 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Add an URL to the list of repositories, and returns
+
+function nbDel = atomsDelRepository(url,allusers)
+       
+       rhs                  = argn(2);
+       nbDel                = 0;
+       
+       // Check number of input arguments
+       // =========================================================================
+       
+       if rhs < 1 | rhs > 2 then
+               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsDelRepository",1,2));
+       end
+       
+       // Check URLs specified as first input argument
+       // =========================================================================
+       
+       if type(url) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsDelRepository",1));
+       end
+       
+       // Apply changes for all users or just for me ?
+       // =========================================================================
+       
+       if rhs == 1 then
+               // By default, add the repository for all users (if we have write access
+               // of course !)
+               if atomsAUWriteAccess() then
+                       allusers = %T; 
+               else
+                       allusers = %F;
+               end
+       
+       else
+               // Just check if it's a boolean
+               if type(allusers) <> 4 then
+                       error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsDelRepository",2));
+               end
+               
+               // Check if we have the write access
+               if allusers & ~ atomsAUWriteAccess() then
+                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsDelRepository",2,pathconvert(SCI+"/.atoms")));
+               end
+       end
+       
+       // Define the path of the files that will record the change according to
+       // the "allusers" value and the existence of the latter
+       // =========================================================================
+       
+       atoms_files = [];
+       
+       if fileinfo( pathconvert(SCIHOME+"/atoms/repositories",%F) )<> [] then
+               atoms_files = [ atoms_files ; pathconvert(SCIHOME+"/atoms/repositories",%F) ];
+       end
+       
+       if allusers & (fileinfo( pathconvert(SCI+"/.atoms/repositories",%F) )<>[]) then
+               atoms_files = [ atoms_files ; pathconvert(SCI+"/.atoms/repositories",%F) ];
+       end
+       
+       // Loop on each repositories file specified as first input argument
+       // =========================================================================
+       
+       for i=1:size(atoms_files,"*")
+               
+               // Get the URLs list in this file
+               repositories = mgetl(atoms_files(i));
+               
+               // Loop on each URL specified as first input argument
+               for j=1:size(url,"*")
+                       indice = find( repositories == url(j) );
+                       if indice <> [] then
+                               repositories(indice) = [];
+                               nbDel = nbDel + 1;
+                       end
+               end
+               
+               if repositories == [] then
+                       mdelete(atoms_files(i));
+               else
+                       // Apply changes on this file
+                       mputl(repositories,atoms_files(i));
+               end
+       end
+       
+endfunction
diff --git a/scilab/modules/atoms/macros/atomsRepositories.sci b/scilab/modules/atoms/macros/atomsRepositories.sci
new file mode 100644 (file)
index 0000000..c61f83b
--- /dev/null
@@ -0,0 +1,48 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Add an URL to the list of repositories, and returns
+
+function repositories = atomsRepositories(level)
+       
+       rhs           = argn(2);
+       repositories  = [];
+       
+       official_repositories = pathconvert(SCI+"/modules/atoms/etc/repositories",%F);
+       allusers_repositories = pathconvert(SCI+"/.atoms/repositories",%F);
+       user_repositories     = pathconvert(SCIHOME+"/atoms/repositories",%F);
+       
+       // official repositories
+       // =========================================================================
+       
+       if (rhs == 0) | ((rhs == 1) & (level == "official")) then
+               if fileinfo(official_repositories) <> [] then
+                       repositories = [ repositories ; mgetl(official_repositories) ];
+               end
+       end
+       
+       // All users repositories
+       // =========================================================================
+       
+       if (rhs == 0) | ((rhs == 1) & (level == "allusers")) then
+               if fileinfo(allusers_repositories) <> [] then
+                       repositories = [ repositories ; mgetl(allusers_repositories) ];
+               end
+       end
+       
+       // User repositories
+       // =========================================================================
+       
+       if (rhs == 0) | ((rhs == 1) & (level == "user")) then
+               if fileinfo(user_repositories) <> [] then
+                       repositories = [ repositories ; mgetl(user_repositories) ];
+               end
+       end
+       
+endfunction
diff --git a/scilab/modules/atoms/macros/atoms_internals/atomsAUWriteAccess.sci b/scilab/modules/atoms/macros/atoms_internals/atomsAUWriteAccess.sci
new file mode 100644 (file)
index 0000000..0d3389d
--- /dev/null
@@ -0,0 +1,23 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Add an URL to the list of repositories, and returns
+
+function res = atomsAUWriteAccess()
+       
+       res = %F;
+       
+       try
+               mputl("dummy",pathconvert(SCI+"/.atoms/dummy",%F));
+               mdelete(pathconvert(SCI+"/.atoms/dummy",%F));
+               res = %T;
+       catch
+       end
+       
+endfunction
diff --git a/scilab/modules/atoms/macros/atoms_internals/atomsNormalizeName.sci b/scilab/modules/atoms/macros/atoms_internals/atomsNormalizeName.sci
new file mode 100644 (file)
index 0000000..8a8de9a
--- /dev/null
@@ -0,0 +1,30 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2008 - INRIA - Delphine GASC <delphine.gasc@scilab.org>
+// Copyright (C) 2009 - DIGITEO - Sylvestre LEDRU <sylvestre.ledru@scilab.org>
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Internal function
+
+// Substitution of special characters in the toolbox's name
+
+function str = atomsNormalizeName(str)
+    str = strsubst(str, " ", "_")
+    str = strsubst(str, "é", "e")
+    str = strsubst(str, "è", "e")
+    str = strsubst(str, "ê", "e")
+    str = strsubst(str, "à", "a")
+    str = strsubst(str, "â", "a")
+    str = strsubst(str, "ù", "u")
+    str = strsubst(str, "ô", "o")
+    str = strsubst(str, "î", "i")
+    str = strsubst(str, "ç", "c")
+    str = strsubst(str, "/", "")
+    str = strsubst(str, "\", "")
+    return str
+endfunction