source: prextra/toolbox_export.m @ 159

Last change on this file since 159 was 157, checked in by bduin, 5 years ago
File size: 5.8 KB
Line 
1%TOOLBOX_EXPORT Prepare toolbox for export, archive and send to website
2%
3% TOOLBOX_EXPORT(TOOLBOX,COPYFLAG,EXCLUDE,ARCHIVE)
4%
5% zip and copy TOOLBOX to PRTools server and archive in ARCHIVE. In case
6% COPYFLAG is false (default) copying to the server is skipped.
7%
8% The tooolbox version as stored in the Contents.m file is interactively
9% updated. In addition a TOOLBOX_version.txt file is created or updated on
10% the server. Sub-directories of TOOLBOX given as a cell array in EXCLUDE
11% will not be stored in the zip-file. Other sub-directories will be
12% compressed as they are. In the main toolbox directory just the m-files
13% are used.
14%
15% TOOLBOX should be in the search path and has to be given by the name
16% only.
17%
18% The default for ARCHIVE is the prtools_export dir in the group server:
19% \\srv051.tudelft.net\staff-groups-ewi\insy\PRLab\Matlab\prtools_export
20
21% Copyright: R.P.W. Duin
22
23function toolbox_export(toolbox,copyflag,exclude,archive)
24
25if nargin < 4 || isempty(archive)
26  archive = '\\srv051.tudelft.net\staff-groups-ewi\insy\PRLab\Matlab\prtools_export';
27end
28if nargin < 3, exclude = []; end
29if nargin < 2 || isempty(copyflag); copyflag = false; end
30if ischar(exclude), exclude = {exclude}; end
31
32if exist(archive,'dir') ~= 7
33  error(['Archive directory .\insy\PRLab\Matlab\prtools_export not found.' ...
34    newline 'Define it in the ARCHIVE parameter.'])
35end
36
37% check toolbox
38s = which([toolbox '/Contents.m']);
39if isempty(s)
40  error(['Toolbox ' toolbox ' is not found in the path or it has no proper Contents.m file']);
41end
42
43% create temp dir
44zipdir = fullfile(fileparts(which(mfilename)),'tmp');
45makedir(zipdir);
46if exist(fullfile(zipdir,toolbox),'dir') == 7
47  rmdir(fullfile(zipdir,toolbox),'s');
48end
49
50% get names and version
51today           = datestr(date,'ddmmmyy');
52toolboxdir     = fileparts(which(fullfile(toolbox,'Contents')));
53[~,toolboxname] = fileparts(toolboxdir);
54toolboxver      = ver(toolboxdir);
55
56% get and set possibly new version number in Content file
57fprintf(1,'    Present %s version is %s\n',toolbox,toolboxver(end).Version);
58pver_new = input(['    Give new version number: [' toolboxver(end).Version '] '],'s');
59if isempty(pver_new)
60  pver_new = toolboxver(end).Version;
61else
62  set_version_in_Contents(toolboxdir,pver_new);
63end
64
65% use a copy of TOOLBOX for cleaning and compression
66disp('    Copying, cleaning and compression make take some time ...')
67copyfile(toolboxdir,fullfile(zipdir,toolbox));
68toolboxdir = fullfile(zipdir,toolbox);
69
70% zip
71zfilename = [toolbox pver_new '_' today '.zip'];
72ztoolbox  = fullfile(zipdir,zfilename);
73sdir      = dirnames(toolboxdir);
74for j=1:numel(sdir) % remove all hidden dirs (.svn)
75  rmdir(fullfile(fullfile(toolboxdir,sdir{j}),'.svn'),'s');
76end
77if ~isempty(exclude)
78  for j=1:numel(exclude)
79    n = strmatch(exclude{j},sdir);
80    if isempty(n)
81      warning(['Subdirectory ' exclude{j} ' does not exist. Exclusion is skipped'])
82    else
83      sdir(n) = [];
84    end
85  end
86end
87zip(ztoolbox,[{'*.m'} sdir{:}],toolboxdir);
88
89% use or create specific archdir for this toolbox
90archdir = fullfile(archive,toolboxname);
91makedir(archdir);
92
93if copyflag
94  % copy to website, use the @ftp package
95  ftpsite = ftp('prtools.tudelft.nl','prlab','0iX7&b3c');
96  cd(ftpsite,'httpdocs/files');
97  mput(ftpsite,ztoolbox);
98  rename(ftpsite,zfilename,[toolboxname '.zip']);
99  disp('    Export files have been stored on the website.')
100  disp('    Please check and adjust release notes and known problems on website')
101  webversion(pver_new,toolboxname,ftpsite); % reset the version file
102  close(ftpsite)
103 
104  % backup in exportdir
105  fprintf(1,'    Storing backups of mfiles and export files ... \n');
106  [s,mess] = copyfile(ztoolbox,archdir);
107  if s
108    disp(['    Export files have been archived in' newline '    ' archdir])
109  else
110    disp(mess);
111  end
112else
113  copyfile(ztoolbox,archdir);
114  disp(['    The zip-files have been created in ' archdir]);
115  disp(['    They have not been copied to the website!']);
116  disp(['    If needed, rerun with flag set']);
117end
118% cleanup
119rmdir(zipdir,'s')
120
121function set_version_in_Contents(toolbox,prtv)
122
123if ~isstr(prtv)
124        error('Version should be given as string, e.g. ''3.2.7''')
125end
126contentfile = fullfile(toolbox,'Contents.m');
127s = readf(contentfile);
128n = findstr(s,newline);
129r = [s(1:n(1)), '% Version ' prtv ' ' date s(n(2):end)];
130writf(contentfile,r);
131disp('    Contents.m rewritten with new version number')
132
133
134function [subdirs,files] = dirnames(dirname,ext)
135%DIRNAMES
136%
137%       [SUBDIRS,FILES]= DIRNAMES(DIR,EXT)
138%
139%Get names of all subdirs and files in direcotory DIR.
140%Hidden files, . and .. and Thumbs.db neglected
141
142if nargin == 0
143  dirname = '.';
144end
145
146if nargin > 1
147  allnames = dir([dirname '/*.' ext]);
148else
149  allnames = dir(dirname);
150end
151n = length(allnames);
152subdirs = cell(1,n);
153files = cell(1,n);
154ns = 0;
155nf = 0;
156
157for j=1:n
158  name = deblank(allnames(j).name);
159        if (name(1) ~= '.') && ~strcmp(name,'Thumbs.db') % skip hidden files
160                if allnames(j).isdir
161                        ns = ns+1;
162                        subdirs{ns} = name;
163                else
164                        nf = nf+1;
165                        files{nf} = name;
166                end
167        end
168end
169
170if ns > 0
171        subdirs = char(subdirs(1:ns));
172  subdirs = cellstr(subdirs);
173else
174        subdirs = {''};
175end
176if nf > 0
177        files = char(files(1:nf));
178  files = cellstr(files);
179else
180        files = [];
181end
182
183
184function makedir(name)
185%MAKEDIR make directory if needed
186
187if exist(name,'dir') ~= 7
188  mkdir(name)
189end
190
191function [s,n] = readf(file)
192fid = fopen(file);
193if fid < 0
194        error(['File ' file ' not found, probably wrong directory'])
195end
196[s,n] = fread(fid);
197if isempty(s)
198  error(['File ' file ' could not be read'])
199end
200s = s(:)';
201fclose(fid);
202
203function writf(file,s)
204fid = fopen(file,'w');
205if fid < 0
206        error(['File ' file ' could not be opened for writing'])
207end
208fwrite(fid,s);
209fclose(fid);
Note: See TracBrowser for help on using the repository browser.