function build_svn_game(varargin) % build_svn_game svn_rev1 svn_rev2 % when both svn_rev1 and svn_rev2 are NOT supplied: % no backup software is build % normal software from head revision is build % when svn_rev1 IS supplied and svn_rev2 is NOT supplied: % backup software from svn_rev1 is build % normal software from head revision is build % when both svn_rev1 and svn_rev2 ARE supplied: % backup software from svn_rev2 is build % normal software from svn_rev1 is build curdir = cd; svn_head = 0; [error,result] = system('sudo /etc/Robocup/robocup_network'); [error,result] = system('timeout 4 svn info http://robocup.wtb.tue.nl/svn/techunited/ | grep Revision'); if(error > 1) warning(result); return; end svn_head = getRevision(result); if(nargin == 0) % checkout latest svn version, no backup svn_rev = svn_head; svn_backup_rev = 0; elseif(nargin == 1) % checkout latest svn version, backup rev varargin(1) svn_rev = svn_head; if(ischar(varargin{1})) svn_backup_rev = str2num(varargin{1}); else svn_backup_rev = varargin{1}; end elseif(nargin == 2) % checkout svn rev varargin(1), backup rev varargin(2) if(ischar(varargin{1})) svn_rev = str2num(varargin{1}); else svn_rev = varargin{1}; end if(ischar(varargin{2})) svn_backup_rev = str2num(varargin{2}); else svn_backup_rev = varargin{2}; end else warning('Too many input arguments.'); return; end cd /home/robocup/svn/ [error,result] = system('svn st | grep ^M'); if(error > 1) warning('Cannot get modified files, aborting'); disp(result); return; else if(isempty(result)) disp('No modified files.'); else disp('Modified files:'); disp(result); end [error,result] = system('timeout 4 svn info | grep Revision'); if(error > 1) warning(result); return; end cur_rev = getRevision(result); disp(['Current revision: ' num2str(cur_rev)]); reply = input('Continue with update (all changes will be reverted)? Y/n: ', 's'); if isempty(reply) reply = 'Y'; end if(upper(reply) == 'N') return; end if(svn_rev == svn_head) disp('Continuing svn update to HEAD'); else disp(['Continuing svn update to revision ' num2str(svn_rev)]); end [error,result] = system(['svn revert -R .']); if(error > 1) warning('Reverting changes failed.'); disp(result); return; end [error,result] = system(['svn up -r ' num2str(svn_rev)]); if(error > 1) warning('Updating svn failed.'); disp(result); return; end disp(result); % build normal software disp(''); disp('Making all software...'); save('build_game_settings'); % make_all_install; % build_turtle_motion4W; % build_all; cd /home/robocup/svn/ load('build_game_settings'); disp('Done building the normal software'); if(svn_backup_rev > 0) disp(['Svn update to revision ' num2str(svn_backup_rev)]); [error,result] = system(['svn up -r ' num2str(svn_backup_rev)]); if(error > 1) warning(['Updating svn to revision ' num2str(svn_backup_rev) ' failed.']); disp(result); return; end disp(result); % build backup software disp(''); disp('Making all backup software...'); % make_all_install; % build_turtle_motion4W('backup'); % build_all('backup'); cd /home/robocup/svn/ load('build_game_settings'); delete('build_game_settings.mat'); end end cd(curdir); %% summary disp(''); disp(''); disp(['All software has been build, revision ' num2str(svn_rev) ':']); fprintf([' motion_turtle',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Motion/motion_turtle'),'\n']); fprintf([' vision_turtle',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Vision/vision_turtle'),'\n']); fprintf([' worldmodel',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/WorldModel/worldmodel'),'\n']); fprintf([' motion_keeper',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Motion/motion_keeper'),'\n']); fprintf([' motion_turtle_4W',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Motion/motion_turtle_4W'),'\n']); if(svn_backup_rev > 0) disp(['Backup, revision ' num2str(svn_backup_rev) ':']); fprintf([' motion_turtle_backup',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Motion/motion_turtle_backup'),'\n']); fprintf([' vision_turtle_backup',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Vision/vision_turtle_backup'),'\n']); fprintf([' worldmodel_backup',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/WorldModel/worldmodel_backup'),'\n']); fprintf([' motion_keeper_backup',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Motion/motion_keeper_backup'),'\n']); fprintf([' motion_turtle_4W_backup',file_creation_date('/home/robocup/svn/trunk/src/Turtle2/Motion/motion_turtle_4W_backup'),'\n']); end end function rev = getRevision(string) [~,~,~,~,rev_str] = regexp(string, '.*: (\d+)'); rev = str2num(rev_str{1}{1}); end function str = file_creation_date(file) try ftime = dir(file); str=([', built on ',datestr(ftime.datenum,'dd-mmm, HH:MM')]); catch str = ''; end end