source: prextra/toolbox_export.m @ 160

Last change on this file since 160 was 160, checked in by bduin, 2 years ago
File size: 5.9 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 may 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  dirnam = fullfile(fullfile(toolboxdir,sdir{j}),'.svn');
76  if exist(dirnam,'dir') == 7
77    rmdir(dirnam,'s');
78  end
79end
80if ~isempty(exclude)
81  for j=1:numel(exclude)
82    n = strmatch(exclude{j},sdir);
83    if isempty(n)
84      warning(['Subdirectory ' exclude{j} ' does not exist. Exclusion is skipped'])
85    else
86      sdir(n) = [];
87    end
88  end
89end
90zip(ztoolbox,[{'*.m'} sdir{:}],toolboxdir);
91
92% use or create specific archdir for this toolbox
93archdir = fullfile(archive,toolboxname);
94makedir(archdir);
95
96if copyflag
97  % copy to website, use the @ftp package
98  ftpsite = ftp('prtools.tudelft.nl','prlab','0iX7&b3c');
99  cd(ftpsite,'httpdocs/files');
100  mput(ftpsite,ztoolbox);
101  rename(ftpsite,zfilename,[toolboxname '.zip']);
102  disp('    Export files have been stored on the website.')
103  disp('    Please check and adjust release notes and known problems on website')
104  webversion(pver_new,toolboxname,ftpsite); % reset the version file
105  close(ftpsite)
106 
107  % backup in exportdir
108  fprintf(1,'    Storing backups of mfiles and export files ... \n');
109  [s,mess] = copyfile(ztoolbox,archdir);
110  if s
111    disp(['    Export files have been archived in' newline '    ' archdir])
112  else
113    disp(mess);
114  end
115else
116  copyfile(ztoolbox,archdir);
117  disp(['    The zip-files have been created in ' archdir]);
118  disp(['    They have not been copied to the website!']);
119  disp(['    If needed, rerun with flag set']);
120end
121% cleanup
122rmdir(zipdir,'s')
123
124function set_version_in_Contents(toolbox,prtv)
125
126if ~isstr(prtv)
127        error('Version should be given as string, e.g. ''3.2.7''')
128end
129contentfile = fullfile(toolbox,'Contents.m');
130s = readf(contentfile);
131n = findstr(s,newline);
132r = [s(1:n(1)), '% Version ' prtv ' ' date s(n(2):end)];
133writf(contentfile,r);
134disp('    Contents.m rewritten with new version number')
135
136
137function [subdirs,files] = dirnames(dirname,ext)
138%DIRNAMES
139%
140%       [SUBDIRS,FILES]= DIRNAMES(DIR,EXT)
141%
142%Get names of all subdirs and files in direcotory DIR.
143%Hidden files, . and .. and Thumbs.db neglected
144
145if nargin == 0
146  dirname = '.';
147end
148
149if nargin > 1
150  allnames = dir([dirname '/*.' ext]);
151else
152  allnames = dir(dirname);
153end
154n = length(allnames);
155subdirs = cell(1,n);
156files = cell(1,n);
157ns = 0;
158nf = 0;
159
160for j=1:n
161  name = deblank(allnames(j).name);
162        if (name(1) ~= '.') && ~strcmp(name,'Thumbs.db') % skip hidden files
163                if allnames(j).isdir
164                        ns = ns+1;
165                        subdirs{ns} = name;
166                else
167                        nf = nf+1;
168                        files{nf} = name;
169                end
170        end
171end
172
173if ns > 0
174        subdirs = char(subdirs(1:ns));
175  subdirs = cellstr(subdirs);
176else
177        subdirs = {''};
178end
179if nf > 0
180        files = char(files(1:nf));
181  files = cellstr(files);
182else
183        files = [];
184end
185
186
187function makedir(name)
188%MAKEDIR make directory if needed
189
190if exist(name,'dir') ~= 7
191  mkdir(name)
192end
193
194function [s,n] = readf(file)
195fid = fopen(file);
196if fid < 0
197        error(['File ' file ' not found, probably wrong directory'])
198end
199[s,n] = fread(fid);
200if isempty(s)
201  error(['File ' file ' could not be read'])
202end
203s = s(:)';
204fclose(fid);
205
206function writf(file,s)
207fid = fopen(file,'w');
208if fid < 0
209        error(['File ' file ' could not be opened for writing'])
210end
211fwrite(fid,s);
212fclose(fid);
Note: See TracBrowser for help on using the repository browser.