e0c2824d8b72a1bcd07e4d3dc19b8bea6e2a0fe1
[scilab.git] / scilab / modules / atoms / macros / atomsUpdate.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 // End user function
11
12 // update of a toolbox
13
14 function result = atomsUpdate(name,section)
15         
16         // Load Atoms Internals lib if it's not already loaded
17         // =========================================================================
18         if ~ exists("atomsinternalslib") then
19                 load("SCI/modules/atoms/macros/atoms_internals/lib");
20         end
21         
22         result = [];
23         
24         // Save the initial path
25         // =========================================================================
26         initialpath = pwd();
27         
28         // Verbose Mode ?
29         // =========================================================================
30         if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
31                 ATOMSVERBOSE = %T;
32         else
33                 ATOMSVERBOSE = %F;
34         end
35         
36         // Check input parameters
37         // =========================================================================
38         
39         rhs = argn(2);
40         
41         if rhs > 2 then
42                 error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsUpdate",0,2))
43         end
44         
45         if (rhs>0) & (~ isempty(name) ) & (type(name)<>10) then
46                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsUpdate",1));
47         end
48         
49         // Install for all users or just for me ?
50         // =========================================================================
51         
52         if rhs < 2 then
53                 // By default, install for all users (if we have write access of course !)
54                 if atomsAUWriteAccess() then
55                         section = "all";
56                 else
57                         section = "user";
58                 end
59         
60         else
61                 // Just check if it's a boolean
62                 if type(section) <> 10 then
63                         chdir(initialpath);
64                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A single-string expected.\n"),"atomsInstall",2));
65                 end
66                 
67                 // Check if we have the write access
68                 if (section=="allusers") & ~ atomsAUWriteAccess() then
69                         chdir(initialpath);
70                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstall",2,atomsPath("system","allusers")));
71                 end
72         end
73         
74         // Check if all specified toolboxes are effectively installed
75         // =========================================================================
76         
77         if rhs>0 & ( ~ isempty(name)) then
78                 
79                 // Remove leading and trealing whitespaces
80                 name = stripblanks(name);
81                 
82                 for i=1:size(name,"*")
83                         if ~ atomsIsInstalled(name(i)) then
84                                 chdir(initialpath);
85                                 error(msprintf(gettext("%s: ''%s'' isn''t installed.\n"),"atomsUpdate",name(i)));
86                         end
87                 end
88         end
89         
90         // Get scilab version (needed for later)
91         // =========================================================================
92         sciversion = strcat(string(getversion('scilab')) + ".");
93         
94         // If name isn't defined or empty, get the full list of installed packages
95         // =========================================================================
96         
97         if (rhs==0) | isempty(name) then
98                 
99                 name               = [];
100                 package_installed = atomsGetInstalled(section);
101                 
102                 for i=1:size(package_installed(:,1),"*")
103                         if find( name == package_installed(i,1) ) == [] then
104                                 name = [ name ;  package_installed(i,1) ];
105                         end
106                 end
107         end
108         
109         // Loop on name
110         // =========================================================================
111         
112         for i=1:size(name,"*")
113                 
114                 this_package_versions = atomsGetInstalledVers(name(i),section);
115                 this_package_MRV_ins  = this_package_versions(1);   // Most Recent Version Installed
116                 this_package_MRV_ava  = atomsGetMRVersion(name(i)); // Most Recent Version Available
117                 
118                 if (this_package_MRV_ava == -1) | ..
119                                 ( atomsVersionCompare(this_package_MRV_ins,this_package_MRV_ava) == 0 ) then
120                         // The installed version is already the Most Recent Version Available
121                         atomsDisp(msprintf("\t%s (%s) : The most recent version is already installed\n\n",name(i),this_package_MRV_ins));
122                         continue;
123                 end
124                 
125                 // Install the new toolbox
126                 this_result = atomsInstall(name(i)+" "+this_package_MRV_ava,section);
127                 
128                 // Fill the output argument
129                 result = [ result ; this_result ];
130         end
131         
132         // Go to the initial location
133         // =========================================================================
134         chdir(initialpath);
135         
136 endfunction