8823c169a522fc60ba6755c8ff4ed2b53f9ced04
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsInstallUnregister.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 // Delete an atoms package from the list of available package
11 // This function has an impact on the following files :
12 //  -> ATOMSDIR/installed
13 //  -> ATOMSDIR/installed_deps
14
15 function nbDel = atomsInstallUnregister(name,version,allusers)
16         
17         rhs                  = argn(2);
18         nbDel                = 0;
19         
20         // Check number of input arguments
21         // =========================================================================
22         
23         if rhs < 2 | rhs > 3 then
24                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsInstallUnregister",2,3));
25         end
26         
27         // Check input parameters type
28         // =========================================================================
29         
30         if type(name) <> 10 then
31                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstallUnregister",1));
32         end
33         
34         if type(version) <> 10 then
35                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstallUnregister",2));
36         end
37         
38         // name and version must have the same size
39         // =========================================================================
40         
41         if or( size(name) <> size(version) ) then
42                 error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsInstallUnregister",1,2));
43         end
44         
45         // Apply changes for all users or just for me ?
46         // =========================================================================
47         
48         if rhs == 2 then
49                 // By default, add the repository for all users (if we have write access
50                 // of course !)
51                 if atomsAUWriteAccess() then
52                         allusers = %T; 
53                 else
54                         allusers = %F;
55                 end
56         
57         else
58                 // Just check if it's a boolean
59                 if type(allusers) <> 4 then
60                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsInstallUnregister",2));
61                 end
62                 
63                 // Check if we have the write access
64                 if allusers & ~ atomsAUWriteAccess() then
65                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstallUnregister",2,pathconvert(SCI+"/.atoms")));
66                 end
67         end
68         
69         // Define the path of the files that will record the change according to
70         // the "allusers" value and the existence of the latter
71         // =========================================================================
72         
73         // installed files
74         
75         atoms_files = [];
76         
77         if fileinfo( pathconvert(SCIHOME+"/atoms/installed",%F) )<> [] then
78                 atoms_files = [ atoms_files ; pathconvert(SCIHOME+"/atoms/installed",%F) ];
79         end
80         
81         if allusers & (fileinfo( pathconvert(SCI+"/.atoms/installed",%F) )<>[]) then
82                 atoms_files = [ atoms_files ; pathconvert(SCI+"/.atoms/installed",%F) ];
83         end
84         
85         // installed_deps files
86         
87         atoms_files_deps = [];
88         
89         if fileinfo( pathconvert(SCIHOME+"/atoms/installed_deps",%F) )<> [] then
90                 atoms_files_deps = [ atoms_files_deps ; pathconvert(SCIHOME+"/atoms/installed_deps",%F) ];
91         end
92         
93         if allusers & (fileinfo( pathconvert(SCI+"/.atoms/installed_deps",%F) )<>[]) then
94                 atoms_files_deps = [ atoms_files_deps ; pathconvert(SCI+"/.atoms/installed_deps",%F) ];
95         end
96         
97         // Loop on each installed file specified as first input argument
98         // =========================================================================
99         
100         for i=1:size(atoms_files,"*")
101                 
102                 // Get the installed package list in this file
103                 installed = mgetl(atoms_files(i));
104                 
105                 // Loop on each URL specified as first input argument
106                 for j=1:size(name,"*")
107                         indice = grep(installed,"/^[AI]\s-\s"+name(j)+"\s-\s"+version(j)+"$/","r");
108                         
109                         if indice <> [] then
110                                 nbDel = nbDel + 1;
111                                 installed(indice) = [];
112                         end
113                 end
114                 
115                 if installed == [] then
116                         mdelete(atoms_files(i));
117                 else
118                         // Apply changes on this file
119                         mputl(installed,atoms_files(i));
120                 end
121         end
122         
123         // Loop on each installed file specified as first input argument
124         // =========================================================================
125         
126         for i=1:size(atoms_files_deps,"*")
127                 
128                 found = 0;
129                 
130                 // Get the installed package list in this file
131                 installed_deps_in  = mgetl(atoms_files_deps(i));
132                 installed_deps_out = [];
133                 
134                 // Loop on each URL specified as first input argument
135                 for j=1:size(name,"*")
136                         
137                         // Loop on each lines of the installed_deps file
138                         for k=1:size(installed_deps_in,"*")
139                                 
140                                 if installed_deps_in(k) == "["+name(j)+" - "+version(j)+"]" then
141                                         found = 1;
142                                 end
143                                 
144                                 if found == 1 then
145                                         continue;
146                                 end
147                                 
148                                 if regexp(installed_deps_in(k),"/^\[(.)*\]$/","o") <> [] then
149                                         found = 0;
150                                 end
151                                 
152                                 if found == 0 then
153                                         installed_deps_out = [ installed_deps_out , installed_deps_in(k) ];
154                                 end
155                         end
156                         
157                 end
158                 
159                 if installed_deps_out == [] then
160                         mdelete(atoms_files_deps(i));
161                 else
162                         // Apply changes on this file
163                         mputl(installed_deps_out,atoms_files_deps(i));
164                 end
165         end
166         
167 endfunction