ATOMS: atomsRepositoryXXX: Better management of "allusers"/"user" sections
[scilab.git] / scilab / modules / atoms / macros / atomsRepositoryDel.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 // Remove an URL to the list of repositories, and returns
11
12 function nbDel = atomsRepositoryDel(url,section)
13         
14         // Load Atoms Internals lib if it's not already loaded
15         // =========================================================================
16         if ~ exists("atomsinternalslib") then
17                 load("SCI/modules/atoms/macros/atoms_internals/lib");
18         end
19         
20         rhs   = argn(2);
21         nbDel = 0;
22         
23         // Check number of input arguments
24         // =========================================================================
25         
26         if rhs < 1 | rhs > 2 then
27                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsRepositoryDel",1,2));
28         end
29         
30         // Check URLs specified as first input argument
31         // =========================================================================
32         
33         if type(url) <> 10 then
34                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRepositoryDel",1));
35         end
36         
37         // Allusers/user management
38         //
39         //   - If section is equal to "all", The repository to remove is searched in 
40         //     both "user" and "allusers" sections
41         //       → SCI/.atoms
42         //       → SCIHOME/atoms
43         //
44         //   - If section is equal to "allusers", The repository to remove is searched
45         //     only in the "allusers" section
46         //       → SCI/.atoms
47         //
48         //   - If section is equal to "user", The repository to remove is searched
49         //     only in the "user" section
50         //        → SCIHOME/atoms
51         // =========================================================================
52         
53         if rhs == 1 then
54                 // By default, add the repository for all users (if we have write access
55                 // of course !)
56                 if atomsAUWriteAccess() then
57                         section = "all"; 
58                 else
59                         section = "user";
60                 end
61         
62         else
63                 if type(section) <> 10 then
64                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A single-string expected.\n"),"atomsRepositoryDel",2));
65                 end
66                 
67                 if and(section<>["user","allusers","all"]) then
68                         error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' or ''all'' expected.\n"),"atomsRepositoryDel",2));
69                 end
70                 
71                 // Check if we have the write access
72                 if or(section==["all","allusers"]) & ~ atomsAUWriteAccess() then
73                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRepositoryDel",pathconvert(SCI+"/.atoms")));
74                 end
75                 
76         end
77         
78         // Define the path of the files that will record the change according to
79         // the "section" value and the existence of the latter
80         // =========================================================================
81         
82         if section=="all" then
83                 atoms_files = [ pathconvert(SCIHOME+"/atoms/repositories",%F) ; pathconvert(SCI+"/.atoms/repositories",%F) ];
84         
85         elseif section=="allusers" then
86                 atoms_files = [ pathconvert(SCI+"/.atoms/repositories",%F) ];
87                 
88         elseif section=="user" then
89                 atoms_files = [ pathconvert(SCIHOME+"/atoms/repositories",%F)  ];
90         
91         else
92                 atoms_files = [];
93         end
94         
95         // Loop on each repositories file specified as first input argument
96         // =========================================================================
97         
98         for i=1:size(atoms_files,"*")
99                 
100                 if fileinfo(atoms_files(i)) == [] then
101                         continue;
102                 end
103                 
104                 // Get the URLs list in this file
105                 repositories = mgetl(atoms_files(i));
106                 
107                 // Loop on each URL specified as first input argument
108                 for j=1:size(url,"*")
109                         indice = find( repositories == url(j) );
110                         if indice <> [] then
111                                 repositories(indice) = [];
112                                 nbDel = nbDel + 1;
113                         end
114                 end
115                 
116                 if repositories == [] then
117                         mdelete(atoms_files(i));
118                 else
119                         // Apply changes on this file
120                         mputl(repositories,atoms_files(i));
121                 
122                         
123                 end
124         end
125         
126         // Delete the packages file (created by atomsGetTOOLBOXES) to force reload
127         // the different distant TOOLBOXES files
128         // =========================================================================
129         
130         if nbDel > 0 then
131                 atomsGetTOOLBOXES(%T);
132         end
133         
134 endfunction