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
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
[160]66disp('    Copying, cleaning and compression may take some time ...')
[157]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)
[160]75  dirnam = fullfile(fullfile(toolboxdir,sdir{j}),'.svn');
76  if exist(dirnam,'dir') == 7
77    rmdir(dirnam,'s');
78  end
[157]79end
[147]80if ~isempty(exclude)
81  for j=1:numel(exclude)
82    n = strmatch(exclude{j},sdir);
83    if isempty(n)
[157]84      warning(['Subdirectory ' exclude{j} ' does not exist. Exclusion is skipped'])
[149]85    else
86      sdir(n) = [];
[147]87    end
88  end
89end
[157]90zip(ztoolbox,[{'*.m'} sdir{:}],toolboxdir);
[147]91
[157]92% use or create specific archdir for this toolbox
93archdir = fullfile(archive,toolboxname);
[147]94makedir(archdir);
95
[145]96if copyflag
[147]97  % copy to website, use the @ftp package
[145]98  ftpsite = ftp('prtools.tudelft.nl','prlab','0iX7&b3c');
99  cd(ftpsite,'httpdocs/files');
100  mput(ftpsite,ztoolbox);
[147]101  rename(ftpsite,zfilename,[toolboxname '.zip']);
102  disp('    Export files have been stored on the website.')
[145]103  disp('    Please check and adjust release notes and known problems on website')
[147]104  webversion(pver_new,toolboxname,ftpsite); % reset the version file
[145]105  close(ftpsite)
106 
[147]107  % backup in exportdir
[145]108  fprintf(1,'    Storing backups of mfiles and export files ... \n');
[147]109  [s,mess] = copyfile(ztoolbox,archdir);
[145]110  if s
[157]111    disp(['    Export files have been archived in' newline '    ' archdir])
[145]112  else
113    disp(mess);
114  end
115else
[147]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']);
[145]120end
[147]121% cleanup
122rmdir(zipdir,'s')
[145]123
124function set_version_in_Contents(toolbox,prtv)
[147]125
[145]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);
[147]131n = findstr(s,newline);
[145]132r = [s(1:n(1)), '% Version ' prtv ' ' date s(n(2):end)];
133writf(contentfile,r);
[147]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
[149]177        subdirs = {''};
[147]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.