主要目标:
(1)每天将SVN中的更新load到本地,若无更新则不重新进行编译。
(2)若该solution发生更新,则update所有文件后进行整体编译。
(3)在编译时如果出现错误就进行错误溯源,找到原作者并发送错误报告。
使用的主要SVN命令行:
SVN更新:svn update; SVN日志查看:svn log;回滚:svn revert;
使用工具:MATLAB ;tortoise SVN;MSbuild
实现:
首先是本地文件的更新,MATLAB 调用命令行工具
[status,cmdout]=system('svn update');
disp(cmdout);
然后对代码进行编译,使用下面两句命令行语句
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\amd64\msbuild.exe" taichi64.sln /t:"Clean;Build" /p:Configuration=Release -verbosity:quiet -maxcpucount:10 -flp1:logfile=errors.txt;errorsonly -flp2:logfile=warnings.txt;warningsonly'
根据命令行语句的输出,也就是warning和error文件存在与否来判定是否要执行错误报告的发送和错误的溯源。当存在错误时,查找最新版本的更新作者,后回滚至上一版本,使用命令行。注意:在进行回滚时还需要对回滚的结果进行提交。
[status,rever_info]=system('svn revert');
system('svn commit -m "revert to older version"');
回滚后查看使用MATLAB的sendmail函数发送邮件给作者。此处我使用的是自己利用sendmail写的一个函数。
send_rebuil_report('liuwenwen@ankenj.com','errors and warnings from rebuilt',[cmdout,'Due to the errors, file have been reverted'],{'errors.txt','warnings.txt'});
delete('errors.txt','warnings.txt');%%将错误报告删除以防影响后续文件存在状态的判断。
(若回滚后依然存在错误则继续执行回滚操作,至没有错误的版本)