地震后的 CVS
2007-1-27 12:10 | by 2ndboy在刚写 Blog 的前一年多时间里,我更新的比较随性,基本上是想到什么有意思的东西就写,忙的时候就不写,所以实际上有很多有意思的主题过后都忘掉没写出来。自从用上 Google Docs & Spreadsheets 以后,我就在里面建了个 blog update to do list,想写但当时没空写的主题就记在里面,刚才进去看看已经积累了不少啦:) 呵呵,由于我不认为自己是个严格意义上的忙人,这么看我肯定是个懒人。好了,今天挑其中一条快要过期的东西(因为从 24 号晚,网络质量已经恢复很多)来写写,其它的敬请期待^_^
地震光缆断掉以后,其实对普通网民的影响还不算大,受影响最大的应该是那些在中国设有分支机构的外企,尤其是软件企业!我们公司总部在美国,CVS server 也设在美国,断网以后每天 update、commit 和 daily build 都异常痛苦,有时候一下午也不能成功的提交一个几十 k 的小文件。你只能在那里看着它开始、失败然后再重试。最近一段时间以来我除了日常工作外也负责给 team 做 daily build,所以被网络整的苦不堪言。
由于我们 team 自己的 daily build 只是检查代码 commit 是否正确,所以一直都是手工在 WinCVS 里 update,再用 VC 编译的,所以整个过程一遇到失败就要人工干预。后来就想到了很久不用的批处理,决定用这个简陋的东西拼个 daily build 脚本用用。
目前最大的问题就是 CVS update 失败后要人工重试,浪费了不少时间,Google 一番后这样解决:
- :TryAgain
- echo - Updating -
- [cvs update 命令行]
- if errorlevel 1 goto TryAgain
还有一个问题就是如何在命令行中对程序进行编译,开始是想把每个 project 都导出一个 makefile,然后挨个调用,后来发现居然可以直接调用 MSDEV.exe 来实现命令行编译,连导出 makefile 都省啦(具体内容可以在 MSDN 中搜索“Building a Project from the Command Line”),我们的 daily build 需要编译整个工作空间里的所有工程的 release 版本,所以这样:
- msdev D:\DailyBuild\MyWorkspace.dsw /MAKE "ALL - Win32 Release" /OUT C:\DailyBuildLog.txt
- start /MAX C:\DailyBuildLog.txt
msdev 会把编译全过程的结果都写入 C:\DailyBuildLog.txt 里面,编译结束后脚本会调用记事本用最大化的窗口来显示 daily build 的结果。
脚本写完调试好以后我又用到了以前从来没碰过的“计划任务”(说实话,这个东西用到的地方还真不多),定在每天下午四点运行这个脚本,呵呵,万事大吉。遇到 update 失败脚本会自动不断重试直至成功,接着编译过程被启动,编译结束后自动弹出 daily build 结果,以前每天多做的一项工作好像被别人做掉了呵呵:)
从我自己用的系统换成 Windows 98 之后就几乎再也没碰过 BAT 批处理了,其实这个已经快被遗忘的小东西虽然表达能力不足,但是做些简单小工作还是基本够用。如今随着 MicroSoft 的下一代命令行“Windows PowerShell”的问世,终于可以跟它说再见了。

