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
RevLine 
[145]1%TOOLBOX_EXPORT Prepare toolbox for export, archive and send to website
2%
[157]3% TOOLBOX_EXPORT(TOOLBOX,COPYFLAG,EXCLUDE,ARCHIVE)
[145]4%
[157]5% zip and copy TOOLBOX to PRTools server and archive in ARCHIVE. In case
[149]6% COPYFLAG is false (default) copying to the server is skipped.
[145]7%
[149]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
[157]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.
[149]14%
15% TOOLBOX should be in the search path and has to be given by the name
16% only.
17%
[157]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
[145]20
[149]21% Copyright: R.P.W. Duin
22
[157]23function toolbox_export(toolbox,copyflag,exclude,archive)
[145]24
[157]25if nargin < 4 || isempty(archive)
26  archive = '\\srv051.tudelft.net\staff-groups-ewi\insy\PRLab\Matlab\prtools_export';
[156]27end
[157]28if nargin < 3, exclude = []; end
[145]29if nargin < 2 || isempty(copyflag); copyflag = false; end
[147]30if ischar(exclude), exclude = {exclude}; end
[145]31
[157]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
[147]37% check toolbox
38s = which([toolbox '/Contents.m']);
39if isempty(s)
[157]40  error(['Toolbox ' toolbox ' is not found in the path or it has no proper Contents.m file']);
[147]41end
42
[145]43% create temp dir
44zipdir = fullfile(fileparts(which(mfilename)),'tmp');
[147]45makedir(zipdir);
[157]46if exist(fullfile(zipdir,toolbox),'dir') == 7
47  rmdir(fullfile(zipdir,toolbox),'s');
48end
[145]49
[147]50% get names and version
51today           = datestr(date,'ddmmmyy');
[157]52toolboxdir     = fileparts(which(fullfile(toolbox,'Contents')));
53[~,toolboxname] = fileparts(toolboxdir);
54toolboxver      = ver(toolboxdir);
[147]55
56% get and set possibly new version number in Content file
[145]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;
[157]61else
62  set_version_in_Contents(toolboxdir,pver_new);
[145]63end
64
[157]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
[147]70% zip
71zfilename = [toolbox pver_new '_' today '.zip'];
72ztoolbox  = fullfile(zipdir,zfilename);
[157]73sdir      = dirnames(toolboxdir);
74for j=1:numel(sdir) % remove all hidden dirs (.svn)
75  rmdir(fullfile(fullfile(toolboxdir,sdir{j}),'.svn'),'s');
76end
[147]77if ~isempty(exclude)
78  for j=1:numel(exclude)
79    n = strmatch(exclude{j},sdir);
80    if isempty(n)
[157]81      warning(['Subdirectory ' exclude{j} ' does not exist. Exclusion is skipped'])
[149]82    else
83      sdir(n) = [];
[147]84    end
85  end
86end
[157]87zip(ztoolbox,[{'*.m'} sdir{:}],toolboxdir);
[147]88
[157]89% use or create specific archdir for this toolbox
90archdir = fullfile(archive,toolboxname);
[147]91makedir(archdir);
92
[145]93if copyflag
[147]94  % copy to website, use the @ftp package
[145]95  ftpsite = ftp('prtools.tudelft.nl','prlab','0iX7&b3c');
96  cd(ftpsite,'httpdocs/files');
97  mput(ftpsite,ztoolbox);
[147]98  rename(ftpsite,zfilename,[toolboxname '.zip']);
99  disp('    Export files have been stored on the website.')
[145]100  disp('    Please check and adjust release notes and known problems on website')
[147]101  webversion(pver_new,toolboxname,ftpsite); % reset the version file
[145]102  close(ftpsite)
103 
[147]104  % backup in exportdir
[145]105  fprintf(1,'    Storing backups of mfiles and export files ... \n');
[147]106  [s,mess] = copyfile(ztoolbox,archdir);
[145]107  if s
[157]108    disp(['    Export files have been archived in' newline '    ' archdir])
[145]109  else
110    disp(mess);
111  end
112else
[147]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']);
[145]117end
[147]118% cleanup
119rmdir(zipdir,'s')
[145]120
121function set_version_in_Contents(toolbox,prtv)
[147]122
[145]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);
[147]128n = findstr(s,newline);
[145]129r = [s(1:n(1)), '% Version ' prtv ' ' date s(n(2):end)];
130writf(contentfile,r);
[147]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
[149]174        subdirs = {''};
[147]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.