- installed packages and dependencies are now saved into binary files
[scilab.git] / scilab / modules / atoms / macros / atomsAddRepository.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 // Add an URL to the list of repositories, and returns
11
12 function nbAdd = atomsAddRepository(url,allusers)
13         
14         rhs                    = argn(2);
15         nbAdd                = 0;
16         repositories         = []; // Column vector that contain user repositories
17         currentRepositories  = atomsRepositories();
18         currentRepositories  = currentRepositories(:,1);
19         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;%\$#\=~_\-]+))*$/";
20         
21         // Check number of input arguments
22         // =========================================================================
23         
24         if rhs < 1 | rhs > 2 then
25                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsAddRepository",1,2));
26         end
27         
28         // Check URLs specified as first input argument
29         // =========================================================================
30         
31         if type(url) <> 10 then
32                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAddRepository",1));
33         end
34         
35         for i=1:size(url,"*")
36                 if ~ regexp(url(i),valid_url_pattern,"o") == 1 then
37                         error(msprintf(gettext("%s: Wrong value for input argument #%d: This ("+url(i)+") is not a valid URL.\n"),"atomsAddRepository",1));
38                 end
39         end
40         
41         // Apply changes for all users or just for me ?
42         // =========================================================================
43         
44         if rhs == 1 then
45                 // By default, add the repository for all users (if we have write access
46                 // of course !)
47                 if atomsAUWriteAccess() then
48                         allusers = %T; 
49                 else
50                         allusers = %F;
51                 end
52         
53         else
54                 // Just check if it's a boolean
55                 if type(allusers) <> 4 then
56                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsDelRepository",2));
57                 end
58                 
59                 // Check if we have the write access
60                 if allusers & ~ atomsAUWriteAccess() then
61                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsDelRepository",2,pathconvert(SCI+"/.atoms")));
62                 end
63         end
64         
65         // Define the path of the file that will record the change according to
66         // the "allusers" value
67         // =========================================================================
68         
69         if allusers then
70                 atoms_directory = pathconvert(SCI+"/.atoms");
71         else
72                 atoms_directory = pathconvert(SCIHOME+"/atoms");
73         end
74         
75         // Does the atoms_directory exist, if not create it
76         // =========================================================================
77         
78         if ~ isdir(atoms_directory) then
79                 mkdir(atoms_directory);
80         end
81         
82         // Does the SCIHOME/atoms/repositories exist, if yes load it
83         // =========================================================================
84         
85         if fileinfo(atoms_directory+"repositories") <> [] then
86                 repositories = mgetl(atoms_directory+"repositories");
87         end
88         
89         // Loop on each URL specified as input argument
90         // =========================================================================
91         
92         for i=1:size(url,"*")
93                 disp(currentRepositories);
94                 // Add the URL only if it doesn't already exist
95                 if find( currentRepositories == url(i) ) == [] then
96                         repositories = [ repositories ; url(i) ];
97                         nbAdd = nbAdd + 1;
98                 end
99         end
100         
101         // Apply changes
102         // =========================================================================
103         
104         if nbAdd > 0 then
105                 
106                 mputl(repositories, atoms_directory+"repositories");
107                 
108                 // Delete the packages file (created by atomsGetTOOLBOXES) to force reload
109                 // the different distant TOOLBOXES files
110                 mdelete(pathconvert(SCIHOME+"/.atoms/packages",%F));
111                 
112         end
113         
114 endfunction